- Try to do better pretty printing when array elements are individually
authorCoccinelle <cocci@diku.dk>
Fri, 21 Dec 2012 12:54:41 +0000 (13:54 +0100)
committerRene Rydhof Hansen <rrh@cs.aau.dk>
Fri, 21 Dec 2012 12:54:41 +0000 (13:54 +0100)
  replaced
- Just fail quietly on attempt to remove a multi-variable declaration,
  allowing the semantic patch to continue.  A warning message is printed.
- Ignore unknown identifiers around known types.
- Ignore --use-glimpse if multiple directories given
- Added support for c++ namespace syntax in cocci files.
- use arg_expression for printing iterator arguments instead of expression,
  to get the right spacing.  Thanks to Lars-Peter Clausen for the fix.
- Better spacing for generated argument lists.  Thanks to Lars-Peter Clausen
  for reporting the problem.
- Collect all module interfaces for ocaml scripting in a single
  coccilib.cmi file, with the list of exposed internal modules in
  ocaml/exposed_modules.ml. This simplifies the installation of the
  ocaml version of coccilib, and allows us to specify which modules
  can be accessed by an ocaml script. The coccilib.cmi must either
  reside in $COCCI_DIR/ocaml/ or $COCCI_DIR/ocaml/coccilib/.
- Ocamlbuild-based compilation of coccinelle (experimental). In a
  cleaned repository, use the configure option --enable-ocamlbuild to
  enable it. The Makefiles will then use ocamlbuild.
- Ocamlscripts can access more of coccinelle: the file
  ocaml/exposed_modules.ml specifies which modules are accessible.
- Use arg_expression to print macro arguments.  Thanks to Lars-Peter
  Clausen for the fix.
- Remove some trailing whitespace due to unindent or added if braces.
  Thanks to Eric LeBlond for reporting one of the problems.
- Remove undesired newline after if header when body is a metavariable.
  Thanks to Eric LeBlond for reporting the problem.
- Improve macro expansion to take into account variable numbers of
  arguments
- Don't count macros or ifdefs in counting fields
- Better counting of indent size when indent contains multiple tabs
- Get the right annotation on trailing , that is after a nest.  Requires
  avoiding double processing in transformation_c.ml
- Fixed an issue where an 'Impossible' exception could be raised.
- Fixed an issue where some identifiers were incorrectly interpreted as typedef.

385 files changed:
Makefile
Makefile.am
Makefile.common
Makefile.config.in
Makefile.release
_tags [new file with mode: 0644]
bundles/extlib/Makefile
bundles/menhirLib/Makefile
bundles/menhirLib/_tags [new file with mode: 0644]
bundles/menhirLib/menhir-20120123/AUTHORS [deleted file]
bundles/menhirLib/menhir-20120123/CHANGES [deleted file]
bundles/menhirLib/menhir-20120123/INSTALLATION [deleted file]
bundles/menhirLib/menhir-20120123/LICENSE [deleted file]
bundles/menhirLib/menhir-20120123/Makefile [deleted file]
bundles/menhirLib/menhir-20120123/Makefile.arch [deleted file]
bundles/menhirLib/menhir-20120123/demos/Makefile [deleted file]
bundles/menhirLib/menhir-20120123/demos/Makefile.auto [deleted file]
bundles/menhirLib/menhir-20120123/demos/Makefile.shared [deleted file]
bundles/menhirLib/menhir-20120123/demos/OMakefile.shared [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-param/Makefile [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-param/OMakefile [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-param/OMakeroot [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-param/README [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-param/calc.ml [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-param/lexer.mll [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-param/parser.mly [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-param/tokens.mly [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-two/Makefile [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-two/OMakefile [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-two/OMakeroot [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-two/README [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-two/algebraic.mly [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-two/calc.ml [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-two/common.mly [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-two/lexer.mll [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-two/reverse.mly [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc-two/tokens.mly [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc/.omakedb [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc/.omakedb.lock [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc/Makefile [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc/OMakefile [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc/OMakefile.omc [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc/OMakeroot [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc/OMakeroot.omc [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc/README [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc/calc.ml [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc/lexer.mll [deleted file]
bundles/menhirLib/menhir-20120123/demos/calc/parser.mly [deleted file]
bundles/menhirLib/menhir-20120123/demos/ocamldep.wrapper [deleted file]
bundles/menhirLib/menhir-20120123/manual.pdf [deleted file]
bundles/menhirLib/menhir-20120123/menhir.1 [deleted file]
bundles/menhirLib/menhir-20120123/src/Fix.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/Fix.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/IL.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/IO.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/IO.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/META [deleted file]
bundles/menhirLib/menhir-20120123/src/Makefile [deleted file]
bundles/menhirLib/menhir-20120123/src/action.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/action.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/back.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/back.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/breadth.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/breadth.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/checkOCamlVersion.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/codeBackend.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/codeBackend.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/codeBits.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/codeBits.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/codePieces.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/codePieces.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/compressedBitSet.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/compressedBitSet.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/concreteSyntax.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/conflict.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/conflict.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/convert.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/convert.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/coqBackend.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/coqBackend.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/cst.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/cst.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/derivation.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/derivation.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/dot.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/dot.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/engine.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/engine.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/engineTypes.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/error.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/error.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/fancy-parser.mly [deleted file]
bundles/menhirLib/menhir-20120123/src/front.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/front.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/gMap.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/gSet.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/grammar.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/grammar.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/infer.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/infer.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/infiniteArray.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/infiniteArray.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/inliner.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/inliner.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/installation.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/interface.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/interface.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/internalSyntax.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/interpret.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/interpret.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/invariant.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/invariant.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/item.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/item.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/keyword.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/keyword.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/lexdep.mll [deleted file]
bundles/menhirLib/menhir-20120123/src/lexer.mll [deleted file]
bundles/menhirLib/menhir-20120123/src/lexmli.mll [deleted file]
bundles/menhirLib/menhir-20120123/src/lineCount.mll [deleted file]
bundles/menhirLib/menhir-20120123/src/listMonad.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/listMonad.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/lookahead.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/lr0.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/lr0.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/lr1.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/lr1.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/lr1partial.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/lr1partial.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/mark.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/mark.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/misc.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/misc.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/nonTerminalDefinitionInlining.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/nonTerminalDefinitionInlining.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/nonpositiveCycles.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/nonpositiveCycles.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/option.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/option.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/packedIntArray.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/packedIntArray.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/parameterizedGrammar.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/parameterizedGrammar.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/parameters.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/parser.mly [deleted file]
bundles/menhirLib/menhir-20120123/src/parserAux.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/parserAux.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/partialGrammar.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/partialGrammar.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/patricia.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/patricia.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/positions.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/positions.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/pprint.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/pprint.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/preFront.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/preFront.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/printer.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/printer.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/rawPrinter.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/rawPrinter.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/reachability.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/reachability.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/reductionGraphs.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/referenceInterpreter.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/referenceInterpreter.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/rowDisplacement.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/rowDisplacement.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/sentenceLexer.mll [deleted file]
bundles/menhirLib/menhir-20120123/src/sentenceParser.mly [deleted file]
bundles/menhirLib/menhir-20120123/src/settings.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/settings.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/slr.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/slr.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/standard.mly [deleted file]
bundles/menhirLib/menhir-20120123/src/stretch.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/stringMap.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/stringMap.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/stringSet.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/stringSet.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/syntax.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/tableBackend.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/tableBackend.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/tableFormat.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/tableInterpreter.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/tableInterpreter.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/tarjan.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/tarjan.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/time.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/time.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/tokenType.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/tokenType.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/traverse.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/unionFind.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/unionFind.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/unparameterizedPrinter.ml [deleted file]
bundles/menhirLib/menhir-20120123/src/unparameterizedPrinter.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/unparameterizedSyntax.mli [deleted file]
bundles/menhirLib/menhir-20120123/src/version.ml [deleted file]
bundles/menhirLib/menhirLib.mldylib [new file with mode: 0644]
bundles/menhirLib/menhirLib.mllib [new file with mode: 0644]
bundles/menhirLib/menhirLib.mlpack [new file with mode: 0644]
bundles/pcre/Makefile
bundles/pcre/_tags [new file with mode: 0644]
bundles/pcre/libpcre_stubs.clib [new file with mode: 0644]
bundles/pcre/pcre.mldylib [new file with mode: 0644]
bundles/pcre/pcre.mllib [new file with mode: 0644]
bundles/pycaml/Makefile
bundles/pycaml/_tags [new file with mode: 0644]
bundles/pycaml/elim-warnings.patch [new file with mode: 0644]
bundles/pycaml/ignoreheader.patch [new file with mode: 0644]
bundles/pycaml/libpycaml_stubs.clib [new file with mode: 0644]
bundles/pycaml/pycaml.mldylib [new file with mode: 0644]
bundles/pycaml/pycaml.mllib [new file with mode: 0644]
bundles/sexplib/Makefile
changes.txt
cocci.ml
commons/Makefile
commons/common.ml
commons/common.mli
commons/commons.mldylib [new file with mode: 0644]
commons/commons.mllib [new file with mode: 0644]
commons/ograph_simple.mli
commons/oset.ml
commons/seti.ml
configure
configure.ac
ctl/Makefile
ctl/ctl.mldylib [new file with mode: 0644]
ctl/ctl.mllib [new file with mode: 0644]
ctl/ctl_engine.ml
demos/janitorings/bad_zero.cocci
demos/janitorings/empty.iso [moved from bundles/menhirLib/menhir-20120123/src/.marker with 100% similarity]
demos/janitorings/kcalloc_un.cocci
demos/janitorings/kzalloc.cocci
demos/janitorings/list_for_each.cocci
demos/janitorings/static_initfunc.cocci
demos/janitorings/string-array-decl-opti.cocci
docs/manual/Makefile
docs/manual/main_grammar.pdf
docs/manual/manual.pdf
docs/manual/options.pdf
docs/manual/spatch_options.tex
docs/spatch.1.in
engine/Makefile
engine/asttomember.ml
engine/cocci_vs_c.ml
engine/cocci_vs_c.mli
engine/ctlcocci_integration.ml
engine/engine.mldylib [new file with mode: 0644]
engine/engine.mllib [new file with mode: 0644]
engine/obsolete/asttoctl.ml [moved from engine/asttoctl.ml with 97% similarity]
engine/obsolete/sgrep.ml [moved from engine/sgrep.ml with 81% similarity]
engine/pattern_c.ml
engine/transformation_c.ml
extra/Makefile
extra/extra.mldylib [new file with mode: 0644]
extra/extra.mllib [new file with mode: 0644]
extra/kbuild.ml
flag_cocci.ml
globals/Makefile
globals/globals.mldylib [new file with mode: 0644]
globals/globals.mllib [new file with mode: 0644]
install.txt
main.ml
myocamlbuild.ml [new file with mode: 0644]
myocamlbuild.ml.in [new file with mode: 0644]
ocaml/Makefile
ocaml/Makefile.doc
ocaml/coccilib.ml
ocaml/coccilib.mli [deleted file]
ocaml/exposed_modules.ml [new file with mode: 0644]
ocaml/html.odocl [new file with mode: 0644]
ocaml/man.odocl [new file with mode: 0644]
ocaml/ocaml.mldylib [new file with mode: 0644]
ocaml/ocaml.mllib [new file with mode: 0644]
ocaml/yes_prepare_ocamlcocci.ml
parsing_c/Makefile
parsing_c/ast_c.ml
parsing_c/comment_annotater_c.ml
parsing_c/control_flow_c_build.ml
parsing_c/cpp_analysis_c.ml
parsing_c/cpp_ast_c.ml
parsing_c/cpp_token_c.ml
parsing_c/cpp_token_c.mli
parsing_c/lexer_c.mll
parsing_c/parse_c.ml
parsing_c/parser_c.mly
parsing_c/parsing_c.mldylib [new file with mode: 0644]
parsing_c/parsing_c.mllib [new file with mode: 0644]
parsing_c/parsing_hacks.ml
parsing_c/parsing_recovery_c.ml
parsing_c/pretty_print_c.ml
parsing_c/token_annot.ml [new file with mode: 0644]
parsing_c/token_annot.mli [new file with mode: 0644]
parsing_c/token_views_c.ml
parsing_c/type_annoter_c.ml
parsing_c/type_c.ml
parsing_c/unparse_c.ml
parsing_c/unparse_cocci.ml
parsing_c/unparse_hrule.ml
parsing_c/visitor_c.ml
parsing_cocci/Makefile
parsing_cocci/adjacency.ml
parsing_cocci/adjust_pragmas.ml
parsing_cocci/arity.ml
parsing_cocci/ast0_cocci.ml
parsing_cocci/ast0_cocci.mli
parsing_cocci/ast0toast.ml
parsing_cocci/commas_on_lists.ml [new file with mode: 0644]
parsing_cocci/commas_on_lists.mli [new file with mode: 0644]
parsing_cocci/compute_lines.ml
parsing_cocci/context_neg.ml
parsing_cocci/insert_plus.ml
parsing_cocci/iso_compile.ml
parsing_cocci/iso_pattern.ml
parsing_cocci/lexer_cocci.ml
parsing_cocci/lexer_cocci.mll
parsing_cocci/lexer_script.ml
parsing_cocci/parse_aux.ml
parsing_cocci/parse_cocci.ml
parsing_cocci/parser_cocci_menhir.ml
parsing_cocci/parser_cocci_menhir.mli
parsing_cocci/parser_cocci_menhir.mly
parsing_cocci/parsing_cocci.mldylib [new file with mode: 0644]
parsing_cocci/parsing_cocci.mllib [new file with mode: 0644]
parsing_cocci/simple_assignments.ml
parsing_cocci/single_statement.ml
parsing_cocci/unparse_ast0.ml
popl/Makefile
popl09/Makefile
popl09/popl09.mldylib [new file with mode: 0644]
popl09/popl09.mllib [new file with mode: 0644]
python/Makefile
python/coccipython.a [new file with mode: 0644]
python/coccipython.cmxa [new file with mode: 0644]
python/python.mldylib [new file with mode: 0644]
python/python.mllib [new file with mode: 0644]
release.nix
setup/Makefile.am [new file with mode: 0644]
setup/Makefile.in [new file with mode: 0644]
setup/fake-subst.sh
setup/install-sh
setup/log_ocamlfind.sh [new file with mode: 0644]
setup/missing [new file with mode: 0755]
setup/pkg.m4 [new file with mode: 0644]
setup/replies.txt
setup/wrapper-menhir.sh [new file with mode: 0755]
setup/wrapper-ocamlcp.sh
setup/wrapper-ocamlyacc.sh [new file with mode: 0644]
standard.h
test.ml [deleted file]
testing.ml
tests/SCORE_expected.sexp
tests/SCORE_expected_orig.sexp
tests/addfield.c
tests/addfield.res
tests/befS.c
tests/befS.res
tests/dropbr.c [new file with mode: 0644]
tests/dropbr.cocci [new file with mode: 0644]
tests/dropbr.res [new file with mode: 0644]
tests/fieldcount.c [new file with mode: 0644]
tests/fieldcount.cocci [new file with mode: 0644]
tests/inner.c [new file with mode: 0644]
tests/inner.cocci [new file with mode: 0644]
tests/inner2.c [new file with mode: 0644]
tests/inner2.cocci [new file with mode: 0644]
tests/iterprint.c [new file with mode: 0644]
tests/iterprint.cocci [new file with mode: 0644]
tests/iterprint.res [new file with mode: 0644]
tests/retest.c [new file with mode: 0644]
tests/retest.cocci [new file with mode: 0644]
tests/retest.res [new file with mode: 0644]
tests/unl.c [new file with mode: 0644]
tests/unl.cocci [new file with mode: 0644]
tests/unl.res [new file with mode: 0644]
tests/wierdinit.c
tools/Makefile
tools/all.itarget [new file with mode: 0644]
tools/all.opt.itarget [new file with mode: 0644]
tools/cstripenv.ml [new file with mode: 0644]
tools/obsolete/generate_dependencies.ml [moved from tools/generate_dependencies.ml with 71% similarity]
version
version.ml [new file with mode: 0644]

index 052ff9f..eff87e9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -121,10 +121,13 @@ BYTECODE_EXTRA=-custom $(EXTRA_OCAML_FLAGS)
 ##############################################################################
 .PHONY:: all all.opt byte opt top clean distclean configure opt-compil
 .PHONY:: $(MAKESUBDIRS:%=%.all) $(MAKESUBDIRS:%=%.opt) subdirs.all subdirs.opt
-.PHONY:: all-opt all-byte byte-only opt-only
+.PHONY:: all-opt all-byte byte-only opt-only pure-byte
 .PHONY:: copy-stubs install-stubs install install-man install-python install-common
 
 
+# below follow the main make targets when ocamlbuild is not enabled
+ifneq ($(FEATURE_OCAMLBUILD),yes)
+
 # All make targets that are expected to be an entry point have a dependency on
 # 'Makefile.config' to ensure that if Makefile.config is not present, an error
 # message is printed first before any other actions are executed.
@@ -170,10 +173,6 @@ all.opt: Makefile.config
        $(MAKE) opt-only
        $(MAKE) preinstall
 
-# aliases for "byte" and "opt-compil"
-opt opt-only: Makefile.config opt-compil
-byte-only: Makefile.config byte
-
 byte: Makefile.config version.ml
        @$(MAKE) .depend
        @$(MAKE) subdirs.all
@@ -190,6 +189,79 @@ opt-compil: Makefile.config version.ml
 
 top: $(EXEC).top
 
+# the .cmi file of coccilib
+ocaml/coccilib/coccilib.cmi: ocaml/coccilib.cmi
+       cp ocaml/coccilib.cmi ocaml/coccilib/coccilib.cmi
+
+# ocamlbuild version of the main make targets
+else
+
+all: Makefile.config
+       $(MAKE) $(TARGET_ALL)
+
+world: Makefile.config myocamlbuild.ml version.ml prepare-bundles
+       @echo "building both versions of spatch"
+       $(MAKE) byte
+       $(MAKE) opt-compil
+       @$(MAKE) coccilib-cmi
+       $(MAKE) preinstall
+       $(MAKE) docs
+       @echo ""
+       @echo -e "\tcoccinelle can now be installed via 'make install'"
+
+# note: the 'all-dev' target excludes the documentation and is less noisy
+all-dev: Makefile.config myocamlbuild.ml version.ml prepare-bundles
+       $(MAKE) byte
+       @$(MAKE) coccilib-cmi
+       @$(MAKE) preinstall
+
+all-release: Makefile.config myocamlbuild.ml version.ml prepare-bundles
+       @echo building $(TARGET_SPATCH)
+       $(MAKE) $(TARGET_SPATCH)
+       @$(MAKE) coccilib-cmi
+       $(MAKE) preinstall
+       $(MAKE) docs
+       @echo ""
+       @echo -e "\tcoccinelle can now be installed via 'make install'"
+
+all.opt: Makefile.config myocamlbuild.ml version.ml prepare-bundles
+       $(MAKE) opt-only
+       @$(MAKE) coccilib-cmi
+       $(MAKE) preinstall
+
+byte: Makefile.config myocamlbuild.ml version.ml prepare-bundles
+       $(OCAMLBUILD) -j 0 main.byte
+       cp _build/main.byte $(EXEC)
+
+pure-byte: Makefile.config myocamlbuild.ml version.ml prepare-bundles
+       $(OCAMLBUILD) -j 0 -tag nocustom main.byte
+       cp _build/main.byte $(EXEC)
+
+opt-compil: Makefile.config myocamlbuild.ml version.ml prepare-bundles
+       $(OCAMLBUILD) -j 0 main.native
+       cp _build/main.native $(EXEC).opt
+
+# the .cmi file of coccilib
+_build/ocaml/coccilib.cmi:
+       $(OCAMLBUILD) -j 0 ocaml/coccilib.cmi
+ocaml/coccilib/coccilib.cmi: _build/ocaml/coccilib.cmi
+       cp _build/ocaml/coccilib.cmi ocaml/coccilib/coccilib.cmi
+
+# end of main build target distinction on ocamlbuild
+endif
+
+# aliases for "byte" and "opt-compil"
+opt opt-only: Makefile.config opt-compil
+byte-only: Makefile.config byte
+
+
+# ensures that coccilib.cmi gets build
+.PHONY:: coccilib-cmi
+coccilib-cmi: ocaml/coccilib/coccilib.cmi
+distclean::
+       rm -f ocaml/coccilib/coccilib.cmi
+
+
 subdirs.all:
        @+for D in $(MAKESUBDIRS); do $(MAKE) $$D.all || exit 1 ; done
 
@@ -202,6 +274,16 @@ $(MAKESUBDIRS:%=%.all):
 $(MAKESUBDIRS:%=%.opt):
        @$(MAKE) -C $(@:%.opt=%) all.opt
 
+# This make target prepares the bundled software for building.
+# Note that running 'make' in these subdirectories will
+# automatically prepare the bundled software.
+.PHONY:: prepare-bundles
+prepare-bundles: $(MAKELIBS:%=%/.prepare)
+
+$(MAKELIBS:%=%/.prepare):
+       echo $@
+       @$(MAKE) -C $(@:%.prepare=%) .prepare
+
 #dependencies:
 # commons:
 # globals:
@@ -239,6 +321,16 @@ $(EXEC).top: $(LNKLIBS) $(LIBS) $(OBJS)
 clean distclean::
        rm -f $(TARGET) $(TARGET).opt $(TARGET).top
 
+clean::
+       @if test -n "${OCAMLBUILD}" -d _build; then \
+               $(OCAMLBUILD) -clean; fi
+
+# distclean can run without ocamlbuild configured.
+distclean::
+       -@if test -d _build; then \
+               ocamlbuild -clean; fi
+       rm -rf _build _log
+
 .PHONY:: tools configure
 
 configure:
@@ -250,6 +342,9 @@ Makefile.config: Makefile.config.in configure.ac
        @echo "Makefile.config needs to be (re)build. Run  ./configure $(CONFIGURE_FLAGS) to generate it."
        @false
 
+# as above, also for the ocamlbuild plugin
+myocamlbuild.ml: myocamlbuild.ml.in configure.ac
+
 tools: $(LIBS) $(LNKLIBS)
        $(MAKE) -C tools
 
@@ -269,15 +364,27 @@ static:
 # may need the stubs, see 'copy-stubs'.
 purebytecode:
        rm -f spatch.opt spatch
+ifneq ($(FEATURE_OCAMLBUILD),yes)
        $(MAKE) BYTECODE_EXTRA="" byte-only
+else
+       @$(MAKE) pure-byte
+endif
        sed -i '1 s,^#!.*$$,#!/usr/bin/ocamlrun,g' spatch
 
 # copies the stubs libraries (if any) to the root directory
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 copy-stubs:
        @if test -f ./bundles/pycaml/dllpycaml_stubs.so; then \
                cp -fv ./bundles/pycaml/dllpycaml_stubs.so .; fi
        @if test -f ./bundles/pcre/dllpcre_stubs.so; then \
                cp -fv ./bundles/pcre/dllpcre_stubs.so .; fi
+else
+copy-stubs:
+       @if test -f _build/bundles/pycaml/dllpycaml_stubs.so; then \
+               cp -fv _build/bundles/pycaml/dllpycaml_stubs.so .; fi
+       @if test -f _build/bundles/pcre/dllpcre_stubs.so; then \
+               cp -fv _build/bundles/pcre/dllpcre_stubs.so .; fi
+endif
 
 ##############################################################################
 # Build version information
@@ -292,13 +399,22 @@ version.ml:
 ##############################################################################
 .PHONY:: docs
 
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 docs:
+else
+docs: prepare-bundles
+endif
        @$(MAKE) -C docs || (echo "warning: ignored the failed construction of the manual" 1>&2)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
        @if test "x$(FEATURE_OCAML)" = x1; then \
                if test -f ./parsing_c/ast_c.cmo -o -f ./parsing_c/ast_c.cmx; then \
                        $(MAKE) -C ocaml doc; \
                else echo "note: to obtain coccilib documenation, it is required to build 'spatch' first so that ./parsing_c/ast_c.cm* gets build."; \
                fi fi
+else
+       @if test "x$(FEATURE_OCAML)" = x1; then \
+               $(MAKE) -C ocaml doc; fi
+endif
        @echo "finished building manuals"
 
 clean:: Makefile.config
@@ -310,7 +426,6 @@ clean:: Makefile.config
 ##############################################################################
 
 preinstall: docs/spatch.1 scripts/spatch scripts/spatch.opt scripts/spatch.byte
-       @echo "generated the wrapper scripts for spatch (the frontends)"
 
 docs/spatch.1: Makefile.config
        $(MAKE) -C docs spatch.1
@@ -339,19 +454,19 @@ distclean::
 
 # don't remove DESTDIR, it can be set by package build system like ebuild
 # for staged installation.
-install-common:
+install-common: ocaml/coccilib/coccilib.cmi
        $(MKDIR_P) $(DESTDIR)$(BINDIR)
        $(MKDIR_P) $(DESTDIR)$(LIBDIR)
        $(MKDIR_P) $(DESTDIR)$(SHAREDIR)/ocaml
-       $(MKDIR_P) $(DESTDIR)$(SHAREDIR)/commons
-       $(MKDIR_P) $(DESTDIR)$(SHAREDIR)/globals
-       $(MKDIR_P) $(DESTDIR)$(SHAREDIR)/parsing_c
+#      $(MKDIR_P) $(DESTDIR)$(SHAREDIR)/commons
+#      $(MKDIR_P) $(DESTDIR)$(SHAREDIR)/globals
+#      $(MKDIR_P) $(DESTDIR)$(SHAREDIR)/parsing_c
        $(INSTALL_DATA) standard.h $(DESTDIR)$(SHAREDIR)
        $(INSTALL_DATA) standard.iso $(DESTDIR)$(SHAREDIR)
-       $(INSTALL_DATA) ocaml/coccilib.cmi $(DESTDIR)$(SHAREDIR)/ocaml/
-       $(INSTALL_DATA) parsing_c/*.cmi $(DESTDIR)$(SHAREDIR)/parsing_c/
-       $(INSTALL_DATA) commons/*.cmi $(DESTDIR)$(SHAREDIR)/commons/
-       $(INSTALL_DATA) globals/iteration.cmi $(DESTDIR)$(SHAREDIR)/globals/
+       $(INSTALL_DATA) ocaml/coccilib/coccilib.cmi $(DESTDIR)$(SHAREDIR)/ocaml/
+#      $(INSTALL_DATA) parsing_c/*.cmi $(DESTDIR)$(SHAREDIR)/parsing_c/
+#      $(INSTALL_DATA) commons/*.cmi $(DESTDIR)$(SHAREDIR)/commons/
+#      $(INSTALL_DATA) globals/iteration.cmi $(DESTDIR)$(SHAREDIR)/globals/
 
 install-man:
        @echo "Installing manuals in: ${DESTDIR}${MANDIR}"
@@ -557,10 +672,11 @@ distclean::
        set -e; for i in $(CLEANSUBDIRS); do $(MAKE) -C $$i $@; done
        rm -f test.ml
        rm -f TAGS *.native *.byte *.d.native *.p.byte
-       rm -rf _build _log
-       rm -f tests/SCORE_actual.sexp tests/SCORE_best_of_both.sexp
+       if test -z "${KEEP_GENERATED}"; then \
+               rm -f tests/SCORE_actual.sexp tests/SCORE_best_of_both.sexp; fi
        find . -name ".#*1.*" | xargs rm -f
        rm -f $(EXEC) $(EXEC).opt $(EXEC).top
+       rm -f setup/Makefile
 
 # using 'touch' to prevent infinite recursion with 'make depend'
 .PHONY:: depend
@@ -584,7 +700,8 @@ distclean::
        rm -rf autom4te.cache
        rm -f config.status
        rm -f config.log
-       rm -f version.ml
+       if test -z "${KEEP_GENERATED}"; then \
+               rm -f version.ml; fi
        rm -f globals/config.ml
        rm -f globals/regexp.ml python/pycocci.ml ocaml/prepare_ocamlcocci.ml
        rm -f scripts/spatch.sh
@@ -606,6 +723,7 @@ ifneq ($(MAKECMDGOALS),all-dev)
 ifneq ($(MAKECMDGOALS),all)
 ifneq ($(MAKECMDGOALS),.depend)
 ifneq ($(MAKECMDGOALS),depend)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 -include .depend
 endif
 endif
@@ -618,5 +736,6 @@ endif
 endif
 endif
 endif
+endif
 
 include Makefile.common
index fc2f9e3..d4b50b4 100644 (file)
@@ -1,5 +1,8 @@
 # This file is not the actual Makefile, as we do not use Automake for
 # our project. The purpose of this file is to instruct autoreconf
 # to include the setup directory.
+#
+# Note: ./configure generates the Makefile from Makefile.in, but
+# not from this Makefile.am.
 
 ACLOCAL_AMFLAGS = -I setup --install
index aa00e88..1250b8b 100644 (file)
@@ -15,3 +15,8 @@ ifeq ($(BUILD_OPT),yes)
 %.cmo: %.cmx
        @echo "skipped building $@ in optimizing mode: $< will be build instead."
 endif
+
+
+# If this variable is set, then 'make distclean' should not remove certain
+# generated files like the generated parsers, and documentation.
+export KEEP_GENERATED
index 43a70f3..9179762 100644 (file)
@@ -38,7 +38,7 @@ endif
 
 # note that variables are exported and thus cannot be used in
 # definitions of other variables. Use $(EXTRA_OCAML_FLAGS) for that.
-# Todo: since these definitions are not in Makefile.config.in, the
+# Todo: since these definitions are now in Makefile.config.in, the
 # defaults can be removed from each individual Makefile in the
 # subdirectories.
 export OCAMLCFLAGS?=$(EXTRA_OCAML_FLAGS)
@@ -119,6 +119,7 @@ LOCALLIB_pycaml=@LOCALLIB_pycaml@
 FEATURE_PYTHON=@FEATURE_PYTHON@
 FEATURE_OCAML=@FEATURE_OCAML@
 NO_OCAMLFIND=@SUBSTITUTED_OCAMLFIND@
+FEATURE_OCAMLBUILD=@FEATURE_OCAMLBUILD@
 
 # Include paths
 PCREDIR=@PATH_pcre@
index 91976c4..3b5d8c3 100644 (file)
@@ -42,6 +42,16 @@ ifndef GIT
 GIT=git
 endif
 
+# the release process rewrites the Makefile.config, so we need
+# to save important configure flags.
+remember_ocamlbuild:=$(FEATURE_OCAMLBUILD)
+
+ifeq ($(remember_ocamlbuild),yes)
+       extra_configure_flags := --enable-ocamlbuild
+else
+       extra_configure_flags :=
+endif
+
 
 
 # Procedure to do first time:
@@ -101,7 +111,7 @@ prerelease:
 fix-expected:
        @echo "going to generate: tests/SCORE_expected_orig.sexp"
        $(MAKE) distclean
-       ./configure --enable-release --disable-python
+       ./configure --enable-release --disable-python $(extra_configure_flags)
        $(MAKE) opt-only
        yes | ./spatch.opt -testall --iso-file ./standard.iso --macro-file-builtins ./standard.h
        cp tests/SCORE_actual.sexp tests/SCORE_expected_orig.sexp
@@ -126,7 +136,7 @@ package:
        @echo "\tThe coccinelle SVN repository must be in $(WEBBASE)\n"
 
 package-src:
-       $(MAKE) distclean KEEP_CONFIG=1  # Clean project (keep the config for the make actions)
+       ./configure --enable-release --disable-python --disable-pcre-syntax $(extra_configure_flags)
        $(MAKE) srctar
        $(MAKE) coccicheck
 
@@ -135,7 +145,7 @@ package-src:
 # on those libraries.
 package-nopython:
        $(MAKE) distclean
-       ./configure --enable-release --disable-python --disable-pcre-syntax --disable-menhirLib --disable-sexplib --disable-extlib --disable-pycaml
+       ./configure --enable-release --disable-python --disable-pcre-syntax --disable-menhirLib --disable-pycaml  $(extra_configure_flags)
        $(MAKE) bintar
        $(MAKE) bytecodetar
 
@@ -144,7 +154,7 @@ package-nopython:
 # on those libraries.
 package-python:
        $(MAKE) distclean
-       ./configure --enable-release --enable-python --disable-pcre-syntax --disable-menhirLib --disable-sexplib --disable-extlib --disable-pycaml
+       ./configure --enable-release --enable-python --disable-pcre-syntax --disable-menhirLib --disable-pycaml $(extra_configure_flags)
        $(MAKE) bintar-python
        $(MAKE) bytecodetar-python
 
@@ -156,15 +166,14 @@ package-python:
 # update: make docs generates pdf but also some ugly .log files, so
 # make clean is there to remove them while not removing the pdf
 # (only distclean remove the pdfs).
-#
-# Prerequisite: a distclean with preservation of Makefile.config
 srctar: Makefile.config
        $(MAKE) docs
-       $(MAKE) clean
+       $(MAKE) -C parsing_cocci parser_cocci_menhir.ml
+       $(MAKE) -C parsing_cocci parser_cocci_menhir.mli
+       $(MAKE) distclean KEEP_GENERATED=1 KEEP_CONFIG=1
        if test -f "$(TMP)/$(PACKAGE)/"; then rm -f "$(TMP)/$(PACKAGE)/"; fi # remove it if it is a symlink
        $(MKDIR_P) "$(TMP)/$(PACKAGE)/"
        cp -rfa ./*  "$(TMP)/$(PACKAGE)/"
-       cd $(TMP)/$(PACKAGE); $(MAKE) -C parsing_cocci parser_cocci_menhir.ml
        rm -f $(TMP)/$(PACKAGE)/Makefile.config
        cd $(TMP); tar cvfz $(PACKAGE).tgz --exclude-vcs $(EXCL) $(PACKAGE)
        rm -rf  $(TMP)/$(PACKAGE)
@@ -315,8 +324,7 @@ push:
 # Note: configure first
 dist:
        $(MAKE) licensify
-       $(MAKE) distclean KEEP_CONFIG=1
        $(MAKE) docs
        $(MAKE) -C parsing_cocci parser_cocci_menhir.ml
-       $(MAKE) clean
+       $(MAKE) distclean KEEP_CONFIG=1 KEEP_GENERATED=1
        tar cvfz $(PACKAGE).tar.gz --transform="s,^,$(PACKAGE)/,S" --exclude=$(PACKAGE).tar.gz --exclude-backups --exclude-vcs *
diff --git a/_tags b/_tags
new file mode 100644 (file)
index 0000000..b38235a
--- /dev/null
+++ b/_tags
@@ -0,0 +1,122 @@
+# Compile all .ml files against some base libraries
+# (defined in the plugin as unix,str,nums and bigarray)
+<**/*.ml>: use_base
+
+#
+# Cocci sources and directories
+#
+
+<commons>: include
+<commons/ocamlextra>: include
+<commons/ocollection>: include
+
+<globals>: include
+<globals/regexp_pcre.ml>: use_pcre
+
+<parsing_cocci>: include
+<parsing_cocci/parser_cocci_menhir.ml>: use_menhirLib, nowarn20
+
+<parsing_c>: include
+<ctl>: include
+<engine>: include
+<popl09>: include
+<extra>: include
+
+<ocaml>: include
+<ocaml/coccilib.ml{,i}>: use_pcre
+
+<python>: include
+<python/yes_pycocci.ml>: thread, use_pycaml
+
+# some users have a symlink 'result' pointing to the outcome
+# of the build, which causes troubles with the hygiene check.
+<result>: -traverse
+
+
+#
+# Subdirectories
+#
+
+<engine/engine.{cma,cmxa}>:   use_pcre
+<globals/globals.{cma,cmxa}>: use_pcre
+<ocaml/ocaml.{cma,cmxa}>:     use_pcre
+<parsing_c/parsing_c.{cma,cmxa}>:         use_pcre
+<parsing_cocci/parsing_cocci.{cma,cmxa}>: use_pcre, use_menhirLib
+<popl09/popl09.{cma,cmxa}>:   use_pcre
+<python/python.{cma,cmxa}>:   use_pcre, use_pycaml
+
+
+#
+# Bundled packages
+#
+
+# apriori remove the traverse tag from the bundle
+# directories to prevent them from being included.
+# The traverse tag will be added by the plugin for
+# the bundles that are included.
+<bundles/*>: -traverse
+
+<bundles/pcre/pcre.{cma,cmxa}>: use_pcre
+<bundles/pycaml/pycaml.{cma,cmxa}>: thread, use_pycaml
+
+# Interaction between the bundles and the plugin.
+<bundles/pcre/libpcre_stubs.a>:     use_pcre
+<bundles/pcre/*/lib/pcre_stubs.c>:  use_pcre
+<bundles/pycaml/libpycaml_stubs.a>: use_pycaml
+<bundles/pycaml/*/pycaml_stubs.c>:  pp_pycaml, use_pycaml
+<bundles/pycaml/*/pycaml.ml>:       pp_pycaml
+<bundles/menhirLib/*/src/*.cmx>:    for-pack(MenhirLib)
+
+
+#
+# Hygiene
+#
+
+# Some lexers and parsers are precompiled in the
+# source distribution to make some preprocessors
+# optional
+
+<parsing_c/parser_c.mly>:                   not_hygienic
+<parsing_c/lexer_c.mll>:                    not_hygienic
+<parsing_cocci/lexer_cli.mll>:              not_hygienic
+<parsing_cocci/lexer_script.mll>:           not_hygienic
+<parsing_cocci/lexer_cocci.mll>:            not_hygienic
+<parsing_cocci/parser_cocci_menhir.mly>:    not_hygienic
+<parsing_cocci/parser_cocci_menhir.ml{,i}>: precious
+<ocaml/coccilib/coccilib.cmi>:             not_hygienic
+
+
+#
+# Applications
+# Main is the entry point of spatch.
+#
+
+# library dependencies of spatch.
+<main.{byte,native}>: thread, use_base, use_menhirLib, use_pcre, use_pycaml
+
+# some test tools in the subdirectories
+<parsing_cocci/main.{byte,native}>: use_base, use_pcre
+<ctl/test_ctl.{byte,native}>: use_base
+
+
+# Build tools/all.otarget for all tools, or
+# tools/all.opt.otarget for all tools with the native compiler.
+
+<tools/gitgrep.{byte,native}>:             use_base
+<tools/gitsort.{byte,native}>:             use_base
+<tools/process_isoprofile.{byte,native}>:  use_base
+<tools/alloc_free.{byte,native}>:          use_base
+<tools/bridge.{byte,native}>:              use_base
+<tools/spp.{byte,native}>:                 use_base
+<tools/splitpatch.{byte,native}>:          use_base
+<tools/extract_c_and_res.{byte,native}>:   use_base
+<tools/cstripenv.{byte,native}>:           use_base, use_pcre
+<tools/distributed/cleanup.{byte,native}>: use_base
+
+
+#
+# Documentation
+#
+
+<ocaml/man.docdir/index.html>: gen_man, use_menhirLib, use_pcre, use_pycaml
+<ocaml/html.docdir/index.html>: gen_html, use_menhirLib, use_pcre, use_pycaml
index 7cf73b7..b524589 100644 (file)
@@ -24,6 +24,10 @@ all.opt: $(EXTMARKER)
        @$(MAKE) all-opt-build
 all-opt-build: $(EXTMARKER) extLib.cmxa META
 
+# prepares the source bundle for building.
+.prepare: $(EXTMARKER)
+       touch .prepare
+
 clean:
        rm -f .depend META extLib.cm[ioxa] extLib.[ao] \
                $(EXTLIB)/*.cm[ioxa] extLib.cmxa \
@@ -31,6 +35,7 @@ clean:
 
 distclean: clean
        rm -rf $(EXTLIB)
+       rm -f .prepare
 
 depend: $(EXTMARKER)
 
index f620585..3e4d8db 100644 (file)
@@ -29,16 +29,22 @@ all.opt: .depend
        @$(MAKE) all-opt-build
 all-opt-build: .depend menhirLib.cmxa META
 
+# prepares the source bundle for building.
+.prepare: $(MENHIRMARKER)
+       touch .prepare
+
 clean:
        rm -f menhirLib.cma menhirLib.cmxa META \
                $(MENHIRLIB)/*.cm[ioxa] \
                $(MENHIRLIB)/*.o \
+               $(MENHIRLIB)/*.annot \
                $(MENHIRLIB)/engineTypes.mli $(MENHIRLIB)/tableFormat.mli \
                menhirLib.cm[ioxa] menhirLib.[oa] \
                .depend
 
 distclean: clean
        rm -rf $(MENHIRDIR)
+       rm -f .prepare
 
 $(MENHIRMARKER): $(MENHIRDIR).tar.gz
        $(TAR) xfvz $<
@@ -99,7 +105,9 @@ $(MENHIRLIB)/tableFormat.mli: $(MENHIRLIB)/packedIntArray.cmi $(MENHIRLIB)/engin
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
 ifneq ($(MAKECMDGOALS),depend-build)
-include .depend
+ifneq ($(FEATURE_OCAMLBUILD),yes)
+-include .depend
+endif
 endif
 endif
 endif
diff --git a/bundles/menhirLib/_tags b/bundles/menhirLib/_tags
new file mode 100644 (file)
index 0000000..ae43a72
--- /dev/null
@@ -0,0 +1,5 @@
+# Includes the sources of the
+# bundles' source directory if
+# this directory is included.
+
+<menhir-20120123/src>: include
diff --git a/bundles/menhirLib/menhir-20120123/AUTHORS b/bundles/menhirLib/menhir-20120123/AUTHORS
deleted file mode 100644 (file)
index 2def04c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-François Pottier <Francois.Pottier@inria.fr>
-Yann Régis-Gianas <Yann.Regis-Gianas@pps.jussieu.fr>
diff --git a/bundles/menhirLib/menhir-20120123/CHANGES b/bundles/menhirLib/menhir-20120123/CHANGES
deleted file mode 100644 (file)
index afa111c..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-2012/01/23:
-
-Fixed a bug whereby a %nonassoc declaration was not respected. This
-declaration requests that a shift/reduce conflict be reduced in favor of
-neither shifting nor reducing, that is, a syntax error must occur. However,
-due to an unforeseen interaction with the "default reduction" mechanism, this
-declaration was sometimes ignored and reduction would take place.
-
-2012/01/09:
-Changes in the (undocumented) Coq back-end so as to match the ESOP 2012
-paper.
-
-2011/10/19:
-The Makefile now tests whether Unix or Windows is used (the test is performed
-by evaluating Sys.os_type under ocaml) and changes a couple settings accordingly:
-- the executable file name is either menhir or menhir.exe
-- the object file suffix is either .o or .obj
-
-2011/10/19:
-Added --strict, which causes many warnings about the grammar and about the
-automaton to be considered errors.
-
-2011/10/19:
-The # annotations that are inserted in the generated .ml file now retain their
-full path. (That is, we no longer use [Filename.basename].) This implies that
-the # annotations depend on how menhir is invoked -- e.g.  "menhir
-foo/bar.mly" and "cd foo && menhir bar.mly" will produce different
-results. Nevertheless, this seems reasonable and useful (e.g. in conjunction
-with ocamlbuild and a hierarchy of files). Thanks to Daniel Weil.
-
-2011/10/06:
-With the -lg 1 switch, Menhir now indicates whether the grammar is SLR(1).
-
-2011/05/24:
-Removed the lock in ocamldep.wrapper. It is the responsibility of the user
-to avoid interferences with other processes (or other instances of the script)
-that create and/or remove files.
-
-2011/04/28:
-The (internal) computation of the automaton's invariant was broken and has
-been fixed. Surprisingly, this does not seem to affect the generated code,
-(which was correct,) so no observable bug is fixed. Hopefully no bug is
-introduced!
-
-2011/04/07:
-The grammar description files (.mly) are now read in up front and stored in
-memory while they are parsed. This allows us to avoid the use of pos_in and
-seek_in, which do not work correctly when CRLF conversion is being performed.
-
-2011/04/05:
-Fixed a bug in the type inference module (for parameterized non-terminals)
-which would cause an infinite loop.
-
-2011/01/24:
-Fixed a bug that would cause an assertion failure in the generated parser
-in some situations where the input stream was incorrect and the grammar
-involved the error token. The fix might cause grammars that use the error
-token to behave differently (hopefully more accurately) as of now.
-
-2009/06/18:
-Makefile changes: build and install only the bytecode version of menhirLib
-when TARGET=byte is set.
-
-2009/02/06:
-Fixed ocamldep.wrapper to avoid quoting the name of the ocaml command.
-This is hoped to fix a compilation problem under MinGW.
-
-2009/02/04:
-A Makefile fix to avoid a problem under Windows/Cygwin.
-Renamed the ocaml-check-version script so as to avoid a warning.
-
-2008/09/05:
-Ocaml summer project: added --interpret, --table, and --suggest-*.
-
-2008/08/06:
-Fixed a problem that would cause the code inliner to abort when a semantic
-value and a non-terminal symbol happened to have the same name.
-
-2008/08/06:
-Removed code sharing.
-
-2008/06/20:
-Removed an incorrect assertion that caused failures (lr1.ml, line 134).
-
-2007/12/05:
-Disabled code sharing by default, as it is currently broken. (See Yann's
-message; assertion failure at runtime.)
-
-2007/12/01:
-Added an optimization to share code among states that have identical
-outgoing transition tables.
-
-2007/08/30:
-Small Makefile change: create an executable file for check-ocaml-version in
-order to work around the absence of dynamic loading on some platforms.
-
-2007/05/20:
-Made a fundamental change in the construction of the LR(1) automaton
-in order to eliminate a bug that could lead to spurious conflicts --
-thanks to Ketti for submitting a bug report.
-
-2007/05/18:
-Added --follow-construction to help understand the construction of the
-LR(1) automaton (very verbose).
-
-2007/05/11:
-Code generation: more explicit qualifications with Pervasives so as
-to avoid capture when the user redefines some of the built-in operators,
-such as (+).
-Added a new demo (calc-param) that shows how to use %parameter.
-
-2007/03/22:
-Makefile improvements (check for PREFIX; bootstrap in bytecode now
-also available). Slight changes to OMakefile.shared.
-
-2007/02/15:
-Portability fix in Makefile and Makefile.shared (avoided "which").
-
-2006/12/15:
-Portability fix in Makefile.shared (replaced "&>" with "2>&1 >").
-
-2006/06/23:
-Made a slight restriction to Pager's criterion so as to never introduce
-fake conflict tokens (see Lr0.compatible). This might help make conflict
-explanations more accurate in the future.
-
-2006/06/16:
-Fixed bug that would cause positions to become invalid after %inlining.
-
-2006/06/15:
-Fixed --depend to be more lenient when analyzing ocamldep's output.
-Added --raw-depend which transmits ocamldep's output unchanged (for
-use in conjunction with omake).
-
-2006/06/12:
-Fixed bug that would cause --only-preprocess to print %token declarations
-also for pseudo-tokens.
-Fixed bug that caused some precedence declarations to be incorrectly
-reported as useless.
-Improved things so that useless pseudo-tokens now also cause warnings.
-Fixed bug that would cause %type directives for terminal symbols to
-be incorrectly accepted.
-Fixed bug that would occur when a semantic action containing $i keywords
-was %inlined.
-
-2006/05/05:
-Fixed problem that caused some end-of-stream conflicts not to be reported.
-Fixed Pager's compatibility criterion to avoid creating end-of-stream conflicts.
-
-2006/04/21:
-Fixed problem that allowed generating incorrect but apparently well-typed
-Objective Caml code when a semantic action was ill-typed and --infer was
-omitted.
-
-2006/03/29:
-Improved conflict reports by factoring out maximal common derivation contexts.
-
-2006/03/28:
-Fixed bug that could arise when explaining a conflict in a non-LALR(1) grammar.
-
-2006/03/27:
-Changed count of reduce/reduce conflicts to allow a comparison with ocamlyacc's diagnostics.
-When refusing to resolve a conflict, report all diagnostics before dying.
-
-2006/03/18:
-Added display of FOLLOW sets when using --log-grammar 2.
-Added --graph option.
-Fixed behavior of --depend option.
-
-2006/01/06:
-Removed reversed lists from the standard library.
-
diff --git a/bundles/menhirLib/menhir-20120123/INSTALLATION b/bundles/menhirLib/menhir-20120123/INSTALLATION
deleted file mode 100644 (file)
index 16976f2..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-REQUIREMENTS
-
-You need Objective Caml 3.09 or later and GNU make.
-
-HOW TO INSTALL
-
-If you wish to install via ocamlfind, make sure that ocamlfind is in
-your PATH. (Remember that prefixing a command with sudo affects its
-PATH.)
-
-Run the following command:
-
-  make PREFIX=/usr/local install
-
-If your machine does not have the native code Objective Caml compiler
-(ocamlopt), but does have the bytecode compiler (ocamlc), then instead
-of the above command, use:
-
-  make PREFIX=/usr/local TARGET=byte all install
-
-The value of the PREFIX variable can be changed to control where
-the software, the standard library, and the documentation should
-be stored. These files are copied to the following places:
-
-  $PREFIX/bin/
-  $PREFIX/share/menhir/
-  $PREFIX/doc/menhir/
-
-The support library, MenhirLib, is either installed via ocamlfind, if
-available, or placed within $PREFIX/share/menhir. Menhir's --suggest
-options help determine where and how it was installed.
-
-The documentation includes a reference manual and a number of demos.
-
diff --git a/bundles/menhirLib/menhir-20120123/LICENSE b/bundles/menhirLib/menhir-20120123/LICENSE
deleted file mode 100644 (file)
index f7c1ef1..0000000
+++ /dev/null
@@ -1,629 +0,0 @@
-In the following, "the Library" refers to the following files:
-
-  src/standard.mly
-  src/infiniteArray.{ml,mli}
-  src/packedIntArray.{ml,mli}
-  src/rowDisplacement.{ml,mli}
-  src/engineTypes.ml
-  src/engine.{ml,mli}
-  src/tableFormat.ml
-  src/tableInterpreter.{ml,mli}
-  src/convert.{ml,mli}
-
-while "the Generator" refers to all other files in this archive.
-
-The Generator is distributed under the terms of the Q Public License
-version 1.0 with a change to choice of law (included below).
-
-The Library is distributed under the terms of the GNU Library General
-Public License version 2 (included below).
-
-As a special exception to the Q Public Licence, you may develop
-application programs, reusable components and other software items
-that link with the original or modified versions of the Generator
-and are not made available to the general public, without any of the
-additional requirements listed in clause 6c of the Q Public licence.
-
-As a special exception to the GNU Library General Public License, you
-may link, statically or dynamically, a "work that uses the Library"
-with a publicly distributed version of the Library to produce an
-executable file containing portions of the Library, and distribute
-that executable file under terms of your choice, without any of the
-additional requirements listed in clause 6 of the GNU Library General
-Public License.  By "a publicly distributed version of the Library",
-we mean either the unmodified Library as distributed by INRIA, or a
-modified version of the Library that is distributed under the
-conditions defined in clause 3 of the GNU Library General Public
-License.  This exception does not however invalidate any other reasons
-why the executable file might be covered by the GNU Library General
-Public License.
-
-----------------------------------------------------------------------
-
-                   THE Q PUBLIC LICENSE version 1.0
-
-              Copyright (C) 1999 Troll Tech AS, Norway.
-                  Everyone is permitted to copy and
-                  distribute this license document.
-
-The intent of this license is to establish freedom to share and change
-the software regulated by this license under the open source model.
-
-This license applies to any software containing a notice placed by the
-copyright holder saying that it may be distributed under the terms of
-the Q Public License version 1.0. Such software is herein referred to
-as the Software. This license covers modification and distribution of
-the Software, use of third-party application programs based on the
-Software, and development of free software which uses the Software.
-
-                            Granted Rights
-
-1. You are granted the non-exclusive rights set forth in this license
-provided you agree to and comply with any and all conditions in this
-license. Whole or partial distribution of the Software, or software
-items that link with the Software, in any form signifies acceptance of
-this license.
-
-2. You may copy and distribute the Software in unmodified form
-provided that the entire package, including - but not restricted to -
-copyright, trademark notices and disclaimers, as released by the
-initial developer of the Software, is distributed.
-
-3. You may make modifications to the Software and distribute your
-modifications, in a form that is separate from the Software, such as
-patches. The following restrictions apply to modifications:
-
-      a. Modifications must not alter or remove any copyright notices
-      in the Software.
-
-      b. When modifications to the Software are released under this
-      license, a non-exclusive royalty-free right is granted to the
-      initial developer of the Software to distribute your
-      modification in future versions of the Software provided such
-      versions remain available under these terms in addition to any
-      other license(s) of the initial developer.
-
-4. You may distribute machine-executable forms of the Software or
-machine-executable forms of modified versions of the Software,
-provided that you meet these restrictions:
-
-      a. You must include this license document in the distribution.
-
-      b. You must ensure that all recipients of the machine-executable
-      forms are also able to receive the complete machine-readable
-      source code to the distributed Software, including all
-      modifications, without any charge beyond the costs of data
-      transfer, and place prominent notices in the distribution
-      explaining this.
-
-      c. You must ensure that all modifications included in the
-      machine-executable forms are available under the terms of this
-      license.
-
-5. You may use the original or modified versions of the Software to
-compile, link and run application programs legally developed by you or
-by others.
-
-6. You may develop application programs, reusable components and other
-software items that link with the original or modified versions of the
-Software. These items, when distributed, are subject to the following
-requirements:
-
-      a. You must ensure that all recipients of machine-executable
-      forms of these items are also able to receive and use the
-      complete machine-readable source code to the items without any
-      charge beyond the costs of data transfer.
-
-      b. You must explicitly license all recipients of your items to
-      use and re-distribute original and modified versions of the
-      items in both machine-executable and source code forms. The
-      recipients must be able to do so without any charges whatsoever,
-      and they must be able to re-distribute to anyone they choose.
-
-      c. If the items are not available to the general public, and the
-      initial developer of the Software requests a copy of the items,
-      then you must supply one.
-
-                       Limitations of Liability
-
-In no event shall the initial developers or copyright holders be
-liable for any damages whatsoever, including - but not restricted to -
-lost revenue or profits or other direct, indirect, special, incidental
-or consequential damages, even if they have been advised of the
-possibility of such damages, except to the extent invariable law, if
-any, provides otherwise.
-
-                             No Warranty
-
-The Software and this license document are provided AS IS with NO
-WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN,
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-                            Choice of Law
-
-This license is governed by the Laws of France.
-
-----------------------------------------------------------------------
-
-                  GNU LIBRARY GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL.  It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it.  You can use it for
-your libraries, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library.  If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-\f
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software.  To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
-  Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs.  This
-license, the GNU Library General Public License, applies to certain
-designated libraries.  This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
-  The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it.  Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program.  However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
-  Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries.  We
-concluded that weaker conditions might promote sharing better.
-
-  However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves.  This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them.  (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.)  The hope is that this
-will lead to faster development of free libraries.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, while the latter only
-works together with the library.
-
-  Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-\f
-                  GNU LIBRARY GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License").  Each licensee is
-addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-\f
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
-  6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    c) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    d) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-\f
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                            NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-\f
-     Appendix: How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public
-    License along with this library; if not, write to the Free
-    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-    MA 02111-1307, USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/bundles/menhirLib/menhir-20120123/Makefile b/bundles/menhirLib/menhir-20120123/Makefile
deleted file mode 100644 (file)
index b99b71f..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# This is the main Makefile that is shipped as part of the source package.
-# Keep in mind that the hierarchy that is shipped is not identical to the
-# hierarchy within the svn repository: some sub-directories are not shipped;
-# the documentation is pre-built.
-
-# The hierarchy that is shipped includes:
-#   demos
-#   menhir.1
-#   manual.pdf
-#   src
-#   Makefile (this one)
-
-# ----------------------------------------------------------------------------
-
-# By default, we attempt to use ocamlfind (if present in the PATH), but it it
-# is possible to prevent that externally by setting USE_OCAMLFIND to false.
-
-ifndef USE_OCAMLFIND
-  USE_OCAMLFIND = ocamlfind ocamlc -v >/dev/null 2>&1
-endif
-
-# ----------------------------------------------------------------------------
-
-# A few settings differ on Windows versus Unix.
-
-include Makefile.arch
-
-# ----------------------------------------------------------------------------
-# Installation paths.
-
-# TEMPORARY GODIVA and Linux do not agree on the standard paths...
-
-ifndef PREFIX
-  $(error Please define PREFIX)
-endif
-
-bindir          := ${PREFIX}/bin
-docdir         := ${PREFIX}/share/doc/menhir
-libdir         := ${PREFIX}/share/menhir
-mandir          := ${PREFIX}/share/man/man1
-MANS            := menhir.1
-DOCS            := manual.pdf demos
-MLYLIB          := src/standard.mly
-
-# -------------------------------------------------------------------------
-
-# Building menhirLib.
-
-ifeq ($(TARGET),byte)
-MENHIRLIB       := menhirLib.cmi menhirLib.cmo
-else
-MENHIRLIB       := menhirLib.cmi menhirLib.cmo menhirLib.cmx menhirLib.$(OBJ)
-endif
-
-# ----------------------------------------------------------------------------
-# Compilation.
-
-# Installation time settings are recorded within src/installation.ml.
-# This file is recreated every time so as to avoid becoming stale.
-
-.PHONY: all install uninstall
-
-all:
-       rm -f src/installation.ml
-       echo "let libdir = \"${libdir}\"" > src/installation.ml
-       if $(USE_OCAMLFIND) ; then \
-         echo "let ocamlfind = true" >> src/installation.ml ; \
-       else \
-         echo "let ocamlfind = false" >> src/installation.ml ; \
-       fi
-       $(MAKE) $(MFLAGS) -C src -f Makefile
-       $(MAKE) $(MFLAGS) -C src -f Makefile $(MENHIRLIB)
-
-# ----------------------------------------------------------------------------
-# Installation.
-
-install: all
-       mkdir -p $(bindir)
-       mkdir -p $(libdir)
-       mkdir -p $(docdir)
-       mkdir -p $(mandir)
-       install src/$(MENHIREXE) $(bindir)
-       install -m 644 $(MLYLIB) $(libdir)
-       cp -r $(DOCS) $(docdir)
-       cp -r $(MANS) $(mandir)
-       @cd src && if $(USE_OCAMLFIND) ; then \
-         echo Installing MenhirLib via ocamlfind. ; \
-         ocamlfind install menhirLib META $(MENHIRLIB) ; \
-       else \
-         echo Installing MenhirLib manually. ; \
-         install -m 644 $(MENHIRLIB) $(libdir) ; \
-       fi
-
-uninstall:
-       rm -rf $(bindir)/$(MENHIREXE)
-       rm -rf $(libdir)
-       rm -rf $(docdir)
-       rm -rf $(mandir)/$(MANS)
-       @if $(USE_OCAMLFIND) ; then \
-         echo Un-installing MenhirLib via ocamlfind. ; \
-         ocamlfind remove menhirLib ; \
-       fi
diff --git a/bundles/menhirLib/menhir-20120123/Makefile.arch b/bundles/menhirLib/menhir-20120123/Makefile.arch
deleted file mode 100644 (file)
index aba8a1c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# If ocaml reports that Sys.os_type is Unix, we assume Unix, otherwise
-# we assume Windows.
-
-ifeq "$(shell rm -f ./o.ml && echo print_endline Sys.os_type > ./o.ml && ocaml ./o.ml && rm -f ./o.ml)" "Unix"
-MENHIREXE    := menhir
-OBJ          := o
-else
-MENHIREXE    := menhir.exe
-OBJ          := obj
-endif
diff --git a/bundles/menhirLib/menhir-20120123/demos/Makefile b/bundles/menhirLib/menhir-20120123/demos/Makefile
deleted file mode 100644 (file)
index e12e4cd..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-DEMOS := calc calc-two calc-param
-
-.PHONY: all clean
-
-all:
-       @for i in $(DEMOS) ; do \
-         $(MAKE) -C $$i ; \
-       done
-
-clean:
-       /bin/rm -f *~ .*~ *.omc
-       @for i in $(DEMOS) ; do \
-         $(MAKE) -C $$i clean ; \
-       done
diff --git a/bundles/menhirLib/menhir-20120123/demos/Makefile.auto b/bundles/menhirLib/menhir-20120123/demos/Makefile.auto
deleted file mode 100644 (file)
index e1515ca..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# This auxiliary Makefile is meant to be included by a client Makefile in
-# addition to Makefile.shared. It is optional. It implements the common case
-# where every .mly file in the current directory is to be viewed as a
-# mono-module grammar specification.
-
-$(foreach module,$(wildcard *.mly),$(eval $(call menhir_monomodule,$(patsubst %.mly,%,$(module)),)))
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/Makefile.shared b/bundles/menhirLib/menhir-20120123/demos/Makefile.shared
deleted file mode 100644 (file)
index 93add01..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-# This Makefile is shared between all demos. It is our suggestion
-# of a canonical Makefile for projects that use Objective Caml,
-# ocamllex, and menhir. It requires a recent version of GNU make
-# (older versions do not correctly implement $(eval)).
-
-# ----------------------------------------------------------------
-
-# This Makefile is meant to be included within a host Makefile
-# that defines the following variables:
-#
-# GENERATED    :  a list of the source (.ml and .mli) files
-#                 that should be generated by invoking ocamllex
-#                 or menhir
-#
-# MODULES      :  a list of the modules (without extension)
-#                 that should be linked into the executable
-#                 program. Order is significant.
-#
-# EXECUTABLE   :  the base name of the executables that should
-#                 be produced. Suffixes $(BSUFFIX) and $(OSUFFIX)
-#                 will be added to distinguish the bytecode and
-#                 native code versions.
-
-# ----------------------------------------------------------------
-
-# The host Makefile can also override the following settings:
-
-# Menhir.
-
-ifndef MENHIR
-  MENHIR         := menhir
-endif
-
-# Parser generation flags.
-ifndef PGFLAGS
-  PGFLAGS        := --infer -v
-endif
-
-# Include directives for compilation and for linking.
-
-ifndef INCLUDE
-  INCLUDE        :=
-endif
-
-# Bytecode compilation flags.
-
-ifndef BFLAGS
-  BFLAGS         := 
-endif
-
-# Native code compilation flags.
-ifndef OFLAGS
-  OFLAGS         := 
-endif
-
-# Menhir-suggested compilation flags.
-ifndef SUGG_FLAGS
-  SUGG_FLAGS     := $(shell $(MENHIR) $(PGFLAGS) --suggest-comp-flags 2>/dev/null)
-endif
-
-# Bytecode link-time flags.
-ifndef BLNKFLAGS
-  BLNKFLAGS      := 
-endif
-
-# Menhir-suggested bytecode link-time flags.
-ifndef SUGG_BLNKFLAGS
-  SUGG_BLNKFLAGS := $(shell $(MENHIR) $(PGFLAGS) --suggest-link-flags-byte 2>/dev/null)
-endif
-
-# Native code link-time flags.
-ifndef OLNKFLAGS
-  OLNKFLAGS      := 
-endif
-
-# Menhir-suggested native code link-time flags.
-ifndef SUGG_OLNKFLAGS
-  SUGG_OLNKFLAGS := $(shell $(MENHIR) $(PGFLAGS) --suggest-link-flags-opt 2>/dev/null)
-endif
-
-# Suffix appended to the name of the bytecode executable.
-ifndef BSUFFIX
-  BSUFFIX        := .byte
-endif
-
-# Suffix appended to the name of the native code executable.
-ifndef OSUFFIX
-  OSUFFIX        := 
-endif
-
-# Access paths.
-
-ifndef OCAML
-    OCAML        := ocaml
-endif
-
-ifndef OCAMLC
-  OCAMLC         := $(shell if ocamlfind ocamlc -v >/dev/null 2>&1 ; \
-                       then echo ocamlfind ocamlc ; \
-                      elif ocamlc.opt -v >/dev/null 2>&1 ; \
-                       then echo ocamlc.opt ; \
-                      else echo ocamlc ; fi)
-endif
-
-ifndef OCAMLOPT
-  OCAMLOPT       := $(shell if ocamlfind ocamlopt -v >/dev/null 2>&1 ; \
-                       then echo ocamlfind ocamlopt ; \
-                      elif ocamlopt.opt -v >/dev/null 2>&1 ; \
-                       then echo ocamlopt.opt ; \
-                      else echo ocamlopt ; fi)
-endif
-
-ifndef OCAMLDEP
-  OCAMLDEP       := $(shell if ocamlfind ocamldep -version >/dev/null 2>&1 ; \
-                       then echo ocamlfind ocamldep ; \
-                      elif ocamldep.opt -version >/dev/null 2>&1 ; \
-                       then echo ocamldep.opt ; \
-                      else echo ocamldep ; fi)
-endif
-
-ifndef OCAMLDEPWRAPPER
-  OCAMLDEPWRAPPER:= ./ocamldep.wrapper
-endif
-
-ifndef OCAMLLEX
-  OCAMLLEX       := ocamllex
-endif
-
-# A list of targets that do not require dependency analysis.
-# This variable should be set by the host before including
-# this Makefile.
-COLD           += clean
-
-# ----------------------------------------------------------------
-
-# Do not destroy the generated source files.
-
-.SECONDARY: $(GENERATED)
-
-# ----------------------------------------------------------------
-
-# Linking.
-
-$(EXECUTABLE)$(OSUFFIX): $(MODULES:=.cmx)
-       $(OCAMLOPT) -o $@ $(INCLUDE) $(OLNKFLAGS) $(SUGG_FLAGS) $(SUGG_OLNKFLAGS) $^
-
-$(EXECUTABLE)$(BSUFFIX): $(MODULES:=.cmo)
-       $(OCAMLC) -o $@ $(INCLUDE) $(BLNKFLAGS) $(SUGG_FLAGS) $(SUGG_BLNKFLAGS) $^
-
-# ----------------------------------------------------------------
-
-# Compiling.
-
-# We make the .ml and .mli files generated by ocamllex and menhir
-# unwritable, so as to prevent them from being edited by mistake.
-
-%.cmi: %.mli %.mli.d
-       $(OCAMLC) $(INCLUDE) $(BFLAGS) $(SUGG_FLAGS) -c $<
-
-%.cmo: %.ml %.ml.d
-       $(OCAMLC) $(INCLUDE) $(BFLAGS) $(SUGG_FLAGS) -c $<
-
-%.cmx %.o: %.ml %.ml.d
-       $(OCAMLOPT) $(INCLUDE) $(OFLAGS) $(SUGG_FLAGS) -c $<
-
-%.ml: %.mll
-       @if [ -f $@ ] ; then /bin/chmod +w $@ ; fi
-       $(OCAMLLEX) $<
-       @/bin/chmod -w $@
-
-# ----------------------------------------------------------------
-
-# Computing dependencies.
-
-# We associate a tiny Makefile, whose name ends in .d, with every
-# source file; it contains dependency information only. For an .ml or
-# .mli file, we create an .ml.d or .mli.d file by invoking ocamldep.
-# For an .mll file, we create an .ml.d file by invoking ocamllex first
-# (this is implicit), then ocamldep.
-
-# When it finds a reference to module M, ocamldep checks whether the
-# files m.ml and m.mli exist before deciding which dependency to
-# report. If m.ml and m.mli are generated from m.mll or m.mly, then
-# there is a potential problem: because ocamldep is invoked before
-# these files are created, it cannot see them. The standard solution
-# until now was to invoke ocamllex and ocamlyacc first to create all
-# generated files, and run ocamldep next. This approach does not work
-# with menhir when the --infer switch is on: menhir cannot be invoked
-# first because it needs type information found in .cmi (or .cmo or
-# .cmx) files. Our solution is to wrap ocamldep in a script that
-# creates fake generated files m.ml and m.mli to let ocamldep know that
-# these files are supposed to exist. This is somewhat tricky, but appears
-# to work.
-
-%.ml.d: %.ml
-       $(OCAML) $(OCAMLDEPWRAPPER) $(GENERATED) - $(OCAMLDEP) $< > $@
-
-%.mli.d: %.mli
-       $(OCAML) $(OCAMLDEPWRAPPER) $(GENERATED) - $(OCAMLDEP) $< > $@
-
-# All .d files are included within the present Makefile, so it they
-# do not exist, they are created first, and the dependencies that
-# they contain are then taken into account.
-
-# A .SECONDARY directive is used to ensure that the auxiliary
-# Makefiles are never removed. Otherwise, make could create
-# one, remove one, create one, remove one, ... (We have observed
-# this.)
-
-ifeq ($(findstring $(MAKECMDGOALS),$(COLD)),)
-  ifneq ($(strip $(wildcard *.mli)),)
-    .SECONDARY: $(patsubst %.mli,%.mli.d,$(wildcard *.mli))
-    -include    $(patsubst %.mli,%.mli.d,$(wildcard *.mli))
-  endif
-  ifneq ($(strip $(wildcard *.ml)),)
-    .SECONDARY: $(patsubst %.ml,%.ml.d,$(wildcard *.ml))
-    -include    $(patsubst %.ml,%.ml.d,$(wildcard *.ml))
-  endif
-  ifneq ($(strip $(wildcard *.mll)),)
-    .SECONDARY: $(patsubst %.mll,%.ml.d,$(wildcard *.mll))
-    -include    $(patsubst %.mll,%.ml.d,$(wildcard *.mll))
-  endif
-endif
-
-
-# ----------------------------------------------------------------
-
-# Support for menhir projects.
-
-# The macro menhir_multimodule defines support for multi-module grammar
-# specifications, that is, for producing parsers out of multiple
-# source files. The parameter $(1) is the name of the parser that
-# should be produced; the parameter $(2) is the list of .mly source
-# files; the parameter $(3) contains extra options to be passed to
-# menhir.
-
-# The dependency file is named $(1).d and created by invoking menhir
-# --depend.
-
-define menhir_multimodule
-$(1).ml $(1).mli: $(2) $(1).d
-       @if [ -f $(1).ml ] ; then /bin/chmod +w $(1).ml ; fi
-       @if [ -f $(1).mli ] ; then /bin/chmod +w $(1).mli ; fi
-       $(MENHIR) --ocamlc "$(OCAMLC)" $(PGFLAGS) --base $(1) $(3) $(2)
-       @/bin/chmod -w $(1).ml $(1).mli
-
-$(1).d: $(2)
-       @if [ -f $(1).ml ] ; then /bin/chmod +w $(1).ml ; fi
-       @if [ -f $(1).mli ] ; then /bin/chmod +w $(1).mli ; fi
-       $(OCAML) $(OCAMLDEPWRAPPER) $(GENERATED) - \
-                $(MENHIR) --ocamldep "$(OCAMLDEP)" --depend --base $(1) $(3) $(2) > $$@
-
-ifeq ($$(findstring $$(MAKECMDGOALS),$$(COLD)),)
-.SECONDARY: $(1).d
--include    $(1).d
-endif
-endef
-
-# The macro menhir_monomodule defines support for a mono-module grammar
-# specification. The parameter $(1) is the name of the parser that
-# should be produced; the source file is $(1).mly. The parameter $(2)
-# contains extra options to be passed to menhir.
-
-define menhir_monomodule
-$(eval $(call menhir_multimodule,$(1),$(1).mly,$(2)))
-endef
-
-# Neither of the two macros above is invoked by default, as it is not
-# known here which is appropriate. It is up to the client to invoke
-# these macros with suitable parameters. The auxiliary Makefile.auto
-# implements the common case where every .mly file is a mono-module
-# grammar.
-
-# ----------------------------------------------------------------
-
-.PHONY: clean
-
-clean::
-       /bin/rm -f $(EXECUTABLE)$(BSUFFIX) $(EXECUTABLE)$(OSUFFIX) $(GENERATED)
-       /bin/rm -f *.cmi *.cmx *.cmo *.o *~ .*~ *.automaton *.conflicts *.annot
-       /bin/rm -f *.d
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/OMakefile.shared b/bundles/menhirLib/menhir-20120123/demos/OMakefile.shared
deleted file mode 100644 (file)
index af8e0ca..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-# This OMakefile is designed for projects that use Objective Caml,
-# ocamllex, menhir, and alphaCaml.
-
-# This OMakefile is meant to be included within a host OMakefile
-# that defines the following variables:
-#
-# GENERATED    :  a list of the source (.ml and .mli) files
-#                 that are generated (by invoking ocamllex
-#                 or menhir)
-#
-# MODULES      :  a list of the modules (without extension)
-#                 that should be linked into the executable
-#                 program. Order is significant.
-#
-# EXECUTABLE   :  the base name of the executables that should
-#                 be produced. Suffixes $(BSUFFIX) and $(OSUFFIX)
-#                 will be added to distinguish the bytecode and
-#                 native code versions.
-
-# -------------------------------------------------------------------------
-
-# The host OMakefile can override the following default settings.
-
-# Menhir.
-
-if $(not $(defined MENHIR))
-    MENHIR           = menhir
-    export
-
-# Parser generation flags.
-
-if $(not $(defined MENHIR_FLAGS))
-    MENHIR_FLAGS          = --infer -v
-    export
-
-# Include directives for compilation and for linking.
-
-if $(not $(defined PREFIXED_OCAMLINCLUDES))
-    PREFIXED_OCAMLINCLUDES = 
-    export
-
-# Bytecode compilation flags.
-
-if $(not $(defined BFLAGS))
-    BFLAGS           = -dtypes -g
-    export
-
-# Native code compilation flags.
-
-if $(not $(defined OFLAGS))
-    OFLAGS           = -dtypes
-    export
-
-# Menhir-suggested compilation flags.
-if $(not $(defined SUGG_FLAGS))
-    SUGG_FLAGS       = $(shell $(MENHIR) $(MENHIR_FLAGS) --suggest-comp-flags 2>/dev/null)
-    export
-
-# Bytecode link-time flags.
-
-if $(not $(defined BLNKFLAGS))
-    BLNKFLAGS        = -g
-    export
-
-# Menhir-suggested bytecode link-time flags.
-if $(not $(defined SUGG_BLNKFLAGS))
-    SUGG_BLNKFLAGS       = $(shell $(MENHIR) $(MENHIR_FLAGS) --suggest-link-flags-byte 2>/dev/null)
-    export
-
-# Native code link-time flags.
-
-if $(not $(defined OLNKFLAGS))
-    OLNKFLAGS        =
-    export
-
-# Menhir-suggested native code link-time flags.
-if $(not $(defined SUGG_OLNKFLAGS))
-    SUGG_OLNKFLAGS       = $(shell $(MENHIR) $(MENHIR_FLAGS) --suggest-link-flags-opt 2>/dev/null)
-    export
-
-# Lexer generation flags.
-
-if $(not $(defined LGFLAGS))
-    LGFLAGS          = 
-    export
-
-# Suffix appended to the name of the bytecode executable.
-
-if $(not $(defined BSUFFIX))
-    BSUFFIX          = .byte
-    export
-
-# Suffix appended to the name of the native code executable.
-
-if $(not $(defined OSUFFIX))
-    OSUFFIX          =
-    export
-
-# Access paths for the tools.
-
-if $(not $(defined OCAML))
-    OCAML            = ocaml
-    export
-
-if $(not $(defined OCAMLC))
-    if $(which ocamlfind)
-       OCAMLC       = ocamlfind ocamlc
-       export
-    elseif $(which ocamlc.opt)
-       OCAMLC       = ocamlc.opt
-       export
-    else
-       OCAMLC       = ocamlc
-       export
-    export
-
-if $(not $(defined OCAMLOPT))
-    if $(which ocamlfind)
-       OCAMLOPT     = ocamlfind ocamlopt
-       export
-    elseif $(which ocamlopt.opt)
-       OCAMLOPT     = ocamlopt.opt
-       export
-    else
-       OCAMLOPT     = ocamlopt
-       export
-    export
-
-if $(not $(defined OCAMLDEP))
-    if $(which ocamlfind)
-       OCAMLDEP     = ocamlfind ocamldep
-       export
-    elseif $(which ocamldep.opt)
-       OCAMLDEP     = ocamldep.opt
-       export
-    else
-       OCAMLDEP     = ocamldep
-       export
-    export
-
-if $(not $(defined OCAMLDEPWRAPPER))
-    OCAMLDEPWRAPPER  = ./ocamldep.wrapper
-    export
-
-if $(not $(defined OCAMLLEX))
-    OCAMLLEX         = ocamllex
-    export
-
-if $(not $(defined ALPHACAML))
-    ALPHACAML        = alphaCaml
-    export
-
-# ----------------------------------------------------------------
-
-# Define an ocamldep wrapper that creates fake generated files so that
-# ocamldep can see that these files exist (or are supposed to exist).
-# This is required to work around ocamldep's brokenness.
-
-WrapScanner(command) =
-    $(OCAML) $(OCAMLDEPWRAPPER) $(GENERATED) - $(command)
-
-# ----------------------------------------------------------------
-
-# Dependencies.
-
-.SCANNER: %.cmi: %.mli
-       WrapScanner($(OCAMLDEP) $<)
-
-.SCANNER: %.cmx %.cmo %.o: %.ml
-       WrapScanner($(OCAMLDEP) $<)
-
-# ----------------------------------------------------------------
-
-# Compilation.
-
-%.cmi: %.mli
-       $(OCAMLC) $(PREFIXED_OCAMLINCLUDES) $(BFLAGS) $(SUGG_FLAGS) -c $<
-
-%.cmo: %.ml
-       $(OCAMLC) $(PREFIXED_OCAMLINCLUDES) $(BFLAGS) $(SUGG_FLAGS) -c $<
-
-%.cmx %.o: %.ml
-       $(OCAMLOPT) $(PREFIXED_OCAMLINCLUDES) $(OFLAGS) $(SUGG_FLAGS) -c $<
-
-%.ml: %.mll
-       $(OCAMLLEX) $(LGFLAGS) $<
-
-%.ml %.mli: %.mla
-       $(ALPHACAML) $<
-
-# ----------------------------------------------------------------
-
-# Linking.
-
-$(EXECUTABLE)$(OSUFFIX): $(addsuffix .cmx, $(MODULES))
-       $(OCAMLOPT) -o $@ $(PREFIXED_OCAMLINCLUDES) $(OLNKFLAGS) $(SUGG_FLAGS) $(SUGG_OLNKFLAGS) $+
-
-$(EXECUTABLE)$(BSUFFIX): $(addsuffix .cmo, $(MODULES))
-       $(OCAMLC) -o $@ $(PREFIXED_OCAMLINCLUDES) $(BLNKFLAGS) $(SUGG_FLAGS) $(SUGG_BLNKFLAGS) $+
-
-# ----------------------------------------------------------------
-
-# Menhir: multiple file projects.
-
-MenhirMulti(target, sources, options) =
-    TARGETS   = $(file $(target).ml $(target).mli)
-    SOURCES   = $(file $(sources))
-    $(TARGETS): $(SOURCES)
-       $(MENHIR) --ocamlc "$(OCAMLC) $(PREFIXED_OCAMLINCLUDES) $(BFLAGS)" $(MENHIR_FLAGS) --base $(target) $(options) $(SOURCES)
-    .SCANNER: $(TARGETS): $(SOURCES)
-       WrapScanner($(MENHIR) --ocamldep "$(OCAMLDEP)" --depend --base $(target) $(options) $(SOURCES))
-
-# Menhir: single file projects.
-
-MenhirMono(target, options) =
-    MenhirMulti($(target), $(target).mly, $(options))
-
-# Menhir: automatic single file projects.
-# This causes every .mly file to be viewed as a single file project.
-
-MenhirAuto() =
-    foreach (target, $(glob *.mly))
-       MenhirMono($(removesuffix $(target)), $(EMPTY))
-
-# ----------------------------------------------------------------
-
-.PHONY: clean
-
-clean:
-    /bin/rm -f $(EXECUTABLE)$(BSUFFIX) $(EXECUTABLE)$(OSUFFIX) $(GENERATED)
-    /bin/rm -f *.cmi *.cmx *.cmo *.o *~ .*~ *.automaton *.conflicts *.annot
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-param/Makefile b/bundles/menhirLib/menhir-20120123/demos/calc-param/Makefile
deleted file mode 100644 (file)
index 35d91ef..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# Add --table on the next line to use Menhir's table-based back-end.
-PGFLAGS         := --infer
-GENERATED       := parser.ml parser.mli lexer.ml tokens.ml tokens.mli
-MODULES         := parser lexer calc
-EXECUTABLE      := calc
-OCAMLDEPWRAPPER := ../ocamldep.wrapper
-include ../Makefile.shared
-$(eval $(call menhir_monomodule,tokens,--only-tokens))
-$(eval $(call menhir_multimodule,parser,tokens.mly parser.mly,--external-tokens Tokens))
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-param/OMakefile b/bundles/menhirLib/menhir-20120123/demos/calc-param/OMakefile
deleted file mode 100644 (file)
index 3a54e55..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-GENERATED       = parser.ml parser.mli lexer.ml
-MODULES         = parser lexer calc
-EXECUTABLE      = calc
-OCAMLDEPWRAPPER = ../ocamldep.wrapper
-include ../OMakefile.shared
-MenhirAuto()
-.DEFAULT: $(EXECUTABLE)$(OSUFFIX)
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-param/OMakeroot b/bundles/menhirLib/menhir-20120123/demos/calc-param/OMakeroot
deleted file mode 100644 (file)
index 4a4e99c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Load the standard configuration.
-#
-open build/Common
-
-#
-# The command-line variables are defined *after* the
-# standard configuration has been loaded.
-#
-DefineCommandVars()
-
-#
-# Include the OMakefile in this directory.
-#
-.SUBDIRS: .
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-param/README b/bundles/menhirLib/menhir-20120123/demos/calc-param/README
deleted file mode 100644 (file)
index 8f0a16e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-In this variant of the calc demo, the parser's semantic actions are
-parameterized over a structure, called [Semantics], which defines how numbers
-should be interpreted. The parser is later instantiated with floating-point
-numbers, so the calculator actually performs floating-point evaluation -- but
-the grammar specification is independent of this detail.
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-param/calc.ml b/bundles/menhirLib/menhir-20120123/demos/calc-param/calc.ml
deleted file mode 100644 (file)
index 812a168..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* Let's do floating-point evaluation, for a change. *)
-
-module FloatSemantics = struct
-
-  type number =
-      float
-
-  let inject =
-    float_of_int
-
-  let ( + ) = ( +. )
-  let ( - ) = ( -. )
-  let ( * ) = ( *. )
-  let ( / ) = ( /. )
-  let (~- ) = (~-. )
-
-end
-
-(* Let us now specialize our parameterized parser. *)
-
-module FloatParser =
-  Parser.Make(FloatSemantics)
-
-(* The rest is as usual. *)
-
-let () =
-  let stdinbuf = Lexing.from_channel stdin in
-  while true do
-    (* Read line by line. *)
-    let linebuf = Lexing.from_string (Lexer.line stdinbuf) in
-    try
-      (* Run the parser on a single line of input. *)
-      Printf.printf "%.1f\n%!" (FloatParser.main Lexer.token linebuf)
-    with
-    | Lexer.Error msg ->
-       Printf.fprintf stderr "%s%!" msg
-    | FloatParser.Error ->
-       Printf.fprintf stderr "At offset %d: syntax error.\n%!" (Lexing.lexeme_start linebuf)
-  done
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-param/lexer.mll b/bundles/menhirLib/menhir-20120123/demos/calc-param/lexer.mll
deleted file mode 100644 (file)
index d52f36e..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-{
-  open Tokens
-
-  exception Error of string
-
-}
-
-rule line = parse
-| ([^'\n']* '\n') as line
-    { line }
-| eof
-    { exit 0 }
-
-and token = parse
-| [' ' '\t']
-    { token lexbuf }
-| '\n'
-    { EOL }
-| ['0'-'9']+ as i
-    { INT (int_of_string i) }
-| '+'
-    { PLUS }
-| '-'
-    { MINUS }
-| '*'
-    { TIMES }
-| '/'
-    { DIV }
-| '('
-    { LPAREN }
-| ')'
-    { RPAREN }
-| eof
-    { exit 0 }
-| _
-    { raise (Error (Printf.sprintf "At offset %d: unexpected character.\n" (Lexing.lexeme_start lexbuf))) }
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-param/parser.mly b/bundles/menhirLib/menhir-20120123/demos/calc-param/parser.mly
deleted file mode 100644 (file)
index 5189c9f..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/**************************************************************************/
-/*                                                                        */
-/*  Menhir                                                                */
-/*                                                                        */
-/*  François Pottier, INRIA Rocquencourt                                  */
-/*  Yann Régis-Gianas, PPS, Université Paris Diderot                      */
-/*                                                                        */
-/*  Copyright 2005-2008 Institut National de Recherche en Informatique    */
-/*  et en Automatique. All rights reserved. This file is distributed      */
-/*  under the terms of the Q Public License version 1.0, with the change  */
-/*  described in file LICENSE.                                            */
-/*                                                                        */
-/**************************************************************************/
-
-(* These are the functions that we need in order to write our semantic
-   actions. *)
-
-%parameter<Semantics : sig
-  type number
-  val inject: int -> number
-  val ( + ): number -> number -> number
-  val ( - ): number -> number -> number
-  val ( * ): number -> number -> number
-  val ( / ): number -> number -> number
-  val ( ~-): number -> number
-end>
-
-(* The parser no longer returns an integer; instead, it returns an
-   abstract number. *)
-
-%start <Semantics.number> main
-
-(* Let us open the [Semantics] module, so as to make all of its
-   operations available in the semantic actions. *)
-
-%{
-
-  open Semantics
-
-%}
-
-%%
-
-main:
-| e = expr EOL
-    { e }
-
-expr:
-| i = INT
-    { inject i }
-| LPAREN e = expr RPAREN
-    { e }
-| e1 = expr PLUS e2 = expr
-    { e1 + e2 }
-| e1 = expr MINUS e2 = expr
-    { e1 - e2 }
-| e1 = expr TIMES e2 = expr
-    { e1 * e2 }
-| e1 = expr DIV e2 = expr
-    { e1 / e2 }
-| MINUS e = expr %prec UMINUS
-    { - e }
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-param/tokens.mly b/bundles/menhirLib/menhir-20120123/demos/calc-param/tokens.mly
deleted file mode 100644 (file)
index f0fe857..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/**************************************************************************/
-/*                                                                        */
-/*  Menhir                                                                */
-/*                                                                        */
-/*  François Pottier, INRIA Rocquencourt                                  */
-/*  Yann Régis-Gianas, PPS, Université Paris Diderot                      */
-/*                                                                        */
-/*  Copyright 2005-2008 Institut National de Recherche en Informatique    */
-/*  et en Automatique. All rights reserved. This file is distributed      */
-/*  under the terms of the Q Public License version 1.0, with the change  */
-/*  described in file LICENSE.                                            */
-/*                                                                        */
-/**************************************************************************/
-
-(* We want the tokens to be independent of the [Semantics] parameter,
-   so we declare them here, in a separate file, as opposed to within
-   [parser.mly]. *)
-
-%token <int> INT
-%token PLUS MINUS TIMES DIV
-%token LPAREN RPAREN
-%token EOL
-
-%left PLUS MINUS        /* lowest precedence */
-%left TIMES DIV         /* medium precedence */
-%nonassoc UMINUS        /* highest precedence */
-
-%%
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-two/Makefile b/bundles/menhirLib/menhir-20120123/demos/calc-two/Makefile
deleted file mode 100644 (file)
index 29a6d52..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Add --table on the next line to use Menhir's table-based back-end.
-PGFLAGS         := --infer
-GENERATED       := tokens.ml tokens.mli algebraic.ml algebraic.mli reverse.ml reverse.mli lexer.ml
-MODULES         := algebraic reverse lexer calc
-EXECUTABLE      := calc
-OCAMLDEPWRAPPER := ../ocamldep.wrapper
-include ../Makefile.shared
-$(eval $(call menhir_monomodule,tokens,--only-tokens))
-$(eval $(call menhir_multimodule,algebraic,tokens.mly algebraic.mly common.mly,--external-tokens Tokens))
-$(eval $(call menhir_multimodule,reverse,tokens.mly reverse.mly common.mly,--external-tokens Tokens))
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-two/OMakefile b/bundles/menhirLib/menhir-20120123/demos/calc-two/OMakefile
deleted file mode 100644 (file)
index 0cb1482..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-GENERATED       = tokens.ml tokens.mli algebraic.ml algebraic.mli reverse.ml reverse.mli lexer.ml
-MODULES         = algebraic reverse lexer calc
-EXECUTABLE      = calc
-OCAMLDEPWRAPPER = ../ocamldep.wrapper
-include ../OMakefile.shared
-MenhirMono(tokens,--only-tokens)
-MenhirMulti(algebraic,tokens.mly algebraic.mly,--external-tokens Tokens)
-MenhirMulti(reverse,tokens.mly reverse.mly,--external-tokens Tokens)
-.DEFAULT: $(EXECUTABLE)$(OSUFFIX)
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-two/OMakeroot b/bundles/menhirLib/menhir-20120123/demos/calc-two/OMakeroot
deleted file mode 100644 (file)
index 4a4e99c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Load the standard configuration.
-#
-open build/Common
-
-#
-# The command-line variables are defined *after* the
-# standard configuration has been loaded.
-#
-DefineCommandVars()
-
-#
-# Include the OMakefile in this directory.
-#
-.SUBDIRS: .
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-two/README b/bundles/menhirLib/menhir-20120123/demos/calc-two/README
deleted file mode 100644 (file)
index 322e6a1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-This tiny program reads arithmetic expressions from the standard input
-channel. Each expression is expected to be complete when the current line
-ends. Its value is then displayed on the standard output channel.
-
-In this version, there is a single lexer, but there are two parsers, one for
-expressions in algebraic (that is, infix) notation, one for expressions in
-reverse Polish (that is, postfix) notation. One of the two parsers is selected
-at runtime via a command line switch.
-
-This demo illustrates how to build two parsers that share a single set of
-tokens (see tokens.mly) and that share some productions (see common.mly).
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-two/algebraic.mly b/bundles/menhirLib/menhir-20120123/demos/calc-two/algebraic.mly
deleted file mode 100644 (file)
index 2493845..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/**************************************************************************/
-/*                                                                        */
-/*  Menhir                                                                */
-/*                                                                        */
-/*  François Pottier, INRIA Rocquencourt                                  */
-/*  Yann Régis-Gianas, PPS, Université Paris Diderot                      */
-/*                                                                        */
-/*  Copyright 2005-2008 Institut National de Recherche en Informatique    */
-/*  et en Automatique. All rights reserved. This file is distributed      */
-/*  under the terms of the Q Public License version 1.0, with the change  */
-/*  described in file LICENSE.                                            */
-/*                                                                        */
-/**************************************************************************/
-
-(* This partial grammar specification defines the syntax of expressions
-   in algebraic notation. *)
-
-%left PLUS MINUS        /* lowest precedence */
-%left TIMES DIV         /* medium precedence */
-%nonassoc UMINUS        /* highest precedence */
-
-%%
-
-%public expr:
-| i = INT
-    { i }
-| LPAREN e = expr RPAREN
-    { e }
-| e1 = expr PLUS e2 = expr
-    { e1 + e2 }
-| e1 = expr MINUS e2 = expr
-    { e1 - e2 }
-| e1 = expr TIMES e2 = expr
-    { e1 * e2 }
-| e1 = expr DIV e2 = expr
-    { e1 / e2 }
-| MINUS e = expr %prec UMINUS
-    { - e }
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-two/calc.ml b/bundles/menhirLib/menhir-20120123/demos/calc-two/calc.ml
deleted file mode 100644 (file)
index 5ff7ed4..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-let algebraic =
-  ref true
-
-let () =
-  Arg.parse [
-    "--algebraic", Arg.Set algebraic, " Use algebraic (that is, infix) notation";
-    "--reverse", Arg.Clear algebraic, " Use reverse Polish (that is, postfix) notation";
-  ] (fun _ -> ()) (Printf.sprintf "Usage: %s <options>" Sys.argv.(0))
-
-let main =
-  if !algebraic then
-    Algebraic.main
-  else
-    Reverse.main
-
-let () =
-  let stdinbuf = Lexing.from_channel stdin in
-  while true do
-    (* Read line by line. *)
-    let linebuf = Lexing.from_string (Lexer.line stdinbuf) in
-    try
-      (* Run the parser on a single line of input. *)
-      Printf.printf "%d\n%!" (main Lexer.token linebuf)
-    with
-    | Lexer.Error msg ->
-       Printf.fprintf stderr "%s%!" msg
-    | Algebraic.Error
-    | Reverse.Error ->
-       Printf.fprintf stderr "At offset %d: syntax error.\n%!" (Lexing.lexeme_start linebuf)
-  done
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-two/common.mly b/bundles/menhirLib/menhir-20120123/demos/calc-two/common.mly
deleted file mode 100644 (file)
index 057ff02..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/**************************************************************************/
-/*                                                                        */
-/*  Menhir                                                                */
-/*                                                                        */
-/*  François Pottier, INRIA Rocquencourt                                  */
-/*  Yann Régis-Gianas, PPS, Université Paris Diderot                      */
-/*                                                                        */
-/*  Copyright 2005-2008 Institut National de Recherche en Informatique    */
-/*  et en Automatique. All rights reserved. This file is distributed      */
-/*  under the terms of the Q Public License version 1.0, with the change  */
-/*  described in file LICENSE.                                            */
-/*                                                                        */
-/**************************************************************************/
-
-(* This partial grammar specification defines the grammar's entry
-   point to be an expression, followed with an end-of-line token. *)
-
-%start <int> main
-
-%%
-
-main:
-| e = expr EOL
-    { e }
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-two/lexer.mll b/bundles/menhirLib/menhir-20120123/demos/calc-two/lexer.mll
deleted file mode 100644 (file)
index d52f36e..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-{
-  open Tokens
-
-  exception Error of string
-
-}
-
-rule line = parse
-| ([^'\n']* '\n') as line
-    { line }
-| eof
-    { exit 0 }
-
-and token = parse
-| [' ' '\t']
-    { token lexbuf }
-| '\n'
-    { EOL }
-| ['0'-'9']+ as i
-    { INT (int_of_string i) }
-| '+'
-    { PLUS }
-| '-'
-    { MINUS }
-| '*'
-    { TIMES }
-| '/'
-    { DIV }
-| '('
-    { LPAREN }
-| ')'
-    { RPAREN }
-| eof
-    { exit 0 }
-| _
-    { raise (Error (Printf.sprintf "At offset %d: unexpected character.\n" (Lexing.lexeme_start lexbuf))) }
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-two/reverse.mly b/bundles/menhirLib/menhir-20120123/demos/calc-two/reverse.mly
deleted file mode 100644 (file)
index f504423..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/**************************************************************************/
-/*                                                                        */
-/*  Menhir                                                                */
-/*                                                                        */
-/*  François Pottier, INRIA Rocquencourt                                  */
-/*  Yann Régis-Gianas, PPS, Université Paris Diderot                      */
-/*                                                                        */
-/*  Copyright 2005-2008 Institut National de Recherche en Informatique    */
-/*  et en Automatique. All rights reserved. This file is distributed      */
-/*  under the terms of the Q Public License version 1.0, with the change  */
-/*  described in file LICENSE.                                            */
-/*                                                                        */
-/**************************************************************************/
-
-(* This partial grammar specification defines the syntax of
-   expressions in reverse Polish notation. Parentheses are
-   meaningless, and unary minus is not supported (some other symbol
-   than MINUS would be required in order to avoid an ambiguity). *)
-
-%%
-
-%public expr:
-| i = INT
-    { i }
-| e1 = expr e2 = expr PLUS
-    { e1 + e2 }
-| e1 = expr e2 = expr MINUS
-    { e1 - e2 }
-| e1 = expr e2 = expr TIMES
-    { e1 * e2 }
-| e1 = expr e2 = expr DIV
-    { e1 / e2 }
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc-two/tokens.mly b/bundles/menhirLib/menhir-20120123/demos/calc-two/tokens.mly
deleted file mode 100644 (file)
index 6062ccb..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/**************************************************************************/
-/*                                                                        */
-/*  Menhir                                                                */
-/*                                                                        */
-/*  François Pottier, INRIA Rocquencourt                                  */
-/*  Yann Régis-Gianas, PPS, Université Paris Diderot                      */
-/*                                                                        */
-/*  Copyright 2005-2008 Institut National de Recherche en Informatique    */
-/*  et en Automatique. All rights reserved. This file is distributed      */
-/*  under the terms of the Q Public License version 1.0, with the change  */
-/*  described in file LICENSE.                                            */
-/*                                                                        */
-/**************************************************************************/
-
-(* This partial grammar specification defines the set of tokens. *)
-
-%token <int> INT
-%token PLUS MINUS TIMES DIV
-%token LPAREN RPAREN
-%token EOL
-
-%%
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc/.omakedb b/bundles/menhirLib/menhir-20120123/demos/calc/.omakedb
deleted file mode 100644 (file)
index 7cec567..0000000
Binary files a/bundles/menhirLib/menhir-20120123/demos/calc/.omakedb and /dev/null differ
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc/.omakedb.lock b/bundles/menhirLib/menhir-20120123/demos/calc/.omakedb.lock
deleted file mode 100644 (file)
index 0096f04..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*** omake: the project was last locked by madiran:5845.
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc/Makefile b/bundles/menhirLib/menhir-20120123/demos/calc/Makefile
deleted file mode 100644 (file)
index f411226..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Add --table on the next line to use Menhir's table-based back-end.
-PGFLAGS         := --infer
-GENERATED       := parser.ml parser.mli lexer.ml
-MODULES         := parser lexer calc
-EXECUTABLE      := calc
-OCAMLDEPWRAPPER := ../ocamldep.wrapper
-include ../Makefile.shared
-include ../Makefile.auto
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc/OMakefile b/bundles/menhirLib/menhir-20120123/demos/calc/OMakefile
deleted file mode 100644 (file)
index 3a54e55..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-GENERATED       = parser.ml parser.mli lexer.ml
-MODULES         = parser lexer calc
-EXECUTABLE      = calc
-OCAMLDEPWRAPPER = ../ocamldep.wrapper
-include ../OMakefile.shared
-MenhirAuto()
-.DEFAULT: $(EXECUTABLE)$(OSUFFIX)
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc/OMakefile.omc b/bundles/menhirLib/menhir-20120123/demos/calc/OMakefile.omc
deleted file mode 100644 (file)
index 1c98984..0000000
Binary files a/bundles/menhirLib/menhir-20120123/demos/calc/OMakefile.omc and /dev/null differ
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc/OMakeroot b/bundles/menhirLib/menhir-20120123/demos/calc/OMakeroot
deleted file mode 100644 (file)
index 4a4e99c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Load the standard configuration.
-#
-open build/Common
-
-#
-# The command-line variables are defined *after* the
-# standard configuration has been loaded.
-#
-DefineCommandVars()
-
-#
-# Include the OMakefile in this directory.
-#
-.SUBDIRS: .
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc/OMakeroot.omc b/bundles/menhirLib/menhir-20120123/demos/calc/OMakeroot.omc
deleted file mode 100644 (file)
index 2c6b3c9..0000000
Binary files a/bundles/menhirLib/menhir-20120123/demos/calc/OMakeroot.omc and /dev/null differ
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc/README b/bundles/menhirLib/menhir-20120123/demos/calc/README
deleted file mode 100644 (file)
index 6c61d9c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-This tiny program reads arithmetic expressions from the standard input
-channel. Each expression is expected to be complete when the current line
-ends. Its value is then displayed on the standard output channel. This
-code is adapted from ocamlyacc's documentation.
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc/calc.ml b/bundles/menhirLib/menhir-20120123/demos/calc/calc.ml
deleted file mode 100644 (file)
index cc54679..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-let () =
-  let stdinbuf = Lexing.from_channel stdin in
-  while true do
-    (* Read line by line. *)
-    let linebuf = Lexing.from_string (Lexer.line stdinbuf) in
-    try
-      (* Run the parser on a single line of input. *)
-      Printf.printf "%d\n%!" (Parser.main Lexer.token linebuf)
-    with
-    | Lexer.Error msg ->
-       Printf.fprintf stderr "%s%!" msg
-    | Parser.Error ->
-       Printf.fprintf stderr "At offset %d: syntax error.\n%!" (Lexing.lexeme_start linebuf)
-  done
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc/lexer.mll b/bundles/menhirLib/menhir-20120123/demos/calc/lexer.mll
deleted file mode 100644 (file)
index 686391e..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-{
-  open Parser
-
-  exception Error of string
-
-}
-
-rule line = parse
-| ([^'\n']* '\n') as line
-    { line }
-| eof
-    { exit 0 }
-
-and token = parse
-| [' ' '\t']
-    { token lexbuf }
-| '\n'
-    { EOL }
-| ['0'-'9']+ as i
-    { INT (int_of_string i) }
-| '+'
-    { PLUS }
-| '-'
-    { MINUS }
-| '*'
-    { TIMES }
-| '/'
-    { DIV }
-| '('
-    { LPAREN }
-| ')'
-    { RPAREN }
-| eof
-    { exit 0 }
-| _
-    { raise (Error (Printf.sprintf "At offset %d: unexpected character.\n" (Lexing.lexeme_start lexbuf))) }
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/calc/parser.mly b/bundles/menhirLib/menhir-20120123/demos/calc/parser.mly
deleted file mode 100644 (file)
index fc26563..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/**************************************************************************/
-/*                                                                        */
-/*  Menhir                                                                */
-/*                                                                        */
-/*  François Pottier, INRIA Rocquencourt                                  */
-/*  Yann Régis-Gianas, PPS, Université Paris Diderot                      */
-/*                                                                        */
-/*  Copyright 2005-2008 Institut National de Recherche en Informatique    */
-/*  et en Automatique. All rights reserved. This file is distributed      */
-/*  under the terms of the Q Public License version 1.0, with the change  */
-/*  described in file LICENSE.                                            */
-/*                                                                        */
-/**************************************************************************/
-
-%token <int> INT
-%token PLUS MINUS TIMES DIV
-%token LPAREN RPAREN
-%token EOL
-
-%left PLUS MINUS        /* lowest precedence */
-%left TIMES DIV         /* medium precedence */
-%nonassoc UMINUS        /* highest precedence */
-
-%start <int> main
-
-%%
-
-main:
-| e = expr EOL
-    { e }
-
-expr:
-| i = INT
-    { i }
-| LPAREN e = expr RPAREN
-    { e }
-| e1 = expr PLUS e2 = expr
-    { e1 + e2 }
-| e1 = expr MINUS e2 = expr
-    { e1 - e2 }
-| e1 = expr TIMES e2 = expr
-    { e1 * e2 }
-| e1 = expr DIV e2 = expr
-    { e1 / e2 }
-| MINUS e = expr %prec UMINUS
-    { - e }
-
diff --git a/bundles/menhirLib/menhir-20120123/demos/ocamldep.wrapper b/bundles/menhirLib/menhir-20120123/demos/ocamldep.wrapper
deleted file mode 100755 (executable)
index 6131e07..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/env ocaml
-
-(* ocamldep.wrapper <filename> ... <filename> - <ocamldep command>
-   runs the <ocamldep command> in an environment where all of the
-   <filenames> listed appear to exist. The files are created, if
-   required, before the command is run, and destroyed afterwards. *)
-
-(* An earlier version of this script acquired a lock, so as to prevent
-   multiple instances of this script from interfering with one another.
-   However, this did not prevent interference between this script and
-   some other process (e.g., the ocaml compiler) which creates files.
-   So, the lock has been removed. My suggestion is to never use this
-   script in a concurrent setting. If you wish to use parallel make,
-   then you might be able to use a two-level Makefile approach: first,
-   compute all dependencies in a sequential manner; then, construct all
-   targets in a parallel manner. *)
-
-#load "unix.cma"
-open Printf
-
-(* Parse the command line. The arguments that precede "-" are understood
-   as file names and stored in the list [xs]. The arguments that follow
-   "-" are understood as a command and stored in [command]. *)
-
-let xs =
-  ref []
-
-let command =
-  ref ""
-
-let verbose =
-  ref false
-
-let rec loop accumulating i =
-  if i = Array.length Sys.argv then
-    ()
-  else if accumulating then
-    (* [accumulating] is [true] as long as we have not found the "-" marker *)
-    match Sys.argv.(i) with
-    | "-v" ->
-       verbose := true;
-       loop true (i+1)
-    | "-" ->
-        (* We have found the marker. The next parameter should be the name of
-          the raw [ocamldep] command. Copy it to the command (unquoted --
-          apparently some shells do not permit quoting a command name). *)
-       let i = i + 1 in
-       assert (i < Array.length Sys.argv);
-       command := Sys.argv.(i);
-       (* Stop accumulating file names. Copy the remaining arguments into
-          the command. *)
-       loop false (i+1)
-    | _ ->
-        (* Continue accumulating file names in [xs]. *)
-       xs := Sys.argv.(i) :: !xs;
-       loop true (i+1)
-  else begin
-    (* After we have found the "-" marker, the remaining arguments are
-       copied (quoted) into the command. *)
-    command := sprintf "%s %s" !command (Filename.quote Sys.argv.(i));
-    loop false (i+1)
-  end
-
-let () =
-  loop true 1
-
-(* Create the required files if they don't exist, run the command,
-   then destroy any files that we have created. *)
-
-let rec loop = function
-  | [] ->
-      if !verbose then
-       fprintf stderr "ocamldep.wrapper: running %s\n" !command;
-      Sys.command !command
-  | x :: xs ->
-      if Sys.file_exists x then
-       loop xs
-      else begin
-       if !verbose then
-         fprintf stderr "ocamldep.wrapper: creating fake %s\n" x;
-       let c = open_out x in
-       close_out c;
-       let exitcode = loop xs in
-       if Sys.file_exists x then begin
-         try
-           if !verbose then
-             fprintf stderr "ocamldep.wrapper: removing fake %s..." x;
-           Sys.remove x;
-           if !verbose then
-             fprintf stderr " ok\n"
-         with Sys_error _ ->
-           if !verbose then
-             fprintf stderr " failed\n"
-       end;
-       exitcode
-      end
-
-let () =
-  exit (loop !xs)
diff --git a/bundles/menhirLib/menhir-20120123/manual.pdf b/bundles/menhirLib/menhir-20120123/manual.pdf
deleted file mode 100644 (file)
index 8e4d10e..0000000
Binary files a/bundles/menhirLib/menhir-20120123/manual.pdf and /dev/null differ
diff --git a/bundles/menhirLib/menhir-20120123/menhir.1 b/bundles/menhirLib/menhir-20120123/menhir.1
deleted file mode 100644 (file)
index e241b91..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-.\"                                      Hey, EMACS: -*- nroff -*-
-.TH MENHIR 1 "April 19, 2006"
-.\" Please adjust this date whenever revising the manpage.
-.\"
-.\" Some roff macros, for reference:
-.\" .nh        disable hyphenation
-.\" .hy        enable hyphenation
-.\" .ad l      left justify
-.\" .ad b      justify to both left and right margins
-.\" .nf        disable filling
-.\" .fi        enable filling
-.\" .br        insert line break
-.\" .sp <n>    insert n+1 empty lines
-.\" for manpage-specific macros, see man(7)
-
-
-.SH NAME
-menhir \- parser generator for OCaml
-
-
-.SH SYNOPSIS
-.B menhir
-.RI [ options ] " files"
-.SH DESCRIPTION
-.B menhir
-is a LR(1) parser generator for the Objective Caml programming language. That is, Menhir compiles LR(1) grammar specifications down to Objective Caml code. It is mostly compatible with
-.BR ocamlyacc (1).
-
-
-.SH OPTIONS
-.TP
-.B \-h, \-\-help
-Show summary of options.
-.TP
-.BI \-b,\ \-\-base\  basename
-Specifies a base name for the output file(s).
-.TP
-.B \-\-comment
-Include comments in the generated code.
-.TP
-.B \-\-depend
-Invoke ocamldep and display dependencies.
-.TP
-.B \-\-dump
-Describe the automaton in
-.IR basename .automaton.
-.TP
-.B \-\-error\-recovery
-Attempt recovery by discarding tokens after errors.
-.TP
-.B \-\-explain
-Explain conflicts in
-.IR basename .conflicts.
-.TP
-.BI \-\-external\-tokens\  module
-Import token type definition from
-.IR module .
-.TP
-.B \-\-graph
-Write grammar's dependency graph to
-.IR basename .dot.
-.TP
-.B \-\-infer
-Invoke ocamlc for ahead of time type inference.
-.TP
-.B \-\-interpret
-Interpret the sentences provided on stdin.
-.TP
-.B \-\-interpret\-show\-cst
-Show a concrete syntax tree upon acceptance.
-.TP
-.BI \-la,\ \-\-log\-automaton\  level
-Log information about the automaton.
-.TP
-.BI \-lc,\ \-\-log\-code\  level
-Log information about the generated code.
-.TP
-.BI \-lg,\ \-\-log\-grammar\  level
-Log information about the grammar.
-.TP
-.B \-\-no\-inline
-Ignore the %inline keyword.
-.TP
-.B \-\-no\-stdlib
-Do not load the standard library.
-.TP
-.BI \-\-ocamlc\  command
-Specifies how ocamlc should be invoked.
-.TP
-.BI \-\-ocamldep\  command
-Specifies how ocamldep should be invoked.
-.TP
-.B \-\-only\-preprocess
-Print a simplified grammar and exit.
-.TP
-.B \-\-only\-tokens
-Generate token type definition only, no code.
-.TP
-.B \-\-raw\-depend
-Invoke ocamldep and echo its raw output.
-.TP
-.BI \-\-stdlib\  directory
-Specify where the standard library lies.
-.TP
-.B \-\-suggest\-comp\-flags
-Suggest compilation flags for ocaml{c,opt}.
-.TP
-.B \-\-suggest\-link\-flags-byte
-Suggest link flags for ocamlc.
-.TP
-.B \-\-suggest\-link\-flags-opt
-Suggest link flags for ocamlopt.
-.TP
-.B \-t, \-\-table
-Use the table-based back-end.
-.TP
-.B \-\-timings
-Display internal timings.
-.TP
-.B \-\-trace
-Include tracing instructions in the generated code.
-.TP
-.B \-\-version
-Show version number and exit.
-.TP
-.B \-v
-Synonymous with
-.BR \-\-dump\ \-\-explain .
-
-
-.SH SEE ALSO
-.BR ocaml (1).
-
-
-.SH AUTHOR
-.B menhir
-was written by François Pottier and Yann Régis-Gianas.
-.PP
-This manual page was written by Samuel Mimram <smimram@debian.org>,
-for the Debian project (but may be used by others).
diff --git a/bundles/menhirLib/menhir-20120123/src/Fix.ml b/bundles/menhirLib/menhir-20120123/src/Fix.ml
deleted file mode 100644 (file)
index 7de3c54..0000000
+++ /dev/null
@@ -1,530 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* -------------------------------------------------------------------------- *)
-
-(* Maps. *)
-
-(* We require imperative maps, that is, maps that can be updated in place.
-   An implementation of persistent maps, such as the one offered by ocaml's
-   standard library, can easily be turned into an implementation of imperative
-   maps, so this is a weak requirement. *)
-
-module type IMPERATIVE_MAPS = sig
-  type key
-  type 'data t
-  val create: unit -> 'data t
-  val clear: 'data t -> unit
-  val add: key -> 'data -> 'data t -> unit
-  val find: key -> 'data t -> 'data
-  val iter: (key -> 'data -> unit) -> 'data t -> unit
-end
-
-(* -------------------------------------------------------------------------- *)
-
-(* Properties. *)
-
-(* Properties must form a partial order, equipped with a least element, and
-   must satisfy the ascending chain condition: every monotone sequence
-   eventually stabilizes. *)
-
-(* [is_maximal] determines whether a property [p] is maximal with respect to
-   the partial order. Only a conservative check is required: in any event, it
-   is permitted for [is_maximal p] to return [false]. If [is_maximal p]
-   returns [true], then [p] must have no upper bound other than itself. In
-   particular, if properties form a lattice, then [p] must be the top
-   element. This feature, not described in the paper, enables a couple of
-   minor optimizations. *)
-
-module type PROPERTY = sig
-  type property
-  val bottom: property
-  val equal: property -> property -> bool
-  val is_maximal: property -> bool
-end
-
-(* -------------------------------------------------------------------------- *)
-
-(* The dynamic dependency graph. *)
-
-(* An edge from [node1] to [node2] means that [node1] depends on [node2], or
-   (equivalently) that [node1] observes [node2]. Then, an update of the
-   current property at [node2] causes a signal to be sent to [node1]. A node
-   can observe itself. *)
-
-(* This module could be placed in a separate file, but is included here in
-   order to make [Fix] self-contained. *)
-
-module Graph : sig
-
-  (* This module provides a data structure for maintaining and modifying
-     a directed graph. Each node is allowed to carry a piece of client
-     data. There are functions for creating a new node, looking up a
-     node's data, looking up a node's predecessors, and setting or
-     clearing a node's successors (all at once). *)
-  type 'data node
-
-  (* [create data] creates a new node, with no incident edges, with
-     client information [data]. Time complexity: constant. *)
-  val create: 'data -> 'data node
-
-  (* [data node] returns the client information associated with
-     the node [node]. Time complexity: constant. *)
-  val data: 'data node -> 'data
-
-  (* [predecessors node] returns a list of [node]'s predecessors.
-     Amortized time complexity: linear in the length of the output
-     list. *)
-  val predecessors: 'data node -> 'data node list
-
-  (* [set_successors src dsts] creates an edge from the node [src] to
-     each of the nodes in the list [dsts]. Duplicate elements in the
-     list [dsts] are removed, so that no duplicate edges are created. It
-     is assumed that [src] initially has no successors. Time complexity:
-     linear in the length of the input list. *)
-  val set_successors: 'data node -> 'data node list -> unit
-
-  (* [clear_successors node] removes all of [node]'s outgoing edges.
-     Time complexity: linear in the number of edges that are removed. *)
-  val clear_successors: 'data node -> unit
-
-  (* That's it. *)
-end
-= struct
-
-  (* Using doubly-linked adjacency lists, one could implement [predecessors]
-     in worst-case linear time with respect to the length of the output list,
-     [set_successors] in worst-case linear time with respect to the length of
-     the input list, and [clear_successors] in worst-case linear time with
-     respect to the number of edges that are removed. We use a simpler
-     implementation, based on singly-linked adjacency lists, with deferred
-     removal of edges. It achieves the same complexity bounds, except
-     [predecessors] only offers an amortized complexity bound. This is good
-     enough for our purposes, and, in practice, is more efficient by a
-     constant factor. This simplification was suggested by Arthur
-     Charguéraud. *)
-
-  type 'data node = {
-
-    (* The client information associated with this node. *)
-
-    data: 'data;
-
-    (* This node's incoming and outgoing edges. *)
-
-    mutable outgoing: 'data edge list;
-    mutable incoming: 'data edge list;
-
-    (* A transient mark, always set to [false], except when checking
-       against duplicate elements in a successor list. *)
-
-    mutable marked: bool;
-
-  }
-
-  and 'data edge = {
-
-    (* This edge's nodes. Edges are symmetric: source and destination
-       are not distinguished. Thus, an edge appears both in the outgoing
-       edge list of its source node and in the incoming edge list of its
-       destination node. This allows edges to be easily marked as
-       destroyed. *)
-
-    node1: 'data node;
-    node2: 'data node;
-
-    (* Edges that are destroyed are marked as such, but are not
-       immediately removed from the adjacency lists. *)
-
-    mutable destroyed: bool;
-
-  }
-
-  let create (data : 'data) : 'data node = {
-    data = data;
-    outgoing = [];
-    incoming = [];
-    marked = false;
-  }
-
-  let data (node : 'data node) : 'data =
-    node.data
-
-  (* [follow src edge] returns the node that is connected to [src]
-     by [edge]. Time complexity: constant. *)
-
-  let follow src edge =
-    if edge.node1 == src then
-      edge.node2
-    else begin
-      assert (edge.node2 == src);
-      edge.node1
-    end
-
-  (* The [predecessors] function removes edges that have been marked
-     destroyed. The cost of removing these has already been paid for,
-     so the amortized time complexity of [predecessors] is linear in
-     the length of the output list. *)
-
-  let predecessors (node : 'data node) : 'data node list =
-    let predecessors = List.filter (fun edge -> not edge.destroyed) node.incoming in
-    node.incoming <- predecessors;
-    List.map (follow node) predecessors
-
-  (* [link src dst] creates a new edge from [src] to [dst], together
-     with its reverse edge. Time complexity: constant. *)
-
-  let link (src : 'data node) (dst : 'data node) : unit =
-    let edge = {
-      node1 = src;
-      node2 = dst;
-      destroyed = false;
-    } in
-    src.outgoing <- edge :: src.outgoing;
-    dst.incoming <- edge :: dst.incoming
-
-  let set_successors (src : 'data node) (dsts : 'data node list) : unit =
-    assert (src.outgoing = []);
-    let rec loop = function
-      | [] ->
-         ()
-      | dst :: dsts ->
-         if dst.marked then
-           loop dsts (* skip duplicate elements *)
-         else begin
-           dst.marked <- true;
-           link src dst;
-           loop dsts;
-           dst.marked <- false
-         end
-    in
-    loop dsts
-
-  let clear_successors (node : 'data node) : unit =
-    List.iter (fun edge ->
-      assert (not edge.destroyed);
-      edge.destroyed <- true;
-    ) node.outgoing;
-    node.outgoing <- []
-
-end
-
-(* -------------------------------------------------------------------------- *)
-
-(* The code is parametric in an implementation of maps over variables and in
-   an implementation of properties. *)
-
-module Make
-  (M : IMPERATIVE_MAPS)
-  (P : PROPERTY)
-= struct
-
-type variable =
-    M.key
-
-type property =
-    P.property
-
-type valuation =
-    variable -> property
-
-type rhs =
-    valuation -> property
-
-type equations =
-    variable -> rhs
-
-(* -------------------------------------------------------------------------- *)
-
-(* Data. *)
-
-(* Each node in the dependency graph carries information about a fixed
-   variable [v]. *)
-
-type node =
-    data Graph.node
-
-and data = {
-
-  (* This is the result of the application of [rhs] to the variable [v]. It
-     must be stored in order to guarantee that this application is performed
-     at most once. *)
-  rhs: rhs;
-
-  (* This is the current property at [v]. It evolves monotonically with
-     time. *)
-  mutable property: property;
-
-  (* That's it! *)
-}
-
-(* [property node] returns the current property at [node]. *)
-
-let property node =
-  (Graph.data node).property
-
-(* -------------------------------------------------------------------------- *)
-
-(* Many definitions must be made within the body of the function [lfp].
-   For greater syntactic convenience, we place them in a local module. *)
-
-let lfp (eqs : equations) : valuation =
-  let module LFP = struct
-
-(* -------------------------------------------------------------------------- *)
-
-(* The workset. *)
-
-(* When the algorithm is inactive, the workset is empty. *)
-
-(* Our workset is based on a Queue, but it could just as well be based on a
-   Stack. A textual replacement is possible. It could also be based on a
-   priority queue, provided a sensible way of assigning priorities could
-   be found. *)
-
-module Workset : sig
-
-  (* [insert node] inserts [node] into the workset. [node] must have no
-     successors. *)
-  val insert: node -> unit  
-
-  (* [repeat f] repeatedly applies [f] to a node extracted out of the
-     workset, until the workset becomes empty. [f] is allowed to use
-     [insert]. *)
-  val repeat: (node -> unit) -> unit
-
-  (* That's it! *)
-end 
-= struct
-
-  (* Initialize the workset. *)
-
-  let workset =
-    Queue.create()
-
-  let insert node =
-    Queue.push node workset
-
-  let repeat f =
-    while not (Queue.is_empty workset) do
-      f (Queue.pop workset)
-    done
-
-end
-
-(* -------------------------------------------------------------------------- *)
-
-(* Signals. *)
-
-(* A node in the workset has no successors. (It can have predecessors.)  In
-   other words, a predecessor (an observer) of some node is never in the
-   workset. Furthermore, a node never appears twice in the workset. *)
-
-(* When a variable broadcasts a signal, all of its predecessors (observers)
-   receive the signal. Any variable that receives the signal loses all of its
-   successors (that is, it ceases to observe anything) and is inserted into
-   the workset. This preserves the above invariant. *)
-
-let signal subject =
-  List.iter (fun observer ->
-    Graph.clear_successors observer;
-    Workset.insert observer
-  ) (Graph.predecessors subject)
-  (* At this point, [subject] has no predecessors. This plays no role in
-     the correctness proof, though. *)
-
-(* -------------------------------------------------------------------------- *)
-
-(* Tables. *)
-
-(* The permanent table maps variables that have reached a fixed point
-   to properties. It persists forever. *)
-
-let permanent : property M.t =
-  M.create()
-
-(* The transient table maps variables that have not yet reached a
-   fixed point to nodes. (A node contains not only a property, but
-   also a memoized right-hand side, and carries edges.) At the
-   beginning of a run, it is empty. It fills up during a run. At the
-   end of a run, it is copied into the permanent table and cleared. *)
-
-let transient : node M.t =
-  M.create()
-
-(* [freeze()] copies the transient table into the permanent table, and
-   empties the transient table. This allows all nodes to be reclaimed
-   by the garbage collector. *)
-
-let freeze () =
-  M.iter (fun v node ->
-    M.add v (property node) permanent
-  ) transient;
-  M.clear transient
-
-(* -------------------------------------------------------------------------- *)
-
-(* Workset processing. *)
-
-
-(* [solve node] re-evaluates the right-hand side at [node]. If this leads to
-   a change, then the current property is updated, and [node] emits a signal
-   towards its observers. *)
-
-(* When [solve node] is invoked, [node] has no subjects. Indeed, when [solve]
-   is invoked by [node_for], [node] is newly created; when [solve] is invoked by
-   [Workset.repeat], [node] has just been extracted out of the workset, and a
-   node in the workset has no subjects. *)
-
-(* [node] must not be in the workset. *)
-
-(* In short, when [solve node] is invoked, [node] is neither awake nor asleep.
-   When [solve node] finishes, [node] is either awake or asleep again. (Chances
-   are, it is asleep, unless it is its own observer; then, it is awakened by the
-   final call to [signal node].) *)
-
-let rec solve (node : node) : unit =
-
-  (* Retrieve the data record carried by this node. *)
-  let data = Graph.data node in
-
-  (* Prepare to compute an updated value at this node. This is done by
-     invoking the client's right-hand side function.  *)
-
-  (* The flag [alive] is used to prevent the client from invoking [request]
-     after this interaction phase is over. In theory, this dynamic check seems
-     required in order to argue that [request] behaves like a pure function.
-     In practice, this check is not very useful: only a bizarre client would
-     store a [request] function and invoke it after it has become stale. *)
-  let alive = ref true
-  and subjects = ref [] in
-
-  (* We supply the client with [request], a function that provides access to
-     the current valuation, and dynamically records dependencies. This yields
-     a set of dependencies that is correct by construction. *)
-  let request (v : variable) : property =
-    assert !alive;
-    try
-      M.find v permanent
-    with Not_found ->
-      let subject = node_for v in
-      let p = property subject in
-      if not (P.is_maximal p) then
-        subjects := subject :: !subjects;
-      p
-  in
-
-  (* Give control to the client. *)
-  let new_property = data.rhs request in
-
-  (* From now on, prevent any invocation of this instance of [request]
-     the client. *)
-  alive := false;
-
-  (* At this point, [node] has no subjects, as noted above. Thus, the
-     precondition of [set_successors] is met. We can install [data.subjects]
-     as the new set of subjects for this node. *)
-
-  (* If we have gathered no subjects in the list [data.subjects], then
-     this node must have stabilized. If [new_property] is maximal,
-     then this node must have stabilized. *)
-
-  (* If this node has stabilized, then it need not observe any more, so the
-     call to [set_successors] is skipped. In practice, this seems to be a
-     minor optimization. In the particular case where every node stabilizes at
-     the very first call to [rhs], this means that no edges are ever
-     built. This particular case is unlikely, as it means that we are just
-     doing memoization, not a true fixed point computation. *)
-
-  (* One could go further and note that, if this node has stabilized, then it
-     could immediately be taken out of the transient table and copied into the
-     permanent table. This would have the beneficial effect of allowing the
-     detection of further nodes that have stabilized. Furthermore, it would
-     enforce the property that no node in the transient table has a maximal
-     value, hence the call to [is_maximal] above would become useless. *)
-
-  if not (!subjects = [] || P.is_maximal new_property) then
-    Graph.set_successors node !subjects;
-
-  (* If the updated value differs from the previous value, record
-     the updated value and send a signal to all observers of [node]. *)
-  if not (P.equal data.property new_property) then begin
-    data.property <- new_property;
-    signal node
-  end
-  (* Note that equality of the two values does not imply that this node has
-     stabilized forever. *)
-
-(* -------------------------------------------------------------------------- *)
-
-(* [node_for v] returns the graph node associated with the variable [v]. It is
-   assumed that [v] does not appear in the permanent table. If [v] appears in
-   the transient table, the associated node is returned. Otherwise, [v] is a
-   newly discovered variable: a new node is created on the fly, and the
-   transient table is grown. The new node can either be inserted into the
-   workset (it is then awake) or handled immediately via a recursive call to
-   [solve] (it is then asleep, unless it observes itself). *)
-
-(* The recursive call to [solve node] can be replaced, if desired, by a call
-   to [Workset.insert node]. Using a recursive call to [solve] permits eager
-   top-down discovery of new nodes. This can save a constant factor, because
-   it allows new nodes to move directly from [bottom] to a good first
-   approximation, without sending any signals, since [node] has no observers
-   when [solve node] is invoked. In fact, if the dependency graph is acyclic,
-   the algorithm discovers nodes top-down, performs computation on the way
-   back up, and runs without ever inserting a node into the workset!
-   Unfortunately, this causes the stack to grow as deep as the longest path in
-   the dependency graph, which can blow up the stack. *)
-
-and node_for (v : variable) : node =
-  try
-    M.find v transient
-  with Not_found ->
-    let node = Graph.create { rhs = eqs v; property = P.bottom } in
-    (* Adding this node to the transient table prior to calling [solve]
-       recursively is mandatory, otherwise [solve] might loop, creating
-       an infinite number of nodes for the same variable. *)
-    M.add v node transient;
-    solve node; (* or: Workset.insert node *)
-    node
-
-(* -------------------------------------------------------------------------- *)
-
-(* Invocations of [get] trigger the fixed point computation. *)
-
-(* The flag [inactive] prevents reentrant calls by the client. *)
-
-let inactive =
-  ref true
-
-let get (v : variable) : property =
-  try
-    M.find v permanent
-  with Not_found ->
-    assert !inactive;
-    inactive := false;
-    let node = node_for v in
-    Workset.repeat solve;
-    freeze();
-    inactive := true;
-    property node
-
-(* -------------------------------------------------------------------------- *)
-
-(* Close the local module [LFP]. *)
-
-end
-in LFP.get
-
-end
diff --git a/bundles/menhirLib/menhir-20120123/src/Fix.mli b/bundles/menhirLib/menhir-20120123/src/Fix.mli
deleted file mode 100644 (file)
index 60344ab..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This code is described in the paper ``Lazy Least Fixed Points in ML''. *)
-
-(* -------------------------------------------------------------------------- *)
-
-(* Maps. *)
-
-(* We require imperative maps, that is, maps that can be updated in place.
-   An implementation of persistent maps, such as the one offered by ocaml's
-   standard library, can easily be turned into an implementation of imperative
-   maps, so this is a weak requirement. *)
-
-module type IMPERATIVE_MAPS = sig
-  type key
-  type 'data t
-  val create: unit -> 'data t
-  val clear: 'data t -> unit
-  val add: key -> 'data -> 'data t -> unit
-  val find: key -> 'data t -> 'data
-  val iter: (key -> 'data -> unit) -> 'data t -> unit
-end
-
-(* -------------------------------------------------------------------------- *)
-
-(* Properties. *)
-
-(* Properties must form a partial order, equipped with a least element, and
-   must satisfy the ascending chain condition: every monotone sequence
-   eventually stabilizes. *)
-
-(* [is_maximal] determines whether a property [p] is maximal with respect to
-   the partial order. Only a conservative check is required: in any event, it
-   is permitted for [is_maximal p] to return [false]. If [is_maximal p]
-   returns [true], then [p] must have no upper bound other than itself. In
-   particular, if properties form a lattice, then [p] must be the top
-   element. This feature, not described in the paper, enables a couple of
-   minor optimizations. *)
-
-module type PROPERTY = sig
-  type property
-  val bottom: property
-  val equal: property -> property -> bool
-  val is_maximal: property -> bool
-end
-
-(* -------------------------------------------------------------------------- *)
-
-(* The code is parametric in an implementation of maps over variables and in
-   an implementation of properties. *)
-
-module Make
-  (M : IMPERATIVE_MAPS)
-  (P : PROPERTY)
-  : sig
-    type variable = M.key
-    type property = P.property
-
-    (* A valuation is a mapping of variables to properties. *)
-    type valuation = variable -> property
-
-    (* A right-hand side, when supplied with a valuation that gives
-       meaning to its free variables, evaluates to a property. More
-       precisely, a right-hand side is a monotone function of
-       valuations to properties. *)
-    type rhs = valuation -> property
-
-    (* A system of equations is a mapping of variables to right-hand
-       sides. *)
-    type equations = variable -> rhs
-
-    (* [lfp eqs] produces the least solution of the system of monotone
-       equations [eqs]. *)
-
-    (* It is guaranteed that, for each variable [v], the application [eqs v] is
-       performed at most once (whereas the right-hand side produced by this
-       application is, in general, evaluated multiple times). This guarantee can
-       be used to perform costly pre-computation, or memory allocation, when [eqs]
-       is applied to its first argument. *)
-
-    (* When [lfp] is applied to a system of equations [eqs], it performs no
-       actual computation. It produces a valuation, [get], which represents
-       the least solution of the system of equations. The actual fixed point
-       computation takes place, on demand, when [get] is applied. *)
-    val lfp: equations -> valuation
-  end
-  
\ No newline at end of file
diff --git a/bundles/menhirLib/menhir-20120123/src/IL.mli b/bundles/menhirLib/menhir-20120123/src/IL.mli
deleted file mode 100644 (file)
index 69dc2f0..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* Abstract syntax of the language used for code production. *)
-
-type program = {
-
-    (* The structure of programs is pretty ad hoc: the following components
-       must be printed in this order -- so there is no way for a module
-       definition to follow a recursive value definition, for instance.
-       This is tolerable for the time being, but may have to change in the
-       future. *)
-
-    (* Functor parameters. *)
-    paramdefs: Stretch.t list;
-
-    (* Raw Objective Caml prologue. *)
-    prologue: Stretch.t list;
-
-    (* Exception definitions. *)
-    excdefs: excdef list;
-    
-    (* Algebraic data type definitions (mutually recursive). *)
-    typedefs: typedef list;
-
-    (* Value definitions (not mutually recursive). *)
-    nonrecvaldefs: valdef list;
-
-    (* Module definitions. *)
-    moduledefs: moduledef list;
-
-    (* Function definitions (mutually recursive). *)
-    valdefs: valdef list;
-               
-    (* Raw Objective Caml postlogue. *)
-    postlogue: string list;
-
-  } 
-
-and interface = {
-
-    (* Functor parameters. *)
-    paramdecls: Stretch.t list;
-
-    (* Exception definitions. *)
-    excdecls: excdef list;
-    
-    (* Algebraic data type declarations (mutually recursive). *)
-    typedecls: typedef list;
-
-    (* Value declarations. *)
-    valdecls: (string * typescheme) list
-
-  } 
-
-and excdef = {
-
-    (* Name of the exception. *)
-    excname: string;
-
-    (* Optional equality. *)
-    exceq: string option;
-
-  }
-
-and typedef = {
-
-    (* Name of the algebraic data type. *)
-    typename: string;
-
-    (* Type parameters. This is a list of type variable names,
-       without the leading quote, which will be added by the
-       pretty-printer. *)
-    typeparams: string list;
-
-    (* Data constructors. *)
-    typerhs: typedefrhs;
-
-    (* Constraint. *)
-    typeconstraint: (typ * typ) option
-
-  } 
-
-and typedefrhs =
-  | TDefRecord of fielddef list
-  | TDefSum of datadef list
-  | TAbbrev of typ
-
-and fielddef = {
-
-    (* Whether the field is mutable. *)
-    modifiable: bool;
-
-    (* Name of the field. *)
-    fieldname: string;
-
-    (* Type of the field. *)
-    fieldtype: typescheme
-
-  }  
-
-and datadef = {
-
-    (* Name of the data constructor. *)
-    dataname: string;
-
-    (* Types of the value parameters. *)
-    datavalparams: typ list;
-
-    (* Instantiated type parameters, if this is a GADT --
-       [None] if this is an ordinary ADT. *)
-    datatypeparams: typ list option;
-
-  } 
-
-and typ =
-  
-  (* Textual Objective Caml type. *)
-  | TypTextual of Stretch.ocamltype
-
-  (* Type variable, without its leading quote. *)
-  | TypVar of string
-
-  (* Application of an algebraic data type constructor. *)
-  | TypApp of string * typ list
-
-  (* Anonymous tuple. *)
-  | TypTuple of typ list
-
-  (* Arrow type. *)
-  | TypArrow of typ * typ
-
-and typescheme = {
-
-  (* Universal quantifiers, without leading quotes. *)
-  quantifiers: string list;
-
-  (* Body. *)
-  body: typ;
-
-  } 
-
-and valdef = {
-
-  (* Whether the value is public. Public values cannot be
-     suppressed by the inliner. They serve as seeds for the
-     dead code analysis. *)
-
-  valpublic: bool;
-
-  (* Definition's left-hand side. *)
-  valpat: pattern;
-
-  (* Value to which it is bound. *)
-  valval: expr
-
-  } 
-
-and expr =
-
-  (* Variable. *)
-  | EVar of string
-
-  (* Function. *)
-  | EFun of pattern list * expr
-
-  (* Function call. *)
-  | EApp of expr * expr list
-
-  (* Local definitions. This is a nested sequence of [let]
-     definitions. *)
-  | ELet of (pattern * expr) list * expr
-
-  (* Case analysis. *)
-  | EMatch of expr * branch list
-  | EIfThen of expr * expr
-  | EIfThenElse of expr * expr * expr
-
-  (* Raising exceptions. *)
-  | ERaise of expr
-
-  (* Exception analysis. *)
-  | ETry of expr * branch list
-
-  (* Data construction. Tuples of length 1 are considered nonexistent,
-     that is, [ETuple [e]] is considered the same expression as [e]. *)
-
-  | EUnit
-  | EIntConst of int
-  | EStringConst of string
-  | EData of string * expr list
-  | ETuple of expr list
-
-  (* Type annotation. *)
-  | EAnnot of expr * typescheme
-
-  (* Cheating on the typechecker. *)
-  | EMagic of expr (* Obj.magic *)
-  | ERepr of expr  (* Obj.repr *)
-
-  (* Records. *)
-  | ERecord of (string * expr) list
-  | ERecordAccess of expr * string
-  | ERecordWrite of expr * string * expr
-
-  (* Textual Objective Caml code. *)
-  | ETextual of Stretch.t
-
-  (* Comments. *)
-  | EComment of string * expr
-  | EPatComment of string * pattern * expr
-
-  (* Arrays. *)
-  | EArray of expr list
-  | EArrayAccess of expr * expr
-
-and branch = {
-
-  (* Branch pattern. *)
-  branchpat: pattern;
-
-  (* Branch body. *)
-  branchbody: expr;
-
-  } 
-
-and pattern =
-
-  (* Wildcard. *)
-  | PWildcard
-
-  (* Variable. *)
-  | PVar of string
-
-  (* Data deconstruction. Tuples of length 1 are considered nonexistent,
-     that is, [PTuple [p]] is considered the same pattern as [p]. *)
-  | PUnit
-  | PData of string * pattern list
-  | PTuple of pattern list
-  | PRecord of (string * pattern) list
-
-  (* Disjunction. *)
-  | POr of pattern list
-
-  (* Type annotation. *)
-  | PAnnot of pattern * typ
-
-and directive =
-  | DirOpen of string
-  | DirInclude of string
-
-(* Module definitions. *)
-
-and moduledef = {
-
-  (* The name of the module that is being defined. *)
-
-  modulename: string;
-
-  (* The module expression to which it is being bound. *)
-
-  modulerhs: modexpr;
-
-}
-
-(* Module expressions. *)
-
-and modexpr =
-    | MVar of string
-    | MStruct of structure
-    | MApp of modexpr * modexpr
-
-(* Structures. This is somewhat redundant with the structure of programs,
-   but will do for now. *)
-
-and structure = {
-
-  (* Exception definitions. *)
-  struct_excdefs: excdef list;
-    
-  (* Algebraic data type definitions (mutually recursive). *)
-  struct_typedefs: typedef list;
-
-  (* Value definitions (not mutually recursive). *)
-  struct_nonrecvaldefs: valdef list;
-
-}
-
diff --git a/bundles/menhirLib/menhir-20120123/src/IO.ml b/bundles/menhirLib/menhir-20120123/src/IO.ml
deleted file mode 100644 (file)
index 88bcb01..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* Input-output utilities. *)
-
-(* ------------------------------------------------------------------------- *)
-(* [exhaust channel] reads all of the data that's available on [channel]. *)
-
-let chunk_size =
-  2048
-
-let exhaust channel =
-  let buffer = Buffer.create chunk_size in
-  let chunk = String.create chunk_size in
-  let rec loop () =
-    let length = input channel chunk 0 chunk_size in
-    if length = 0 then
-      Buffer.contents buffer
-    else begin
-      Buffer.add_substring buffer chunk 0 length;
-      loop()
-    end
-  in
-  loop()
-
-(* ------------------------------------------------------------------------- *)
-(* [invoke command] invokes an external command (which expects no
-   input) and returns its output, if the command succeeds. It returns
-   [None] if the command fails. *)
-
-let invoke command =
-  let ic = Unix.open_process_in command in
-  let result = exhaust ic in
-  match Unix.close_process_in ic with
-  | Unix.WEXITED 0 ->
-      Some result
-  | _ ->
-      None
-
-(* ------------------------------------------------------------------------- *)
-(* [winvoke writers command cleaners] invokes each of the [writer]
-   functions, invokes the command [command], and runs each of the
-   [cleaner] functions. Then, it either returns the command's output,
-   if the command succeeded, or exits, otherwise. *)
-
-let winvoke writers command cleaners =
-  let call action =
-    action ()
-  in
-  List.iter call writers;
-  let output = invoke command in
-  List.iter call cleaners;
-
-  (* Stop if the command failed. Otherwise, return its output. *)
-
-  match output with
-  | None ->
-      (* Presumably, the command printed an error message for us. *)
-      exit 1
-  | Some output ->
-      output
-
diff --git a/bundles/menhirLib/menhir-20120123/src/IO.mli b/bundles/menhirLib/menhir-20120123/src/IO.mli
deleted file mode 100644 (file)
index ea33afd..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* Input-output utilities. *)
-
-(* [exhaust channel] reads all of the data that's available on [channel]. *)
-
-val exhaust: in_channel -> string
-
-(* [invoke command] invokes an external command (which expects no input)
-   and returns its output, if the command succeeds. It returns [None] if
-   the command fails. *)
-
-val invoke: string -> string option
-
-(* [winvoke writers command cleaners] invokes each of the [writer]
-   functions, invokes the command [command], and runs each of the
-   [cleaner] functions. Then, it either returns the command's output,
-   if the command succeeded, or exits, otherwise. *)
-
-val winvoke: (unit -> unit) list -> string -> (unit -> unit) list -> string
-
diff --git a/bundles/menhirLib/menhir-20120123/src/META b/bundles/menhirLib/menhir-20120123/src/META
deleted file mode 100644 (file)
index cbef6fc..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-requires = ""
-description = "Runtime support for code generated by Menhir"
-archive(byte) = "menhirLib.cmo"
-archive(native) = "menhirLib.cmx"
-version = "20120123"
diff --git a/bundles/menhirLib/menhir-20120123/src/Makefile b/bundles/menhirLib/menhir-20120123/src/Makefile
deleted file mode 100644 (file)
index fc900fd..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-.PHONY: clean
-
-COLD         += clean
-
-# ----------------------------------------------------------------------------
-
-# A few settings differ on Windows versus Unix.
-
-include ../Makefile.arch
-
-# ----------------------------------------------------------------------------
-# Locating the ocaml compilers.
-# If ocamlfind is available, then it is used for that purpose.
-
-CAMLTOP         := ocaml
-
-CAMLC           := $(shell if ocamlfind ocamlc -v >/dev/null 2>&1 ; \
-                       then echo ocamlfind ocamlc ; \
-                      elif ocamlc.opt -v >/dev/null 2>&1 ; \
-                       then echo ocamlc.opt ; \
-                      else echo ocamlc ; fi)
-
-CAMLOPT         := $(shell if ocamlfind ocamlopt -v >/dev/null 2>&1 ; \
-                       then echo ocamlfind ocamlopt ; \
-                      elif ocamlopt.opt -v >/dev/null 2>&1 ; \
-                       then echo ocamlopt.opt ; \
-                      else echo ocamlopt ; fi)
-
-CAMLDEP         := $(shell if ocamlfind ocamldep -version >/dev/null 2>&1 ; \
-                       then echo ocamlfind ocamldep ; \
-                      elif ocamldep.opt -version >/dev/null 2>&1 ; \
-                       then echo ocamldep.opt ; \
-                      else echo ocamldep ; fi)
-
-CAMLDEPWRAPPER  := ../demos/ocamldep.wrapper
-
-CAMLLEX         := ocamllex
-
-CAMLYACC        := ocamlyacc -v
-
-# -------------------------------------------------------------------------
-
-# Compilation flags.
-
-BFLAGS       := -g
-OFLAGS       := -inline 1000
-LNKBFLAGS    := -g
-LNKOFLAGS    :=
-BLIBS        := unix.cma
-OLIBS        := unix.cmxa
-PGFLAGS      := -v -lg 1 -la 1 -lc 1 --comment --infer --error-recovery --stdlib . --strict
-
-# -------------------------------------------------------------------------
-
-# A list of the source files that must be generated prior to dependency
-# analysis.
-
-GENERATED := installation.ml lexmli.ml lexer.ml parser.mli parser.ml           \
-lineCount.ml lexdep.ml sentenceParser.mli sentenceParser.ml sentenceLexer.ml
-
-# -------------------------------------------------------------------------
-
-# A list of the modules that must be linked into the MenhirLib library.
-
-# This library is used both at compile time (i.e., within Menhir itself)
-# and at run time (i.e., it is made available to Menhir users, who need
-# to link it with their own executables if they have used the --table
-# option).
-
-# If you change this list, please also update the files LICENSE and
-# GNUmakefile in the toplevel directory.
-
-LIBMODULES := infiniteArray packedIntArray rowDisplacement engineTypes \
-engine tableFormat tableInterpreter convert
-
-# -------------------------------------------------------------------------
-
-# A list of the modules that must be linked into the Menhir executable.
-
-MODULES := menhirLib Fix stringSet stringMap mark compressedBitSet     \
-           unionFind tarjan nonpositiveCycles patricia misc option     \
-           breadth listMonad dot installation version settings time    \
-           positions error parameters keyword lineCount printer                \
-           rawPrinter action parserAux parser lexer partialGrammar     \
-           parameterizedGrammar reachability unparameterizedPrinter    \
-           preFront codeBits tokenType interface IO lexmli lexdep      \
-           infer nonTerminalDefinitionInlining front grammar item lr0  \
-           slr lr1 lr1partial derivation conflict invariant codePieces \
-           sentenceParser sentenceLexer pprint cst                     \
-           referenceInterpreter interpret tableBackend codeBackend     \
-           coqBackend traverse inliner back
-
-# -------------------------------------------------------------------------
-
-# How to bootstrap.
-
-# Set TARGET to byte or opt depending on the desired architecture.
-
-ifndef TARGET
-  TARGET     := opt
-endif
-
-# The variable GOAL is the name of the executable file.
-
-GOAL         := menhir.$(TARGET)
-
-# We create a symbolic link of GOAL to MENHIREXE.
-
-$(MENHIREXE): .versioncheck
-# Build a stage one executable using ocamlyacc.
-       $(MAKE) -s PGEN="$(CAMLYACC)" PARSER=parser $(GOAL)
-# Remove the ocamlyacc-built parser.
-       @/bin/rm -f parser.ml parser.mli
-# Build a stage two executable using the stage one executable (which is overwritten).
-       $(MAKE) -s PGEN="./$(GOAL) $(PGFLAGS)" PARSER=fancy-parser $(GOAL)
-# Create a stage three parser and make sure that it is identical.
-       @./$(GOAL) $(PGFLAGS) -b reference fancy-parser.mly 2>/dev/null
-       @if diff parser.mli reference.mli 2>&1 >/dev/null ; then \
-         if diff parser.ml reference.ml 2>&1 >/dev/null ; then \
-           echo "Bootstrap successful." ; \
-         else \
-           echo "Bootstrap FAILED: the implementation files differ." && false ; \
-          fi ; \
-       else \
-         echo "Bootstrap FAILED: the interface files differ." && false ; \
-       fi
-       @rm -f reference.ml reference.mli
-# Rename the stage two executable to the desired name.
-# Use a symbolic link, so that further development builds implicitly update
-# menhir.
-       @ln -sf $(GOAL) $@
-
-# -------------------------------------------------------------------------
-
-# Linking.
-
-menhirLib.cmo menhirLib.cmi: $(LIBMODULES:=.cmo)
-       $(CAMLC) $(BFLAGS) -pack -o menhirLib.cmo $^
-
-menhirLib.cmx menhirLib.o: $(LIBMODULES:=.cmx)
-       $(CAMLOPT) -pack -o menhirLib.cmx $^
-
-menhir.byte: $(MODULES:=.cmo)
-       $(CAMLC) -o $@ $(LNKBFLAGS) $(BLIBS) $^
-
-menhir.opt: $(MODULES:=.cmx)
-       $(CAMLOPT) -o $@ $(LNKOFLAGS) $(OLIBS) $^
-
-# -------------------------------------------------------------------------
-
-# Computing dependencies. This can be done in a simple way, even though
-# we exploit --infer, because we compile in two stages. Not a good example
-# of how to do it yourself -- have a look at demos/Makefile.shared.
-
-# For completeness, we must force ocamldep to understand that MenhirLib
-# is a module name. We do this by creating phantom source files for it.
-
-.depend: $(wildcard *.ml *.mli) $(GENERATED)
-       @/bin/rm -f .depend
-       for i in *.ml *.mli; do \
-           $(CAMLDEPWRAPPER) menhirLib.ml menhirLib.mli - $(CAMLDEP) $$i \
-        >> $@; \
-       done
-
-ifeq ($(findstring $(MAKECMDGOALS),$(COLD)),)
--include .depend
-endif
-
-# -------------------------------------------------------------------------
-
-# Cleaning up.
-
-clean::
-       /bin/rm -f menhir.byte menhir.opt $(MENHIREXE)
-       /bin/rm -f *.cmi *.cmx *.cmo *.$(OBJ) *~ .*~
-       /bin/rm -f reference.ml reference.mli $(GENERATED)
-       /bin/rm -f .depend *.conflicts *.automaton *.annot *.output
-
-# -------------------------------------------------------------------------
-
-# Compiling. The parser source is found in $(PARSER).mly and is
-# processed using $(PGEN).
-
-# These two default definitions really shouldn't be necessary, but
-# there are corner cases where they are needed (e.g. when make is
-# invoked without a target and the .depend file is regenerated).
-
-ifndef PGEN
-  PGEN       := $(CAMLYACC)
-endif
-ifndef PARSER
-  PARSER     := parser
-endif
-
-%.cmi: %.mli
-       $(CAMLC) $(BFLAGS) -c $<
-
-%.cmo: %.ml
-       $(CAMLC) $(BFLAGS) -c $<
-
-# If the module that is being compiled is part of MenhirLib, add the
-# -for-pack option to the command line. This is required only when
-# compiling to native code (the bytecode compiler accepts but ignores
-# this option).
-
-PACK = $(shell if echo $(LIBMODULES) | grep $* >/dev/null ; then echo -for-pack MenhirLib ; else echo ; fi)
-
-%.cmx %.o: %.ml
-       $(CAMLOPT) $(OFLAGS) $(PACK) -c $<
-
-# The source file for this parser varies. It is either parser.mly or
-# fancy-parser.mly.
-#
-parser.ml parser.mli: $(PARSER).mly
-       @/bin/rm -f parser.ml parser.mli
-       $(PGEN) -b parser $<
-
-# This parser must be built with ocamlyacc, because its client
-# watches for Parsing.Parse_error!
-#
-# Using ocamlyacc or Menhir interchangeably would be possible,
-# via an ocamlyacc wrapper that adds the definition "exception
-# Error = Parsing.Parse_error" at the end of the generated .ml
-# and .mli files.
-#
-sentenceParser.ml sentenceParser.mli : sentenceParser.mly
-       @/bin/rm -f sentenceParser.ml sentenceParser.mli
-       $(CAMLYACC) -b sentenceParser $<
-
-%.ml: %.mll
-       @/bin/rm -f $@
-       $(CAMLLEX) $<
-
-# ----------------------------------------------------------------------------
-# Checking the version of the ocaml compiler.
-#
-# We check the bytecode compiler only, because some architectures don't have
-# the native code compiler. We assume that both compilers, if present, are in
-# sync.
-
-# We build a bytecode executable (rather than use the toplevel loop) because
-# we need to load str.cma and some ocaml ports do not support dynamic loading
-# (e.g. ocaml 3.09, MacOS/Intel).
-
-.versioncheck:
-       @ echo Checking that Objective Caml is recent enough...
-       @ $(CAMLC) -o check-ocaml-version str.cma checkOCamlVersion.ml
-       @ ./check-ocaml-version --verbose --gt "3.09"
-       @ rm check-ocaml-version
-       @ touch .versioncheck
-
-clean::
-       rm -f .versioncheck
-
diff --git a/bundles/menhirLib/menhir-20120123/src/action.ml b/bundles/menhirLib/menhir-20120123/src/action.ml
deleted file mode 100644 (file)
index f0fb727..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: action.ml,v 1.10 2006/06/26 09:41:33 regisgia Exp $ *)
-
-open Keyword
-
-type t = 
-    {
-      expr     : IL.expr;
-      keywords  : Keyword.KeywordSet.t;
-      filenames : string list;
-      pkeywords : Keyword.keyword Positions.located list
-    }
-
-let from_stretch s = 
-  { 
-    expr      = IL.ETextual s;
-    filenames = [ s.Stretch.stretch_filename ];
-    keywords  = Keyword.KeywordSet.from_list (List.map Positions.value s.Stretch.stretch_keywords);
-    pkeywords = s.Stretch.stretch_keywords;
-  }
-
-let parenthesize s = 
-  if String.length s < 2 || s.[0] <> '(' || s.[String.length s - 1] <> ')' then
-    "(" ^ s ^ ")"
-  else 
-    s
-
-let rec parenthesize_stretch = function
-  | IL.ETextual s ->
-      IL.ETextual { s with Stretch.stretch_raw_content = parenthesize s.Stretch.stretch_raw_content }
-  | IL.ELet (es, e) ->
-      IL.ELet (List.map (fun (p, e) -> (p, parenthesize_stretch e)) es, parenthesize_stretch e)
-  | x -> x
-
-let compose x a1 a2 = 
-  {
-    expr      = IL.ELet ([ IL.PVar x, parenthesize_stretch a1.expr ], a2.expr);
-    keywords  = Keyword.KeywordSet.union a1.keywords a2.keywords;
-    filenames = a1.filenames @ a2.filenames;
-    pkeywords = a1.pkeywords @ a2.pkeywords;
-  }
-
-let rename_inlined_psym (psym, first_prod, last_prod) phi l =
-  List.fold_left
-    (fun (l, phi, (used1, used2)) pk ->
-       match pk.Positions.value with
-        | Position (subject, where, flavor) ->
-            let (subject', where'), (used1, used2) = 
-              match subject, where with
-                | RightNamed s, w  -> 
-                    (* In the host rule, $startpos(x) is changed 
-                       to $startpos(first_prod) (same thing for $endpos). *)
-                    if s = psym then
-                      match w with
-                        | WhereStart -> first_prod, (true, used2)
-                        | WhereEnd -> last_prod, (used1, true)
-                    else 
-                      (* Otherwise, we just that the renaming into account. *)
-                      let s' = try 
-                        List.assoc s phi
-                      with Not_found -> s 
-                      in
-                        (RightNamed s', w), (used1, used2)
-                | _ -> (subject, where), (used1, used2)
-            in
-            let from_pos = Keyword.posvar subject where flavor
-            and to_pos = Keyword.posvar subject' where' flavor in
-              (Positions.with_pos pk.Positions.position 
-                 (Position (subject', where', flavor)) :: l,
-               (if from_pos <> to_pos && not (List.mem_assoc from_pos phi) then 
-                  (from_pos, to_pos) :: phi else phi),
-               (used1, used2))
-
-        | _ -> pk :: l, phi, (used1, used2)
-    )
-    ([], phi, (false, false)) l
-
-(* Rename the keywords related to position to handle the composition
-   of semantic actions during non terminal inlining. 
-
-   The first argument describes the context: 
-   - [first_prod] is the first producer that starts the action's rule.
-   - [last_prod] is the last one.
-   For instance, if %inline rule r is A -> B C and rule r' is D -> E A F,
-   then [first_prod] is B and [last_prod] is C. 
-   If r is A -> and r' is unchanged. [first_prod] is E and [last_prod] is F.
-   - [psym] is the producer that is being inlined.
-   
-*)
-let rename_pkeywords (psym, first_prod, last_prod) phi l = 
-  List.fold_left (fun (l, phi, (used1, used2)) pk -> match pk.Positions.value with
-           | Position (subject, where, flavor) ->
-               let (subject', where'), (used1, used2) = 
-                 match subject, where with
-                     (* $startpos is changed to $startpos(first_prod) in the 
-                        inlined rule. *)
-                   | Left, WhereStart -> first_prod, (true, used2)
-                     (* Similarly for $endpos. *)
-                   | Left, WhereEnd   -> last_prod, (used1, true)
-                     (* $i cannot be combined with inlining. *)
-                   | RightDollar i, w -> assert false
-                   | RightNamed s, w  -> 
-                       (* In the host rule, $startpos(x) is changed to 
-                          to $startpos(first_prod) (same thing for $endpos). *)
-                       if s = psym then
-                         match w with
-                           | WhereStart -> first_prod, (true, used2)
-                           | WhereEnd -> last_prod, (used1, true)
-                       else 
-                         (* Otherwise, we just that the renaming into account. *)
-                         let s' = try List.assoc s phi with Not_found -> s in
-                           (RightNamed s', w), (used1, used2)
-               in
-               let from_pos = Keyword.posvar subject where flavor
-               and to_pos = Keyword.posvar subject' where' flavor in
-                 (Positions.with_pos pk.Positions.position 
-                    (Position (subject', where', flavor)) :: l,
-                  (if from_pos <> to_pos && not (List.mem_assoc from_pos phi) then 
-                     (from_pos, to_pos) :: phi else phi), 
-                  (used1, used2))
-
-           | x -> pk :: l, phi, (used1, used2))
-
-    ([], phi, (false, false)) l
-               
-let rename renaming_fun renaming_env phi a = 
-  let pkeywords, phi, used_fg = renaming_fun renaming_env phi a.pkeywords in
-  { a with 
-      (* We use the let construct to rename without modification of the semantic
-        action code. *)
-      expr = 
-      IL.ELet (List.map (fun (x, x') -> (IL.PVar x, IL.EVar x')) phi, 
-              a.expr);
-
-      (* Keywords related to positions are updated too. *)
-      keywords = 
-      List.fold_left 
-       (fun acu pk -> Keyword.KeywordSet.add pk.Positions.value acu) 
-       Keyword.KeywordSet.empty
-       pkeywords;
-
-      pkeywords = pkeywords
-  }, used_fg
-
-let rename_inlined_psym =
-  rename rename_inlined_psym
-
-let rename =
-  rename rename_pkeywords
-
-let to_il_expr action = 
-  action.expr
-
-let filenames action = 
-  action.filenames
-
-let keywords action = 
-  action.keywords
-
-let pkeywords action = 
-  action.pkeywords
-
-let rec print f action = 
-  let module P = Printer.Make (struct let f = f 
-                                     let locate_stretches = None 
-                                     let raw_stretch_action = true
-                              end) 
-  in
-    P.expr action.expr
-
-let has_previouserror action =
-  KeywordSet.mem PreviousError (keywords action)
-
-let has_syntaxerror action =
-  KeywordSet.mem SyntaxError (keywords action)
-
-let has_leftstart action =
-  KeywordSet.exists (function
-    | Position (Left, WhereStart, _) ->
-       true
-    | _ ->
-       false
-  ) (keywords action)
-
-let has_leftend action =
-  KeywordSet.exists (function
-    | Position (Left, WhereEnd, _) ->
-       true
-    | _ ->
-       false
-  ) (keywords action)
-
-let has_dollar i action =
-  KeywordSet.exists (function
-    | Dollar j when i = j ->
-       true
-    | _ ->
-       false
-  ) (keywords action)
-
-let use_dollar action = 
-  KeywordSet.exists (function
-    | Dollar _ ->
-       true
-    | _ ->
-       false
-  ) (keywords action)
-    
-    
-
-
diff --git a/bundles/menhirLib/menhir-20120123/src/action.mli b/bundles/menhirLib/menhir-20120123/src/action.mli
deleted file mode 100644 (file)
index 1023851..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: action.mli,v 1.8 2006/06/26 09:41:33 regisgia Exp $ *)
-
-(** Semantic action's type. *)
-type t
-
-(** [compose x a1 a2] builds the action [let x = a1 in a2]. This
-    feature is used during the processing of the %inline keyword. *)
-val compose : string -> t -> t -> t
-
-(** [rename renaming_env phi a] builds the action
-    [let x1 = x1' and ... xn = xn' in a] if [phi] is [(x1, x1') ... (xn, xn')].
-    Moreover, [renaming_env] is used to correctly replace $startpos/$endpos
-    present in the semantic action. *)
-val rename:
-  string * (Keyword.subject * Keyword.where) * (Keyword.subject * Keyword.where)
-  -> (string * string) list -> t -> t * (bool * bool)
-
-(** [rename_inlined_psym renaming_env phi a] updates the occurrences of the
-    inlined non terminal in the action [a].
-*)
-val rename_inlined_psym:
-  string * (Keyword.subject * Keyword.where) * (Keyword.subject * Keyword.where)
-  -> (string * string) list -> t -> t * (bool * bool)
-
-(** Semantic actions are translated into [IL] code using the
-    [IL.ETextual] and [IL.ELet] constructors. *)
-val to_il_expr: t -> IL.expr
-
-(** A semantic action might be the inlining of several others. The
-    filenames of the different parts are given by [filenames a]. This
-    can be used, for instance, to check whether all parts come from
-    the standard library. *)
-val filenames: t -> string list
-
-(** [pkeywords a] returns a list of all keyword occurrences in [a]. *)
-val pkeywords: t -> Keyword.keyword Positions.located list
-
-(** [keywords a] is the set of keywords used in the semantic action [a]. *)
-val keywords: t -> Keyword.KeywordSet.t
-
-(** [print f a] prints [a] to channel [f]. *)
-val print: out_channel -> t -> unit
-
-(** [from_stretch s] builds an action out of a textual piece of code. *)
-val from_stretch: Stretch.t -> t
-
-(** Check whether the keyword $previouserror is used in the action. *)
-val has_previouserror: t -> bool
-
-(** Check whether the keyword $syntaxerror is used in the action. *)
-val has_syntaxerror: t -> bool
-
-(** Check whether the keyword $start is used in the action. *)
-val has_leftstart: t -> bool
-
-(** Check whether the keyword $end is used in the action. *)
-val has_leftend: t -> bool
-
-(** Check whether a particular $i keyword is used in the action. *)
-val has_dollar: int -> t -> bool
-
-(** Check whether any $i keyword is used in the action. *)
-val use_dollar: t -> bool
-
diff --git a/bundles/menhirLib/menhir-20120123/src/back.ml b/bundles/menhirLib/menhir-20120123/src/back.ml
deleted file mode 100644 (file)
index ac17f3b..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* Driver for the back-end. *)
-
-open UnparameterizedSyntax
-
-(* Define an .ml file writer . *)
-
-let write program =
-  let module P = Printer.Make (struct
-    let filename = Settings.base ^ ".ml"
-    let f = open_out filename
-    let locate_stretches =
-      if Settings.infer then
-       (* Typechecking should not fail at this stage. Omit #line directives. *)
-       None
-      else
-       (* 2011/10/19: do not use [Filename.basename]. The [#] annotations that
-          we insert in the [.ml] file must retain their full path. This does
-          mean that the [#] annotations depend on how menhir is invoked -- e.g.
-          [menhir foo/bar.mly] and [cd foo && menhir bar.mly] will produce
-          different files. Nevertheless, this seems useful/reasonable. *)
-       Some filename
-    let raw_stretch_action = false
-  end) in
-  P.program program
-
-(* Construct the code, using either the table-based or the code-based
-   back-end, and pass it on to the printer. (This continuation-passing
-   style is imposed by the fact that there is no conditional in ocaml's
-   module language.) *)
-
-let () =
-  if Settings.coq then
-    let module B = CoqBackend.Run (struct end) in
-    let filename = Settings.base ^ ".v" in
-    let f = open_out filename in
-    B.write_all f;
-    exit 0
-  else
-    if Settings.table then
-      let module B = TableBackend.Run (struct end) in
-      write B.program
-    else
-      let module B = CodeBackend.Run (struct end) in
-      write (Inliner.inline B.program)
-
-(* Write the interface file. *)
-
-let () =
-  Interface.write()
-
-let () =
-  Time.tick "Printing"
-
diff --git a/bundles/menhirLib/menhir-20120123/src/back.mli b/bundles/menhirLib/menhir-20120123/src/back.mli
deleted file mode 100644 (file)
index 38ad0f7..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module drives the back-end. No functionality is offered by
-   this module. *)
-
diff --git a/bundles/menhirLib/menhir-20120123/src/breadth.ml b/bundles/menhirLib/menhir-20120123/src/breadth.ml
deleted file mode 100644 (file)
index 6b3958b..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module implements generic breadth-first search
-   over a graph with labeled edges. *)
-
-module Make (G : sig
-
-  (* This is the type of graph vertices. *)
-
-  type vertex
-
-  (* This is the type of graph labels. *)
-
-  type label
-
-  (* These allow marking a vertex and checking whether
-     it is marked. *)
-
-  val set_mark: vertex -> Mark.t -> unit
-  val get_mark: vertex -> Mark.t
-
-  (* This is an iterator over the graph's entry vertices. *)
-
-  val entry: (vertex -> unit) -> unit
-
-  (* This provides access to a vertex' successors. *)
-
-  val successors: (label -> vertex -> unit) -> vertex -> unit
-
-end) = struct
-
-  let search f =
-
-    let queue : G.vertex Queue.t =
-      Queue.create ()
-
-    and mark =
-      Mark.fresh()
-
-    in
-
-    let visited vertex =
-      Mark.same mark (G.get_mark vertex)
-
-    and visit vertex =
-      G.set_mark vertex mark;
-      Queue.add vertex queue
-
-    in
-
-    G.entry visit;
-    Misc.qiter (fun vertex ->
-      G.successors (fun label son ->
-       if not (visited son) then begin
-         visit son;
-         f true vertex label son
-       end
-       else
-         f false vertex label son
-      ) vertex
-    ) queue
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/breadth.mli b/bundles/menhirLib/menhir-20120123/src/breadth.mli
deleted file mode 100644 (file)
index c813a9e..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module implements generic breadth-first search
-   over a graph with labeled edges. *)
-
-module Make (G : sig
-
-  (* This is the type of graph vertices. *)
-
-  type vertex
-
-  (* This is the type of graph labels. *)
-
-  type label
-
-  (* These allow marking a vertex and checking whether
-     it is marked. *)
-
-  val set_mark: vertex -> Mark.t -> unit
-  val get_mark: vertex -> Mark.t
-
-  (* This is an iterator over the graph's entry vertices. *)
-
-  val entry: (vertex -> unit) -> unit
-
-  (* This provides access to a vertex' successors. *)
-
-  val successors: (label -> vertex -> unit) -> vertex -> unit
-
-end) : sig
-
-  (* [search f] invokes [f discovery v label v'] once for every edge
-     from vertex [v] to vertex [v'] carrying label [label]. Vertices
-     [v'] are presented breadth-first. The flag [discovery] tells
-     whether the edge is a discovery edge, that is, whether it belongs
-     to the spanning forest of shortest paths that is being built. *)
-
-  val search: (bool -> G.vertex -> G.label -> G.vertex -> unit) -> unit
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/checkOCamlVersion.ml b/bundles/menhirLib/menhir-20120123/src/checkOCamlVersion.ml
deleted file mode 100644 (file)
index fa23015..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id $*)
-(* This module parses ocaml version and confronts it with a user-provided
-   version. *)
-
-(* According to OCaml's manual, the Sys.ocaml_version value follows the
-   regexp [version_regexp].
-*)
-let mnum = "\\([0-9]+\\)"
-
-(* version = major.minor[.patchlevel][+additional-info]. *)
-let version_regexp = 
-  Str.regexp 
-    (Printf.sprintf "%s\\.%s\\(\\.%s\\)?\\(\\+\\(.+\\)\\)?" mnum mnum mnum)
-
-let must field = function
-  | None -> failwith (Printf.sprintf "\"%s\" field is undefined." field)
-  | Some s -> s
-
-let as_int s = 
-  try
-    int_of_string s
-  with Failure _ ->
-    Printf.eprintf "Invalid number '%s'\n" s;
-    exit 1
-
-let parse_version version =
-  let get i = 
-    try
-      Some (Str.matched_group i version)
-    with Not_found ->
-      None
-  in
-    if Str.string_match version_regexp version 0 then (
-      as_int (must "major" (get 1)), 
-      as_int (must "minor" (get 2)), 
-      get 4, get 6
-    ) else
-      begin
-       Printf.eprintf "Failed to retrieve ocaml version.\n";
-       exit 1
-      end
-
-(* The user can compare its version with three different orderings:
-   - eq means major and minor numbers are equal ;
-   - eq-strict means that even the patchlevel and the additional information
-     are equal ;
-   - lt means that ocaml version is older that the user-provided version ;
-   - gt means that ocaml version is newer that the user-provided version. *)
-let eq, eq_strict, gt, lt = ref false, ref false, ref false, ref false
-
-let verbose = ref false
-
-let options = Arg.align
-  [
-    "--eq", Arg.Set eq, " Is the version equal to <version> ?";
-    "--eq-strict", Arg.Set eq_strict, 
-    " Is the version strictly equal to <version> ? \
-      (taking into account patchlevel and additional information)";
-    "--gt", Arg.Set gt, " Is the version newer than <version> ? (default)";
-    "--lt", Arg.Set lt, " Is the version older than <version> ?";
-    "--verbose", Arg.Set verbose, " Show version."
-  ]
-  
-let usage = "check-ocaml-version [options] <version>\n"
-
-let version = ref None
-
-let set_version s = 
-  version := Some s
-
-let _ =
-  Arg.parse options set_version usage
-
-let compare, compare_str, strict = 
-  match !eq, !gt, !lt with
-    | true, false, false -> ( = ) , "", !eq_strict
-    | false, true, false -> ( >= ), "or greater ", false
-    | false, false, true -> ( <= ), "or lesser ", false
-    | false, false, false -> (Printf.printf "%s\n%!" Sys.ocaml_version; exit 1)
-    | _ -> failwith "(eq|gt|lt) flags must be used independently"
-
-let compare_version (major, minor, p, a) (major', minor', p', a') =
-  if major = major' then 
-    if minor = minor' then
-      if strict then
-       (p = p') && (a = a')
-      else true
-    else compare minor minor'
-  else 
-    compare major major' 
-
-let _ =
-
-  match !version with
-    | None ->
-       Printf.printf "%s\n%!" Sys.ocaml_version
-
-    | Some version ->
-       let ov = parse_version Sys.ocaml_version 
-       and uv = parse_version version in
-       if compare_version ov uv then begin
-         if !verbose then
-           Printf.printf "Version %s is OK.\n%!" Sys.ocaml_version;
-         exit 0
-       end
-       else begin
-         if !verbose then
-           Printf.printf "%s is NOT OK: version %s %swas required.%!\n" Sys.ocaml_version version compare_str;
-         exit 1
-       end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/codeBackend.ml b/bundles/menhirLib/menhir-20120123/src/codeBackend.ml
deleted file mode 100644 (file)
index 33dd3be..0000000
+++ /dev/null
@@ -1,1893 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* The code generator. *)
-
-(* TEMPORARY env.startp seems to be always equal to env.lexbuf.lex_start_p,
-   and similarly for env.endp. Is there a point to copying these
-   positions to the env record? Maybe just making these positions
-   accessible via a single indirection, instead of two? I forget. *)
-
-module Run (T : sig end) = struct
-
-open Grammar
-open IL
-open CodeBits
-open CodePieces
-open TokenType
-open Interface
-
-(* ------------------------------------------------------------------------ *)
-(* Here is a description of our code generation mechanism.
-
-   Every internal function that we produce is parameterized by the
-   parser environment [env], which contains (pointers to) the lexer,
-   the lexing buffer, the last token read, etc. No global variables
-   are exploited, so our parsers are reentrant. The functions that we
-   export do not expect an environment as a parameter; they create a
-   fresh one when invoked.
-
-   Every state [s] is translated to a [run] function and an [action]
-   function. To a first approximation, the only parameter of the [run]
-   function, besides [env], is the stack. However, in some cases
-   (consult the predicate [runpushes]), the top stack cell is not yet
-   allocated when [run s] is called. The cell's contents are passed as
-   extra parameters, and it is [run]'s responsibility to allocate that
-   cell.
-
-   (When [run] is the target of a shift transition, the position
-   parameters [startp] and [endp] are redundant with the [env]
-   parameter, because they are always equal to [env.startp] and
-   [env.endp]. However, this does not appear to make a great
-   difference in terms of code size, and makes our life easier, so we
-   do not attempt to eliminate this redundancy.)
-
-   The first thing in [run] is to discard a token, if the state was
-   entered through a shift transition, and to peek at the lookahead
-   token. When the current token is to be discarded, the [discard]
-   function is invoked. It discards the current token, invokes the
-   lexer to obtain a new token, and returns the latter. When we only
-   wish to peek at the current token, without discarding it, we simply
-   read [env.token]. (We have to be careful in cases where the current
-   lookahead token might be [error], since, in those cases,
-   [env.token] is meaningless; see below.)
-
-   Once the lookahead token is obtained, [run] calls [action]. The
-   parameters of [action] are the stack and the lookahead token.
-
-   [action] performs a case analysis of the lookahead token. Each
-   branch performs one of the following. In shift branches, control is
-   dispatched to another [run] function, with appropriate parameters,
-   typically the current stack plus the information that should go
-   into the new top stack cell (a state, a semantic value, locations).
-   In reduce branches, a [reduce] function is invoked. In the default
-   branch, error handling is initiated (see below).
-
-   The [reduce] function associated with production [prod] pops as
-   many stack cells as necessary, retrieving semantic values and the
-   state [s] that initiated the reduction. It then evaluates the
-   semantic action, which yields a new semantic value. (This is the
-   only place where semantic actions are evaluated, so that semantic
-   actions are never duplicated.) It then passes control on to the
-   [goto] function associated with the nonterminal [nt], where [nt]
-   is the left-hand side of the production [prod].
-
-   The [goto] function associated with nonterminal [nt] expects just
-   one parameter besides the environment -- namely, the
-   stack. However, in some cases (consult the predicate [gotopushes]),
-   the top stack cell is not allocated yet, so its contents are passed
-   as extra parameters. In that case, [goto] first allocates that
-   cell. Then, it examines the state found in that cell and performs a
-   goto transition, that is, a shift transition on the nonterminal
-   symbol [nt]. This simply consists in passing control to the [run]
-   function associated with the transition's target state. If this
-   case analysis only has one branch, because all transitions for [nt]
-   lead to the same target state, then no case analysis is required.
-
-   In principle, a stack cell contains a state, a semantic value, and
-   start and end positions. However, the state can be omitted if it is
-   never consulted by a [goto] function. The semantic value can be
-   omitted if it is associated with a token that was declared not to
-   carry a semantic value. (One could also omit semantic values for
-   nonterminals whose type was declared to be [unit], but that does
-   not seem very useful.) The start or end position can be omitted if
-   they are associated with a symbol that does not require keeping
-   track of positions. When all components of a stack cell are
-   omitted, the entire cell disappears, so that no memory allocation
-   is required.
-
-   For each start symbol [nt], an entry point function, named after
-   [nt], is generated. Its parameters are a lexer and a lexing buffer.
-   The function allocates and initializes a parser environment and
-   transfers control to the appropriate [run] function.
-
-   Our functions are grouped into one huge [let rec] definition. The
-   inliner, implemented as a separate module, will inline functions
-   that are called at most once, remove dead code (although there
-   should be none or next to none), and possibly perform other
-   transformations.
-
-   I note that, if a state can be entered only through (nondefault)
-   reductions, then, in that state, the lookahead token must be a
-   member of the set of tokens that allow these reductions, and by
-   construction, there must exist an action on that token in that
-   state. Thus, the default branch (which signals an error when
-   the lookahead token is not a member of the expected set) is in
-   fact dead. It would be nice (but difficult) to exploit types
-   to prove that. However, one could at least replace the code of
-   that branch with a simple [assert false]. TEMPORARY do it *)
-
-(* ------------------------------------------------------------------------ *)
-(* Here is a description of our error recovery mechanism.
-
-   With every state [s], we associate an [error] function.
-
-   If [s] is willing to act when the lookahead token is [error], then
-   this function tells how. This includes *both* shift *and* reduce
-   actions. (For some reason, yacc/ocamlyacc/mule/bison can only shift
-   on [error].)
-
-   If [s] is unable to act when the lookahead token is [error], then
-   this function pops a stack cell, extracts a state [s'] out of it,
-   and transfers control, via a global [errorcase] dispatch function,
-   to the [error] function associated with [s']. (Because some stack
-   cells do not physically hold a state, this description is somewhat
-   simpler than the truth, but that's the idea.)
-
-   When an error is detected in state [s], one of two things happens
-   (see [initiate]).
-
-      a. If [s] can do error recovery and if no token was successfully
-         shifted since the last [error] token was shifted, then the
-         current token is discarded and the current state remains
-         unchanged, that is, the [action] function associated with [s]
-         is re-entered.
-
-      b. Otherwise, the [error] function associated with [s] is
-         invoked.
-
-   In case (b), immediately before invoking the [error] function, the
-   counter [env.shifted] is reset to -1. By convention, this means
-   that the current token is discarded and replaced with an [error]
-   token. The [error] token transparently inherits the positions
-   associated with the underlying concrete token.
-
-   Whenever we attempt to consult the current token, we check whether
-   [env.shifted] is -1 and, if that is the case, resume error handling
-   by calling the [error] function associated with the current state.
-   This allows a series of reductions to correctly take place when the
-   lookahead token is [error]. In many states, though, it is possible
-   to statically prove that [env.shifted] cannot be -1. In that case,
-   we produce a lookup of [env.token] without checking [env.shifted].
-
-   The counter [env.shifted] is incremented when a token is
-   shifted. In particular, immediately after the [error] token is
-   shifted, [env.shifted] is zero. The increment is conditional, so as
-   to avoid overflow. It is performed inside [discard].
-
-   States with default reductions perform a reduction regardless of
-   the current lookahead token, which can be either [error] or a
-   regular token.
-
-   A question that bothered me for a while was, when unwinding the
-   stack, do we stop at a state that has a default reduction? Should
-   it be considered able to handle the error token? I now believe that
-   the answer is, this cannot happen. Indeed, if a state has a default
-   reduction, then, whenever it is entered, reduction is performed and
-   that state is exited, which means that it is never pushed onto the
-   stack. So, it is fine to consider that a state with a default
-   reduction is unable to handle errors.
-
-   I note that a state that can handle [error] and has a default
-   reduction must in fact have a reduction action on [error].
-
-   A state that can perform error recovery (that is, a state whose
-   incoming symbol is [error]) never performs a default reduction. The
-   reason why this is so is given in [Invariant]. A consequence of
-   this decision is that reduction is not performed until error
-   recovery is successful. This behavior could be surprising if it
-   were the default behavior; however, recall that error recovery is
-   disabled unless [--error-recovery] was specified.
-
-   When an error is detected and an error production is reduced, the
-   user might like to know how recent the previous error was, so as
-   (for instance) to suppress diagnostic messages if it was too
-   recent. (yacc and ocamlyacc have their own, hard-wired,
-   idiosyncratic mechanism for that.) We provide access to this
-   information as follows. When a new error is detected and
-   [env.shifted] is set to -1, the previous value of [env.shifted] is
-   saved to [env.previouserror]. Thus, the number of tokens that were
-   shifted between the two errors is recorded. This information is
-   then made available to the user via the $previouserror keyword.
-
-   I note that error recovery, case (a) above, can cause the parser to
-   enter an infinite loop.  Indeed, the token stream is in principle
-   infinite -- for instance, many lexers will return an EOF token
-   forever after some finite supply of tokens has been exhausted. If
-   we hit EOF while in error recovery mode, and if EOF is not accepted
-   at the current state, we will keep discarding EOF and asking for a
-   new token. The way out of this situation is to design the grammar
-   in such a way that it cannot happen. We provide a warning to help
-   with this task. *)
-
-(* The type of environments. *)
-
-let tcenv =
-  env
-
-let tenv =
-  TypApp (tcenv, [])
-
-(* The [assertfalse] function. We have just one of these, in order to
-   save code size. It should become unnecessary when we add GADTs. *)
-
-let assertfalse =
-  prefix "fail"
-
-(* The [discard] function. *)
-
-let discard =
-  prefix "discard"
-
-(* The [initenv] function. *)
-
-let initenv =
-  prefix "init"
-
-(* The [run] function associated with a state [s]. *)
-
-let run s =
-  prefix (Printf.sprintf "run%d" (Lr1.number s))
-
-(* The [action] function associated with a state [s]. *)
-
-let action s =
-  prefix (Printf.sprintf "action%d" (Lr1.number s))
-
-(* The [goto] function associated with a nonterminal [nt]. *)
-
-let goto nt =
-  prefix (Printf.sprintf "goto_%s" (Nonterminal.print true nt))
-
-(* The [reduce] function associated with a production [prod]. *)
-
-let reduce prod =
-  prefix (Printf.sprintf "reduce%d" (Production.p2i prod))
-
-(* The [errorcase] function. *)
-
-let errorcase =
-  prefix "errorcase"
-
-(* The [error] function associated with a state [s]. *)
-
-let error s =
-  prefix (Printf.sprintf "error%d" (Lr1.number s))
-
-(* The constant associated with a state [s]. *)
-
-let statecon s =
-  dataprefix (Printf.sprintf "State%d" (Lr1.number s))
-
-let estatecon s =
-  EData (statecon s, [])
-
-let rec begins_with s1 s2 i1 i2 n1 n2 =
-  if i1 = n1 then
-    true
-  else if i2 = n2 then
-    false
-  else if String.unsafe_get s1 i1 = String.unsafe_get s2 i2 then
-    begins_with s1 s2 (i1 + 1) (i2 + 1) n1 n2
-  else
-    false
-
-let begins_with s1 s2 =
-  begins_with s1 s2 0 0 (String.length s1) (String.length s2)
-
-(* This predicate tells whether a data constructor represents a state.
-   It is based on the name, which is inelegant and inefficient. TEMPORARY *)
-
-let is_statecon : string -> bool =
-  begins_with (dataprefix "State")
-
-let pstatecon s =
-  PData (statecon s, [])
-
-let pstatescon ss =
-  POr (List.map pstatecon ss)
-
-(* The type of states. *)
-
-let tcstate =
-  prefix "state"
-
-let tstate =
-  TypApp (tcstate, [])
-
-(* The [print_token] function. This automatically generated function
-   is used in [--trace] mode. *)
-
-let print_token =
-  prefix "print_token"
-
-(* Fields in the environment record. *)
-
-let flexer =
-  prefix "lexer"
-
-let flexbuf =
-  prefix "lexbuf"
-
-let ftoken =
-  prefix "token"
-
-let fshifted =
-  prefix "shifted"
-
-let fstartp =
-  prefix "startp"
-
-let fendp =
-  prefix "endp"
-
-let fpreviouserror =
-  prefix "previouserror"
-
-(* The type variable that represents the stack tail. *)
-
-let tvtail =
-  tvprefix "tail"
-
-let ttail =
-  TypVar tvtail
-
-(* The result type for every function. TEMPORARY *)
-
-let tvresult =
-  tvprefix "return"
-
-let tresult =
-  TypVar tvresult
-
-(* ------------------------------------------------------------------------ *)
-(* Helpers for code production. *)
-
-let concatif condition xs =
-  if condition then
-    xs
-  else
-    []
-
-let insertif condition x =
-  if condition then
-    [ x ]
-  else
-    []
-
-let var x : expr =
-  EVar x
-
-let vars xs =
-  List.map var xs
-
-let pvar x : pattern =
-  PVar x
-
-let magic e : expr =
-  EMagic e
-
-let nomagic e =
-  e
-
-(* [env.shifted] is either [-1], which means that we have an [error] token
-   at the head of the token stream, or a nonnegative number. (The code in
-   [discard], which increments [env.shifted], takes care to avoid overflow.)
-   
-   The following assertion checks that [env.shifted] is not [-1], that is,
-   it is greater than or equal to [0]. Prior to 2011/01/24, two forms of
-   this test co-existed, but it seems more uniform to have just one form. *)
-
-let assertshifted : pattern * expr =
-  PUnit,
-  EApp (EVar "assert",
-       [ EApp (EVar "Pervasives.(<>)", [ ERecordAccess (EVar env, fshifted); EIntConst (-1) ]) ])
-
-let etuple = function
-  | [] ->
-      assert false
-  | [ e ] ->
-      e
-  | es ->
-      ETuple es
-
-let ptuple = function
-  | [] ->
-      assert false
-  | [ p ] ->
-      p
-  | ps ->
-      PTuple ps
-
-let trace (format : string) (args : expr list) : (pattern * expr) list =
-  if Settings.trace then
-    [ PUnit, EApp (EVar "Printf.fprintf", (EVar "Pervasives.stderr") :: (EStringConst (format ^"\n%!")) :: args) ]
-  else
-    []
-
-let tracecomment (comment : string) (body : expr) : expr =
-  if Settings.trace then
-    blet (trace comment [], body)
-  else
-    EComment (comment, body)
-
-let auto2scheme t =
-  scheme [ tvtail; tvresult ] t
-
-(* ------------------------------------------------------------------------ *)
-(* Determine whether at least one semantic action mentions $previouserror. *)
-
-let previouserror_required : bool =
-  Production.foldx (fun prod accu ->
-    accu || Action.has_previouserror (Production.action prod)
-  ) false
-
-(* ------------------------------------------------------------------------ *)
-(* Determine whether the [goto] function for nonterminal [nt] will push
-   a new cell onto the stack. If it doesn't, then that job is delegated
-   to the [run] functions called by [goto].
-
-   One could decide that [gotopushes] always returns true, and produce
-   decent code. As a refinement, we decide to drive the [push]
-   operation inside the [run] functions if all of them are able to
-   eliminate this operation via shiftreduce optimization. This will be
-   the case if all of these [run] functions implement a default
-   reduction of a non-epsilon production.
-
-   If that is not the case, then [gotopushes] returns true. In
-   general, it is good to place the [push] operation inside [goto],
-   because multiple [reduce] functions transfer control to [goto], and
-   [goto] in turn transfers control to multiple [run] functions. Hence,
-   this is where code sharing is maximal. All of the [run] functions
-   that [goto] can transfer control to expect a stack cell of the same
-   shape (indeed, the symbol [nt] is the same in every case, and the
-   state is always represented), which makes this decision possible. *)
-
-let gotopushes : Nonterminal.t -> bool =
-  Nonterminal.tabulate (fun nt ->
-    not (
-      Lr1.targets (fun accu _ target ->
-       accu &&
-       match Invariant.has_default_reduction target with
-       | Some (prod, _) ->
-           Production.length prod > 0
-       | None -> false
-      ) true (Symbol.N nt)
-    )
-  )
-
-(* ------------------------------------------------------------------------ *)
-(* Determine whether the [run] function for state [s] will push a new cell
-   onto the stack.
-
-   Our convention is this. If this [run] function is entered via a shift
-   transition, then it is in charge of pushing a new stack cell. If it
-   is entered via a goto transition, then it is in charge of pushing a
-   new cell if and only if the [goto] function that invoked it did not
-   do so. Last, if this [run] function is invoked directly by an entry
-   point, then it does not push a stack cell. *)
-
-let runpushes s =
-  match Lr1.incoming_symbol s with
-  | Some (Symbol.T _) ->
-      true
-  | Some (Symbol.N nt) ->
-      not (gotopushes nt)
-  | None ->
-      false
-
-(* ------------------------------------------------------------------------ *)
-(* In some situations, we are able to fuse a shift (or goto)
-   transition with a reduce transition, which means that we save the
-   cost (in speed and in code size) of pushing and popping the top
-   stack cell.
-
-   This involves creating a modified version of the [reduce] function
-   associated with a production [prod], where the contents of the top
-   stack cell are passed as extra parameters. Because we wish to avoid
-   code duplication, we perform this change only if all call sites for
-   [reduce] agree on this modified calling convention.
-
-   At the call site, the optimization is possible only if a stack cell
-   allocation exists and is immediately followed by a call to
-   [reduce]. This is the case inside the [run] function for state [s]
-   when [run] pushes a stack cell and performs a default reduction.
-
-   This optimization amounts to coalescing the push operation inside
-   [run] with the pop operation that follows inside [reduce].
-
-   Unit production elimination, on the other hand, would coalesce the
-   pop operation inside [reduce] with the push operation that follows
-   inside [goto]. For this reason, the two are contradictory. As a
-   result, we do not attempt to perform unit production elimination.
-   In fact, we did implement it at one point and found that it was
-   seldom applicable, because preference was given to the shiftreduce
-   optimization.
-
-   There are cases where shiftreduce optimization does not make any
-   difference, for instance, if production [prod] is never reduced, or
-   if the top stack cell is in fact nonexistent. *)
-
-let (shiftreduce : Production.index -> bool), shiftreducecount =
-  Production.tabulate (fun prod ->
-
-    (* Check that this production pops at least one stack cell. *)
-
-    Production.length prod > 0 &&
-
-    (* Check that all call sites push a stack cell and have a
-       default reduction. *)
-
-    Invariant.fold_reduced (fun s accu ->
-      accu && (match Invariant.has_default_reduction s with None -> false | Some _ -> true)
-           && (runpushes s)
-    ) prod true
-
-  )
-
-let () =
-  Error.logC 1 (fun f ->
-    Printf.fprintf f
-       "%d out of %d productions exploit shiftreduce optimization.\n"
-       shiftreducecount Production.n)
-
-(* Check that, as predicted above, [gotopushes nt] returns [false]
-   only when all of the [run] functions that follow it perform
-   shiftreduce optimization.
-
-   This can be proved as follows. If [gotopushes nt] returns [false],
-   then every successor state [s] has a default reduction for some
-   non-epsilon production [prod]. Furthermore, all states that can
-   reduce [prod] must be successors of that same [goto] function:
-   indeed, because the right-hand side of the production ends with
-   symbol [nt], every state that can reduce [prod] must be entered
-   through [nt]. So, at all such states, [runpushes] is true, which
-   guarantees that [shiftreduce prod] is true as well. *)
-
-let () =
-  assert (
-    Nonterminal.fold (fun nt accu ->
-      accu &&
-      if gotopushes nt then
-       true
-      else
-       Lr1.targets (fun accu _ target ->
-         accu &&
-         match Invariant.has_default_reduction target with
-         | Some (prod, _) ->
-             shiftreduce prod
-         | None ->
-             false
-        ) true (Symbol.N nt)
-    ) true
-  )
-
-(* ------------------------------------------------------------------------ *)
-(* Type production. *)
-
-(* This is the type of states. Only states that are represented are
-   declared. *)
-
-let statetypedef = {
-  typename =       tcstate;
-  typeparams =     [];
-  typerhs =        TDefSum (
-                    Lr1.fold (fun defs s ->
-                      if Invariant.represented s then {
-                        dataname =       statecon s;
-                        datavalparams =  [];
-                        datatypeparams = None
-                      } :: defs
-                      else defs
-                    ) []
-                   );
-  typeconstraint = None
-}
-
-(* This is the type of parser environments. *)
-
-let field modifiable name t =
-  {
-    modifiable = modifiable;
-    fieldname = name;
-    fieldtype = type2scheme t
-  }
-
-let envtypedef = {
-  typename = tcenv;
-  typeparams = [];
-  typerhs =
-    TDefRecord ([
-
-      (* The lexer itself. *)
-
-      field false flexer tlexer;
-
-      (* The lexing buffer. *)
-
-      field false flexbuf tlexbuf;
-
-      (* The last token that was read from the lexer. This is the
-        head of the token stream, unless [env.shifted] is [-1]. *)
-
-      field true ftoken ttoken;
-
-      (* The start position of the above token. *)
-
-      field true fstartp tposition;
-
-      (* The end position of the above token. *)
-
-      field true fendp tposition;
-
-      (* How many tokens were successfully shifted since the last
-        [error] token was shifted. When this counter is -1, the head
-        of the token stream is the [error] token, and the contents of
-        the [token] field is irrelevant. The token following [error]
-        is obtained by invoking the lexer again. *)
-
-      field true fshifted tint;
-
-    ] @
-
-    (* If at least one semantic action mentions $previouserror, then we keep
-       track of this information. *)
-
-    insertif previouserror_required (field true fpreviouserror tint)
-
-    );
-  typeconstraint = None
-}
-
-(* [curry] curries the top stack cell in a type [t] of the form
-   [(stack type) arrow (result type)]. [t] remains unchanged if the
-   stack type does not make at least one cell explicit. *)
-
-let curry = function
-  | TypArrow (TypTuple (tstack :: tcell), tresult) ->
-      TypArrow (tstack, marrow tcell tresult)
-  | TypArrow _ as t ->
-      t
-  | _ ->
-      assert false
-
-(* [curryif true] is [curry], [curryif false] is the identity. *)
-
-let curryif flag t =
-  if flag then curry t else t
-
-(* Types for stack cells. 
-
-   [celltype tailtype holds_state symbol] returns the type of a stack
-   cell. The parameter [tailtype] is the type of the tail of the
-   stack. The flag [holds_state] tells whether the cell holds a state.
-   The parameter [symbol] is used to determine whether the cell holds
-   a semantic value and what its type is.
-
-   A subtlety here and in [curry] above is that singleton stack cells
-   give rise to singleton tuple types, which the type printer
-   eliminates, but which do exist internally. As a result, [curry]
-   always correctly removes the top stack cell, even if it is a
-   singleton tuple cell. *)
-
-let celltype tailtype holds_state symbol _ =
-  TypTuple (
-    tailtype ::
-    insertif holds_state tstate @
-    semvtype symbol @
-    insertif (Invariant.startp symbol) tposition @
-    insertif (Invariant.endp symbol) tposition
-  )
-
-(* Types for stacks. 
-
-   [stacktype s] is the type of the stack at state
-   [s]. [reducestacktype prod] is the type of the stack when about to
-   reduce production [prod]. [gotostacktype nt] is the type of the
-   stack when the [goto] function associated with [nt] is called.
-
-   In all cases, the tail (that is, the unknown part) of the stack is
-   represented by [ttail], currently a type variable.
-
-   These stack types are obtained by folding [celltype] over a
-   description of the stack provided by module [Invariant]. *)
-
-let stacktype s =
-  Invariant.fold celltype ttail (Invariant.stack s)
-
-let reducestacktype prod =
-  Invariant.fold celltype ttail (Invariant.prodstack prod)
-
-let gotostacktype nt =
-  Invariant.fold celltype ttail (Invariant.gotostack nt)
-
-(* The type of the [run] function. As announced earlier, if [s] is the
-   target of shift transitions, the type of the stack is curried, that
-   is, the top stack cell is not yet allocated, so its contents are
-   passed as extra parameters. If [s] is the target of goto
-   transitions, the top stack cell is allocated. If [s] is a start
-   state, this issue makes no difference. *)
-
-let runtypescheme s =
-  auto2scheme (
-    arrow tenv (
-      curryif (runpushes s) (
-        arrow (stacktype s) tresult
-      )
-    )
-  )
-
-(* The type of the [action] function. The top stack cell is not
-   curried. There is an additional parameter of type [token]. *)
-
-let actiontypescheme s =
-  auto2scheme (marrow [ tenv; stacktype s; ttoken ] tresult)
-
-(* The type of the [goto] function. The top stack cell is curried. *)
-
-let gototypescheme nt =
-  auto2scheme (arrow tenv (curry (arrow (gotostacktype nt) tresult)))
-
-(* If [prod] is an epsilon production and if the [goto] function
-   associated with it expects a state parameter, then the [reduce]
-   function associated with [prod] also requires a state parameter. *)
-
-let reduce_expects_state_param prod =
-  let nt = Production.nt prod in
-  Production.length prod = 0 && 
-  Invariant.fold (fun _ holds_state _ _ -> holds_state) false (Invariant.gotostack nt)
-
-(* The type of the [reduce] function. If shiftreduce optimization
-   is performed for this production, then the top stack cell is
-   not explicitly allocated. *)
-
-let reducetypescheme prod =
-  auto2scheme (
-    arrow tenv (
-      curryif (shiftreduce prod) (
-       arrow (reducestacktype prod) (
-         arrowif (reduce_expects_state_param prod) tstate tresult
-       )
-      )
-    )
-  )
-
-(* The type of the [errorcase] function. The shape of the stack is
-   unknown, and is determined by examining the state parameter. *)
-
-let errorcasetypescheme =
-  auto2scheme (marrow [ tenv; ttail; tstate ] tresult)
-
-(* The type of the [error] function. The shape of the stack is the
-   one associated with state [s]. *)
-
-let errortypescheme s =
-  auto2scheme ( marrow [ tenv; stacktype s ] tresult)
-
-(* ------------------------------------------------------------------------ *)
-(* Code production preliminaries. *)
-
-(* This flag will be set to [true] if we ever raise the [Error]
-   exception. This happens when we unwind the entire stack without
-   finding a state that can handle errors. *)
-
-let can_die =
-  ref false
-
-(* A code pattern for an exception handling construct where both
-   alternatives are in tail position. Concrete syntax for this would
-   be [let x = e in e1 unless Error -> e2]. Since Objective Caml does
-   not support this construct, we emulate it using a combination of
-   [try/with], [match/with], and an [option] value. *)
-
-let letunless e x e1 e2 =
-  EMatch (
-    ETry (
-      EData ("Some", [ e ]),
-      [ { branchpat = PData (excname, []); branchbody = EData ("None", []) } ]
-    ),
-    [ { branchpat = PData ("Some", [ PVar x ]); branchbody = e1 };
-      { branchpat = PData ("None", []); branchbody = e2 } ]
-  )
-
-(* ------------------------------------------------------------------------ *)
-(* Calling conventions. *)
-
-(* The contents of a stack cell, exposed as individual parameters. The
-   choice of identifiers is suitable for use in the definition of
-   [run]. *)
-
-let runcellparams var holds_state symbol =
-  insertif holds_state (var state) @
-  symval symbol (var semv) @
-  insertif (Invariant.startp symbol) (var startp) @
-  insertif (Invariant.endp symbol) (var endp)
-
-(* The contents of a stack cell, exposed as individual parameters, again.
-   The choice of identifiers is suitable for use in the definition of a
-   [reduce] function.
-
-   [prod] is the production's index. The integer [i] tells which
-   symbol on the right-hand side we are focusing on, that is, which
-   symbol this stack cell is associated with. *)
-
-let reducecellparams prod i holds_state symbol =
-  let ids = Production.identifiers prod
-  and used = Production.used prod in
-
-  (* If the semantic value is used in the semantic action, then it is
-     bound to the variable [ids.(i)]. If the semantic value is not
-     used in the semantic action, then it is dropped using a wildcard
-     pattern. *)
-
-  let semvpat t =
-    if used.(i) then
-      PVar ids.(i)
-    else
-      PWildcard
-  in
-
-  insertif holds_state (if i = 0 then PVar state else PWildcard) @
-  symvalt symbol semvpat @
-  insertif (Invariant.startp symbol) (PVar (Printf.sprintf "_startpos_%s_" ids.(i))) @
-  insertif (Invariant.endp symbol) (PVar (Printf.sprintf "_endpos_%s_" ids.(i)))
-
-(* The contents of a stack cell, exposed as individual parameters,
-   again. The choice of identifiers is suitable for use in the
-   definition of [error]. *)
-
-let errorcellparams (i, pat) holds_state symbol _ =
-  i + 1,
-  ptuple (
-    pat ::
-    insertif holds_state (if i = 0 then PVar state else PWildcard) @
-    symval symbol PWildcard @
-    insertif (Invariant.startp symbol) PWildcard @
-    insertif (Invariant.endp symbol) PWildcard
-  )
-
-(* Calls to [run]. *)
-
-let runparams magic var s =
-  var env ::
-  magic (var stack) ::
-  concatif (runpushes s) (Invariant.fold_top (runcellparams var) [] (Invariant.stack s))
-
-let call_run s actuals =
-  EApp (EVar (run s), actuals)
-
-(* Calls to [action]. *)
-
-let actionparams var =
-  [ var env; var stack; var token ]
-
-let call_action s =
-   EApp (EVar (action s), actionparams var)
-
-(* The parameters to [reduce]. When shiftreduce optimization is in
-   effect, the top stack cell is not allocated, so extra parameters
-   are required. Note that [shiftreduce prod] and
-   [reduce_expects_state_param prod] are mutually exclusive
-   conditions, so the [state] parameter is never bound twice. *)
-
-let reduceparams prod =
-  PVar env ::
-  PVar stack ::
-  concatif (shiftreduce prod) (
-    Invariant.fold_top
-      (reducecellparams prod (Production.length prod - 1))
-    [] (Invariant.prodstack prod)
-  ) @
-  insertif (reduce_expects_state_param prod) (PVar state)
-
-(* Calls to [reduce]. One must specify the production [prod] as well
-   as the current state [s]. *)
-
-let call_reduce prod s =
-  let actuals =
-    (EVar env) ::
-    (EMagic (EVar stack)) ::
-    concatif (shiftreduce prod)
-      (Invariant.fold_top (runcellparams var) [] (Invariant.stack s))
-      (* compare with [runpushcell s] *) @
-    insertif (reduce_expects_state_param prod) (estatecon s)
-  in
-  EApp (EVar (reduce prod), actuals)
-
-(* Calls to [goto]. *)
-
-let gotoparams var nt =
-  var env ::
-  var stack ::
-  Invariant.fold_top (runcellparams var) [] (Invariant.gotostack nt)
-
-let call_goto nt =
-  EApp (EVar (goto nt), gotoparams var nt)
-
-(* Calls to [errorcase]. *)
-
-let errorcaseparams magic var =
-  [ var env; magic (var stack); var state ]
-
-let call_errorcase =
-  EApp (EVar errorcase, errorcaseparams magic var)
-
-(* Calls to [error]. *)
-
-let errorparams magic var =
-  [ var env; magic (var stack) ]
-
-let call_error magic s =
-  EApp (EVar (error s), errorparams magic var)
-
-let call_error_via_errorcase magic s = (* TEMPORARY document *)
-  if Invariant.represented s then
-    EApp (EVar errorcase, [ var env; magic (var stack); estatecon s ])
-  else
-    call_error magic s
-
-(* Calls to [assertfalse]. *)
-
-let call_assertfalse =
-  EApp (EVar assertfalse, [ EVar "()" ])
-
-(* ------------------------------------------------------------------------ *)
-(* Emit a warning when a state can do error recovery but does not
-   accept EOF. This can lead to non-termination if the end of file
-   is reached while attempting to recover from an error. *)
-
-let check_recoverer covered s =
-  match Terminal.eof with
-  | None ->
-      (* We do not know which token represents the end of file,
-        so we say nothing. *)
-      ()
-  | Some eof ->
-      if not (TerminalSet.mem eof covered) then
-       (* This state has no (shift or reduce) action at EOF. *)
-       Error.warning []
-         (Printf.sprintf
-            "state %d can perform error recovery, but does not accept EOF.\n\
-             ** Hitting the end of file during error recovery will cause non-termination."
-                 (Lr1.number s))
-
-(* ------------------------------------------------------------------------ *)
-(* Code production for the automaton functions. *)
-
-(* Count how many states actually perform error recovery. This figure
-   is, in general, inferior or equal to the number of states at which
-   [Invariant.recoverer] is true. Indeed, some of these states have a
-   default reduction, while some will accept every token; in either
-   case, error recovery is not performed. *)
-
-let recoverers =
-  ref 0
-
-(* Count how many states actually can peek at an error recovery. This
-   figure is, in general, inferior or equal to the number of states at
-   which [Invariant.errorpeeker] is true, because some of these states
-   have a default reduction and will not consult the lookahead
-   token. *)
-
-let errorpeekers =
-  ref 0
-
-(* Code for calling the reduction function for token [prod] upon
-   finding a token within [toks]. This produces a branch, to be
-   inserted in an [action] function for state [s]. *)
-
-let reducebranch toks prod s =
-  {
-    branchpat =
-      tokspat toks;
-    branchbody =
-      call_reduce prod s
-  } 
-
-(* Code for shifting from state [s] to state [s'] via the token [tok].
-   This produces a branch, to be inserted in an [action] function for
-   state [s].
-
-   The callee, [run s'], is responsible for taking the current token
-   off the input stream. (There is actually a case where the token is
-   *not* taken off the stream: when [s'] has a default reduction on
-   [#].)
-
-   It is also responsible for pushing a new stack cell. The rationale
-   behind this decision is that there may be multiple shift
-   transitions into [s'], so we actually share that code by placing it
-   inside [run s'] rather than inside every transition. *)
-
-let shiftbranchbody s tok s' =
-
-  (* Construct the actual parameters for [run s']. *)
-
-  let actuals =
-    (EVar env) ::
-    (EMagic (EVar stack)) ::
-    Invariant.fold_top (fun holds_state symbol ->
-      assert (Symbol.equal (Symbol.T tok) symbol);
-      insertif holds_state (estatecon s) @
-      tokval tok (EVar semv) @
-      insertif (Invariant.startp symbol) (ERecordAccess (EVar env, fstartp)) @
-      insertif (Invariant.endp symbol) (ERecordAccess (EVar env, fendp))
-    ) [] (Invariant.stack s')
-  in
-
-  (* Call [run s']. *)
-
-  tracecomment
-   (Printf.sprintf "Shifting (%s) to state %d" (Terminal.print tok) (Lr1.number s'))
-   (call_run s' actuals)
-
-let shiftbranch s tok s' =
-  assert (not (Terminal.pseudo tok));
-  {
-    branchpat =
-      PData (tokenprefix (Terminal.print tok), tokval tok (PVar semv));
-    branchbody =
-      shiftbranchbody s tok s'
-  }
-
-(* This generates code for pushing a new stack cell upon entering the
-   [run] function for state [s]. *)
-
-let runpushcell s e =
-  if runpushes s then
-    let contents = var stack :: Invariant.fold_top (runcellparams var) [] (Invariant.stack s) in
-    mlet [ pvar stack ] [ etuple contents ] e
-  else
-    e
-
-let runpushcellunless shiftreduce s e =
-  if shiftreduce then
-    EComment ("Not allocating top stack cell", e)
-  else
-    runpushcell s e
-
-(* This generates code for dealing with the lookahead token upon
-   entering the [run] function for state [s]. If [s] is the target of
-   a shift transition, then we must take the current token (which was
-   consumed in the shift transition) off the input stream. Whether [s]
-   was entered through a shift or a goto transition, we want to peek
-   at the next token, unless we are performing a default reduction.
-   The parameter [defred] tells which default reduction, if any, we
-   are about to perform. *)
-
-let gettoken s defred e =
-  match Lr1.incoming_symbol s, defred with
-
-  | Some (Symbol.T _), Some (_, toks)
-    when TerminalSet.mem Terminal.sharp toks ->
-      assert (TerminalSet.cardinal toks = 1);
-
-      (* There is a default reduction on token [#]. We cannot
-        request the next token, since that might drive the
-        lexer off the end of the input stream, so we cannot
-        call [discard]. Do nothing. *)
-
-      e
-
-  | Some (Symbol.T _), Some _ ->
-
-      (* There is some other default reduction. Discard the first
-        input token. *)
-
-      blet ([ PWildcard, EApp (EVar discard, [ EVar env ]) ], e)
-
-  | Some (Symbol.T _), None ->
-
-      (* There is no default reduction. Discard the first input token
-        and peek at the next one. *)
-
-      blet ([ PVar token, EApp (EVar discard, [ EVar env ]) ], e)
-
-  | (Some (Symbol.N _) | None), Some _ ->
-
-      (* There is some default reduction. Do not peek at the input
-        token. *)
-
-      e
-
-  | (Some (Symbol.N _) | None), None ->
-
-      (* There is no default reduction. Peek at the first input token,
-        without taking it off the input stream. This is normally done
-        by reading [env.token], unless the token might be [error]:
-        then, we check [env.shifted] first. *)
-
-      if Invariant.errorpeeker s then begin
-       incr errorpeekers;
-       EIfThenElse (
-         EApp (EVar "Pervasives.(=)", [ ERecordAccess (EVar env, fshifted); EIntConst (-1) ]),
-         tracecomment "Resuming error handling" (call_error_via_errorcase magic s),
-         blet ([ PVar token, ERecordAccess (EVar env, ftoken) ], e)
-        )
-      end
-      else
-       blet ([ assertshifted;
-               PVar token, ERecordAccess (EVar env, ftoken) ], e)
-
-(* This produces the definition of a [run] function. *)
-
-let rundef s body =
-  let body =
-    tracecomment (Printf.sprintf "State %d:" (Lr1.number s)) body
-  in {
-    valpublic = false;
-    valpat = PVar (run s);
-    valval = EAnnot (EFun (runparams nomagic pvar s, body), runtypescheme s)
-  }
-
-(* This produces the definition of an [action] function. *)
-
-let actiondef s body = {
-  valpublic = false;
-  valpat = PVar (action s);
-  valval = EAnnot (EFun (actionparams pvar, body), actiontypescheme s)
-} 
-
-(* This produces the comment attached with a default reduction. *)
-
-let defaultreductioncomment toks e =
-  EPatComment (
-    "Reducing without looking ahead at ",
-    tokspat toks,
-    e
-  )
-
-(* This produces some bookkeeping code that is used when initiating
-   error handling.
-
-   First, we copy [env.shifted] to [env.previouserror]. Of course,
-   this is done only if at least one semantic action uses the
-   [$previouserror] keyword.
-
-   Then, we reset the count of tokens shifted since the last error to
-   -1, so that it becomes zero *after* the error token itself is
-   shifted. By convention, when [shifted] is -1, the field [env.token]
-   becomes meaningless and one considers that the first token on the
-   input stream is [error]. As a result, the next peek at the
-   lookahead token will cause error handling to be resumed. The next
-   call to [discard] will take the [error] token off the input stream
-   and increment [env.shifted] to zero. *)
-
-let errorbookkeeping e =
-  tracecomment
-    "Initiating error handling"
-    (blet (
-      concatif previouserror_required 
-       [ PUnit, ERecordWrite (EVar env, fpreviouserror, ERecordAccess (EVar env, fshifted)) ] @
-      [ PUnit, ERecordWrite (EVar env, fshifted, EIntConst (-1)) ],
-      e
-    ))
-
-(* This code is used to indicate that a new error has been detected in
-   state [s]. [covered] is the set of tokens that [s] knows how to
-   handle.
-
-   If I am correct, the count of shifted tokens is never -1
-   here. Indeed, that would mean that we first found an error, and
-   then signaled another error before being able to shift the first
-   error token. My understanding is that this cannot happen: when the
-   first error is signaled, we end up at a state that is willing to
-   handle the error token, by a series of reductions followed by a
-   shift.
-
-   In the simplest case, the state [s] cannot do error recovery. In
-   that case, we initiate error handling, which is done by first
-   performing the standard bookkeeping described above, then
-   transferring control to the [error] function associated with [s].
-
-   If, on the other hand, [s] can do error recovery, then we check
-   whether any tokens at all were shifted since the last error
-   occurred. If none were, then we discard the current token and
-   transfer control back to the [action] function associated with [s].
-
-   The token is discarded via a call to [discard], followed by
-   resetting [env.shifted] to zero, to counter-act the effect of
-   [discard], which increments that counter. *)
-
-let initiate covered s =
-
-  blet (
-    [ assertshifted ],
-
-    if Invariant.recoverer s then begin
-
-      incr recoverers;
-      check_recoverer covered s;
-
-      EIfThenElse (
-       EApp (EVar "Pervasives.(=)", [ ERecordAccess (EVar env, fshifted); EIntConst 0 ]),
-       blet (
-         trace "Discarding last token read (%s)"
-               [ EApp (EVar print_token, [ ERecordAccess (EVar env, ftoken) ]) ] @
-         [
-           PVar token, EApp (EVar discard, [ EVar env ]);
-           PUnit, ERecordWrite (EVar env, fshifted, EIntConst 0)
-         ],
-         call_action s
-       ),
-       errorbookkeeping (call_error_via_errorcase magic s)
-      )
-
-    end
-    else
-      errorbookkeeping (call_error_via_errorcase magic s)
-
-  )
-
-(* This produces the definitions of the [run] and [action] functions
-   associated with state [s].
-
-   The [action] function implements the internal case analysis. It
-   receives the lookahead token as a parameter. It does not affect the
-   input stream. It does not set up exception handlers for dealing
-   with errors. The existence of this internal function is made
-   necessary by the error recovery mechanism (which discards tokens
-   when attempting to resynchronize after an error). In many states,
-   recovery can in fact not be performed, so no self-call to [action]
-   will be generated and [action] will be inlined into [run]. *)
-
-let rec runactiondef s : valdef list =
-
-  match Invariant.has_default_reduction s with
-  | Some (prod, toks) as defred ->
-
-      (* Perform reduction without looking ahead. In this case,
-        no separate [action] function is required.
-
-        If shiftreduce optimization is being performed, then no
-         stack cell is allocated. The contents of the top stack
-         cell are passed do [reduce] as extra parameters. *)
-
-      [
-       rundef s (
-          runpushcellunless (shiftreduce prod) s (
-           gettoken s defred (
-             defaultreductioncomment toks (
-               call_reduce prod s
-             )
-           )
-         )
-       )
-      ]
-
-  | None ->
-
-      (* If this state is willing to act on the error token, ignore
-        that -- this is taken care of elsewhere. *)
-
-      let transitions =
-       SymbolMap.remove (Symbol.T Terminal.error) (Lr1.transitions s)
-      and reductions =
-       TerminalMap.remove Terminal.error (Lr1.reductions s)
-      in
-
-      (* Construct the main case analysis that determines what action
-        should be taken next.
-
-        A default branch, where an error is detected, is added if the
-        analysis is not exhaustive. In the default branch, we
-        initiate error handling. *)
-
-      let covered, branches =
-       ProductionMap.fold (fun prod toks (covered, branches) ->
-         (* There is a reduction for these tokens. *)
-         TerminalSet.union toks covered,
-         reducebranch toks prod s :: branches
-       ) (Lr1.invert reductions) (TerminalSet.empty, [])
-      in
-
-      let covered, branches =
-       SymbolMap.fold (fun symbol s' (covered, branches) ->
-         match symbol with
-         | Symbol.T tok ->
-             (* There is a shift transition for this token. *)
-             TerminalSet.add tok covered,
-             shiftbranch s tok s' :: branches
-         | Symbol.N _ ->
-             covered, branches
-       ) transitions (covered, branches)
-      in
-
-      let branches =
-       if TerminalSet.subset TerminalSet.universe covered then
-         branches
-       else
-         branches @ [ { branchpat = PWildcard; branchbody = initiate covered s } ]
-      in
-
-      (* Finally, construct the code for [run] and [action]. The
-        former pushes things onto the stack, obtains the lookahead
-        token, and calls the [action] function. The latter performs
-        the main case analysis on the lookahead token. *)
-
-      [
-       rundef s (
-         runpushcell s (
-           gettoken s None (
-             call_action s
-           )
-         )
-       );
-       actiondef s (
-         EMatch (
-           EVar token,
-           branches
-         )
-       )
-      ]
-
-(* This is the body of the [reduce] function associated with
-   production [prod]. *)
-
-let reducebody prod =
-
-  (* Find out about the left-hand side of this production and about
-     the identifiers that have been bound to the symbols in the
-     right-hand side. These represent variables that we should bind to
-     semantic values before invoking the semantic action. *)
-
-  let nt, rhs = Production.def prod
-  and ids = Production.identifiers prod
-  and used = Production.used prod
-  and length = Production.length prod in
-
-  (* Build a pattern that represents the shape of the stack. Out of
-     the stack, we extract a state (except when the production is an
-     epsilon production) and a number of semantic values.
-
-     If shiftreduce optimization is being performed, then the top
-     stack cell is not explicitly allocated, so we do not include
-     it in the pattern that is built. *)
-
-  let (_ : int), pat =
-    Invariant.fold (fun (i, pat) holds_state symbol _ ->
-      i + 1,
-      if i = length - 1 && shiftreduce prod then
-       pat
-      else
-       ptuple (pat :: reducecellparams prod i holds_state symbol)
-    ) (0, PVar stack) (Invariant.prodstack prod)
-  in
-
-  (* If any identifiers refer to terminal symbols without a semantic
-     value, then bind these identifiers to the unit value. This
-     provides the illusion that every symbol, terminal or nonterminal,
-     has a semantic value. This is more regular and allows applying
-     operators such as ? to terminal symbols without a semantic
-     value. *)
-
-  let unitbindings =
-    Misc.foldi length (fun i unitbindings ->
-      if used.(i) then
-       match semvtype rhs.(i) with
-       | [] ->
-           (PVar ids.(i), EUnit) :: unitbindings
-       | _ ->
-           unitbindings
-      else
-       unitbindings
-    ) []
-  in
-
-  (* If necessary, determine start and end positions for the left-hand
-     side of the production. If the right-hand side is nonempty, this
-     is done by extracting position information out of the first and
-     last symbols of the right-hand side. If it is empty, then both
-     positions are taken to be the current lookahead token's start
-     position.
-
-     Note that [Keyword.has_leftstart keywords] does not imply
-     [Invariant.startp symbol], and similarly for end positions. *)
-
-  let symbol =
-    Symbol.N nt
-  in
-
-  let posbindings action =
-    let bind_startp =
-      Action.has_leftstart action || Invariant.startp symbol
-    and bind_endp =
-      Action.has_leftend action || Invariant.endp symbol
-    in
-    insertif bind_startp
-      ( PVar startp,
-       if length > 0 then
-         EVar (Printf.sprintf "_startpos_%s_" ids.(0))
-        else
-          ERecordAccess (EVar env, fstartp)
-      ) @
-    insertif bind_endp
-      ( PVar endp,
-       if length > 0 then
-         EVar (Printf.sprintf "_endpos_%s_" ids.(length - 1))
-        else
-          if bind_startp then EVar startp else ERecordAccess (EVar env, fstartp)
-      )
-  in
-
-  (* If this production is one of the start productions, then reducing
-     it means accepting the input. In that case, we return a final
-     semantic value and stop. Otherwise, we transfer control to the
-     [goto] function, unless the semantic action raises [Error], in
-     which case we transfer control to [errorcase]. *)
-
-  match Production.classify prod with
-  | Some nt ->
-
-      tracecomment
-        "Accepting"
-        (blet (
-         [ pat, EVar stack ],
-         EMagic (EVar ids.(0))
-       ))
-
-  | None ->
-
-      let action =
-       Production.action prod
-      in
-      let act =
-       EAnnot (Action.to_il_expr action, type2scheme (semvtypent nt))
-      in
-
-      tracecomment
-        (Printf.sprintf "Reducing production %s" (Production.print prod))
-        (blet (
-         (pat, EVar stack) ::
-         unitbindings @
-         posbindings action @
-         extrabindings fpreviouserror action,
-
-         (* If the semantic action is susceptible of raising [Error],
-            use a [let/unless] construct, otherwise use [let]. *)
-
-         if Action.has_syntaxerror action then
-           letunless act semv (call_goto nt) (errorbookkeeping call_errorcase)
-         else
-           blet ([ PVar semv, act ], call_goto nt)
-       ))
-
-(* This is the definition of the [reduce] function associated with
-   production [prod]. *)
-
-let reducedef prod =
-  {
-    valpublic =
-      false;
-    valpat =
-      PVar (reduce prod);
-    valval =
-      EAnnot (
-        EFun (
-          reduceparams prod,
-          reducebody prod
-        ),
-        reducetypescheme prod
-      )
-  }
-
-(* This generates code for pushing a new stack cell inside [goto]. *)
-
-let gotopushcell nt e =
-  if gotopushes nt then
-    let contents = var stack :: Invariant.fold_top (runcellparams var) [] (Invariant.gotostack nt) in
-    mlet [ pvar stack ] [ etuple contents ] e
-  else
-    e
-
-(* This is the heart of the [goto] function associated with
-   nonterminal [nt]. *)
-
-let gotobody nt =
-
-  (* Examine the current state to determine where to go next. *)
-
-  let branches =
-    Lr1.targets (fun branches sources target ->
-      {
-       branchpat =
-         pstatescon sources;
-       branchbody =
-         call_run target (runparams magic var target)
-      } :: branches
-    ) [] (Symbol.N nt)
-  in
-
-  match branches with
-  | [] ->
-
-      (* If there are no branches, then this [goto] function is never
-        invoked. The inliner will drop it, so whatever we generate
-        here is unimportant. *)
-
-      call_assertfalse
-
-  | [ branch ] ->
-
-      (* If there is only one branch, no case analysis is required.
-        This optimization is not strictly necessary if GADTs are used
-        by the compiler to prove that the case analysis is
-        exhaustive. It does improve readability, though, and is also
-        useful if the compiler does not have GADTs. *)
-
-      EPatComment (
-        "State should be ",
-        branch.branchpat,
-        branch.branchbody
-      )
-
-  | _ ->
-
-      (* In the general case, we keep the branches computed above and,
-        unless [nt] is universal, add a default branch, which is
-        theoretically useless but helps avoid warnings if the
-        compiler does not have GADTs. *)
-
-      let default = {
-        branchpat = PWildcard;
-        branchbody = call_assertfalse
-      } in
-      EMatch (
-        EVar state,
-        branches @ (if Invariant.universal (Symbol.N nt) then [] else [ default ])
-      )
-
-(* This the [goto] function associated with nonterminal [nt]. *)
-
-let gotodef nt = {
-  valpublic =
-    false;
-  valpat =
-    PVar (goto nt);
-  valval = 
-    EAnnot (EFun (gotoparams pvar nt, gotopushcell nt (gotobody nt)), gototypescheme nt)
-}
-
-(* ------------------------------------------------------------------------ *)
-(* Code production for the error handling functions. *)
-
-(* This is the body of the [error] function associated with state [s]. *)
-
-let handle s e =
-  tracecomment (Printf.sprintf "Handling error in state %d" (Lr1.number s)) e
-
-let errorbody s =
-  try
-    let s' = SymbolMap.find (Symbol.T Terminal.error) (Lr1.transitions s) in
-
-    (* There is a shift transition on error. *)
-
-    handle s (
-      shiftbranchbody s Terminal.error s'
-    )
-
-  with Not_found ->
-    try
-      let prods = TerminalMap.lookup Terminal.error (Lr1.reductions s) in
-      let prod = Misc.single prods in
-
-      (* There is a reduce transition on error. If shiftreduce
-        optimization is enabled for this production, then we must pop
-        an extra cell for [reduce]'s calling convention to be met. *)
-
-      let extrapop e =
-       if shiftreduce prod then
-         let pat =
-           ptuple (PVar stack :: Invariant.fold_top (runcellparams pvar) [] (Invariant.stack s))
-         in
-         blet ([ pat, EVar stack ], e)
-       else
-         e
-      in
-       
-      handle s (
-        extrapop (
-          call_reduce prod s
-        )
-      )
-
-    with Not_found ->
-
-      (* This state is unable to handle errors. Pop the stack to find
-         a state that does handle errors, a state that can further pop
-        the stack, or die. *)
-
-      match Invariant.rewind s with
-      | Invariant.Die ->
-         can_die := true;
-          ERaise errorval
-      | Invariant.DownTo (w, st) ->
-         let _, pat = Invariant.fold errorcellparams (0, PVar stack) w in
-         blet (
-           [ pat, EVar stack ],
-           match st with
-           | Invariant.Represented ->
-               call_errorcase
-           | Invariant.UnRepresented s ->
-               call_error magic s
-          )
-
-(* This is the [error] function associated with state [s]. *)
-
-let errordef s = {
-  valpublic =
-    false;
-  valpat =
-    PVar (error s);
-  valval =
-    EAnnot (
-      EFun (
-        errorparams nomagic pvar,
-        errorbody s
-      ),
-      errortypescheme s
-    )
-}
-
-(* This is the [errorcase] function. It examines its state parameter
-   and dispatches control to an appropriate [error] function. *)
-
-let errorcasedef =
-  let branches =
-    Lr1.fold (fun branches s ->
-      if Invariant.represented s then
-       {
-         branchpat  = pstatecon s;
-         branchbody = EApp (EVar (error s), [ EVar env; EMagic (EVar stack) ])
-        } :: branches
-      else
-       branches
-    ) []
-  in
-  {
-    valpublic =
-      false;
-    valpat =
-      PVar errorcase;
-    valval =
-      EAnnot (
-       EFun (
-         errorcaseparams nomagic pvar,
-         EMatch (
-           EVar state,
-           branches
-         )
-       ),
-       errorcasetypescheme
-      )
-  }
-
-(* ------------------------------------------------------------------------ *)
-(* Code production for the entry points. *)
-
-(* This is the entry point associated with a start state [s]. By
-   convention, it is named after the nonterminal [nt] that corresponds
-   to this state. This is a public definition.
-
-   The code initializes a parser environment, an empty stack, and
-   invokes [run]. *)
-
-let entrydef s = 
-  let nt = Item.startnt (Lr1.start2item s) in
-  let lexer = "lexer"
-  and lexbuf = "lexbuf" in
-  {
-    valpublic = true;
-    valpat = PVar (Nonterminal.print true nt);
-    valval = EAnnot (
-               EFun ( [ PVar lexer; PVar lexbuf ],
-                blet (
-                  [ PVar env, EApp (EVar initenv, [ EVar lexer; EVar lexbuf ]) ],
-                  EMagic (EApp (EVar (run s), [ EVar env; EUnit ]))
-                )
-              ),
-               entrytypescheme (Nonterminal.print true nt)
-             )
-  } 
-
-(* ------------------------------------------------------------------------ *)
-(* Code production for auxiliary functions. *)
-
-(* This is [assertfalse], used when internal failure is detected.
-   This should never happen if our tool is correct. *)
-
-let assertfalsedef = {
-  valpublic = false;
-  valpat = PVar assertfalse;
-  valval = 
-    EAnnot (
-      EFun ([ PUnit ],
-       blet ([
-           PUnit, EApp (EVar "Printf.fprintf",
-                      [ EVar "Pervasives.stderr";
-                        EStringConst "Internal failure -- please contact the parser generator's developers.\n%!" ]);
-         ],
-         EApp (EVar "assert", [ efalse ])
-       )
-      ),
-      scheme [ "a" ] (arrow tunit (tvar "a"))
-    )
-}
-
-(* This is [print_token], used to print tokens in [--trace] mode. *)
-
-let printtokendef =
-  destructuretokendef
-    print_token
-    tstring
-    false
-    (fun tok -> EStringConst (Terminal.print tok))
-
-(* This is [discard], used to take a token off the input stream and
-   query the lexer for a new one. The code queries the lexer for a new
-   token and stores it into [env.token], overwriting the previous
-   token. It also stores the start and positions of the new token.
-   Last, if [env.shifted] has not yet reached its limit, then it is
-   incremented.
-
-   We use the lexer's [lex_start_p] and [lex_curr_p] fields to extract
-   the start and end positions of the token that we just read. In
-   practice, it seems that [lex_start_p] can be inaccurate (that is
-   the case when the lexer calls itself recursively, instead of simply
-   recognizing an atomic pattern and returning immediately). However,
-   we are 100% compatible with ocamlyacc here, and there is no better
-   solution anyway. *)
-
-let discarddef = {
-  valpublic = false;
-  valpat = PVar discard;
-  valval =
-    let lexbuf = "lexbuf"
-    and shifted = "shifted" in
-    EAnnot (
-      EFun (
-       [ PVar env ],
-       blet ([
-         PVar lexbuf, ERecordAccess (EVar env, flexbuf);
-         PVar token, EApp (ERecordAccess (EVar env, flexer), [ EVar lexbuf ]);
-         PUnit, ERecordWrite (EVar env, ftoken, EVar token);
-         PUnit, ERecordWrite (EVar env, fstartp, ERecordAccess (EVar lexbuf, "Lexing.lex_start_p"));
-         PUnit, ERecordWrite (EVar env, fendp, ERecordAccess (EVar lexbuf, "Lexing.lex_curr_p")) ] @
-         trace "Lookahead token is now %s (%d-%d)"
-               [ EApp (EVar print_token, [ EVar token ]);
-                 ERecordAccess (ERecordAccess (EVar env, fstartp), "Lexing.pos_cnum");
-                 ERecordAccess (ERecordAccess (EVar env, fendp), "Lexing.pos_cnum") ] @ [
-         PVar shifted, EApp (EVar "Pervasives.(+)", [ ERecordAccess (EVar env, fshifted); EIntConst 1 ]);
-         PUnit, EIfThen (
-                   EApp (EVar "Pervasives.(>=)", [ EVar shifted; EIntConst 0 ]),
-                     ERecordWrite (EVar env, fshifted, EVar shifted)
-                 )
-         ],
-         EVar token
-       )
-      ),
-      type2scheme (arrow tenv ttoken)
-    )
-}
-
-(* This is [initenv], used to allocate a fresh parser environment.
-   It performs the very first call to the lexer, and fills in all
-   fields in a straightforward way. *)
-
-let initenvdef =
-  let lexer = "lexer"
-  and lexbuf = "lexbuf" in
-  {
-    valpublic = false;
-    valpat = PVar initenv;
-    valval = 
-      EAnnot (
-       EFun ( [ PVar lexer; PVar lexbuf ],
-         blet (
-           [ PVar token, EApp (EVar lexer, [ EVar lexbuf ]) ] @
-           trace "Lookahead token is now %s (%d-%d)"
-                 [ EApp (EVar print_token, [ EVar token ]);
-                   ERecordAccess (ERecordAccess (EVar lexbuf, "Lexing.lex_start_p"), "Lexing.pos_cnum");
-                   ERecordAccess (ERecordAccess (EVar lexbuf, "Lexing.lex_curr_p"), "Lexing.pos_cnum") ],
-           ERecord ([
-             (flexer, EVar lexer);
-             (flexbuf, EVar lexbuf);
-             (ftoken, EVar token);
-             (fstartp, ERecordAccess (EVar lexbuf, "Lexing.lex_start_p"));
-             (fendp, ERecordAccess (EVar lexbuf, "Lexing.lex_curr_p"));
-             (fshifted, EIntConst max_int)
-           ] @
-           insertif previouserror_required (fpreviouserror, EIntConst max_int)
-           )
-         )
-       ),
-        type2scheme (marrow [ tlexer; tlexbuf ] tenv)
-      )
-  } 
-
-(* ------------------------------------------------------------------------ *)
-(* Here is complete code for the parser. *)
-
-let program = {
-
-  paramdefs =
-    Front.grammar.UnparameterizedSyntax.parameters;
-
-  prologue =
-    Front.grammar.UnparameterizedSyntax.preludes;
-
-  excdefs =
-    [ excdef ];
-
-  typedefs =
-    tokentypedef @
-    [ envtypedef; statetypedef ];
-
-  nonrecvaldefs =
-    [ excvaldef ];
-
-  valdefs =
-    ProductionMap.fold (fun _ s defs ->
-      entrydef s :: defs
-    ) Lr1.entry (
-    Lr1.fold (fun defs s ->
-      runactiondef s @ errordef s :: defs
-    ) (
-    Nonterminal.foldx (fun nt defs ->
-      gotodef nt :: defs
-    ) (Production.fold (fun prod defs ->
-      if Invariant.ever_reduced prod then
-       reducedef prod :: defs
-      else
-       defs
-    ) [ discarddef; initenvdef; printtokendef; assertfalsedef; errorcasedef ])));
-
-  moduledefs =
-    [];
-       
-  postlogue =
-    Front.grammar.UnparameterizedSyntax.postludes
-
-} 
-
-(* ------------------------------------------------------------------------ *)
-(* We are done! *)
-
-let () =
-  Error.logC 1 (fun f ->
-    Printf.fprintf f
-       "%d out of %d states can peek at an error.\n\
-        %d out of %d states can do error recovery.\n"
-       !errorpeekers Lr1.n
-       !recoverers Lr1.n)
-
-let () =
-  if not !can_die then
-    Error.logC 1 (fun f -> Printf.fprintf f 
-      "The generated parser cannot raise Error.\n")
-
-let () =
-  Time.tick "Producing abstract syntax"
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/codeBackend.mli b/bundles/menhirLib/menhir-20120123/src/codeBackend.mli
deleted file mode 100644 (file)
index 45da7f0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* The (code-based) code generator. *)
-
-module Run (T : sig end) : sig
-
-  val program: IL.program
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/codeBits.ml b/bundles/menhirLib/menhir-20120123/src/codeBits.ml
deleted file mode 100644 (file)
index b4fabbb..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module provides a number of tiny functions that help produce
-   [IL] code. *)
-
-open IL
-
-(* The unit type. *)
-
-let tunit =
-  TypApp ("unit", [])
-
-(* The integer type. *)
-
-let tint =
-  TypApp ("int", [])
-
-(* The string type. *)
-
-let tstring =
-  TypApp ("string", [])
-
-(* The exception type. *)
-
-let texn =
-  TypApp ("exn", [])
-
-(* The type of lexer positions. *)
-
-let tposition =
-  TypApp ("Lexing.position", [])
-
-(* The type of lexer buffers. *)
-
-let tlexbuf =
-  TypApp ("Lexing.lexbuf", [])
-
-(* The type of untyped semantic values. *)
-
-let tobj =
-  TypApp ("Obj.t", [])
-
-(* Building a type variable. *)
-
-let tvar x : typ =
-  TypVar x
-
-(* Building a type scheme. *)
-
-let scheme qs t =
-  {
-    quantifiers = qs;
-    body = t
-  } 
-
-(* Building a type scheme with no quantifiers out of a type. *)
-
-let type2scheme t =
-  scheme [] t
-
-let pat2var = function
-  | PVar x ->
-      x
-  | _ ->
-      assert false
-
-(* [simplify] removes bindings of the form [let v = v in ...] and
-   [let _ = v in ...]. *)
-
-let rec simplify = function
-  | [] ->
-      []
-  | (PVar v1, EVar v2) :: bindings when v1 = v2 ->
-      (* Avoid a useless let binding. *)
-      simplify bindings
-  | (PWildcard, EVar _) :: bindings ->
-      (* Avoid a useless let binding. *)
-      simplify bindings
-  | binding :: bindings ->
-      binding :: simplify bindings
-
-(* Building a [let] construct, with on-the-fly simplification. *)
-
-let rec blet (bindings, body) =
-  match simplify bindings with
-  | [] ->
-      body
-  | bindings ->
-      ELet (bindings, body)
-
-let mlet formals actuals body =
-  blet (List.combine formals actuals, body)
-
-(* [bottom] is an expression that has every type. Its semantics is
-   irrelevant. *)
-
-let bottom =
-  ERaise (EData ("Not_found", []))
-
-(* Boolean constants. *)
-
-let efalse : expr =
-  EData ("false", [])
-
-let etrue : expr =
-  EData ("true", [])
-
-let eboolconst b =
-  if b then etrue else efalse
-
-(* These help build function types. *)
-
-let arrow typ body : typ =
-  TypArrow (typ, body)
-
-let arrowif flag typ body : typ =
-  if flag then
-    arrow typ body
-  else
-    body
-
-let marrow typs body : typ =
-  List.fold_right arrow typs body
-
-(* ------------------------------------------------------------------------ *)
-(* Here is a bunch of naming conventions. Our names are chosen to minimize
-   the likelihood that a name in a semantic action is captured. In other
-   words, all global definitions as well as the parameters to [reduce]
-   are given far-fetched names, unless [--no-prefix] was specified. Note
-   that the prefix must begin with '_'. This allows avoiding warnings
-   about unused variables with ocaml 3.09 and later. *)
-
-let prefix name =
-  if Settings.noprefix then
-    name
-  else
-    "_menhir_" ^ name
-
-let dataprefix name =
-  if Settings.noprefix then
-    name
-  else
-    "Menhir" ^ name
-
-let tvprefix name =
-  if Settings.noprefix then
-    name
-  else
-    "ttv_" ^ name
diff --git a/bundles/menhirLib/menhir-20120123/src/codeBits.mli b/bundles/menhirLib/menhir-20120123/src/codeBits.mli
deleted file mode 100644 (file)
index 81c7fd5..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module provides a number of tiny functions that help produce
-   [IL] code. *)
-
-open IL
-
-(* Standard types. *)
-
-val tunit: typ
-val tint: typ
-val tstring: typ
-val texn: typ
-val tposition: typ
-val tlexbuf: typ
-val tobj : typ
-
-(* Building a type variable. *)
-
-val tvar: string -> typ
-
-(* Building a type scheme. *)
-
-val scheme: string list -> typ -> typescheme
-val type2scheme: typ -> typescheme
-
-(* Projecting out of a [PVar] pattern. *)
-
-val pat2var: pattern -> string
-
-(* Building a [let] construct, with on-the-fly simplification. *)
-
-val blet: (pattern * expr) list * expr -> expr
-val mlet: pattern list -> expr list -> expr -> expr
-
-(* [bottom] is an expression that has every type. Its semantics is
-   irrelevant. *)
-
-val bottom: expr
-
-(* Boolean constants. *)
-
-val etrue: expr
-val efalse: expr
-val eboolconst: bool -> expr
-
-(* These help build function types. *)
-
-val arrow: typ -> typ -> typ
-val arrowif: bool -> typ -> typ -> typ
-val marrow: typ list -> typ -> typ
-
-(* These functions are used to generate names in menhir's namespace. *)
-val prefix: string -> string
-val dataprefix: string -> string
-val tvprefix: string -> string
diff --git a/bundles/menhirLib/menhir-20120123/src/codePieces.ml b/bundles/menhirLib/menhir-20120123/src/codePieces.ml
deleted file mode 100644 (file)
index a148d6f..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module defines many internal naming conventions for use by the
-   two code generators, [CodeBackend] and [TableBackend]. It also offers
-   a few code generation facilities. *)
-
-open IL
-open CodeBits
-open Grammar
-
-(* ------------------------------------------------------------------------ *)
-
-(* Naming conventions. *)
-
-(* The type variable associated with a nonterminal [nt]. *)
-
-let ntvar nt =
-  Infer.ntvar (Nonterminal.print true nt)
-
-(* The variable that holds the environment. This is a parameter to all
-   functions. We do not make it a global variable because we wish to
-   preserve re-entrancy. *)
-
-let env =
-   prefix "env"
-
-(* A variable used to hold a semantic value. *)
-
-let semv =
-  "_v"
-
-(* A variable used to hold a stack. *)
-
-let stack =
-  prefix "stack"
-
-(* A variable used to hold a state. *)
-
-let state =
-  prefix "s"
-
-(* A variable used to hold a token. *)
-
-let token =
-  "_tok"
-
-(* Variables used to hold start and end positions. Do not change these
-   names! They are chosen to coincide with the $startpos and $endpos
-   keywords, which the lexer rewrites to _startpos and _endpos, so
-   that binding these variables before executing a semantic action is
-   meaningful. *)
-
-let startp =
-  "_startpos"
-
-let endp =
-  "_endpos"
-
-(* ------------------------------------------------------------------------ *)
-
-(* Types for semantic values. *)
-
-(* [semvtypent nt] is the type of the semantic value associated
-   with nonterminal [nt]. *)
-
-let semvtypent nt =
-  match Nonterminal.ocamltype nt with
-  | None ->
-
-      (* [nt] has unknown type. If we we have run [Infer], then this
-        can't happen. However, running type inference is only an
-        option, so we still have to deal with that case. *)
-
-      TypVar (ntvar nt)
-
-  | Some ocamltype ->
-
-      (* [nt] has known type. *)
-
-      TypTextual ocamltype
-
-(* [semvtypetok tok] is the type of the semantic value associated with
-   token [tok]. There is no such type if the token does not have a
-   semantic value. *)
-
-let semvtypetok tok =
-  match Terminal.ocamltype tok with
-  | None ->
-
-      (* Token has unit type and is omitted in stack cell. *)
-
-      []
-
-  | Some ocamltype ->
-
-      (* Token has known type. *)
-
-      [ TypTextual ocamltype ]
-
-(* [semvtype symbol] is the type of the semantic value associated with
-   [symbol]. *)
-
-let semvtype = function
-  | Symbol.T tok ->
-      semvtypetok tok
-  | Symbol.N nt ->
-      [ semvtypent nt ]
-
-(* [symvalt] returns the empty list if the symbol at hand carries no
-   semantic value and the singleton list [[f t]] if it carries a
-   semantic value of type [t]. *)
-
-let symvalt symbol f =
-  match semvtype symbol with
-  | [] ->
-      []
-  | [ t ] ->
-      [ f t ]
-  | _ ->
-      assert false
-
-(* [symval symbol x] returns either the empty list or the singleton
-   list [[x]], depending on whether [symbol] carries a semantic
-   value. *)
-
-let symval symbol x =
-  match semvtype symbol with
-  | [] ->
-      []
-  | [ t ] ->
-      [ x ]
-  | _ ->
-      assert false
-
-(* [tokval] is a version of [symval], specialized for terminal symbols. *)
-
-let tokval tok x =
-  symval (Symbol.T tok) x
-
-(* ------------------------------------------------------------------------ *)
-
-(* Patterns for tokens. *)
-
-(* [tokpat tok] is a pattern that matches the token [tok], without binding
-   its semantic value. *)
-
-let tokpat tok =
-  PData (TokenType.tokenprefix (Terminal.print tok), tokval tok PWildcard)
-
-(* [tokpatv tok] is a pattern that matches the token [tok], and binds
-   its semantic value, if it has one, to the variable [semv]. *)
-
-let tokpatv tok =
-  PData (TokenType.tokenprefix (Terminal.print tok), tokval tok (PVar semv))
-
-(* [tokspat toks] is a pattern that matches any token in the set [toks],
-   without binding its semantic value. *)
-
-let tokspat toks =
-  POr (
-    TerminalSet.fold (fun tok pats ->
-      tokpat tok :: pats
-    ) toks []
-  )
-
-(* [destructuretokendef name codomain bindsemv branch] generates the
-   definition of a function that destructures tokens. [name] is the
-   name of the function that is generated. [codomain] is its return
-   type. [bindsemv] tells whether the variable [semv] should be
-   bound. [branch] is applied to each (non-pseudo) terminal and must
-   produce code for each branch. *)
-
-let destructuretokendef name codomain bindsemv branch = {
-  valpublic = false;
-  valpat = PVar name;
-  valval =
-    EAnnot (
-      EFun ([ PVar token ],
-       EMatch (EVar token,
-         Terminal.fold (fun tok branches ->
-           if Terminal.pseudo tok then
-             branches
-           else
-             { branchpat = (if bindsemv then tokpatv else tokpat) tok;
-               branchbody = branch tok } :: branches
-         ) []
-       )
-      ),
-      type2scheme (arrow TokenType.ttoken codomain)
-    )
-}
-
-(* ------------------------------------------------------------------------ *)
-
-(* Bindings for exotic keywords. *)
-
-(* [extrabindings fpreviouserror action] provides definitions for the
-   [$startofs], [$endofs], and [$previouserror] keywords, if required
-   by a semantic action. The parameter [fpreviouserror] is the name of
-   the [previouserror] field in the environment -- the table-based and
-   code-based back-ends use different names. The parameter [action] is
-   the semantic action within which these keywords might be used. *)
-
-(* The [ofs] keyword family is defined in terms of the [pos] family by
-   accessing the [pos_cnum] field. The [$previouserror] keyword simply
-   provides access to the current value of [env.previouserror]. *)
-
-let extrabindings fpreviouserror action =
-  Keyword.KeywordSet.fold (fun keyword bindings ->
-    match keyword with
-    | Keyword.Dollar _
-    | Keyword.Position (_, _, Keyword.FlavorPosition)
-    | Keyword.SyntaxError ->
-       bindings
-    | Keyword.Position (s, w, (Keyword.FlavorOffset as f)) ->
-       (PVar (Keyword.posvar s w f),
-        ERecordAccess (EVar (Keyword.posvar s w Keyword.FlavorPosition), "Lexing.pos_cnum")) :: bindings
-    | Keyword.PreviousError ->
-       (PVar "_previouserror", ERecordAccess (EVar env, fpreviouserror)) :: bindings
-  ) (Action.keywords action) []
-
-(* ------------------------------------------------------------------------ *)
-
-(* A global variable holds the exception [Error]. *)
-
-(* We preallocate the [Error] exception and store it into a global
-   variable. This allows saving code at the sites where the exception
-   is raised. Don't change the conventional name [_eRR], it is shared
-   with the lexer, which replaces occurrences of the [$syntaxerror]
-   keyword with [(raise _eRR)]. *)
-
-let parse_error =
-  "_eRR"
-
-let errorval =
-  EVar parse_error
-
-let excvaldef = {
-  valpublic = false;
-  valpat = PVar parse_error;
-  valval = EData (Interface.excname, [])
-} 
-
diff --git a/bundles/menhirLib/menhir-20120123/src/codePieces.mli b/bundles/menhirLib/menhir-20120123/src/codePieces.mli
deleted file mode 100644 (file)
index 9e760fa..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module defines many internal naming conventions for use by the
-   two code generators, [CodeBackend] and [TableBackend]. It also offers
-   a few code generation facilities. *)
-
-open IL
-open Grammar
-
-(* ------------------------------------------------------------------------ *)
-
-(* Naming conventions. *)
-
-(* The type variable associated with a nonterminal [nt]. *)
-
-val ntvar : Nonterminal.t -> string
-
-(* The variable that holds the environment. This is a parameter to all
-   functions. We do not make it a global variable because we wish to
-   preserve re-entrancy. *) 
-
-val env : string
-
-(* A variable used to hold a semantic value. *)
-
-val semv : string
-
-(* A variable used to hold a stack. *)
-
-val stack: string
-
-(* A variable used to hold a state. *)
-
-val state: string
-
-(* A variable used to hold a token. *)
-
-val token: string
-
-(* Variables used to hold start and end positions. *)
-
-val startp: string
-val endp: string
-
-(* ------------------------------------------------------------------------ *)
-
-(* Types for semantic values. *)
-
-(* [semvtypent nt] is the type of the semantic value associated
-   with nonterminal [nt]. *)
-
-val semvtypent : Nonterminal.t -> typ
-
-(* [semvtypetok tok] is the type of the semantic value associated with
-   token [tok]. There is no such type if the token does not have a
-   semantic value. *)
-
-val semvtypetok : Terminal.t -> typ list
-
-(* [semvtype symbol] is the type of the semantic value associated with
-   [symbol]. *)
-
-val semvtype : Symbol.t -> typ list
-
-(* [symvalt] returns the empty list if the symbol at hand carries no
-   semantic value and the singleton list [[f t]] if it carries a
-   semantic value of type [t]. *)
-
-val symvalt : Symbol.t -> (typ -> 'a) -> 'a list
-
-(* [symval symbol x] returns either the empty list or the singleton
-   list [[x]], depending on whether [symbol] carries a semantic
-   value. *)
-
-val symval : Symbol.t -> 'a -> 'a list
-
-(* [tokval] is a version of [symval], specialized for terminal symbols. *)
-
-val tokval : Terminal.t -> 'a -> 'a list
-
-(* ------------------------------------------------------------------------ *)
-
-(* Patterns for tokens. *)
-
-(* [tokpat tok] is a pattern that matches the token [tok], without binding
-   its semantic value. *)
-
-val tokpat:  Terminal.t -> pattern
-
-(* [tokpatv tok] is a pattern that matches the token [tok], and binds
-   its semantic value, if it has one, to the variable [semv]. *)
-
-val tokpatv: Terminal.t -> pattern
-
-(* [tokspat toks] is a pattern that matches any token in the set [toks],
-   without binding its semantic value. *)
-
-val tokspat: TerminalSet.t -> pattern
-
-(* [destructuretokendef name codomain bindsemv branch] generates the
-   definition of a function that destructure tokens. [name] is the
-   name of the function that is generated. [codomain] is its return
-   type. [bindsemv] tells whether the variable [semv] should be
-   bound. [branch] is applied to each (non-pseudo) terminal and must
-   produce code for each branch. *)
-
-val destructuretokendef: string -> typ -> bool -> (Terminal.t -> expr) -> valdef
-
-(* ------------------------------------------------------------------------ *)
-
-(* Bindings for exotic keywords. *)
-
-(* This provides definitions for the [$startofs], [$endofs], and
-   [$previouserror] keywords, if required by a semantic action. The
-   [ofs] keyword family is defined in terms of the [pos] family by
-   accessing the [pos_cnum] field. The [$previouserror] keyword simply
-   provides access to the current value of [env.previouserror]. *)
-
-val extrabindings: string -> Action.t -> (pattern * expr) list
-
-(* ------------------------------------------------------------------------ *)
-
-(* A global variable holds the exception [Error]. *)
-
-(* The definition of this global variable. *)
-
-val excvaldef: valdef
-
-(* A reference to this global variable. *)
-
-val errorval: expr
-
diff --git a/bundles/menhirLib/menhir-20120123/src/compressedBitSet.ml b/bundles/menhirLib/menhir-20120123/src/compressedBitSet.ml
deleted file mode 100644 (file)
index 89f3f03..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* A compressed (or should we say sparse?) bit set is a list of pairs
-   of integers. The first component of every pair is an index, while
-   the second component is a bit field. The list is sorted by order
-   of increasing indices. *)
-
-type t =
-  | N
-  | C of int * int * t
-
-type element =
-    int
-
-let word_size =
-  Sys.word_size - 1
-
-let empty =
-  N
-
-let is_empty = function
-  | N ->
-      true
-  | C _ ->
-      false
-
-let add i s = 
-  let ioffset = i mod word_size in
-  let iaddr = i - ioffset
-  and imask = 1 lsl ioffset in
-  let rec add = function
-    | N ->
-       (* Insert at end. *)
-       C (iaddr, imask, N)
-    | C (addr, ss, qs) as s ->
-       if iaddr < addr then
-         (* Insert in front. *)
-         C (iaddr, imask, s)
-       else if iaddr = addr then
-         (* Found appropriate cell, update bit field. *)
-         let ss' = ss lor imask in
-         if ss' = ss then
-           s
-         else
-           C (addr, ss', qs)
-       else
-         (* Not there yet, continue. *)
-         let qs' = add qs in
-         if qs == qs' then
-           s
-         else
-           C (addr, ss, qs')
-  in
-  add s
-    
-let singleton i = 
-   add i N
-
-let remove i s = 
-  let ioffset = i mod word_size in
-  let iaddr = i - ioffset
-  and imask = 1 lsl ioffset in
-  let rec remove = function
-    | N ->
-       N
-    | C (addr, ss, qs) as s ->
-       if iaddr < addr then
-         s
-       else if iaddr = addr then
-         (* Found appropriate cell, update bit field. *)
-         let ss' = ss land (lnot imask) in
-         if ss' = 0 then
-           qs
-         else if ss' = ss then
-           s
-         else
-           C (addr, ss', qs)
-       else
-         (* Not there yet, continue. *)
-         let qs' = remove qs in
-         if qs == qs' then
-           s
-         else
-           C (addr, ss, qs')
-  in
-  remove s
-    
-let rec fold f s accu = 
-  match s with
-  | N ->
-      accu
-  | C (base, ss, qs) ->
-      let limit = base + word_size in
-      let rec loop i ss accu =
-       if i = limit then
-         accu
-       else
-         loop (i + 1) (ss lsr 1) (if ss land 1 = 1 then f i accu else accu)
-      in
-      fold f qs (loop base ss accu)
-
-let iter f s =
-  fold (fun x () -> f x) s ()
-
-let cardinal s = 
-  fold (fun _ m -> m + 1) s 0
-
-let elements s =
-  fold (fun tl hd -> tl :: hd) s []
-
-let rec subset s1 s2 = 
-  match s1, s2 with
-  | N, _ ->
-      true
-  | _, N ->
-      false
-  | C (addr1, ss1, qs1), C (addr2, ss2, qs2) -> 
-      if addr1 < addr2 then
-       false
-      else if addr1 = addr2 then
-       if (ss1 land ss2) <> ss1 then 
-         false
-       else
-         subset qs1 qs2
-      else 
-       subset s1 qs2
-
-let mem i s =
-  subset (singleton i) s
-
-let rec union s1 s2 =  
-  match s1, s2 with
-  | N, s
-  | s, N ->
-      s
-  | C (addr1, ss1, qs1), C (addr2, ss2, qs2) ->
-      if addr1 < addr2 then
-       C (addr1, ss1, union qs1 s2)
-      else if addr1 > addr2 then
-       let s = union s1 qs2 in
-       if s == qs2 then
-         s2
-       else 
-         C (addr2, ss2, s)
-      else 
-       let ss = ss1 lor ss2 in
-       let s = union qs1 qs2 in
-       if ss == ss2 && s == qs2 then 
-         s2 
-       else
-         C (addr1, ss, s)
-
-let rec inter s1 s2 =  
-  match s1, s2 with
-  | N, _
-  | _, N ->
-      N
-  | C (addr1, ss1, qs1), C (addr2, ss2, qs2) ->
-      if addr1 < addr2 then
-       inter qs1 s2
-      else if addr1 > addr2 then
-       inter s1 qs2
-      else 
-       let ss = ss1 land ss2 in
-       let s = inter qs1 qs2 in
-       if ss = 0 then
-         s
-       else
-         if (ss = ss1) && (s == qs1) then
-           s1
-         else
-           C (addr1, ss, s)
-
-exception Found of int
-
-let choose s = 
-  try
-    iter (fun x ->
-      raise (Found x)
-    ) s;
-    raise Not_found
-  with Found x ->
-    x
-
-let rec compare s1 s2 = 
-  match s1, s2 with
-      N, N ->  0
-    | _, N ->  1
-    | N, _ -> -1
-    | C (addr1, ss1, qs1), C (addr2, ss2, qs2) ->
-       if addr1 < addr2 then -1
-       else if addr1 > addr2 then 1
-       else if ss1 < ss2 then -1
-       else if ss1 > ss2 then 1
-       else compare qs1 qs2
-
-let rec equal s1 s2 =
-  compare s1 s2 = 0
-
-let rec disjoint s1 s2 = 
-  match s1, s2 with
-  | N, _
-  | _, N ->
-      true
-  | C (addr1, ss1, qs1), C (addr2, ss2, qs2) -> 
-      if addr1 = addr2 then
-       if (ss1 land ss2) = 0 then 
-         disjoint qs1 qs2
-       else 
-         false
-      else if addr1 < addr2 then 
-       disjoint qs1 s2
-      else 
-       disjoint s1 qs2
-
diff --git a/bundles/menhirLib/menhir-20120123/src/compressedBitSet.mli b/bundles/menhirLib/menhir-20120123/src/compressedBitSet.mli
deleted file mode 100644 (file)
index b12f417..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-include GSet.S with type element = int
diff --git a/bundles/menhirLib/menhir-20120123/src/concreteSyntax.mli b/bundles/menhirLib/menhir-20120123/src/concreteSyntax.mli
deleted file mode 100644 (file)
index 5010af9..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: concreteSyntax.mli,v 1.3 2005/12/01 16:20:06 regisgia Exp $ *)
-type grammar =
-    { 
-      pg_filename         : Syntax.filename;
-      pg_declarations     : (Syntax.declaration Positions.located) list;
-      pg_rules             : Syntax.parameterized_rule list;
-      pg_trailer          : Syntax.trailer option;
-    }
-
-    
diff --git a/bundles/menhirLib/menhir-20120123/src/conflict.ml b/bundles/menhirLib/menhir-20120123/src/conflict.ml
deleted file mode 100644 (file)
index eb64d77..0000000
+++ /dev/null
@@ -1,496 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-(* -------------------------------------------------------------------------- *)
-(* Our output channel. *)
-
-let out =
-  lazy (open_out (Settings.base ^ ".conflicts"))
-
-(* -------------------------------------------------------------------------- *)
-(* Explaining shift actions. *)
-
-(* The existence of a shift action stems from the existence of a shift
-   item in the LR(0) core that underlies the LR(1) state of interest.
-   That is, lookahead sets are not relevant. The existence of a shift
-   item in the LR(0) core is explained by finding a path from a start
-   item to the shift item in the LR(0) nondeterministic automaton,
-   such that the symbols read along this path form the (previously
-   fixed) symbol string that leads to the conflict state in the LR(1)
-   automaton. There may be several such paths: a shortest one is
-   chosen. There may also be several shift items in the conflict
-   state: an arbitrary one is chosen. I believe it would not be
-   interesting to display traces for several shift items: they would
-   be identical except in their last line (where the desired shift
-   item actually appears). *)
-
-(* Symbolic execution of the nondeterministic LR(0) automaton. *)
-
-(* Configurations are pairs of an LR(0) item and an offset into
-   the input string, which indicates how much has been read so
-   far. *)
-
-type configuration0 =
-    Item.t * int
-
-(* This function builds a derivation out of a (nonempty, reversed) sequence of
-   configurations. The derivation is constructed from bottom to top, that is,
-   beginning at the last configuration and moving back towards to the start
-   configuration. *)
-
-let rec follow derivation offset' = function
-  | [] ->
-      assert (offset' = 0);
-      derivation
-  | (item, offset) :: configs ->
-      let _, _, rhs, pos, _ = Item.def item in
-      let derivation =
-       if offset = offset' then
-         (* This is an epsilon transition. Put a new root node on top of
-            the existing derivation. *)
-         Derivation.build pos rhs derivation None
-       else
-         (* This was a shift transition. Tack symbol in front of the
-            forest. *)
-         Derivation.prepend rhs.(pos) derivation
-      in
-      follow derivation offset configs
-
-(* Symbolic execution begins with a start item (corresponding
-   to one of the automaton's entry nodes), a fixed string of
-   input symbols, to be fully consumed, and a goal item. The
-   objective is to find a path through the automaton that
-   leads from the start configuration [(stop, 0)] to the goal
-   configuration [(stop, n)], where [n] is the length of the
-   input string. The automaton is explored via breadth-first
-   search. A hash table is used to record which configurations
-   have been visited and to build a spanning tree of shortest
-   paths. *)
-
-exception Done
-
-let explain_shift_item
-    (start : Item.t)
-    (input : Symbol.t array)
-    (stop : Item.t)
-    : Derivation.t =
-
-  let n =
-    Array.length input
-  in
-
-  let table : (configuration0, configuration0 option) Hashtbl.t =
-    Hashtbl.create 1023
-  in
-
-  let queue : configuration0 Queue.t =
-    Queue.create()
-  in
-
-  let enqueue ancestor config =
-    try
-      let _ = Hashtbl.find table config in
-      ()
-    with Not_found ->
-      Hashtbl.add table config ancestor;
-      Queue.add config queue
-  in
-
-  enqueue None (start, 0);
-  try
-    Misc.qiter (function (item, offset) as config ->
-
-      (* If the item we're looking at is the goal item and if
-        we have read all of the input symbols, stop. *)
-
-      if (Item.equal item stop) && (offset = n) then
-       raise Done;
-
-      (* Otherwise, explore the transitions out of this item. *)
-
-      let prod, _, rhs, pos, length = Item.def item in
-
-      (* Shift transition, followed only if the symbol matches
-        the symbol found in the input string. *)
-
-      if (pos < length)
-      && (offset < n)
-      && (Symbol.equal rhs.(pos) input.(offset)) then begin
-       let config' = (Item.import (prod, pos+1), offset+1) in
-       enqueue (Some config) config'
-      end;
-
-      (* Epsilon transitions. *)
-
-      if pos < length then
-       match rhs.(pos) with
-       | Symbol.N nt ->
-           Production.iternt nt (fun prod ->
-             let config' = (Item.import (prod, 0), offset) in
-             enqueue (Some config) config'
-            )
-       | Symbol.T _ ->
-           ()
-
-    ) queue;
-    assert false
-  with Done ->
-
-    (* We have found a (shortest) path from the start configuration to
-       the goal configuration. Turn it into an explicit derivation. *)
-
-    let configs = Misc.materialize table (stop, n) in
-    let _, _, rhs, pos, _ = Item.def stop in
-    let derivation = Derivation.tail pos rhs in
-    let derivation = follow derivation n configs in
-    derivation
-
-(* -------------------------------------------------------------------------- *)
-(* Explaining reduce actions. *)
-
-(* The existence of a reduce action stems from the existence of a
-   reduce item, whose lookahead set contains the token of interest, in
-   the state of interest. Here, lookahead sets are relevant only
-   insofar as they contain or do not contain the token of interest --
-   in other words, lookahead sets can be abstracted by Boolean
-   values. The existence of the reduce item is explained by finding a
-   path from a start item to the reduce item in the LR(1)
-   nondeterministic automaton, such that the symbols read along this
-   path form the (previously fixed) symbol string that leads to the
-   conflict state in the LR(1) automaton. There may be several such
-   paths: a shortest one is chosen. *)
-
-(* Symbolic execution of the nondeterministic LR(1) automaton. *)
-
-(* Configurations are pairs of an LR(1) item and an offset into the
-   input string, which indicates how much has been read so far. An
-   LR(1) item is itself represented as the combination of an LR(0)
-   item and a Boolean flag, telling whether the token of interest
-   appears or does not appear in the lookahead set. *)
-
-type configuration1 =
-    Item.t * bool * int
-
-(* This function builds a derivation out of a sequence of configurations. The
-   end of the sequence is dealt with specially -- we want to explain how the
-   lookahead symbol appears and is inherited. Once that is done, the rest
-   (that is, the beginning) of the derivation is dealt with as above. *)
-
-let config1toconfig0 (item, _, offset) =
-  (item, offset)
-
-let rec follow1 tok derivation offset' = function
-  | [] ->
-      assert (Terminal.equal tok Terminal.sharp);
-      (* One could emit a comment saying that the lookahead token is
-        initially [#]. That comment would have to be displayed above
-        the derivation, though, and there is no support for that
-        at the moment, so let's skip it. *)
-      derivation
-  | (item, _, offset) :: configs ->
-      let _, _, rhs, pos, length = Item.def item in
-      if offset = offset' then
-
-       (* This is an epsilon transition. Attack a new line and add
-          a comment that explains why the lookahead symbol is
-          produced or inherited. *)
-       
-       let nullable, first = Analysis.nullable_first_rhs rhs (pos + 1) in
-
-       if TerminalSet.mem tok first then
-
-         (* The lookahead symbol is produced (and perhaps also inherited,
-            but let's ignore that). *)
-
-         let e = Analysis.explain_first_rhs tok rhs (pos + 1) in
-         let comment =
-           "lookahead token appears" ^ (if e = "" then "" else " because " ^ e)
-         in
-         let derivation =
-           Derivation.build pos rhs derivation (Some comment)
-         in
-
-         (* Print the rest of the derivation without paying attention to
-            the lookahead symbols. *)
-
-         follow derivation offset (List.map config1toconfig0 configs)
-
-       else begin
-
-         (* The lookahead symbol is not produced, so it is definitely inherited. *)
-
-         assert nullable;
-
-         let comment =
-           "lookahead token is inherited" ^
-           (if pos + 1 < length then Printf.sprintf " because %scan vanish" (Symbol.printao (pos + 1) rhs) else "")
-         in
-         let derivation =
-           Derivation.build pos rhs derivation (Some comment)
-         in
-
-         follow1 tok derivation offset configs
-
-       end
-
-      else
-
-       (* This is a shift transition. Tack symbol in front of forest. *)
-
-       let derivation = 
-         Derivation.prepend rhs.(pos) derivation
-       in
-
-       follow1 tok derivation offset configs
-
-(* Symbolic execution is performed in the same manner as above. *)
-
-let explain_reduce_item
-    (tok : Terminal.t)
-    (start : Item.t)
-    (input : Symbol.t array)
-    (stop : Item.t)
-    : Derivation.t =
-
-  let n =
-    Array.length input
-  in
-
-  let table : (configuration1, configuration1 option) Hashtbl.t =
-    Hashtbl.create 1023
-  in
-
-  let queue : configuration1 Queue.t =
-    Queue.create()
-  in
-
-  let enqueue ancestor config =
-    try
-      let _ = Hashtbl.find table config in
-      ()
-    with Not_found ->
-      Hashtbl.add table config ancestor;
-      Queue.add config queue
-  in
-
-  (* If the lookahead token is #, then it initially appear in the lookahead
-     set, otherwise it doesn't. *)
-
-  enqueue None (start, Terminal.equal tok Terminal.sharp, 0);
-  try
-    Misc.qiter (function (item, lookahead, offset) as config ->
-
-      (* If the item we're looking at is the goal item and if
-        we have read all of the input symbols, stop. *)
-
-      if (Item.equal item stop) && lookahead && (offset = n) then
-       raise Done;
-
-      (* Otherwise, explore the transitions out of this item. *)
-
-      let prod, nt, rhs, pos, length = Item.def item in
-
-      (* Shift transition, followed only if the symbol matches
-        the symbol found in the input string. *)
-
-      if (pos < length)
-      && (offset < n)
-      && (Symbol.equal rhs.(pos) input.(offset)) then begin
-       let config' = (Item.import (prod, pos+1), lookahead, offset+1) in
-       enqueue (Some config) config'
-      end;
-
-      (* Epsilon transitions. *)
-
-      if pos < length then
-       match rhs.(pos) with
-       | Symbol.N nt ->
-           let nullable, first = Analysis.nullable_first_rhs rhs (pos + 1) in
-           let first : bool = TerminalSet.mem tok first in
-           let lookahead' =
-             if nullable then first || lookahead else first
-           in
-           Production.iternt nt (fun prod ->
-             let config' = (Item.import (prod, 0), lookahead', offset) in
-             enqueue (Some config) config'
-            )
-       | Symbol.T _ ->
-           ()
-
-    ) queue;
-    assert false
-  with Done ->
-
-    (* We have found a (shortest) path from the start configuration to
-       the goal configuration. Turn it into an explicit derivation. *)
-
-    let configs = Misc.materialize table (stop, true, n) in
-    let derivation = Derivation.empty in
-    let derivation = follow1 tok derivation n configs in
-    derivation
-
-(* -------------------------------------------------------------------------- *)
-(* Putting it all together. *)
-
-let () =
-  if Settings.explain then begin
-
-    Lr1.conflicts (fun toks node ->
-
-      (* Construct a partial LR(1) automaton, looking for a conflict
-        in a state that corresponds to this node. Because Pager's
-        algorithm can merge two states as soon as one of them has a
-        conflict, we can't be too specific about the conflict that we
-        expect to find in the canonical automaton. So, we must supply
-        a set of conflict tokens and accept any kind of conflict that
-        involves one of them. *)
-
-      (* TEMPORARY with the new compatibility criterion, we can be
-        sure that every conflict token is indeed involved in a
-        conflict. Exploit that? Avoid focusing on a single token? *)
-
-      let module P = Lr1partial.Run (struct
-       let tokens = toks
-       let goal = node
-      end) in
-
-      let closure =
-       Lr0.closure P.goal in
-
-      (* Determine what kind of conflict was found. *)
-
-      let shift, reduce = Item.Map.fold (fun item toks (shift, reduce) ->
-       match Item.classify item with
-       | Item.Shift (Symbol.T tok, _)
-         when Terminal.equal tok P.token ->
-             shift + 1, reduce
-       | Item.Reduce prod
-         when TerminalSet.mem P.token toks ->
-           shift, reduce + 1
-       | _ ->
-           shift, reduce
-      ) closure (0, 0) in
-
-      let kind =
-       if (shift > 0) && (reduce > 1) then
-         "shift/reduce/reduce"
-       else if (shift > 0) then
-         "shift/reduce"
-       else
-         "reduce/reduce"
-      in
-
-      (* Explain how the conflict state is reached. *)
-
-      let out = Lazy.force out in
-
-      Printf.fprintf out "\n\
-        ** Conflict (%s) in state %d.\n\
-       ** Token%s involved: %s\n%s\
-       ** This state is reached from %s after reading:\n\n%s\n"
-      kind (Lr1.number node)
-      (if TerminalSet.cardinal toks > 1 then "s" else "")
-      (TerminalSet.print toks)
-      (if TerminalSet.cardinal toks > 1 then
-       Printf.sprintf "** The following explanations concentrate on token %s.\n" (Terminal.print P.token)
-      else "")
-      (Nonterminal.print false (Item.startnt P.source))
-      (Symbol.printa P.path);
-
-      (* Examine the items in that state, focusing on one particular
-        token. Out of the shift items, we explain just one -- this
-        seems enough. We explain each of the reduce items. *)
-
-      (* First, build a mapping of items to derivations. *)
-
-      let (_ : bool), derivations =
-       Item.Map.fold (fun item toks (still_looking_for_shift_item, derivations) ->
-         match Item.classify item with
-
-         | Item.Shift (Symbol.T tok, _)
-           when still_looking_for_shift_item && (Terminal.equal tok P.token) ->
-
-             false,
-             let derivation = explain_shift_item P.source P.path item in
-             Item.Map.add item derivation derivations
-
-         | Item.Reduce prod
-           when TerminalSet.mem P.token toks ->
-
-             still_looking_for_shift_item,
-             let derivation = explain_reduce_item P.token P.source P.path item in
-             Item.Map.add item derivation derivations
-
-         | _ ->
-
-             still_looking_for_shift_item,
-             derivations
-
-        ) closure (true, Item.Map.empty)
-      in
-
-      (* Factor out the common context among all derivations, so as to avoid
-        repeating it. This helps prevent derivation trees from drifting too
-        far away towards the right. It also helps produce sub-derivations
-         that are quite compact. *)
-
-      let context, derivations =
-       Derivation.factor derivations
-      in
-
-      (* Display the common context. *)
-
-      Printf.fprintf out
-       "\n** The derivations that appear below have the following common factor:\
-        \n** (The question mark symbol (?) represents the spot where the derivations begin to differ.)\n\n";
-      Derivation.printc out context;
-
-      (* Then, display the sub-derivations. *)
-
-      Item.Map.iter (fun item derivation ->
-
-       Printf.fprintf out
-         "\n** In state %d, looking ahead at %s, "
-         (Lr1.number node)
-         (Terminal.print P.token);
-
-       begin match Item.classify item with
-       | Item.Shift _ ->
-           Printf.fprintf out "shifting is permitted\n** because of the following sub-derivation:\n\n"
-       | Item.Reduce prod ->
-           Printf.fprintf out
-             "reducing production\n** %s\n** is permitted because of the following sub-derivation:\n\n"
-             (Production.print prod)
-       end;
-
-       Derivation.print out derivation
-
-      ) derivations;
-
-      flush out
-
-    );
-    Time.tick "Explaining conflicts"
-
-  end
-
-(* ------------------------------------------------------------------------ *)
-(* Resolve the conflicts that remain in the automaton. *)
-
-let () =
-  Lr1.default_conflict_resolution();
-  Time.tick "Resolving remaining conflicts"
-
diff --git a/bundles/menhirLib/menhir-20120123/src/conflict.mli b/bundles/menhirLib/menhir-20120123/src/conflict.mli
deleted file mode 100644 (file)
index 176d4ff..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module explains conflicts. Explanations are written
-   to the .conflicts file. No functionality is offered by this
-   module. *)
-
diff --git a/bundles/menhirLib/menhir-20120123/src/convert.ml b/bundles/menhirLib/menhir-20120123/src/convert.ml
deleted file mode 100644 (file)
index 94a41e6..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* An ocamlyacc-style, or Menhir-style, parser requires access to
-   the lexer, which must be parameterized with a lexing buffer, and
-   to the lexing buffer itself, where it reads position information. *)
-
-(* This traditional API is convenient when used with ocamllex, but
-   inelegant when used with other lexer generators. *)
-
-type ('token, 'semantic_value) traditional =
-    (Lexing.lexbuf -> 'token) -> Lexing.lexbuf -> 'semantic_value
-
-(* This revised API is independent of any lexer generator. Here, the
-   parser only requires access to the lexer, and the lexer takes no
-   parameters. The tokens returned by the lexer may contain position
-   information. *)
-
-type ('token, 'semantic_value) revised =
-    (unit -> 'token) -> 'semantic_value
-
-(* --------------------------------------------------------------------------- *)
-
-(* Converting a traditional parser, produced by ocamlyacc or Menhir,
-   into a revised parser. *)
-
-(* A token of the revised lexer is essentially a triple of a token
-   of the traditional lexer (or raw token), a start position, and
-   and end position. The three [get] functions are accessors. *)
-
-(* We do not require the type ['token] to actually be a triple type.
-   This enables complex applications where it is a record type with
-   more than three fields. It also enables simple applications where
-   positions are of no interest, so ['token] is just ['raw_token]
-   and [get_startp] and [get_endp] return dummy positions. *)
-
-let traditional2revised
-  (get_raw_token : 'token -> 'raw_token)
-  (get_startp    : 'token -> Lexing.position)
-  (get_endp      : 'token -> Lexing.position)
-  (parser : ('raw_token, 'semantic_value) traditional)
-: ('token, 'semantic_value) revised =
-
-  (* Accept a revised lexer. *)
-
-  fun (lexer : unit -> 'token) ->
-
-    (* Create a dummy lexing buffer. *)
-
-    let lexbuf : Lexing.lexbuf =
-      Lexing.from_string ""
-    in
-
-    (* Wrap the revised lexer as a traditional lexer. A traditional
-       lexer returns a raw token and updates the fields of the lexing
-       buffer with new positions, which will be read by the parser. *)
-
-    let lexer (lexbuf : Lexing.lexbuf) : 'raw_token =
-      let token : 'token = lexer() in
-      lexbuf.Lexing.lex_start_p <- get_startp token;
-      lexbuf.Lexing.lex_curr_p <- get_endp token;
-      get_raw_token token
-    in
-
-    (* Invoke the traditional parser. *)
-
-    parser lexer lexbuf
-
-(* --------------------------------------------------------------------------- *)
-
-(* Converting a revised parser back to a traditional parser. *)
-
-let revised2traditional
-  (make_token : 'raw_token -> Lexing.position -> Lexing.position -> 'token)
-  (parser : ('token, 'semantic_value) revised)
-: ('raw_token, 'semantic_value) traditional =
-
-  (* Accept a traditional lexer and a lexing buffer. *)
-
-  fun (lexer : Lexing.lexbuf -> 'raw_token) (lexbuf : Lexing.lexbuf) ->
-
-    (* Wrap the traditional lexer as a revised lexer. *)
-
-    let lexer () : 'token =
-      let token : 'raw_token = lexer lexbuf in
-      make_token token lexbuf.Lexing.lex_start_p lexbuf.Lexing.lex_curr_p
-    in
-
-    (* Invoke the revised parser. *)
-
-    parser lexer
-
-(* --------------------------------------------------------------------------- *)
-
-(* Simplified versions of the above, where concrete triples are used. *)
-
-module Simplified = struct
-
-  let traditional2revised parser =
-    traditional2revised
-      (fun (token, _, _)  -> token)
-      (fun (_, startp, _) -> startp)
-      (fun (_, _, endp)   -> endp)
-      parser
-
-  let revised2traditional parser =
-    revised2traditional
-      (fun token startp endp -> (token, startp, endp))
-      parser
-
-end
diff --git a/bundles/menhirLib/menhir-20120123/src/convert.mli b/bundles/menhirLib/menhir-20120123/src/convert.mli
deleted file mode 100644 (file)
index cede992..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* An ocamlyacc-style, or Menhir-style, parser requires access to
-   the lexer, which must be parameterized with a lexing buffer, and
-   to the lexing buffer itself, where it reads position information. *)
-
-(* This traditional API is convenient when used with ocamllex, but
-   inelegant when used with other lexer generators. *)
-
-type ('token, 'semantic_value) traditional =
-    (Lexing.lexbuf -> 'token) -> Lexing.lexbuf -> 'semantic_value
-
-(* This revised API is independent of any lexer generator. Here, the
-   parser only requires access to the lexer, and the lexer takes no
-   parameters. The tokens returned by the lexer may contain position
-   information. *)
-
-type ('token, 'semantic_value) revised =
-    (unit -> 'token) -> 'semantic_value
-
-(* --------------------------------------------------------------------------- *)
-
-(* Converting a traditional parser, produced by ocamlyacc or Menhir,
-   into a revised parser. *)
-
-(* A token of the revised lexer is essentially a triple of a token
-   of the traditional lexer (or raw token), a start position, and
-   and end position. The three [get] functions are accessors. *)
-
-(* We do not require the type ['token] to actually be a triple type.
-   This enables complex applications where it is a record type with
-   more than three fields. It also enables simple applications where
-   positions are of no interest, so ['token] is just ['raw_token]
-   and [get_startp] and [get_endp] return dummy positions. *)
-
-val traditional2revised:
-  ('token -> 'raw_token) ->
-  ('token -> Lexing.position) ->
-  ('token -> Lexing.position) ->
-  ('raw_token, 'semantic_value) traditional ->
-  ('token, 'semantic_value) revised
-
-(* --------------------------------------------------------------------------- *)
-
-(* Converting a revised parser back to a traditional parser. *)
-
-val revised2traditional:
-  ('raw_token -> Lexing.position -> Lexing.position -> 'token) ->
-  ('token, 'semantic_value) revised ->
-  ('raw_token, 'semantic_value) traditional
-
-(* --------------------------------------------------------------------------- *)
-
-(* Simplified versions of the above, where concrete triples are used. *)
-
-module Simplified : sig
-
-  val traditional2revised:
-    ('token, 'semantic_value) traditional ->
-    ('token * Lexing.position * Lexing.position, 'semantic_value) revised
-
-  val revised2traditional:
-    ('token * Lexing.position * Lexing.position, 'semantic_value) revised ->
-    ('token, 'semantic_value) traditional
-
-end
diff --git a/bundles/menhirLib/menhir-20120123/src/coqBackend.ml b/bundles/menhirLib/menhir-20120123/src/coqBackend.ml
deleted file mode 100644 (file)
index e5381da..0000000
+++ /dev/null
@@ -1,456 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Printf
-open Grammar
-
-module Run (T: sig end) = struct
-
-  let print_term t =
-    assert (not (Terminal.pseudo t));
-    sprintf "%s_t" (Terminal.print t)
-
-  let print_nterm nt =
-    sprintf "%s_nt" (Nonterminal.print true nt)
-
-  let print_symbol = function
-    | Symbol.N nt -> sprintf "NT %s" (print_nterm nt)
-    | Symbol.T t -> sprintf "T %s" (print_term t)
-
-  let print_type ty =
-    if Settings.coq_no_actions then
-      "unit"
-    else
-      match ty with
-        | None -> raise Not_found
-        | Some t -> match t with
-           | Stretch.Declared s -> s.Stretch.stretch_content
-           | Stretch.Inferred _ -> assert false (* We cannot infer coq types *)
-
-  let print_nis nis =
-    sprintf "Nis_%d" (Lr1.number nis)
-
-  let print_st st =
-    match Lr1.incoming_symbol st with
-      | Some _ -> sprintf "Ninit %s" (print_nis st)
-      | None -> "Init"
-
-  let print_prod p =
-    sprintf "Prod_%d" (Production.p2i p)
-
-  let print_pseudoprod p =
-    match Production.classify p with
-      | None -> sprintf "Some %s" (print_prod p)
-      | Some _ -> "None"
-
-  let start_nt =
-    match
-      ProductionMap.fold (fun _ rhs accu ->
-        match accu with
-          | None -> (match rhs with [|Symbol.N nt|] -> Some nt | _ -> assert false)
-          | _ -> Error.error [] ("Multiple start symbols are not supported "^
-                                 "by the coq back-end"))
-        (ProductionMap.start Production.rhs)
-        None
-    with
-      | Some start -> start
-      | _ -> Error.error [] "There is no start symbol"
-
-  let () =
-    if not Settings.coq_no_actions then
-      begin
-        Nonterminal.iterx (fun nonterminal ->
-          match Nonterminal.ocamltype nonterminal with
-            | None -> Error.error [] (sprintf "I don't know the type of non-terminal %s"
-                                     (Nonterminal.print false nonterminal))
-            | Some _ -> ());
-        Production.iterx (fun prod ->
-          let act =  Production.action prod in
-          if Action.has_previouserror act || Action.has_syntaxerror act ||
-            Action.has_leftstart act || Action.has_leftend act ||
-            Action.use_dollar act then
-              Error.error [] ("$previouserror, $syntaxerror, $start, $end, $i are not "^
-                             "supported by the coq back-end"))
-      end;
-
-    Production.iterx (fun prod ->
-      Array.iter (fun symb ->
-        match symb with
-          | Symbol.T t ->
-              if t = Terminal.error then
-                Error.error [] "The coq back-end does not support error"
-          | _ -> ())
-        (Production.rhs prod));
-
-    if Front.grammar.UnparameterizedSyntax.parameters <> [] then
-      Error.error [] "The coq back-end does not support %parameter"
-
-  let write_inductive_alphabet f name constrs =
-    fprintf f "Inductive %s' :=" name;
-    List.iter (fprintf f "\n  | %s") constrs;
-    fprintf f ".\n";
-    fprintf f "Definition %s := %s'.\n\n" name name;
-    if List.length constrs > 0 then
-      begin
-        let iteri f = ignore (List.fold_left (fun k x -> f k x; succ k) 0 constrs) in
-        fprintf f "Open Scope N_scope.\n";
-        fprintf f "Program Instance %sNum : Numbered %s :=\n" name name;
-        fprintf f "  { injN := fun x => match x return _ with ";
-        iteri (fun k constr -> fprintf f "| %s => %d " constr k);
-        fprintf f "end;\n";
-        fprintf f "    surjN := fun n => match n return _ with ";
-        iteri (fprintf f "| %d => %s ");
-        fprintf f "| _ => %s end;\n" (List.hd constrs);
-        fprintf f "  injN_bound := %d }.\n" (List.length constrs);
-        fprintf f "Solve Obligations using (intro x; case x; reflexivity).\n\n";
-      end
-    else
-      begin
-        fprintf f "Program Instance %sAlph : Alphabet %s :=\n" name name;
-        fprintf f "  { AlphabetComparable := {| compare := fun x y =>\n";
-        fprintf f "      match x, y return comparison with end |};\n";
-        fprintf f "    AlphabetEnumerable := {| all_list := [] |} }.";
-        fprintf f "Solve Obligations using (intro x; case x)."
-      end
-
-  let write_terminals f =
-    write_inductive_alphabet f "terminal" (
-      Terminal.fold (fun t l -> if Terminal.pseudo t then l else print_term t::l)
-        []);
-    fprintf f "Instance TerminalAlph : Alphabet terminal := _.\n\n"
-
-  let write_nonterminals f =
-    write_inductive_alphabet f "nonterminal" (
-      Nonterminal.foldx (fun nt l -> (print_nterm nt)::l) []);
-    fprintf f "Instance NonTerminalAlph : Alphabet nonterminal := _.\n\n"
-
-  let write_symbol_semantic_type f =
-    fprintf f "Definition symbol_semantic_type (s:symbol) : Type:=\n";
-    fprintf f "  match s with\n";
-
-    fprintf f "    | T t =>\n";
-    fprintf f "      match t with\n";
-    Terminal.iter (fun terminal ->
-      if not (Terminal.pseudo terminal) then
-        fprintf f "        | %s => %s%%type\n"
-          (print_term terminal)
-          (try print_type (Terminal.ocamltype terminal) with Not_found -> "unit")
-    );
-    fprintf f "      end\n";
-
-    fprintf f "    | NT nt =>\n";
-    fprintf f "      match nt with\n";
-    Nonterminal.iterx (fun nonterminal ->
-                         fprintf f "        | %s => %s%%type\n"
-                          (print_nterm nonterminal)
-                          (print_type (Nonterminal.ocamltype nonterminal)));
-    fprintf f "      end\n";
-
-    fprintf f "  end.\n\n"
-
-  let write_productions f =
-    write_inductive_alphabet f "production" (
-      Production.foldx (fun prod l -> (print_prod prod)::l) []);
-    fprintf f "Instance ProductionAlph : Alphabet production := _.\n\n"
-
-  let write_productions_contents f =
-    fprintf f "Definition prod_contents (p:production) :\n";
-    fprintf f "  { p:nonterminal * list symbol &\n";
-    fprintf f "    arrows (map symbol_semantic_type (snd p))\n";
-    fprintf f "      (symbol_semantic_type (NT (fst p))) }\n";
-    fprintf f " :=\n";
-    fprintf f "  let box := existT (fun p =>\n";
-    fprintf f "    arrows (map symbol_semantic_type (snd p))\n";
-    fprintf f "      (symbol_semantic_type (NT (fst p))))\n";
-    fprintf f "  in\n";
-    fprintf f "  match p with\n";
-    Production.iterx (fun prod ->
-      fprintf f "    | %s => box\n" (print_prod prod);
-      fprintf f "      (%s, [%s])\n"
-        (print_nterm (Production.nt prod))
-        (String.concat "; "
-           (List.map print_symbol (Array.to_list (Production.rhs prod))));
-      if Production.length prod = 0 then
-        fprintf f "      (\n"
-      else
-        fprintf f "      (fun %s => \n"
-          (String.concat " " (Array.to_list (Production.identifiers prod)));
-      if Settings.coq_no_actions then
-        fprintf f "()"
-      else
-        Action.print f (Production.action prod);
-      fprintf f "\n)\n");
-    fprintf f "  end.\n\n";
-
-    fprintf f "Definition prod_lhs (p:production) :=\n";
-    fprintf f "  fst (projT1 (prod_contents p)).\n";
-    fprintf f "Definition prod_rhs (p:production) :=\n";
-    fprintf f "  snd (projT1 (prod_contents p)).\n";
-    fprintf f "Definition prod_action (p:production) :=\n";
-    fprintf f "  projT2 (prod_contents p).\n\n"
-
-  let write_nullable_first f =
-    fprintf f "Definition nullable_nterm (nt:nonterminal) : bool :=\n";
-    fprintf f "  match nt with\n";
-    Nonterminal.iterx (fun nt ->
-      fprintf f "    | %s => %b\n"
-        (print_nterm nt)
-        (fst (Analysis.nullable_first_rhs (Array.of_list [Symbol.N nt]) 0)));
-    fprintf f "  end.\n\n";
-
-    fprintf f "Definition first_nterm (nt:nonterminal) : list terminal :=\n";
-    fprintf f "  match nt with\n";
-    Nonterminal.iterx (fun nt ->
-      let firstSet =
-        snd (Analysis.nullable_first_rhs (Array.of_list [Symbol.N nt]) 0)
-      in
-      fprintf f "    | %s => [" (print_nterm nt);
-      let first = ref true in
-      TerminalSet.iter (fun t ->
-        if !first then first := false else fprintf f "; ";
-        fprintf f "%s" (print_term t)
-        ) firstSet;
-      fprintf f "]\n");
-    fprintf f "  end.\n\n"
-
-  let write_grammar f =
-    fprintf f "Module Import Gram <: Grammar.T.\n\n";
-    write_terminals f;
-    write_nonterminals f;
-    fprintf f "Include Grammar.Symbol.\n\n";
-    write_symbol_semantic_type f;
-    write_productions f;
-    write_productions_contents f;
-    fprintf f "Definition start_symbol := %s.\n\n" (print_symbol (Symbol.N start_nt));
-    fprintf f "Include Grammar.Defs.\n\n";
-    fprintf f "End Gram.\n\n"
-
-  let write_nis f =
-    write_inductive_alphabet f "noninitstate" (
-      Lr1.foldx (fun l node -> (print_nis node)::l) []);
-    fprintf f "Instance NonInitStateAlph : Alphabet noninitstate := _.\n\n"
-
-  let write_actions f =
-    fprintf f "Definition action_table (state:state) :\n";
-    fprintf f "    default_action + (forall term:terminal, action term) :=\n";
-    fprintf f "  match state with\n";
-    Lr1.iter (fun node ->
-      fprintf f "    | %s => " (print_st node);
-      match Invariant.has_default_reduction node with
-        | Some (prod, _) ->
-            begin match Production.classify prod with
-              | Some _ -> fprintf f "inl Accept_act\n"
-              | None ->
-                  fprintf f "inl (Default_reduce_act %s)\n" (print_prod prod)
-            end
-        | None ->
-            fprintf f "inr (fun terminal:terminal =>\n";
-            fprintf f "      match terminal return action terminal with\n";
-            let has_fail = ref false in
-            Terminal.iter (fun t ->
-              if not (Terminal.pseudo t) then
-                begin
-                  try
-                    let target = SymbolMap.find (Symbol.T t) (Lr1.transitions node) in
-                    fprintf f "        | %s => Shift_act %s (eq_refl _)\n" (print_term t) (print_nis target)
-                  with Not_found ->
-                    try
-                      let prod =
-                        Misc.single (TerminalMap.find t (Lr1.reductions node))
-                      in
-                      fprintf f "        | %s => Reduce_act %s\n" (print_term t) (print_prod prod)
-                    with Not_found -> has_fail := true
-                end);
-            if !has_fail then
-              fprintf f "        | _ => Fail_act\n";
-            fprintf f "      end)\n"
-    );
-    fprintf f "  end.\n\n"
-
-  let write_gotos f =
-    fprintf f "Definition goto_table (state:state) (nt:nonterminal) :=\n";
-    fprintf f "  match state, nt return option { s:noninitstate | last_symb_of_non_init_state s = NT nt } with\n";
-    Lr1.iter (fun node ->
-      Nonterminal.iterx (fun nt ->
-        try
-          let target = SymbolMap.find (Symbol.N nt) (Lr1.transitions node) in
-          fprintf f "    | %s, %s => Some (exist _ %s (eq_refl _))\n"
-            (print_st node) (print_nterm nt) (print_nis target)
-        with Not_found -> ()));
-    fprintf f "    | _, _ => None\n";
-    fprintf f "  end.\n\n"
-
-  let write_last_symb f =
-    fprintf f "Definition last_symb_of_non_init_state (noninitstate:noninitstate) : symbol :=\n";
-    fprintf f "  match noninitstate with\n";
-    Lr1.iterx (fun node ->
-      match Lr1.incoming_symbol node with
-        | Some s -> fprintf f "    | %s => %s\n" (print_nis node) (print_symbol s)
-        | None -> assert false);
-    fprintf f "  end.\n\n"
-
-  let write_past_symb f =
-    fprintf f "Definition past_symb_of_non_init_state (noninitstate:noninitstate) : list symbol :=\n";
-    fprintf f "  match noninitstate with\n";
-    Lr1.iterx (fun node ->
-      let s =
-        String.concat "; " (List.tl
-          (Invariant.fold (fun l _ symb _ -> print_symbol symb::l)
-             [] (Invariant.stack node)))
-      in
-      fprintf f "    | %s => [%s]\n" (print_nis node) s);
-    fprintf f "  end.\n";
-    fprintf f "Extract Constant past_symb_of_non_init_state => \"fun _ -> []\".\n\n"
-
-  let write_past_states f =
-    fprintf f "Definition past_state_of_non_init_state (s:noninitstate) : list (state -> bool) :=\n";
-    fprintf f "  match s with\n";
-    Lr1.iterx (fun node ->
-      let s =
-        String.concat ";\n        " (Invariant.fold
-          (fun accu _ _ states ->
-             let b = Buffer.create 16 in
-             bprintf b "fun s:state =>\n";
-             bprintf b "          match s return bool with\n";
-             bprintf b "            ";
-             Lr1.NodeSet.iter
-               (fun st -> bprintf b "| %s " (print_st st)) states;
-             bprintf b "=> true\n";
-             bprintf b "            | _ => false\n";
-             bprintf b "          end";
-             Buffer.contents b::accu)
-          [] (Invariant.stack node))
-      in
-      fprintf f "    | %s =>\n      [ %s ]\n" (print_nis node) s);
-    fprintf f "  end.\n\n";
-    fprintf f "Extract Constant past_state_of_non_init_state => \"fun _ -> []\".\n\n"
-
-  let write_items f =
-    if not Settings.coq_no_complete then
-      begin
-       Lr1.iter (fun node ->
-         fprintf f "Definition items_of_state_%d : list item :=\n" (Lr1.number node);
-          fprintf f "  [ ";
-          let first = ref true in
-          Item.Map.iter (fun item lookaheads ->
-            let prod, pos = Item.export item in
-            if !first then first := false
-            else fprintf f ";\n    ";
-            fprintf f "{| pseudoprod_item := %s;\n" (print_pseudoprod prod);
-            fprintf f "      dot_pos_item := %d;\n" pos;
-            fprintf f "      lookaheads_item := [";
-           let first = ref true in
-            let lookaheads =
-              if TerminalSet.mem Terminal.sharp lookaheads then TerminalSet.universe
-              else lookaheads
-            in
-           TerminalSet.iter (fun lookahead ->
-                if !first then first := false
-               else fprintf f "; ";
-               fprintf f "%s" (print_term lookahead)
-             ) lookaheads;
-           fprintf f "] |}"
-          )  (Lr0.closure (Lr0.export (Lr1.state node)));
-          fprintf f " ].\n";
-         fprintf f "Extract Inlined Constant items_of_state_%d => \"assert false\".\n\n" (Lr1.number node)
-        );
-
-       fprintf f "Definition items_of_state (s:state) : list item :=\n";
-       fprintf f "  match s with\n";
-       Lr1.iter (fun node ->
-         fprintf f "    | %s => items_of_state_%d\n" (print_st node) (Lr1.number node));
-       fprintf f "  end.\n";
-      end
-    else
-      fprintf f "Definition items_of_state (s:state): list item := [].\n";
-    fprintf f "Extract Constant items_of_state => \"fun _ -> []\".\n\n"
-
-  let write_automaton f =
-    fprintf f "Module Aut <: Automaton.T.\n\n";
-    fprintf f "Module Gram := Gram.\n";
-    fprintf f "Module GramDefs := Gram.\n\n";
-    write_nullable_first f;
-    write_nis f;
-    write_last_symb f;
-    fprintf f "Include Automaton.Types.\n\n";
-    write_actions f;
-    write_gotos f;
-    write_past_symb f;
-    write_past_states f;
-    write_items f;
-    fprintf f "End Aut.\n\n"
-
-  let write_theorems f =
-    fprintf f "Require Import Main.\n\n";
-
-    fprintf f "Module Parser := Main.Make Aut.\n";
-
-    fprintf f "Theorem safe:\n";
-    fprintf f "  Parser.safe_validator = true.\n";
-    fprintf f "Proof eq_refl true<:Parser.safe_validator = true.\n\n";
-
-    if not Settings.coq_no_complete then
-      begin
-        fprintf f "Theorem complete:\n";
-        fprintf f "  Parser.complete_validator = true.\n";
-        fprintf f "Proof eq_refl true<:Parser.complete_validator = true.\n\n";
-      end;
-
-    fprintf f "Definition parse := Parser.parse safe.\n\n";
-
-    fprintf f "Theorem parse_correct iterator buffer:\n";
-    fprintf f "  match parse iterator buffer with\n";
-    fprintf f "    | Parser.Inter.Parsed_pr sem buffer_new =>\n";
-    fprintf f "      exists word,\n";
-    fprintf f "        buffer = Parser.Inter.app_str word buffer_new /\\\n";
-    fprintf f "        Gram.has_semantic_value word sem\n";
-    fprintf f "    | _ => True\n";
-    fprintf f "  end.\n";
-    fprintf f "Proof. apply Parser.parse_correct. Qed.\n\n";
-
-    if not Settings.coq_no_complete then
-      begin
-        fprintf f "Theorem parse_complete (iterator:nat) word buffer_end (output:%s):\n"
-          (print_type (Nonterminal.ocamltype start_nt));
-        fprintf f "  forall tree:Gram.parse_tree (%s) word output,\n" (print_symbol (Symbol.N start_nt));
-        fprintf f "  match parse iterator (Parser.Inter.app_str word buffer_end) with\n";
-        fprintf f "    | Parser.Inter.Fail_pr => False\n";
-        fprintf f "    | Parser.Inter.Parsed_pr output_res buffer_end_res =>\n";
-        fprintf f "      output_res = output /\\ buffer_end_res = buffer_end  /\\\n";
-        fprintf f "      ge iterator (Gram.parse_tree_size tree+2)\n";
-        fprintf f "    | Parser.Inter.Timeout_pr => lt iterator (Gram.parse_tree_size tree+2)\n";
-        fprintf f "  end.\n";
-        fprintf f "Proof. apply Parser.parse_complete; exact complete. Qed.\n\n";
-      end
-
-  let write_all f =
-    if not Settings.coq_no_actions then
-      List.iter (fun s -> fprintf f "%s\n\n" s.Stretch.stretch_content)
-        Front.grammar.UnparameterizedSyntax.preludes;
-
-    fprintf f "Require Import List.\n";
-    fprintf f "Require Import Syntax.\n";
-    fprintf f "Require Import NArith.\n";
-    fprintf f "Require Import Tuples.\n";
-    fprintf f "Require Import Alphabet.\n";
-    fprintf f "Require Grammar.\n";
-    fprintf f "Require Automaton.\n\n";
-    write_grammar f;
-    write_automaton f;
-    write_theorems f;
-
-    if not Settings.coq_no_actions then
-      List.iter (fprintf f "\n\n%s")
-        Front.grammar.UnparameterizedSyntax.postludes
-end
diff --git a/bundles/menhirLib/menhir-20120123/src/coqBackend.mli b/bundles/menhirLib/menhir-20120123/src/coqBackend.mli
deleted file mode 100644 (file)
index 199ff3b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* The coq code generator. *)
-
-module Run (T: sig end) : sig
-
-  val write_all: out_channel -> unit
-
-end
diff --git a/bundles/menhirLib/menhir-20120123/src/cst.ml b/bundles/menhirLib/menhir-20120123/src/cst.ml
deleted file mode 100644 (file)
index 6f8db99..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-(* Concrete syntax trees. *)
-
-(* A concrete syntax tree is one of a leaf -- which corresponds to a
-   terminal symbol; a node -- which corresponds to a non-terminal
-   symbol, and whose immediate descendants form an expansion of that
-   symbol; or an error leaf -- which corresponds to a point where the
-   [error] pseudo-token was shifted. *)
-
-type cst =
-  | CstTerminal of Terminal.t
-  | CstNonTerminal of Production.index * cst array
-  | CstError
-
-(* This is a (mostly) unambiguous printer for concrete syntax trees,
-   in an sexp-like notation. *)
-
-let rec pcst b = function
-  | CstTerminal tok ->
-
-      (* A leaf is denoted by a terminal symbol. *)
-
-      Printf.bprintf b "%s" (Terminal.print tok)
-
-  | CstNonTerminal (prod, csts) ->
-      
-      (* A node is denoted by a bracketed, whitespace-separated list,
-        whose head is a non-terminal symbol (followed with a colon)
-        and whose tail consists of the node's descendants. *)
-
-      (* There is in fact some ambiguity in this notation, since we
-        only print the non-terminal symbol that forms the left-hand
-        side of production [prod], instead of the production itself.
-
-        This abuse makes things much more readable, and should be
-        acceptable for the moment. The cases where ambiguity actually
-        arises should be rare. *)
-
-      Printf.bprintf b "[%s:%a]"
-       (Nonterminal.print false (Production.nt prod))
-       pcsts csts
-
-  | CstError ->
-
-      (* An error leaf is denoted by [error]. *)
-
-      Printf.bprintf b "error"
-
-and pcsts b (csts : cst array) =
-  Array.iter (fun cst ->
-    Printf.bprintf b " %a" pcst cst
-  ) csts
-
-(* This is the public interface. *)
-
-let wrap print f x =
-  let b = Buffer.create 32768 in
-  print b x;
-  Buffer.output_buffer f b
-
-let print =
-  wrap pcst
-
-(* This is a pretty-printer for concrete syntax trees. The notation is
-   the same as that used by the above printer; the only difference is
-   that the [Pprint] library is used to manage indentation. *)
-
-open Pprint 
-
-let rec build : cst -> document = function
-  | CstTerminal tok ->
-      text (Terminal.print tok)
-  | CstNonTerminal (prod, csts) ->
-      brackets (
-       group (
-         text (Nonterminal.print false (Production.nt prod)) ^^
-         colon ^^
-         group (
-           nest 2 (
-             Array.fold_left (fun doc cst ->
-               doc ^^ break1 ^^ build cst
-             ) empty csts
-           )
-         ) ^^
-         break0
-       )
-      )
-  | CstError ->
-      text "error"
-
-let show f cst =
-  Channel.pretty 0.8 80 f (build cst)
-
diff --git a/bundles/menhirLib/menhir-20120123/src/cst.mli b/bundles/menhirLib/menhir-20120123/src/cst.mli
deleted file mode 100644 (file)
index b4a1796..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-(* Concrete syntax trees. *)
-
-(* A concrete syntax tree is one of a leaf -- which corresponds to a
-   terminal symbol; a node -- which corresponds to a non-terminal
-   symbol, and whose immediate descendants form an expansion of that
-   symbol; or an error leaf -- which corresponds to a point where the
-   [error] pseudo-token was shifted. *)
-
-type cst =
-  | CstTerminal of Terminal.t
-  | CstNonTerminal of Production.index * cst array
-  | CstError
-
-(* This is a (mostly) unambiguous printer for concrete syntax trees,
-   in an sexp-like notation. *)
-
-val print: out_channel -> cst -> unit
-
-(* This is a pretty-printer for concrete syntax trees. The notation is
-   the same as that used by the above printer; the only difference is
-   that the [Pprint] library is used to manage indentation. *)
-
-val show: out_channel -> cst -> unit
-
diff --git a/bundles/menhirLib/menhir-20120123/src/derivation.ml b/bundles/menhirLib/menhir-20120123/src/derivation.ml
deleted file mode 100644 (file)
index 1224fd1..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-(* -------------------------------------------------------------------------- *)
-
-(* This is a data structure for linear derivation trees. These are derivation
-   trees that are list-like (that is, they do not branch), because a single
-   path is of interest.
-
-   A tree is either empty or formed of a non-terminal symbol at the root and a
-   forest below the root.
-
-   A forest is an ordered list of elements. However, its elements are not
-   trees, as one would perhaps expect. Because we are interested in *linear*
-   derivation trees, only one element of the forest receives focus and is a
-   tree. All other elements remain un-expanded, so they are just symbols.
-
-   In other words, a linear derivation tree is roughly just a list of levels,
-   where each forest corresponds to one level. *)
-
-type 'focus level = {
-    prefix: Symbol.t list;
-    focus: 'focus;
-    suffix: Symbol.t list;
-    comment: string
-  }
-
-type tree =
-  | TEmpty
-  | TRooted of Symbol.t * forest
-
-and forest =
-    tree level
-
-(* We make use of contexts with a forest-shaped hole. We have tree contexts
-   and forest contexts.
-
-   Tree contexts do not have a case for holes, since we work with
-   forest-shaped holes only. Forest contexts have one. *)
-
-type ctree =
-  | CRooted of Symbol.t * cforest
-
-and cforest =
-  | CHole
-  | CCons of ctree level
-
-(* Make a few types visible to clients. *)
-
-type t =
-    forest
-
-type context =
-    cforest
-
-(* -------------------------------------------------------------------------- *)
-
-(* Construction. *)
-
-let rec array_to_list a i j =
-  if i = j then
-    []
-  else
-    a.(i) :: array_to_list a (i + 1) j
-
-let empty =
-  {
-    prefix = [];
-    focus = TEmpty;
-    suffix = [];
-    comment = ""
-  }
-
-let tail pos rhs =
-  let length = Array.length rhs in
-  assert (pos < length);
-  {
-    prefix = [];
-    focus = TEmpty;
-    suffix = array_to_list rhs pos length;
-    comment = ""
-  }
-
-let build pos rhs forest comment =
-  let length = Array.length rhs in
-  assert (pos < length);
-  match rhs.(pos) with
-  | Symbol.T _ ->
-      assert false
-  | Symbol.N _ as symbol ->
-      {
-       prefix = [];
-       focus = TRooted (symbol, forest);
-       suffix = array_to_list rhs (pos + 1) length;
-       comment = (match comment with None -> "" | Some comment -> comment)
-      }
-
-let prepend symbol forest =
-  { forest with
-    prefix = symbol :: forest.prefix }
-
-(* -------------------------------------------------------------------------- *)
-
-(* Display. *)
-
-let buffer =
-  Buffer.create 32768
-
-let rec print_blank k =
-  if k > 0 then begin
-    Buffer.add_char buffer ' ';
-    print_blank (k - 1)
-  end
-
-let print_symbol symbol =
-  let word = Symbol.print symbol in
-  Buffer.add_string buffer word;
-  Buffer.add_char buffer ' ';
-  String.length word + 1
-
-let print_symbols symbols =
-  List.fold_left (fun offset symbol ->
-    offset + print_symbol symbol
-  ) 0 symbols
-
-let print_level print_focus_root print_focus_remainder offset forest =
-  print_blank offset;
-  let offset = offset + print_symbols forest.prefix in
-  print_focus_root forest.focus;
-  let (_ : int) = print_symbols forest.suffix in
-  if String.length forest.comment > 0 then begin
-    Buffer.add_string buffer "// ";
-    Buffer.add_string buffer forest.comment
-  end;
-  Buffer.add_char buffer '\n';
-  print_focus_remainder offset forest.focus
-
-let print_tree_root = function
-  | TEmpty ->
-      Buffer.add_string buffer ". "
-  | TRooted (symbol, _) ->
-      let (_ : int) = print_symbol symbol in
-      ()
-
-let rec print_forest offset forest =
-  print_level print_tree_root print_tree_remainder offset forest
-
-and print_tree_remainder offset = function
-  | TEmpty ->
-      ()
-  | TRooted (_, forest) ->
-      print_forest offset forest
-
-let print_ctree_root = function
-  | CRooted (symbol, _) ->
-      let (_ : int) = print_symbol symbol in
-      ()
-
-let rec print_cforest offset cforest =
-  match cforest with
-  | CHole ->
-      print_blank offset;
-      Buffer.add_string buffer "(?)\n"
-  | CCons forest ->
-      print_level print_ctree_root print_ctree_remainder offset forest
-
-and print_ctree_remainder offset = function
-  | CRooted (_, cforest) ->
-      print_cforest offset cforest
-
-let wrap print channel x =
-  Buffer.clear buffer;
-  print 0 x;
-  Buffer.output_buffer channel buffer
-
-let print =
-  wrap print_forest
-
-let printc =
-  wrap print_cforest
-
-(* -------------------------------------------------------------------------- *)
-
-(* [punch] turns a (tree or forest) into a pair of a (tree or forest) context
-   and a residual forest, where the context is chosen maximal. In other words,
-   the residual forest consists of a single level -- its focus is [TEmpty]. *)
-
-let rec punch_tree tree : (ctree * forest) option =
-  match tree with
-  | TEmpty ->
-      None
-  | TRooted (symbol, forest) ->
-      let forest1, forest2 = punch_forest forest in
-      Some (CRooted (symbol, forest1), forest2)
-
-and punch_forest forest : cforest * forest =
-  match punch_tree forest.focus with
-  | None ->
-      CHole, forest
-  | Some (ctree1, forest2) ->
-      CCons {
-        prefix = forest.prefix;
-        focus = ctree1;
-        suffix = forest.suffix;
-        comment = forest.comment
-      }, forest2
-
-(* [fill] fills a (tree or forest) context with a forest so as to produce
-   a new (tree or forest). *)
-
-let rec fill_tree ctree1 forest2 : tree =
-  match ctree1 with
-  | CRooted (symbol1, cforest1) ->
-      TRooted (symbol1, fill_forest cforest1 forest2)
-
-and fill_forest cforest1 forest2 : forest =
-  match cforest1 with
-  | CHole ->
-      forest2
-  | CCons level1 ->
-      {
-        prefix = level1.prefix;
-        focus = fill_tree level1.focus forest2;
-        suffix = level1.suffix;
-        comment = level1.comment
-      }
-
-(* [common] factors the maximal common (tree or forest) context out of a pair
-   of a (tree or forest) context and a (tree or forest). It returns the (tree
-   or forest) context as well as the residuals of the two parameters. *)
-
-let rec common_tree ctree1 tree2 : (ctree * cforest * forest) option =
-  match ctree1, tree2 with
-  | CRooted _, TEmpty ->
-      None
-  | CRooted (symbol1, cforest1), TRooted (symbol2, forest2) ->
-      if Symbol.equal symbol1 symbol2 then
-       let cforest, cforest1, forest2 =
-         common_forest cforest1 forest2
-       in
-       Some (CRooted (symbol1, cforest), cforest1, forest2)
-      else
-       None
-
-and common_forest cforest1 forest2 : cforest * cforest * forest =
-  match cforest1 with
-  | CHole ->
-      CHole, cforest1, forest2
-  | CCons forest1 ->
-      if Symbol.lequal forest1.prefix forest2.prefix
-      && Symbol.lequal forest1.suffix forest2.suffix
-      && forest1.comment = forest2.comment
-      then begin
-       match common_tree forest1.focus forest2.focus with
-       | None ->
-           CHole, cforest1, forest2
-       | Some (ctree, csubforest1, subforest2) ->
-           let cforest = {
-             prefix = forest1.prefix;
-             focus = ctree;
-             suffix = forest1.suffix;
-             comment = forest1.comment
-           } in
-           CCons cforest, csubforest1, subforest2
-      end
-      else
-       CHole, cforest1, forest2
-
-(* [factor] factors the maximal common forest context out of a nonempty family
-   of forests. We assume that the family is represented as a map indexed by
-   items, because this is convenient for the application that we have in mind,
-   but this assumption is really irrelevant. *)
-
-let rec factor forests =
-  match
-    Item.Map.fold (fun item forest accu ->
-      match accu with
-      | None ->
-
-         (* First time through the loop, so [forest] is the first forest
-            that we examine. Punch it, so as to produce a maximal forest
-            context and a residual forest. *)
-
-         let context, residual = punch_forest forest in
-         Some (context, Item.Map.singleton item residual)
-
-      | Some (context, residuals) ->
-
-          (* Another iteration through the loop. [context] and [residuals] are
-            the maximal common context and the residuals of the forests
-            examined so far. *)
-
-          (* Combine the common context obtained so far with the forest at hand.
-            This yields a new, smaller common context, as well as residuals for
-            the previous common context and for the forest at hand. *)
-
-         let context, contextr, forestr = common_forest context forest in
-   
-          (* The residual forests are now: (i) the residual forest [forestr];
-            and (ii) the previous residual forests [residuals], each of which
-            must be placed with the residual context [contextr]. *)
-
-          let residuals =
-           Item.Map.add item forestr (Item.Map.map (fill_forest contextr) residuals)
-         in
-
-         Some (context, residuals)
-
-    ) forests None
-  with
-  | None ->
-      assert false (* parameter [forests] was an empty map *)
-  | Some (context, residuals) ->
-      context, residuals
-
diff --git a/bundles/menhirLib/menhir-20120123/src/derivation.mli b/bundles/menhirLib/menhir-20120123/src/derivation.mli
deleted file mode 100644 (file)
index 9d73e4e..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-(* -------------------------------------------------------------------------- *)
-
-(* This is the type of derivations. Derivations are forests: see inside. *)
-
-type t
-
-(* This is the type of derivations contexts, or derivations with a
-   derivation-shaped hole. *)
-
-type context
-
-(* -------------------------------------------------------------------------- *)
-
-(* Construction. *)
-
-(* [empty] is the forest that consists of a single empty tree. *)
-
-val empty: t
-
-(* [tail pos rhs] is the forest: (i) whose first element is the empty tree,
-   and (ii) whose remaining elements are the symbols found at positions
-   greater than or equal to [pos] in the array [rhs]. *)
-
-val tail: int -> Symbol.t array -> t
-
-(* [build pos rhs forest comment] is the forest: (i) whose first element is
-   the tree that has the non-terminal symbol [rhs.(pos)] at its root and the
-   forest [forest] below its root, and (ii) whose remaining elements are the
-   symbols found at positions greater than [pos] in the array [rhs]. *)
-
-val build: int -> Symbol.t array -> t -> string option -> t
-
-(* [prepend symbol forest] is the forest: (i) whose first element is the
-   symbol [symbol], and (ii) whose remaining elements form the forest
-   [forest]. *)
-
-val prepend: Symbol.t -> t -> t
-
-(* -------------------------------------------------------------------------- *)
-
-(* Factoring. *)
-
-(* [factor] factors the maximal common derivation context out of a
-   nonempty family of derivations. It produces a pair of the context
-   and of the residual derivations. *)
-
-val factor: t Item.Map.t -> context * t Item.Map.t
-
-(* -------------------------------------------------------------------------- *)
-
-(* Display. *)
-
-(* [print] prints a derivation. *)
-
-val print: out_channel -> t -> unit
-
-(* [printc] prints a derivation context. *)
-
-val printc: out_channel -> context -> unit
-
diff --git a/bundles/menhirLib/menhir-20120123/src/dot.ml b/bundles/menhirLib/menhir-20120123/src/dot.ml
deleted file mode 100644 (file)
index 03b3fac..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Printf
-
-(* ------------------------------------------------------------------------- *)
-
-(* Type definitions. *)
-
-type size =
-    float * float (* in inches *)
-
-type orientation =
-  | Portrait
-  | Landscape
-
-type rankdir =
-  | LeftToRight
-  | TopToBottom
-
-type ratio =
-  | Compress
-  | Fill
-  | Auto
-
-type style =
-
-    (* Both nodes and edges. *)
-
-  | Solid
-  | Dashed
-  | Dotted
-  | Bold
-  | Invisible
-
-    (* Nodes only. *)
-
-  | Filled
-  | Diagonals
-  | Rounded
-
-(* ------------------------------------------------------------------------- *)
-
-(* Basic printers. *)
-
-let print_style = function
-  | None ->
-      ""
-  | Some style ->
-      let style =
-       match style with
-       | Solid ->
-           "solid"
-       | Dashed ->
-           "dashed"
-       | Dotted ->
-           "dotted"
-       | Bold ->
-           "bold"
-       | Invisible ->
-           "invis"
-       | Filled ->
-           "filled"
-       | Diagonals ->
-           "diagonals"
-       | Rounded ->
-           "rounded"
-      in
-      sprintf ", style = %s" style
-
-(* ------------------------------------------------------------------------- *)
-
-(* The graph printer. *)
-
-module Print (G : sig
-
-  type vertex
-
-  val name: vertex -> string
-
-  val successors: (?style:style -> label:string -> vertex -> unit) -> vertex -> unit
-
-  val iter: (?style:style -> label:string -> vertex -> unit) -> unit
-
-end) = struct
-
-  let print
-      ?(directed = true)
-      ?size
-      ?(orientation = Landscape)
-      ?(rankdir = LeftToRight)
-      ?(ratio = Compress)
-      (f : out_channel)
-      =
-
-    fprintf f "%s G {\n" (if directed then "digraph" else "graph");
-    Option.iter (fun (hsize, vsize) ->
-      fprintf f "size=\"%f, %f\";\n" hsize vsize
-    ) size;
-    begin match orientation with
-      | Portrait ->
-         fprintf f "orientation = portrait;\n"
-      | Landscape ->
-         fprintf f "orientation = landscape;\n"
-    end;
-    begin match rankdir with
-      | LeftToRight ->
-         fprintf f "rankdir = LR;\n"
-      | TopToBottom ->
-         fprintf f "rankdir = TB;\n"
-    end;
-    begin match ratio with
-      | Compress ->
-         fprintf f "ratio = compress;\n"
-      | Fill ->
-         fprintf f "ratio = fill;\n"
-      | Auto ->
-         fprintf f "ratio = auto;\n"
-    end;
-
-    G.iter (fun ?style ~label vertex ->
-      fprintf f "%s [ label=\"%s\"%s ] ;\n"
-       (G.name vertex)
-       label
-       (print_style style)
-    );
-
-    G.iter (fun ?style ~label source ->
-      G.successors (fun ?style ~label destination ->
-       fprintf f "%s %s %s [ label=\"%s\"%s ] ;\n"
-         (G.name source)
-         (if directed then "->" else "--")
-         (G.name destination)
-         label
-         (print_style style)
-      ) source
-    );
-
-    fprintf f "\n}\n"
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/dot.mli b/bundles/menhirLib/menhir-20120123/src/dot.mli
deleted file mode 100644 (file)
index dda9a35..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module displays graphs in graphviz dot format. It is much more
-   basic than the one bundled with the ocamlgraph library, but offers
-   the advantage of being stand-alone. *)
-
-(* ------------------------------------------------------------------------- *)
-
-(* Type definitions. *)
-
-type size =
-    float * float (* in inches *)
-
-type orientation =
-  | Portrait
-  | Landscape
-
-type rankdir =
-  | LeftToRight
-  | TopToBottom
-
-type ratio =
-  | Compress
-  | Fill
-  | Auto
-
-type style =
-
-    (* Both nodes and edges. *)
-
-  | Solid
-  | Dashed
-  | Dotted
-  | Bold
-  | Invisible
-
-    (* Nodes only. *)
-
-  | Filled
-  | Diagonals
-  | Rounded
-
-(* ------------------------------------------------------------------------- *)
-
-(* The graph printer. *)
-
-module Print (G : sig
-
-  type vertex
-
-  val name: vertex -> string
-
-  val successors: (?style:style -> label:string -> vertex -> unit) -> vertex -> unit
-
-  val iter: (?style:style -> label:string -> vertex -> unit) -> unit
-
-end) : sig
-
-  val print:
-      ?directed: bool ->
-      ?size: size ->
-      ?orientation: orientation ->
-      ?rankdir: rankdir ->
-      ?ratio: ratio ->
-      out_channel ->
-      unit
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/engine.ml b/bundles/menhirLib/menhir-20120123/src/engine.ml
deleted file mode 100644 (file)
index f66c29c..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-open EngineTypes
-
-(* The LR parsing engine. *)
-
-(* This module is used:
-
-   - at compile time, if so requested by the user, via the --interpret options;
-   - at run time, in the table-based back-end. *)
-
-module Make (T : TABLE) = struct
-
-  (* This propagates type and exception definitions. *)
-
-  include T
-
-  let _eRR : exn =
-    Error
-
-  (* --------------------------------------------------------------------------- *)
-
-  (* [discard] takes a token off the input stream, queries the lexer
-     for a new one, and stores it into [env.token], overwriting the
-     previous token. If [env.shifted] has not yet reached its limit,
-     it is incremented. *)
-
-  let discard env =
-    let lexbuf = env.lexbuf in
-    let token = env.lexer lexbuf in
-    env.token <- token;
-    Log.lookahead_token lexbuf (T.token2terminal token);
-    let shifted = env.shifted + 1 in
-    if shifted >= 0 then
-      env.shifted <- shifted
-
-  (* --------------------------------------------------------------------------- *)
-
-  (* The type [void] is empty. Many of the functions below have return type
-     [void]. This guarantees that they never return a value. Instead, they
-     must stop by raising an exception: either [Accept] or [Error]. *)
-
-  type void
-
-  (* --------------------------------------------------------------------------- *)
-
-  (* In the code-based back-end, the [run] function is sometimes responsible
-     for pushing a new cell on the stack. This is motivated by code sharing
-     concerns. In this interpreter, there is no such concern; [run]'s caller
-     is always responsible for updating the stack. *)
-
-  (* In the code-based back-end, there is a [run] function for each state
-     [s]. This function can behave in two slightly different ways, depending
-     on when it is invoked, or (equivalently) depending on [s].
-
-     If [run] is invoked after shifting a terminal symbol (or, equivalently,
-     if [s] has a terminal incoming symbol), then [run] discards a token,
-     unless [s] has a default reduction on [#]. (Indeed, in that case,
-     requesting the next token might drive the lexer off the end of the input
-     stream.)
-
-     If, on the other hand, [run] is invoked after performing a goto transition,
-     or invoked directly by an entry point, then there is nothing to discard.
-
-     These two cases are reflected in [CodeBackend.gettoken].
-
-     Here, the code is structured in a slightly different way. It is up to
-     the caller of [run] to indicate whether to discard a token. *)
-
-  let rec run env please_discard : void =
-
-    (* Log the fact that we just entered this state. *)
-    
-    let s = env.current in
-    Log.state s;
-
-    (* If [please_discard] is set, discard a token and fetch the next one. *)
-
-    (* This flag is set when [s] is being entered by shifting a terminal
-       symbol and [s] does not have a default reduction on [#]. *)
-
-    if please_discard then
-      discard env;
-
-    (* Examine what situation we are in. This case analysis is analogous to
-       that performed in [CodeBackend.gettoken], in the sub-case where we do
-       not have a terminal incoming symbol. *)
-
-    T.default_reduction
-      s
-      reduce   (* there is a default reduction; perform it *)
-      continue (* there is none; continue below *)
-      env
-
-  and continue env : void =
-
-    (* There is no default reduction. Consult the current lookahead token
-       so as to determine which action should be taken. *)
-
-    (* Peeking at the first input token, without taking it off the input
-       stream, is normally done by reading [env.token]. However, we check
-       [env.shifted] first: if it is -1, then the lookahead token is the
-       [error] token. *)
-
-    (* Note that, if we just called [discard] above, then the lookahead
-       token cannot be [error]. *)
-
-    if env.shifted = (-1) then begin
-      Log.resuming_error_handling();
-      error env
-    end
-    else
-      action env
-
-  (* --------------------------------------------------------------------------- *)
-
-  (* When [action] is invoked, we know that the current state does not have
-     a default reduction. We also know that the current lookahead token is
-     not [error]: it is a real token, stored in [env.token]. *)
-
-  and action env : void =
-
-    (* We consult the two-dimensional action table, indexed by the
-       current state and the current lookahead token, in order to
-       determine which action should be taken. *)
-
-    let token = env.token in
-    T.action
-      env.current                    (* determines a row *)
-      (T.token2terminal token)       (* determines a column *)
-      (T.token2value token)
-      shift                          (* shift continuation *)
-      reduce                         (* reduce continuation *)
-      initiate                       (* failure continuation *)
-      env
-
-  (* --------------------------------------------------------------------------- *)
-
-  (* This function takes care of shift transitions along a terminal symbol.
-     (Goto transitions are taken care of within [reduce] below.) The symbol
-     can be either an actual token or the [error] pseudo-token. *)
-
-  and shift env
-      (please_discard : bool)
-      (terminal : terminal)
-      (value : semantic_value)
-      (s' : state)
-      : void =
-
-    (* Log the transition. *)
-
-    Log.shift terminal s';
-
-    (* Push a new cell onto the stack, containing the identity of the
-       state that we are leaving. *)
-
-    let lexbuf = env.lexbuf in
-    env.stack <- {
-      state = env.current;
-      semv = value;
-      startp = lexbuf.Lexing.lex_start_p;
-      endp = lexbuf.Lexing.lex_curr_p;
-      next = env.stack;
-    };
-
-    (* Switch to state [s']. *)
-
-    env.current <- s';
-    run env please_discard
-
-  (* --------------------------------------------------------------------------- *)
-
-  (* This function takes care of reductions. *)
-
-  and reduce env (prod : production) : void =
-
-    (* Log a reduction event. *)
-
-    Log.reduce_or_accept prod;
-
-    (* Invoke the semantic action. The semantic action is responsible for
-       truncating the stack, updating the current state, producing a cell that
-       contains a new semantic value, and raising [Accept] or [Error] if
-       appropriate. *)
-
-    (* If the semantic action raises [Error], we catch it immediately and
-       initiate error handling. *)
-
-    (* The apparently weird idiom used here is an encoding for a
-       [let/unless] construct, which does not exist in ocaml. *)
-
-    if (
-      try
-       T.semantic_action prod env;
-       true
-      with Error ->
-       false
-    ) then begin
-
-      (* By our convention, the semantic action is responsible for updating
-        the stack. The state now found in the top stack cell is the return
-        state. *)
-
-      (* Perform a goto transition. The target state is determined
-        by consulting the goto table at the return state and at
-        production [prod]. *)
-
-      env.current <- T.goto env.stack.state prod;
-      run env false
-
-    end
-    else
-      errorbookkeeping env
-
-
-  (* --------------------------------------------------------------------------- *)
-
-  (* The following functions deal with errors. *)
-
-  (* [initiate] and [errorbookkeeping] initiate error handling. See the functions
-     by the same names in [CodeBackend]. *)
-
-  and initiate env : void =
-    assert (env.shifted >= 0);
-    if T.recovery && env.shifted = 0 then begin
-      Log.discarding_last_token (T.token2terminal env.token);
-      discard env;
-      env.shifted <- 0;
-      action env
-    end
-    else
-      errorbookkeeping env
-
-  and errorbookkeeping env =
-    Log.initiating_error_handling();
-    env.previouserror <- env.shifted;
-    env.shifted <- (-1);
-    error env
-
-  (* [error] handles errors. *)
-
-  and error env : void =
-
-    (* Consult the column associated with the [error] pseudo-token in the
-       action table. *)
-
-    T.action
-      env.current                    (* determines a row *)
-      T.error_terminal               (* determines a column *)
-      T.error_value
-      error_shift                    (* shift continuation *)
-      error_reduce                   (* reduce continuation *)
-      error_fail                     (* failure continuation *)
-      env
-
-  and error_shift env please_discard terminal value s' =
-
-    (* Here, [terminal] is [T.error_terminal], and [value] is [T.error_value]. *)
-
-    assert (terminal = T.error_terminal && value = T.error_value);
-
-    (* This state is capable of shifting the [error] token. *)
-
-    Log.handling_error env.current;
-    shift env please_discard terminal value s'
-
-  and error_reduce env prod =
-
-    (* This state is capable of performing a reduction on [error]. *)
-
-    Log.handling_error env.current;
-    reduce env prod
-
-  and error_fail env =
-
-    (* This state is unable to handle errors. Attempt to pop a stack
-       cell. *)
-
-    let cell = env.stack in
-    let next = cell.next in
-    if next == cell then
-
-      (* The stack is empty. Die. *)
-
-      raise _eRR
-
-    else begin
-
-      (* The stack is nonempty. Pop a cell, updating the current state
-        with that found in the popped cell, and try again. *)
-
-      env.stack <- next;
-      env.current <- cell.state;
-      error env
-
-    end
-
-  (* --------------------------------------------------------------------------- *)
-
-  let entry
-      (s : state)
-      (lexer : Lexing.lexbuf -> token)
-      (lexbuf : Lexing.lexbuf)
-      : semantic_value =
-
-    (* Build an empty stack. This is a dummy cell, which is its own
-       successor. Its fields other than [next] contain dummy values. *)
-
-    let rec empty = {
-      state = s;                          (* dummy *)
-      semv = T.error_value;               (* dummy *)
-      startp = lexbuf.Lexing.lex_start_p; (* dummy *)
-      endp = lexbuf.Lexing.lex_curr_p;    (* dummy *)
-      next = empty;
-    } in
-
-    (* Perform an initial call to the lexer. *)
-
-    let token : token =
-      lexer lexbuf
-    in
-
-    (* Log our first lookahead token. *)
-
-    Log.lookahead_token lexbuf (T.token2terminal token);
-
-    (* Build an initial environment. *)
-
-    let env = {
-      lexer = lexer;
-      lexbuf = lexbuf;
-      token = token;
-      shifted = max_int;
-      previouserror = max_int;
-      stack = empty;
-      current = s;
-    } in
-
-    (* Run. Catch [Accept], which represents normal termination. Let [Error]
-       escape. *)
-
-    try
-
-      (* If ocaml offered a [match/with] construct with zero branches, this is
-        what we would use here, since the type [void] has zero cases. *)
-
-      let (_ : void) = run env false in
-      assert false (* cannot fail *)
-
-    with
-    | Accept v ->
-       v
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/engine.mli b/bundles/menhirLib/menhir-20120123/src/engine.mli
deleted file mode 100644 (file)
index f48c7ee..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-open EngineTypes
-
-(* The LR parsing engine. *)
-
-module Make (T : TABLE) : ENGINE with type state = T.state
-                                  and type token = T.token
-                                 and type semantic_value = T.semantic_value
diff --git a/bundles/menhirLib/menhir-20120123/src/engineTypes.ml b/bundles/menhirLib/menhir-20120123/src/engineTypes.ml
deleted file mode 100644 (file)
index 279d6e8..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This file defines several types and module types that are used in the
-   specification of module [Engine]. *)
-
-(* --------------------------------------------------------------------------- *)
-
-(* It would be nice if we could keep the structure of stacks and environments
-   hidden. However, stacks and environments must be accessible to semantic
-   actions, so the following data structure definitions must be public. *)
-
-(* --------------------------------------------------------------------------- *)
-
-(* A stack is a linked list of cells. A sentinel cell -- which is its own
-   successor -- is used to mark the bottom of the stack. The sentinel cell
-   itself is not significant -- it contains dummy values. *)
-
-type ('state, 'semantic_value) stack = {
-
-  (* The state that we should go back to if we pop this stack cell. *)
-
-  (* This convention means that the state contained in the top stack cell is
-     not the current state [env.current]. It also means that the state found
-     within the sentinel is a dummy -- it is never consulted. This convention
-     is the same as that adopted by the code-based back-end. *)
-
-  state: 'state;
-
-  (* The semantic value associated with the chunk of input that this cell
-     represents. *)
-
-  semv: 'semantic_value;
-
-  (* The start and end positions of the chunk of input that this cell
-     represents. *)
-
-  startp: Lexing.position;
-  endp: Lexing.position;
-
-  (* The next cell down in the stack. If this is a self-pointer, then this
-     cell is the sentinel, and the stack is conceptually empty. *)
-
-  next: ('state, 'semantic_value) stack;
-
-}
-
-(* --------------------------------------------------------------------------- *)
-
-(* A parsing environment contains basically all of the automaton's state. *)
-
-type ('state, 'semantic_value, 'token) env = {
-
-  (* The lexer. *)
-
-  lexer: Lexing.lexbuf -> 'token;
-
-  (* The lexing buffer. It is used as an argument to the lexer, and also
-     accessed directly when extracting positions. *)
-
-  lexbuf: Lexing.lexbuf;
-
-  (* The last token that was obtained from the lexer. *)
-
-  mutable token: 'token;
-
-  (* A count of how many tokens were shifted since the beginning, or since
-     the last [error] token was encountered. By convention, if [shifted]
-     is (-1), then the current lookahead token is [error]. *)
-
-  mutable shifted: int;
-
-  (* A copy of the value of [shifted] just before the most recent error
-     was detected. This value is not used by the automaton itself, but
-     is made accessible to semantic actions. *)
-
-  mutable previouserror: int;
-
-  (* The stack. In [CodeBackend], it is passed around on its own,
-     whereas, here, it is accessed via the environment. *)
-
-  mutable stack: ('state, 'semantic_value) stack;
-
-  (* The current state. In [CodeBackend], it is passed around on its
-     own, whereas, here, it is accessed via the environment. *)
-
-  mutable current: 'state;
-
-}
-
-(* --------------------------------------------------------------------------- *)
-
-(* This signature describes the parameters that must be supplied to the LR
-   engine. *)
-
-module type TABLE = sig
-
-  (* The type of automaton states. *)
-
-  type state
-
-  (* The type of tokens. These can be thought of as real tokens, that is,
-     tokens returned by the lexer. They carry a semantic value. This type
-     does not include the [error] pseudo-token. *)
-
-  type token
-
-  (* The type of terminal symbols. These can be thought of as integer codes.
-     They do not carry a semantic value. This type does include the [error]
-     pseudo-token. *)
-
-  type terminal
-
-  (* The type of semantic values. *)
-
-  type semantic_value
-
-  (* A token is conceptually a pair of a (non-[error]) terminal symbol and
-     a semantic value. The following two functions are the pair projections. *)
-
-  val token2terminal: token -> terminal
-  val token2value: token -> semantic_value
-
-  (* Even though the [error] pseudo-token is not a real token, it is a
-     terminal symbol. Furthermore, for regularity, it must have a semantic
-     value. *)
-
-  val error_terminal: terminal
-  val error_value: semantic_value
-
-  (* The type of productions. *)
-
-  type production
-
-  (* If a state [s] has a default reduction on production [prod], then, upon
-     entering [s], the automaton should reduce [prod] without consulting the
-     lookahead token. The following function allows determining which states
-     have default reductions. *)
-
-  (* Instead of returning a value of a sum type -- either [DefRed prod], or
-     [NoDefRed] -- it accepts two continuations, and invokes just one of
-     them. This mechanism allows avoiding a memory allocation. *)
-
-  val default_reduction:
-    state ->
-    ('env -> production -> 'answer) ->
-    ('env -> 'answer) ->
-    'env -> 'answer
-
-  (* An LR automaton can normally take three kinds of actions: shift, reduce,
-     or fail. (Acceptance is a particular case of reduction: it consists in
-     reducing a start production.) *)
-
-  (* There are two variants of the shift action. [shift/discard s] instructs
-     the automaton to discard the current token, request a new one from the
-     lexer, and move to state [s]. [shift/nodiscard s] instructs it to move to
-     state [s] without requesting a new token. This instruction should be used
-     when [s] has a default reduction on [#]. See [CodeBackend.gettoken] for
-     details. *)
-
-  (* This is the automaton's action table. It maps a pair of a state and a
-     terminal symbol to an action. *)
-
-  (* Instead of returning a value of a sum type -- one of shift/discard,
-     shift/nodiscard, reduce, or fail -- this function accepts three
-     continuations, and invokes just one them. This mechanism allows avoiding
-     a memory allocation. *)
-
-  (* In summary, the parameters to [action] are as follows:
-
-     - the first two parameters, a state and a terminal symbol, are used to
-       look up the action table;
-
-     - the next parameter is the semantic value associated with the above
-       terminal symbol; it is not used, only passed along to the shift
-       continuation, as explained below;
-
-     - the shift continuation expects an environment; a flag that tells
-       whether to discard the current token; the terminal symbol that
-       is being shifted; its semantic value; and the target state of
-       the transition;
-
-     - the reduce continuation expects an environment and a production;
-
-     - the fail continuation expects an environment;
-
-     - the last parameter is the environment; it is not used, only passed
-       along to the selected continuation. *)
-
-  val action:
-    state ->
-    terminal ->
-    semantic_value ->
-    ('env -> bool -> terminal -> semantic_value -> state -> 'answer) ->
-    ('env -> production -> 'answer) ->
-    ('env -> 'answer) ->
-    'env -> 'answer
-
-  (* This is the automaton's goto table. It maps a pair of a state and a
-     production to a new state.
-
-     This convention is slightly different from the textbook approach. The
-     goto table is usually indexed by a state and a non-terminal symbol. *)
-
-  val goto: state -> production -> state
-
-  (* By convention, a semantic action is responsible for:
-
-     1. fetching whatever semantic values and positions it needs off the stack;
-
-     2. popping an appropriate number of cells off the stack, as dictated
-     by the length of the right-hand side of the production; this involves
-     updating [env.stack];
-
-     3. computing a new semantic value, as well as new start and end positions;
-
-     4. pushing a new stack cell, which contains the three values
-     computed in step 3; this again involves updating [env.stack]
-     (only one update is necessary).
-
-     Point 1 is essentially forced upon us: if semantic values were fetched
-     off the stack by this interpreter, then the calling convention for
-     semantic actions would be variadic: not all semantic actions would have
-     the same number of arguments. The rest follows rather naturally. *)
-
-  (* If production [prod] is an accepting production, then the semantic action
-     is responsible for raising exception [Accept], instead of returning
-     normally. This convention allows us to not distinguish between regular
-     productions and accepting productions. All we have to do is catch that
-     exception at top level. *)
-
-  (* Semantic actions are allowed to raise [Error]. *)
-
-  exception Accept of semantic_value
-  exception Error
-
-  type semantic_action =
-      (state, semantic_value, token) env -> unit
-
-  val semantic_action: production -> semantic_action
-
-  (* The LR engine can attempt error recovery. This consists in discarding
-     tokens, just after an error has been successfully handled, until a token
-     that can be successfully handled is found. This mechanism is optional.
-     The following flag enables it. *)
-
-  val recovery: bool
-
-  (* The LR engine requires a number of hooks, which are used for logging. *)
-
-  (* The comments below indicate the conventional messages that correspond
-     to these hooks in the code-based back-end; see [CodeBackend]. *)
-
-  module Log : sig
-
-    (* State %d: *)
-
-    val state: state -> unit
-
-    (* Shifting (<terminal>) to state <state> *)
-
-    val shift: terminal -> state -> unit
-
-    (* Reducing a production should be logged either as a reduction
-       event (for regular productions) or as an acceptance event (for
-       start productions). *)
-
-    (* Reducing production <production> / Accepting *)
-
-    val reduce_or_accept: production -> unit
-
-    (* Lookahead token is now <terminal> (<pos>-<pos>) *)
-
-    val lookahead_token: Lexing.lexbuf -> terminal -> unit
-
-    (* Initiating error handling *)
-
-    val initiating_error_handling: unit -> unit
-
-    (* Resuming error handling *)
-
-    val resuming_error_handling: unit -> unit
-
-    (* Handling error in state <state> *)
-
-    val handling_error: state -> unit
-
-    (* Discarding last token read (<terminal>) *)
-
-    val discarding_last_token: terminal -> unit
-
-  end
-
-end
-
-(* --------------------------------------------------------------------------- *)
-
-(* This signature describes the LR engine. *)
-
-module type ENGINE = sig
-
-  type state
-
-  type token
-
-  type semantic_value
-
-  (* An entry point to the engine requires a start state, a lexer, and a lexing
-     buffer. It either succeeds and produces a semantic value, or fails and
-     raises [Error]. *)
-
-  exception Error
-
-  val entry:
-    state ->
-    (Lexing.lexbuf -> token) ->
-    Lexing.lexbuf ->
-    semantic_value
-
-end
diff --git a/bundles/menhirLib/menhir-20120123/src/error.ml b/bundles/menhirLib/menhir-20120123/src/error.ml
deleted file mode 100644 (file)
index 0dd878f..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Printf
-open Lexing
-
-(* TEMPORARY Vérifier que les messages d'erreur sont standardisés au
-   maximum, localisés au maximum. Supprimer autant de fonctions que
-   possible dans ce module. *)
-
-(* TEMPORARY reprendre compl`etement implementation et interface
-   de ce module *)
-
-(* ---------------------------------------------------------------------------- *)
-
-(* Global state. *)
-
-let get_initialized_ref ref =
-  match !ref with
-  | None ->
-      assert false
-  | Some contents ->
-      contents
-
-let filename =
-  ref (None : string option)
-
-let filemark =
-  ref Mark.none
-
-(* 2011/10/19: do not use [Filename.basename]. The [#] annotations that
-   we insert in the [.ml] file must retain their full path. This does
-   mean that the [#] annotations depend on how menhir is invoked -- e.g.
-   [menhir foo/bar.mly] and [cd foo && menhir bar.mly] will produce
-   different files. Nevertheless, this seems useful/reasonable. *)
-
-(* This also influences the type error messages produced by [--infer]. *)
-
-let set_filename name =
-  filename := Some name;
-  filemark := Mark.fresh()
-
-let get_filename () =
-  get_initialized_ref filename
-
-let get_filemark () =
-  !filemark
-
-let file_contents =
-  ref (None : string option)
-
-let get_file_contents () =
-  get_initialized_ref file_contents
-
-(* ---------------------------------------------------------------------------- *)
-
-(* Logging and log levels. *)
-
-let log kind verbosity msg =
-  if kind >= verbosity then
-    Printf.fprintf stderr "%t%!" msg
-
-let logG =
-  log Settings.logG
-
-let logA =
-  log Settings.logA
-
-let logC =
-  log Settings.logC
-
-(* ---------------------------------------------------------------------------- *)
-
-(* Errors and warnings. *)
-
-let errors =
-  ref false
-
-let printN positions message = 
-  List.iter (fun position -> 
-    fprintf stderr "%s:\n" (Positions.string_of_pos position)
-  ) positions;
-  fprintf stderr "%s\n%!" message
-
-let error_message message =
-  "Error: " ^ message
-
-let error positions message =
-  printN positions (error_message message);
-  exit 1
-
-let errorp v message =
-  error [ Positions.position v ] message
-
-let signal positions message =
-  printN positions message;
-  errors := true
-
-let warning positions message =
-  printN positions (Printf.sprintf "Warning: %s" message)
-
-let errors () =
-  !errors
-
-(* Certain warnings about the grammar can optionally be treated as errors.
-   The following function emits a warning or error message, via [warning] or
-   [signal]. It does not stop the program; the client must at some point call
-   [errors] and stop the program if any errors have been reported. *)
-
-let grammar_warning positions message =
-  if Settings.strict then
-    signal positions (error_message message)
-  else
-    warning positions message
-
diff --git a/bundles/menhirLib/menhir-20120123/src/error.mli b/bundles/menhirLib/menhir-20120123/src/error.mli
deleted file mode 100644 (file)
index 5cd865f..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module helps report errors and maintains some information
-   about the source file that is being read. *)
-
-(* ---------------------------------------------------------------------------- *)
-
-(* Call [set_filename] before lexing and parsing in order to inform
-   the module [Error] about the name of the file that is being
-   examined. *)
-
-(* TEMPORARY limiter ou supprimer ou commenter cette interface stateful *)
-
-val set_filename: string -> unit
-
-val get_filename: unit -> string
-
-val get_filemark: unit -> Mark.t
-
-val file_contents: string option ref
-
-val get_file_contents: unit -> string
-
-(* ---------------------------------------------------------------------------- *)
-
-(* Logging and log levels. *)
-
-val logG: int -> (out_channel -> unit) -> unit
-val logA: int -> (out_channel -> unit) -> unit
-val logC: int -> (out_channel -> unit) -> unit
-
-(* ---------------------------------------------------------------------------- *)
-
-(* Errors and warnings. *)
-
-(* [error ps msg] displays the error message [msg], referring to the
-   positions [ps], and exits. *)
-
-val error: Positions.positions -> string -> 'a
-
-(* [errorp v msg] displays the error message [msg], referring to the
-   position range carried by [v], and exits. *)
-
-val errorp: 'a Positions.located -> string -> 'b
-
-(* [warning ps msg] displays the warning message [msg], referring to
-   the positions [ps]. *)
-
-val warning: Positions.positions -> string -> unit
-
-(* [signal ps msg] displays the error message [msg], referring to the
-   positions [ps], and does not exit immediately. *)
-
-val signal: Positions.positions -> string -> unit
-
-(* [errors] returns [true] if [signal] was previously called. Together
-   [signal] and [errors] allow reporting multiple errors before aborting. *)
-
-val errors: unit -> bool
-
-(* Certain warnings about the grammar can optionally be treated as errors.
-   The following function emits a warning or error message, via [warning] or
-   [signal]. It does not stop the program; the client must at some point call
-   [errors] and stop the program if any errors have been reported. *)
-
-val grammar_warning: Positions.positions -> string -> unit
-
diff --git a/bundles/menhirLib/menhir-20120123/src/fancy-parser.mly b/bundles/menhirLib/menhir-20120123/src/fancy-parser.mly
deleted file mode 100644 (file)
index c7af48a..0000000
+++ /dev/null
@@ -1,389 +0,0 @@
-/**************************************************************************/
-/*                                                                        */
-/*  Menhir                                                                */
-/*                                                                        */
-/*  François Pottier, INRIA Rocquencourt                                  */
-/*  Yann Régis-Gianas, PPS, Université Paris Diderot                      */
-/*                                                                        */
-/*  Copyright 2005-2008 Institut National de Recherche en Informatique    */
-/*  et en Automatique. All rights reserved. This file is distributed      */
-/*  under the terms of the Q Public License version 1.0, with the change  */
-/*  described in file LICENSE.                                            */
-/*                                                                        */
-/**************************************************************************/
-
-/* This is the fancy version of the parser, to be processed by menhir.
-   It is kept in sync with [Parser], but exercises menhir's features. */
-
-/* ------------------------------------------------------------------------- */
-/* Imports. */
-
-%{
-
-open Keyword
-open ConcreteSyntax
-open Syntax
-open Positions
-
-%}
-
-/* ------------------------------------------------------------------------- */
-/* Tokens. */
-
-%token TOKEN TYPE LEFT RIGHT NONASSOC START PREC PUBLIC COLON BAR EOF EQUAL
-%token INLINE LPAREN RPAREN COMMA QUESTION STAR PLUS PARAMETER
-%token <string Positions.located> LID UID 
-%token <Stretch.t> HEADER
-%token <Stretch.ocamltype> OCAMLTYPE
-%token <string Lazy.t> PERCENTPERCENT
-%token <Action.t> ACTION
-
-/* ------------------------------------------------------------------------- */
-/* Start symbol. */
-
-%start <ConcreteSyntax.grammar> grammar
-
-/* ------------------------------------------------------------------------- */
-/* Priorities. */
-
-/* These declarations solve a shift-reduce conflict in favor of
-   shifting: when the declaration of a non-terminal symbol begins with
-   a leading bar, it is understood as an (insignificant) leading
-   optional bar, *not* as an empty right-hand side followed by a bar.
-   This ambiguity arises due to the existence of a new notation for
-   letting several productions share a single semantic action. */
-
-%nonassoc no_optional_bar
-%nonassoc BAR
-
-/* These declarations encourage the [error] token to be shifted if
-   found at the end of what seems like a legal declaration. */
-
-%nonassoc decl
-%nonassoc error
-
-%%
-
-/* ------------------------------------------------------------------------- */
-/* A grammar consists of declarations and rules, followed by an optional
-   trailer, which we do not parse. */
-
-grammar:
-  ds = declaration* PERCENTPERCENT rs = rule* t = trailer
-    { 
-      { 
-       pg_filename          = ""; (* filled in by the caller *)
-       pg_declarations      = List.flatten ds;
-       pg_rules             = List.flatten rs;
-       pg_trailer           = t
-      }
-    }
-
-/* ------------------------------------------------------------------------- */
-/* A declaration is an %{ Objective Caml header %}, or a %token, %start,
-   %type, %left, %right, or %nonassoc declaration. */
-
-declaration:
-
-| h = HEADER /* lexically delimited by %{ ... %} */
-    { [ with_poss $startpos $endpos (DCode h) ] }
-
-| TOKEN t = OCAMLTYPE? ts = clist(terminal) %prec decl
-    { List.map (Positions.map (fun terminal -> DToken (t, terminal))) ts }
-
-| TOKEN OCAMLTYPE? clist(terminal) error
-| TOKEN OCAMLTYPE? error
-    { Error.signal (Positions.two $startpos $endpos) "\
-Syntax error in a %token declaration.
-Here are sample valid declarations:
-  %token DOT SEMICOLON
-  %token <string> LID UID";
-      []
-    }
-
-| START t = OCAMLTYPE? nts = clist(nonterminal) %prec decl
-    /* %start <ocamltype> foo is syntactic sugar for %start foo %type <ocamltype> foo */
-    {
-      match t with
-      | None ->
-         List.map (Positions.map (fun nonterminal -> DStart nonterminal)) nts
-      | Some t ->
-         Misc.mapd (fun ntloc ->
-            Positions.mapd (fun nt -> DStart nt, DType (t, ParameterVar ntloc)) ntloc) nts
-    }
-
-| START OCAMLTYPE? clist(nonterminal) error
-| START OCAMLTYPE? error
-    { Error.signal (Positions.two $startpos $endpos) "\
-Syntax error in a %start declaration.
-Here are sample valid declarations:
-  %start expression phrase
-  %start <int> date time";
-      []
-    }
-
-| TYPE t = OCAMLTYPE ss = clist(actual_parameter) %prec decl
-    { List.map (Positions.map (fun nt -> DType (t, nt)))
-        (List.map Parameters.with_pos ss) }
-
-| TYPE OCAMLTYPE clist(actual_parameter) error
-| TYPE OCAMLTYPE error
-| TYPE error
-    { Error.signal (Positions.two $startpos $endpos) "\
-Syntax error in a %type declaration.
-Here are sample valid declarations:
-  %type <Syntax.expression> expression
-  %type <int> date time";
-      []
-    }
-
-| k = priority_keyword ss = clist(symbol) %prec decl
-    { let prec = ParserAux.current_token_precedence $startpos(k) $endpos(k) in
-      List.map (Positions.map (fun symbol -> DTokenProperties (symbol, k, prec))) ss }
-
-| priority_keyword clist(symbol) error
-| priority_keyword error
-    { Error.signal (Positions.two $startpos $endpos) "\
-Syntax error in a precedence declaration.
-Here are sample valid declarations:
-  %left PLUS TIMES
-  %nonassoc unary_minus
-  %right CONCAT";
-      []
-    }
-
-| PARAMETER t = OCAMLTYPE
-    { [ with_poss $startpos $endpos (DParameter t) ] }
-
-| PARAMETER error
-    { Error.signal (Positions.two $startpos $endpos) "\
-Syntax error in a %parameter declaration.
-Here is a sample valid declaration:
-  %parameter <X : sig type t end>";
-      []
-    }
-
-/* This error production should lead to resynchronization on the next %something.
-   The use of $previouserror prevents reporting errors that are too close to one
-   another -- presumably, the second error only means that we failed to properly
-   recover after the first error. */
-| error
-    { if $previouserror >= 3 then
-        Error.signal (Positions.two $startpos $endpos) "Syntax error inside a declaration.";
-      [] }
-
-/* This production recognizes tokens that are valid in the rules section,
-   but not in the declarations section. This is a hint that a %% was
-   forgotten. */
-
-| rule_specific_token
-    {
-      if $previouserror >= 3 then
-       Error.signal (Positions.two $startpos $endpos)
-         "Syntax error inside a declaration.\n\
-          Did you perhaps forget the %% that separates declarations and rules?";
-
-      (* Do not attempt to perform error recovery. There is no way of
-        forcing the automaton into a state where rules are expected. *)
-
-      exit 1
-    }
-
-priority_keyword:
-  LEFT
-    { LeftAssoc }
-| RIGHT
-    { RightAssoc }
-| NONASSOC
-    { NonAssoc }
-
-rule_specific_token:
-| PUBLIC
-| INLINE
-| COLON
-| EOF
-    { () }
-
-/* ------------------------------------------------------------------------- */
-/* Our lists of symbols are separated with optional commas. Order is
-   irrelevant. */
-
-%inline clist(X):
-  xs = separated_nonempty_list(COMMA?, X)
-    { xs }
-
-/* ------------------------------------------------------------------------- */
-/* A symbol is a terminal or nonterminal symbol. One would like to
-   require nonterminal symbols to begin with a lowercase letter, so as
-   to lexically distinguish them from terminal symbols, which must
-   begin with an uppercase letter. However, for compatibility with
-   ocamlyacc, this is impossible. It can be required only for
-   nonterminal symbols that are also start symbols. */
-
-symbol:
-  id = LID
-| id = UID
-    { id }
-
-/* ------------------------------------------------------------------------- */
-/* Terminals must begin with an uppercase letter. Nonterminals that are
-   declared to be start symbols must begin with a lowercase letter. */
-
-%inline terminal:
-  id = UID
-    { id }
-
-%inline nonterminal:
-  id = LID
-    { id }
-
-/* ------------------------------------------------------------------------- */
-/* A rule defines a symbol. It is optionally declared %public, and optionally
-   carries a number of formal parameters. The right-hand side of the definition
-   consists of a list of productions. */
-
-rule:
-  flags = flags                                             /* flags */
-  symbol = symbol                                           /* the symbol that is being defined */
-  params = plist(symbol)                                    /* formal parameters */
-  COLON optional_bar
-  prods = separated_nonempty_list(BAR, production_group)    /* productions */
-    { 
-      let public, inline = flags in
-      [
-        {
-          pr_public_flag = public; 
-          pr_inline_flag = inline; 
-         pr_nt          = Positions.value symbol;
-         pr_positions   = [ Positions.position symbol ];
-         pr_parameters  = List.map Positions.value params;
-         pr_branches    = List.flatten prods
-        }
-      ]
-    }
-| error
-    /* This error production should lead to resynchronization on the next
-       well-formed rule. */
-    { if $previouserror >= 3 then
-        Error.signal (Positions.two $startpos $endpos) "Syntax error inside the definition of a nonterminal symbol.";
-      [] }
-
-flags:
-  /* epsilon */
-    { false, false }
-| PUBLIC
-    { true, false }
-| INLINE
-    { false, true }
-| PUBLIC INLINE
-| INLINE PUBLIC
-    { true, true }
-
-optional_bar:
-  /* epsilon */ %prec no_optional_bar
-| BAR
-    { () }
-
-/* ------------------------------------------------------------------------- */
-/* A production group consists of a list of productions, followed by a
-   semantic action and an optional precedence specification. */
-
-production_group:
-  productions = separated_nonempty_list(BAR, production)
-  action = ACTION
-  oprec2 = precedence?
-    { 
-      ParserAux.check_production_group
-       productions
-       $startpos(action) $endpos(action) action;
-
-      List.map (fun (producers, oprec1, rprec, pos) -> {
-       pr_producers                = producers;
-       pr_action                   = action;
-       pr_branch_shift_precedence  = ParserAux.override pos oprec1 oprec2;
-       pr_branch_reduce_precedence = rprec;
-       pr_branch_position          = pos
-      }) productions
-    }
-| error ACTION precedence?
-| error EOF
-    /* This error production should lead to resynchronization on the next
-       semantic action, unless the end of file is reached before a semantic
-       action is found. */
-    { if $previouserror >= 3 then
-        Error.signal (Positions.two $startpos($1) $endpos($1)) "Syntax error inside a production.";
-      [] }
-
-%inline precedence:
-  PREC symbol = symbol
-    { symbol }
-
-/* ------------------------------------------------------------------------- */
-/* A production is a list of producers, optionally followed by a
-   precedence declaration. */
-
-production:
-  producers = producer* oprec = precedence?
-    { producers,
-      oprec,
-      ParserAux.current_reduce_precedence(),
-      Positions.lex_join $startpos $endpos
-    }
-
-/* ------------------------------------------------------------------------- */
-/* A producer is an actual parameter, possibly preceded by a
-   binding.
-
-   Because both [ioption] and [terminated] are defined as inlined by
-   the standard library, this definition expands to two productions,
-   one of which begins with id = LID, the other of which begins with
-   p = actual_parameter. The token LID is in FIRST(actual_parameter),
-   but the LR(1) formalism can deal with that. If [option] was used
-   instead of [ioption], an LR(1) conflict would arise -- looking
-   ahead at LID would not allow determining whether to reduce an
-   empty [option] or to shift. */
-
-producer:
-| id = ioption(terminated(LID, EQUAL)) p = actual_parameter
-    { id, p }
-
-/* ------------------------------------------------------------------------- */
-/* The syntax of actual parameters allows applications, whereas the syntax
-   of formal parameters does not. It also allows use of the "?", "+", and
-   "*" shortcuts. */
-
-actual_parameter:
-  symbol = symbol actuals = plist(actual_parameter) modifier = modifier?
-    { Parameters.oapp1 modifier (Parameters.app symbol actuals) }
-
-/* ------------------------------------------------------------------------- */
-/* Formal or actual parameter lists are delimited with parentheses and
-   separated with commas. They are optional. */
-
-%inline plist(X):
-  params = loption(delimited(LPAREN, separated_nonempty_list(COMMA, X), RPAREN))
-    { params }
-
-/* ------------------------------------------------------------------------- */
-/* The "?", "+", and "*" modifiers are short-hands for applications of
-   certain parameterized nonterminals, defined in the standard library. */
-
-modifier:
-  QUESTION
-    { with_poss $startpos $endpos "option" }
-| PLUS
-    { with_poss $startpos $endpos "nonempty_list" }
-| STAR
-    { with_poss $startpos $endpos "list" }
-
-/* ------------------------------------------------------------------------- */
-/* A trailer is announced by %%, but is optional. */
-
-trailer:
-  EOF
-    { None }
-| p = PERCENTPERCENT /* followed by actual trailer */
-    { Some (Lazy.force p) }
-
-%%
-
diff --git a/bundles/menhirLib/menhir-20120123/src/front.ml b/bundles/menhirLib/menhir-20120123/src/front.ml
deleted file mode 100644 (file)
index 4a3630f..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* Start where [PreFront] left off. *)
-
-let grammar =
-  PreFront.grammar
-
-(* Perform reachability analysis. *)
-
-let grammar =
-  Reachability.trim grammar
-
-let () =
-  Time.tick "Trimming"
-
-(* If [--depend] was specified on the command line, perform
-   dependency analysis and stop. *)
-
-let () =
-  match Settings.depend with
-  | Settings.OMRaw
-  | Settings.OMPostprocess ->
-      Infer.depend grammar (* never returns *)
-  | Settings.OMNone ->
-      ()
-
-(* If [--infer] was specified on the command line, perform
-   type inference and stop. *)
-
-let grammar =
-  if Settings.infer then
-    let grammar = Infer.infer grammar in
-    Time.tick "Inferring types for nonterminals";
-    grammar
-  else
-    grammar
-
-(* If [--no-inline] was specified on the command line, skip the
-   inlining of non terminal definitions marked with %inline. *)
-
-let grammar =
-  if Settings.inline then begin
-    let grammar, inlined = 
-      NonTerminalDefinitionInlining.inline grammar
-    in
-    if not Settings.infer && inlined && not Settings.coq then
-      Error.warning []
-       "you are using the standard library and/or the %inline keyword. We\n\
-        recommend switching on --infer in order to avoid obscure type error messages.";
-    Time.tick "Inlining";
-    grammar
-  end
-  else 
-    grammar
-
-(* If [--only-preprocess] or [--only-preprocess-drop] was specified on the
-   command line, print the grammar and stop. Otherwise, continue. *)
-
-let () =
-  match Settings.preprocess_mode with
-  | Settings.PMOnlyPreprocess mode ->
-      UnparameterizedPrinter.print mode stdout grammar;
-      exit 0
-  | Settings.PMNormal ->
-      ()
-
diff --git a/bundles/menhirLib/menhir-20120123/src/front.mli b/bundles/menhirLib/menhir-20120123/src/front.mli
deleted file mode 100644 (file)
index 76bfc51..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module drives the second half of the front-end. It starts
-   where [PreFront] left off, and performs type inference. This yields
-   the grammar that the back-end works with (through the interface
-   provided by module [Grammar]). *)
-
-val grammar: UnparameterizedSyntax.grammar
-
diff --git a/bundles/menhirLib/menhir-20120123/src/gMap.ml b/bundles/menhirLib/menhir-20120123/src/gMap.ml
deleted file mode 100644 (file)
index 002847f..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-module type S = sig
-
-  (* Keys are assumed to have a natural total order. *)
-
-  type key
-
-  (* The type of maps whose data have type ['a]. *)
-
-  type 'a t
-
-  (* The empty map. *)
-
-  val empty: 'a t
-
-  (* [lookup k m] looks up the value associated to the key [k] in the
-     map [m], and raises [Not_found] if no value is bound to [k]. *)
-
-  val lookup: key -> 'a t -> 'a
-  val find: key -> 'a t -> 'a
-
-  (* [add k d m] returns a map whose bindings are all bindings in [m],
-     plus a binding of the key [k] to the datum [d]. If a binding
-     already exists for [k], it is overridden. *)
-
-  val add: key -> 'a -> 'a t -> 'a t
-
-  (* [strict_add k d m] returns a map whose bindings are all bindings
-     in [m], plus a binding of the key [k] to the datum [d]. If a
-     binding already exists for [k] then [Unchanged] is raised. *)
-
-  exception Unchanged
-
-  val strict_add: key -> 'a -> 'a t -> 'a t
-
-  (* [fine_add decide k d m] returns a map whose bindings are all
-     bindings in [m], plus a binding of the key [k] to the datum
-     [d]. If a binding from [k] to [d0] already exists, then the
-     resulting map contains a binding from [k] to [decide d0 d]. *)
-
-  type 'a decision = 'a -> 'a -> 'a
-
-  val fine_add: 'a decision -> key -> 'a -> 'a t -> 'a t
-
-  (* [mem k m] tells whether the key [k] appears in the domain of the
-     map [m]. *)
-
-  val mem: key -> 'a t -> bool
-
-  (* [singleton k d] returns a map whose only binding is from [k] to [d]. *)
-
-  val singleton: key -> 'a -> 'a t
-
-  (* [is_empty m] returns [true] if and only if the map [m] defines no
-     bindings at all. *)
-
-  val is_empty: 'a t -> bool
-
-  (* [is_singleton s] returns [Some x] if [s] is a singleton
-     containing [x] as its only element; otherwise, it returns
-     [None]. *)
-
-  val is_singleton: 'a t -> (key * 'a) option
-
-  (* [cardinal m] returns [m]'s cardinal, that is, the number of keys
-     it binds, or, in other words, the cardinal of its domain. *)
-
-  val cardinal: 'a t -> int
-
-  (* [choose m] returns an arbitrarily chosen binding in [m], if [m]
-     is nonempty, and raises [Not_found] otherwise. *)
-
-  val choose: 'a t -> key * 'a
-
-  (* [lookup_and_remove k m] looks up the value [v] associated to the
-     key [k] in the map [m], and raises [Not_found] if no value is
-     bound to [k]. The call returns the value [v], together with the
-     map [m] deprived from the binding from [k] to [v]. *)
-
-  val lookup_and_remove: key -> 'a t -> 'a * 'a t
-  val find_and_remove: key -> 'a t -> 'a * 'a t
-
-  (* [remove k m] is the map [m] deprived from any binding for [k]. *)
-
-  val remove: key -> 'a t -> 'a t
-
-  (* [union m1 m2] returns the union of the maps [m1] and
-     [m2]. Bindings in [m2] take precedence over those in [m1]. *)
-
-  val union: 'a t -> 'a t -> 'a t
-
-  (* [fine_union decide m1 m2] returns the union of the maps [m1] and
-     [m2]. If a key [k] is bound to [x1] (resp. [x2]) within [m1]
-     (resp. [m2]), then [decide] is called. It is passed [x1] and
-     [x2], and must return the value that shall be bound to [k] in the
-     final map. *)
-
-  val fine_union: 'a decision -> 'a t -> 'a t -> 'a t
-
-  (* [iter f m] invokes [f k x], in turn, for each binding from key
-     [k] to element [x] in the map [m]. Keys are presented to [f] in
-     increasing order. *)
-
-  val iter: (key -> 'a -> unit) -> 'a t -> unit
-
-  (* [fold f m seed] invokes [f k d accu], in turn, for each binding
-     from key [k] to datum [d] in the map [m]. Keys are presented to
-     [f] in increasing order. The initial value of [accu] is [seed];
-     then, at each new call, its value is the value returned by the
-     previous invocation of [f]. The value returned by [fold] is the
-     final value of [accu]. *)
-
-  val fold: (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
-
-  (* [fold_rev] performs exactly the same job as [fold], but presents
-     keys to [f] in the opposite order. *)
-
-  val fold_rev: (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
-
-  (* It is valid to evaluate [iter2 f m1 m2] if and only if [m1] and
-     [m2] have equal domains. Doing so invokes [f k x1 x2], in turn,
-     for each key [k] bound to [x1] in [m1] and to [x2] in
-     [m2]. Bindings are presented to [f] in increasing order. *)
-
-  val iter2: (key -> 'a -> 'b -> unit) -> 'a t -> 'b t -> unit
-
-  (* [map f m] returns the map obtained by composing the map [m] with
-     the function [f]; that is, the map $k\mapsto f(m(k))$. *)
-
-  val map: ('a -> 'b) -> 'a t -> 'b t
-
-  (* [endo_map] is similar to [map], but attempts to physically share
-     its result with its input. This saves memory when [f] is the
-     identity function. *)
-
-  val endo_map: ('a -> 'a) -> 'a t -> 'a t
-
-  (* If [dcompare] is an ordering over data, then [compare dcompare]
-     is an ordering over maps. *)
-
-  val compare: ('a -> 'a -> int) -> 'a t -> 'a t -> int
-
-  (* A map's domain is a set. Thus, to be able to perform operations
-     on domains, we need set operations, provided by the [Domain]
-     sub-module. The two-way connection between maps and their domains
-     is given by two additional functions, [domain] and
-     [lift]. [domain m] returns [m]'s domain. [lift f s] returns the
-     map $k\mapsto f(k)$, where $k$ ranges over a set of keys [s]. *)
-
-  module Domain : GSet.S with type element = key
-
-  val domain: 'a t -> Domain.t
-  val lift: (key -> 'a) -> Domain.t -> 'a t
-
-  (* [corestrict m d] performs a co-restriction of the map [m] to the
-     domain [d]. That is, it returns the map $k\mapsto m(k)$, where
-     $k$ ranges over all keys bound in [m] but \emph{not} present in
-     [d]. *)
-
-  val corestrict: 'a t -> Domain.t -> 'a t
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/gSet.ml b/bundles/menhirLib/menhir-20120123/src/gSet.ml
deleted file mode 100644 (file)
index ed7ebeb..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This is a stripped down version of [GSet] that describes both [Patricia]
-   and [CompressedBitSet]. The full version of [GSet] is in [AlphaLib]. *)
-
-module type S = sig
-
-  (* Elements are assumed to have a natural total order. *)
-
-  type element
-
-  (* Sets. *)
-
-  type t
-
-  (* The empty set. *)
-
-  val empty: t
-
-  (* [is_empty s] tells whether [s] is the empty set. *)
-
-  val is_empty: t -> bool
-
-  (* [singleton x] returns a singleton set containing [x] as its only
-     element. *)
-
-  val singleton: element -> t
-
-  (* [cardinal s] returns the cardinal of [s]. *)
-
-  val cardinal: t -> int
-
-  (* [choose s] returns an arbitrarily chosen element of [s], if [s]
-     is nonempty, and raises [Not_found] otherwise. *)
-
-  val choose: t -> element
-
-  (* [mem x s] returns [true] if and only if [x] appears in the set
-     [s]. *)
-
-  val mem: element -> t -> bool
-
-  (* [add x s] returns a set whose elements are all elements of [s],
-     plus [x]. *)
-
-  val add: element -> t -> t
-
-  (* [remove x s] returns a set whose elements are all elements of
-     [s], except [x]. *)
-
-  val remove: element -> t -> t
-
-  (* [union s1 s2] returns the union of the sets [s1] and [s2]. *)
-
-  val union: t -> t -> t
-
-  (* [inter s t] returns the set intersection of [s] and [t], that is,
-     $s\cap t$. *)
-
-  val inter: t -> t -> t
-
-  (* [disjoint s1 s2] returns [true] if and only if the sets [s1] and
-     [s2] are disjoint, i.e. iff their intersection is empty. *)
-
-  val disjoint: t -> t -> bool
-
-  (* [iter f s] invokes [f x], in turn, for each element [x] of the
-     set [s]. Elements are presented to [f] in increasing order. *)
-
-  val iter: (element -> unit) -> t -> unit
-
-  (* [fold f s seed] invokes [f x accu], in turn, for each element [x]
-     of the set [s]. Elements are presented to [f] in increasing
-     order. The initial value of [accu] is [seed]; then, at each new
-     call, its value is the value returned by the previous invocation
-     of [f]. The value returned by [fold] is the final value of
-     [accu]. In other words, if $s = \{ x_1, x_2, \ldots, x_n \}$,
-     where $x_1 < x_2 < \ldots < x_n$, then [fold f s seed] computes
-     $([f]\,x_n\,\ldots\,([f]\,x_2\,([f]\,x_1\,[seed]))\ldots)$. *)
-
-  val fold: (element -> 'b -> 'b) -> t -> 'b -> 'b
-
-  (* [elements s] is a list of all elements in the set [s]. *)
-
-  val elements: t -> element list
-
-  (* [compare] is an ordering over sets. *)
-
-  val compare: t -> t -> int
-
-  (* [equal] implements equality over sets. *)
-
-  val equal: t -> t -> bool
-
-  (* [subset] implements the subset predicate over sets. *)
-
-  val subset: (t -> t -> bool)
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/grammar.ml b/bundles/menhirLib/menhir-20120123/src/grammar.ml
deleted file mode 100644 (file)
index 7c34f37..0000000
+++ /dev/null
@@ -1,1118 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open UnparameterizedSyntax
-open Syntax
-open Stretch
-open Positions
-
-(* ------------------------------------------------------------------------ *)
-(* Precedence levels for tokens or pseudo-tokens alike. *)
-
-module TokPrecedence = struct
-
-  (* This set records, on a token by token basis, whether the token's
-     precedence level is ever useful. This allows emitting warnings
-     about useless precedence declarations. *)
-
-  let ever_useful : StringSet.t ref =
-    ref StringSet.empty
-
-  let use id =
-    ever_useful := StringSet.add id !ever_useful
-
-  (* This function is invoked when someone wants to consult a token's
-     precedence level. This does not yet mean that this level is
-     useful, though. Indeed, if it is subsequently compared against
-     [UndefinedPrecedence], it will not allow solving a conflict. So,
-     in addition to the desired precedence level, we return a delayed
-     computation which, when evaluated, records that this precedence
-     level was useful. *)
-
-  let levelip id properties =
-    lazy (use id), properties.tk_priority
-
-  let leveli id = 
-    let properties =
-      try
-       StringMap.find id Front.grammar.tokens
-      with Not_found ->
-       assert false (* well-formedness check has been performed earlier *)
-    in
-    levelip id properties    
-
-  (* This function is invoked after the automaton has been constructed.
-     It warns about unused precedence levels. *)
-
-  let diagnostics () =
-    StringMap.iter (fun id properties ->
-      if not (StringSet.mem id !ever_useful) then
-       match properties.tk_priority with
-       | UndefinedPrecedence ->
-           ()
-       | PrecedenceLevel (_, _, pos1, pos2) ->
-           Error.grammar_warning (Positions.two pos1 pos2)
-             (Printf.sprintf "the precedence level assigned to %s is never useful." id)
-    ) Front.grammar.tokens
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Nonterminals. *)
-
-module Nonterminal = struct
-
-  type t = int
-
-  let n2i i = i
-
-  let compare = (-)
-
-  (* Determine how many nonterminals we have and build mappings
-     both ways between names and indices. A new nonterminal is
-     created for every start symbol. *)
-
-  let new_start_nonterminals =
-    StringSet.fold (fun symbol ss -> (symbol ^ "'") :: ss) Front.grammar.start_symbols []
-
-  let original_nonterminals =
-    StringMap.fold (fun nt _ rules -> nt :: rules) Front.grammar.rules []
-  
-  let start =
-    List.length new_start_nonterminals
-
-  let (n : int), (name : string array), (map : int StringMap.t) =
-    Misc.index (new_start_nonterminals @ original_nonterminals)
-
-  let () =
-    Error.logG 1 (fun f ->
-      Printf.fprintf f
-       "Grammar has %d nonterminal symbols, among which %d start symbols.\n"
-       (n - start) start
-    )
-
-  let is_start nt =
-    nt < start
-
-  let print normalize nt =
-    if normalize then
-      Misc.normalize name.(nt)
-    else
-      name.(nt)
-
-  let lookup name =
-    StringMap.find name map
-
-  let positions nt =
-    (StringMap.find (print false nt) Front.grammar.rules).positions
-
-  let iter f =
-    Misc.iteri n f
-
-  let fold f accu =
-    Misc.foldi n f accu
-
-  let map f =
-    Misc.mapi n f
-
-  let iterx f =
-    for nt = start to n - 1 do
-      f nt
-    done
-
-  let foldx f accu =
-    Misc.foldij start n f accu
-
-  let ocamltype nt =
-    assert (not (is_start nt));
-    try
-      Some (StringMap.find (print false nt) Front.grammar.types)
-    with Not_found ->
-      None
-
-  let tabulate f =
-    Array.get (Array.init n f)
-
-end
-
-(* Sets and maps over nonterminals, used only below. *)
-
-module NonterminalMap = Patricia.Big
-
-module NonterminalSet = Patricia.Big.Domain
-
-(* ------------------------------------------------------------------------ *)
-(* Terminals. *)
-
-module Terminal = struct
-
-  type t = int
-
-  let t2i i = i
-
-  let compare = (-)
-
-  let equal (tok1 : t) (tok2 : t) =
-    tok1 = tok2
-
-  (* Determine how many terminals we have and build mappings
-     both ways between names and indices. A new terminal "#"
-     is created. A new terminal "error" is created. The fact
-     that the integer code assigned to the "error" pseudo-terminal
-     is the last one is exploited in the table-based back-end.
-
-     Pseudo-tokens (used in %prec declarations, but never
-     declared using %token) are filtered out. *)
-
-  let (n : int), (name : string array), (map : int StringMap.t) =
-    let tokens = 
-      StringMap.fold (fun token properties tokens ->
-       if properties.tk_is_declared then token :: tokens else tokens
-      ) Front.grammar.tokens []
-    in
-    match tokens with
-    | [] ->
-       Error.error [] "no tokens have been declared."
-    | _ ->
-       Misc.index ("error" :: tokens @ [ "#" ])
-
-  let print tok =
-    name.(tok)
-
-  let lookup name =
-    StringMap.find name map
-
-  let sharp =
-    lookup "#"
-
-  let error =
-    lookup "error"
-
-  let pseudo tok =
-    (tok = sharp) || (tok = error)
-
-  let token_properties = 
-    let not_so_dummy_properties = (* applicable to [error] and [#] *)
-      {
-       tk_filename      = "__primitives__";
-       tk_priority      = UndefinedPrecedence;
-       tk_associativity = UndefinedAssoc;
-       tk_ocamltype     = None;
-       tk_is_declared   = true;
-       tk_position      = Positions.dummy;
-      }
-    in
-    Array.init n (fun tok ->
-      try 
-        StringMap.find name.(tok) Front.grammar.tokens 
-       with Not_found ->
-        assert (tok = sharp || tok = error);
-        not_so_dummy_properties
-    )
-
-  let () =
-    Error.logG 1 (fun f ->
-      Printf.fprintf f "Grammar has %d terminal symbols.\n" (n - 2)
-    )
-
-  let precedence_level tok = 
-    TokPrecedence.levelip (print tok) token_properties.(tok)
-
-  let associativity tok =
-    token_properties.(tok).tk_associativity
-
-  let ocamltype tok =
-    token_properties.(tok).tk_ocamltype
-
-  let iter f =
-    Misc.iteri n f
-
-  let fold f accu =
-    Misc.foldi n f accu
-
-  let map f =
-    Misc.mapi n f
-
-  let mapx f =
-    assert (sharp = n - 1);
-    Misc.mapi (n-1) f
-
-  (* If a token named [EOF] exists, then it is assumed to represent
-     ocamllex's [eof] pattern, which means that the lexer may
-     eventually produce an infinite stream of [EOF] tokens. This,
-     combined with our error recovery mechanism, may lead to
-     non-termination. We provide a warning against this somewhat
-     obscure situation.
-
-     Relying on the token's name is somewhat fragile, but this saves
-     introducing an extra keyword for declaring which token represents
-     [eof], and should not introduce much confusion. *)
-
-  let eof =
-    try
-      Some (lookup "EOF")
-    with Not_found ->
-      None
-
-end
-
-(* Sets of terminals are used intensively in the LR(1) construction,
-   so it is important that they be as efficient as possible. *)
-
-module TerminalSet = struct
-
-  include CompressedBitSet 
-
-  let print toks =
-    let _, accu =
-      fold (fun tok (first, accu) ->
-       false,
-       if first then
-          accu ^ (Terminal.print tok)
-       else
-         accu ^ " " ^ (Terminal.print tok)
-    ) toks (true, "") in
-    accu
-
-  let universe =
-    remove Terminal.sharp (
-      remove Terminal.error (
-        Terminal.fold add empty
-      )
-    )
-
-end
-
-(* Maps over terminals. *)
-
-module TerminalMap = Patricia.Big
-
-(* ------------------------------------------------------------------------ *)
-(* Symbols. *)
-
-module Symbol = struct
-
-  type t =
-    | N of Nonterminal.t
-    | T of Terminal.t
-
-  let compare sym1 sym2 =
-    match sym1, sym2 with
-    | N nt1, N nt2 ->
-       Nonterminal.compare nt1 nt2
-    | T tok1, T tok2 ->
-       Terminal.compare tok1 tok2
-    | N _, T _ ->
-       1
-    | T _, N _ ->
-       -1
-
-  let equal sym1 sym2 =
-    compare sym1 sym2 = 0
-
-  let rec lequal syms1 syms2 =
-    match syms1, syms2 with
-    | [], [] ->
-       true
-    | sym1 :: syms1, sym2 :: syms2 ->
-       equal sym1 sym2 && lequal syms1 syms2
-    | _ :: _, []
-    | [], _ :: _ ->
-       false
-
-  let print = function
-    | N nt ->
-       Nonterminal.print false nt
-    | T tok ->
-       Terminal.print tok
-
-  let nonterminal = function
-    | T _ ->
-       false
-    | N _ ->
-       true
-
-  (* Printing an array of symbols. [offset] is the start offset -- we
-     print everything to its right. [dot] is the dot offset -- we
-     print a dot at this offset, if we find it. *)
-
-  let printaod offset dot symbols =
-    let buffer = Buffer.create 512 in
-    let length = Array.length symbols in
-    for i = offset to length do
-      if i = dot then
-       Buffer.add_string buffer ". ";
-      if i < length then begin
-       Buffer.add_string buffer (print symbols.(i));
-       Buffer.add_char buffer ' '
-      end
-    done;
-    Buffer.contents buffer
-
-  let printao offset symbols =
-    printaod offset (-1) symbols
-
-  let printa symbols =
-    printao 0 symbols
-
-  let printl symbols =
-    printa (Array.of_list symbols)
-
-  let lookup name =
-    try
-      T (Terminal.lookup name)
-    with Not_found ->
-      try
-       N (Nonterminal.lookup name)
-      with Not_found ->
-       assert false (* well-formedness check has been performed earlier *)
-
-end
-
-(* Sets of symbols. *)
-
-module SymbolSet = Set.Make(Symbol)
-
-(* Maps over symbols. *)
-
-module SymbolMap = struct
-
-  include Map.Make(Symbol)
-
-  let domain m =
-    fold (fun symbol _ accu ->
-      symbol :: accu
-    ) m []
-
-  let purelynonterminal m =
-    fold (fun symbol _ accu ->
-      accu && Symbol.nonterminal symbol
-    ) m true
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Productions. *)
-
-module Production = struct
-
-  type index =
-      int
-
-  (* Create an array of productions. Record which productions are
-     associated with every nonterminal. A new production S' -> S
-     is created for every start symbol S. It is known as a
-     start production. *)
-
-  let n : int =
-    let n = StringMap.fold (fun _ { branches = branches } n ->
-      n + List.length branches
-    ) Front.grammar.rules 0 in
-    Error.logG 1 (fun f -> Printf.fprintf f "Grammar has %d productions.\n" n);
-    n + StringSet.cardinal Front.grammar.start_symbols
-
-  let p2i prod =
-    prod
-
-  let i2p prod =
-    assert (prod >= 0 && prod < n);
-    prod
-
-  let table : (Nonterminal.t * Symbol.t array) array =
-    Array.make n (-1, [||])
-
-  let identifiers : identifier array array =
-    Array.make n [||]
-
-  let used : bool array array =
-    Array.make n [||]
-
-  let actions : action option array =
-    Array.make n None
-
-  let ntprods : (int * int) array =
-    Array.make Nonterminal.n (-1, -1)
-
-  let positions : Positions.t list array =
-    Array.make n []
-
-  let (start : int),
-      (startprods : index NonterminalMap.t) =
-    StringSet.fold (fun nonterminal (k, startprods) ->
-      let nt = Nonterminal.lookup nonterminal
-      and nt' = Nonterminal.lookup (nonterminal ^ "'") in
-      table.(k) <- (nt', [| Symbol.N nt |]);
-      identifiers.(k) <- [| "_1" |];
-      used.(k) <- [| true |];
-      ntprods.(nt') <- (k, k+1);
-      positions.(k) <- Nonterminal.positions nt;
-      k+1,
-      NonterminalMap.add nt k startprods
-    ) Front.grammar.start_symbols (0, NonterminalMap.empty)
-
-  let prec_decl : symbol located option array = 
-    Array.make n None
-
-  let reduce_precedence : precedence_level array = 
-    Array.make n UndefinedPrecedence
-
-  let (_ : int) = StringMap.fold (fun nonterminal { branches = branches } k ->
-    let nt = Nonterminal.lookup nonterminal in
-    let k' = List.fold_left (fun k branch ->
-      let action = branch.action
-      and sprec = branch.branch_shift_precedence 
-      and rprec = branch.branch_reduce_precedence in   
-      let symbols = Array.of_list branch.producers in
-      table.(k) <- (nt, Array.map (fun (v, _) -> Symbol.lookup v) symbols);
-      identifiers.(k) <- Array.mapi (fun i (_, ido) ->
-       match ido with
-       | None ->
-           (* Symbols for which no name was chosen will be represented
-              by variables named _1, _2, etc. *)
-           Printf.sprintf "_%d" (i + 1)
-        | Some id ->
-           (* Symbols for which a name was explicitly chosen will be
-              known by that name in semantic actions. *)
-           id
-      ) symbols;
-      used.(k) <- Array.mapi (fun i (_, ido) ->
-       match ido with
-       | None ->
-           (* A symbol referred to as [$i] is used if and only if the
-              [$i] keyword appears in the semantic action. *)
-            Action.has_dollar (i + 1) action
-       | Some _ ->
-           (* A symbol referred to via a name is considered used.
-              This is a conservative approximation. *)
-            true
-      ) symbols;
-      actions.(k) <- Some action;
-      reduce_precedence.(k) <- rprec;
-      prec_decl.(k) <- sprec;
-      positions.(k) <- [ branch.branch_position ];
-      k+1
-    ) k branches in
-    ntprods.(nt) <- (k, k');
-    k'
-  ) Front.grammar.rules start
-
-  (* Iteration over the productions associated with a specific
-     nonterminal. *)
-
-  let iternt nt f =
-    let k, k' = ntprods.(nt) in
-    for prod = k to k' - 1 do
-      f prod
-    done
-
-  let foldnt (nt : Nonterminal.t) (accu : 'a) (f : index -> 'a -> 'a) : 'a =
-    let k, k' = ntprods.(nt) in
-    let rec loop accu prod =
-      if prod < k' then
-       loop (f prod accu) (prod + 1)
-      else
-       accu
-    in
-    loop accu k
-
-  (* Accessors. *)
-
-  let def prod =
-    table.(prod)
-
-  let nt prod =
-    let nt, _ = table.(prod) in
-    nt
-
-  let rhs prod =
-    let _, rhs = table.(prod) in
-    rhs
-
-  let length prod =
-    Array.length (rhs prod)
-
-  let identifiers prod =
-    identifiers.(prod)
-
-  let used prod =
-    used.(prod)
-
-  let is_start prod =
-    prod < start
-
-  let classify prod =
-    if is_start prod then
-      match (rhs prod).(0) with
-      | Symbol.N nt ->
-         Some nt
-      | Symbol.T _ ->
-         assert false
-    else
-      None
-
-  let action prod =
-    match actions.(prod) with
-    | Some action ->
-       action
-    | None ->
-       (* Start productions have no action. *)
-       assert (is_start prod);
-       assert false
-
-  let positions prod =
-    positions.(prod)
-
-  let startsymbol2startprod nt =
-    try
-      NonterminalMap.find nt startprods
-    with Not_found ->
-      assert false (* [nt] is not a start symbol *)
-
-  (* Iteration. *)
-
-  let iter f =
-    Misc.iteri n f
-
-  let fold f accu =
-    Misc.foldi n f accu
-
-  let map f =
-    Misc.mapi n f
-
-  let iterx f =
-    for prod = start to n - 1 do
-      f prod
-    done
-
-  let foldx f accu =
-    Misc.foldij start n f accu
-
-  (* Printing a production. *)
-
-  let print prod =
-    assert (not (is_start prod));
-    let nt, rhs = table.(prod) in
-    Printf.sprintf "%s -> %s" (Nonterminal.print false nt) (Symbol.printao 0 rhs)
-
-  (* Tabulation. *)
-
-  let tabulate f =
-    Misc.tabulateb n f
-
-  (* This array allows recording, on a production by production basis,
-     whether the production's shift precedence is ever useful. This
-     allows emitting warnings about useless %prec declarations. *)
-
-  let prec_decl_ever_useful =
-    Array.make n false
-
-  let consult_prec_decl prod =
-    lazy (prec_decl_ever_useful.(prod) <- true),
-    prec_decl.(prod)
-
-  let diagnostics () =
-    iterx (fun prod ->
-      if not prec_decl_ever_useful.(prod) then
-       match prec_decl.(prod) with
-       | None ->
-           ()
-       | Some id ->
-           Error.grammar_warning [Positions.position id] "this %prec declaration is never useful."
-    )
-
-  (* Determining the precedence level of a production. If no %prec
-     declaration was explicitly supplied, it is the precedence level
-     of the rightmost terminal symbol in the production's right-hand
-     side. *)
-
-  type production_level =
-    | PNone
-    | PRightmostToken of Terminal.t
-    | PPrecDecl of symbol
-
-  let rightmost_terminal prod =
-    Array.fold_left (fun accu symbol ->
-      match symbol with
-      | Symbol.T tok ->
-         PRightmostToken tok
-      | Symbol.N _ ->
-         accu
-    ) PNone (rhs prod)
-
-  let combine e1 e2 =
-    lazy (Lazy.force e1; Lazy.force e2)
-
-  let shift_precedence prod =
-    let fact1, prec_decl = consult_prec_decl prod in
-    let oterminal =
-      match prec_decl with
-      | None ->
-         rightmost_terminal prod
-      | Some { value = terminal } ->
-         PPrecDecl terminal
-    in
-    match oterminal with
-    | PNone ->
-       fact1, UndefinedPrecedence
-    | PRightmostToken tok ->
-       let fact2, level = Terminal.precedence_level tok in
-       combine fact1 fact2, level
-    | PPrecDecl id ->
-       let fact2, level = TokPrecedence.leveli id  in
-       combine fact1 fact2, level
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Maps over productions. *)
-
-module ProductionMap = struct
-
-  include Patricia.Big
-
-  (* Iteration over the start productions only. *)
-
-  let start f =
-    Misc.foldi Production.start (fun prod m ->
-      add prod (f prod) m
-    ) empty
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Build the grammar's forward and backward reference graphs.
-
-   In the backward reference graph, edges relate each nonterminal [nt]
-   to each of the nonterminals whose definition mentions [nt]. The
-   reverse reference graph is used in the computation of the nullable,
-   nonempty, and FIRST sets.
-
-   The forward reference graph is unused but can be printed on demand. *)
-
-let forward : NonterminalSet.t array =
-  Array.create Nonterminal.n NonterminalSet.empty
-
-let backward : NonterminalSet.t array =
-  Array.create Nonterminal.n NonterminalSet.empty
-
-let () =
-  Array.iter (fun (nt1, rhs) ->
-    Array.iter (function
-      | Symbol.T _ ->
-         ()
-      | Symbol.N nt2 ->
-         forward.(nt1) <- NonterminalSet.add nt2 forward.(nt1);
-         backward.(nt2) <- NonterminalSet.add nt1 backward.(nt2)
-    ) rhs
-  ) Production.table
-
-(* ------------------------------------------------------------------------ *)
-(* If requested, dump the forward reference graph. *)
-
-let () =
-  if Settings.graph then
-    let module P = Dot.Print (struct
-      type vertex = Nonterminal.t
-      let name nt =
-       Printf.sprintf "nt%d" nt
-      let successors (f : ?style:Dot.style -> label:string -> vertex -> unit) nt =
-       NonterminalSet.iter (fun successor ->
-         f ~label:"" successor
-       ) forward.(nt)
-      let iter (f : ?style:Dot.style -> label:string -> vertex -> unit) =
-       Nonterminal.iter (fun nt ->
-         f ~label:(Nonterminal.print false nt) nt
-       )
-    end) in
-    let f = open_out (Settings.base ^ ".dot") in
-    P.print f;
-    close_out f
-
-(* ------------------------------------------------------------------------ *)
-(* Generic support for fixpoint computations.
-
-   A fixpoint computation associates a property with every nonterminal.
-   A monotone function tells how properties are computed. [compute nt]
-   updates the property associated with nonterminal [nt] and returns a
-   flag that tells whether the property actually needed an update. The
-   state of the computation is maintained entirely inside [compute] and
-   is invisible here.
-
-   Whenever a property of [nt] is updated, the properties of the
-   terminals whose definitions depend on [nt] are updated. The
-   dependency graph must be explicitly supplied. *)
-
-let fixpoint (dependencies : NonterminalSet.t array) (compute : Nonterminal.t -> bool) : unit =
-  let queue : Nonterminal.t Queue.t = Queue.create () in
-  let onqueue : bool array = Array.make Nonterminal.n true in
-  for i = 0 to Nonterminal.n - 1 do
-    Queue.add i queue
-  done;
-  Misc.qiter (fun nt ->
-    onqueue.(nt) <- false;
-    let changed = compute nt in
-    if changed then
-      NonterminalSet.iter (fun nt ->
-       if not onqueue.(nt) then begin
-         Queue.add nt queue;
-         onqueue.(nt) <- true
-       end
-      ) dependencies.(nt)
-  ) queue
-
-(* ------------------------------------------------------------------------ *)
-(* Compute which nonterminals are nonempty, that is, recognize a
-   nonempty language. Also, compute which nonterminals are
-   nullable. The two computations are almost identical. The only
-   difference is in the base case: a single terminal symbol is not
-   nullable, but is nonempty. *)
-
-let compute (basecase : bool) : (bool array) * (Symbol.t -> bool) =
-  let property : bool array =
-    Array.make Nonterminal.n false
-  in
-  let symbol_has_property = function
-    | Symbol.T _ ->
-       basecase
-    | Symbol.N nt ->
-       property.(nt)
-  in
-  fixpoint backward (fun nt ->
-    if property.(nt) then
-      false (* no change *)
-    else
-      (* disjunction over all productions for this nonterminal *)
-      let updated = Production.foldnt nt false (fun prod accu ->
-       accu ||
-       let rhs = Production.rhs prod in
-       (* conjunction over all symbols in the right-hand side *)
-       Array.fold_left (fun accu symbol ->
-         accu && symbol_has_property symbol
-       ) true rhs
-      ) in
-      property.(nt) <- updated;
-      updated
-  );
-  property, symbol_has_property
-
-let () =
-  let nonempty, _ = compute true in
-  for nt = Nonterminal.start to Nonterminal.n - 1 do
-    if not nonempty.(nt) then
-      Error.grammar_warning
-       (Nonterminal.positions nt)
-       (Printf.sprintf "%s generates the empty language." (Nonterminal.print false nt))
-  done
-
-let (nullable : bool array), (nullable_symbol : Symbol.t -> bool) =
-  compute false
-
-(* ------------------------------------------------------------------------ *)
-(* Compute FIRST sets. *)
-
-let first =
-  Array.make Nonterminal.n TerminalSet.empty
-
-let first_symbol = function
-  | Symbol.T tok ->
-      TerminalSet.singleton tok
-  | Symbol.N nt ->
-      first.(nt)
-
-let nullable_first_rhs (rhs : Symbol.t array) (i : int) : bool * TerminalSet.t =
-  let length = Array.length rhs in
-  assert (i <= length);
-  let rec loop i toks =
-    if i = length then
-      true, toks
-    else
-      let symbol = rhs.(i) in
-      let toks = TerminalSet.union (first_symbol symbol) toks in
-      if nullable_symbol symbol then
-       loop (i+1) toks
-      else
-       false, toks
-  in
-  loop i TerminalSet.empty
-
-let () =
-  fixpoint backward (fun nt ->
-    let original = first.(nt) in
-    (* union over all productions for this nonterminal *)
-    let updated = Production.foldnt nt TerminalSet.empty (fun prod accu ->
-      let rhs = Production.rhs prod in
-      let _, toks = nullable_first_rhs rhs 0 in
-      TerminalSet.union toks accu
-    ) in
-    first.(nt) <- updated;
-    TerminalSet.compare original updated <> 0
-  )
-
-(* ------------------------------------------------------------------------ *)
-(* Dump the analysis results. *)
-
-let () =
-  Error.logG 2 (fun f ->
-    for nt = 0 to Nonterminal.n - 1 do
-      Printf.fprintf f "nullable(%s) = %b\n"
-       (Nonterminal.print false nt)
-       nullable.(nt)
-    done;
-    for nt = 0 to Nonterminal.n - 1 do
-      Printf.fprintf f "first(%s) = %s\n"
-       (Nonterminal.print false nt)
-       (TerminalSet.print first.(nt))
-    done
-  )
-
-let () =
-  Time.tick "Analysis of the grammar"
-
-(* ------------------------------------------------------------------------ *)
-(* Compute FOLLOW sets. Unnecessary for us, but requested by a user. Also,
-   this is useful for the SLR(1) test. Thus, we perform this analysis only
-   on demand. *)
-
-let follow : TerminalSet.t array Lazy.t =
-  lazy (
-
-    let follow =
-      Array.make Nonterminal.n TerminalSet.empty
-
-    and forward : NonterminalSet.t array =
-      Array.create Nonterminal.n NonterminalSet.empty
-
-    and backward : NonterminalSet.t array =
-      Array.create Nonterminal.n NonterminalSet.empty
-
-    in
-
-    (* Iterate over all productions. *)
-    Array.iter (fun (nt1, rhs) ->
-      (* Iterate over all nonterminal symbols [nt2] in the right-hand side. *)
-      Array.iteri (fun i symbol ->
-       match symbol with
-       | Symbol.T _ ->
-           ()
-       | Symbol.N nt2 ->
-           let nullable, first = nullable_first_rhs rhs (i+1) in
-           (* The FIRST set of the remainder of the right-hand side
-              contributes to the FOLLOW set of [nt2]. *)
-           follow.(nt2) <- TerminalSet.union first follow.(nt2);
-           (* If the remainder of the right-hand side is nullable,
-              FOLLOW(nt1) contributes to FOLLOW(nt2). *)
-           if nullable then begin
-             forward.(nt1) <- NonterminalSet.add nt2 forward.(nt1);
-             backward.(nt2) <- NonterminalSet.add nt1 backward.(nt2)
-           end
-      ) rhs
-    ) Production.table;
-
-    (* The fixpoint computation used here is not the most efficient
-       algorithm -- one could do better by first collapsing the
-       strongly connected components, then walking the graph in
-       topological order. But this will do. *)
-
-    fixpoint forward (fun nt ->
-      let original = follow.(nt) in
-      (* union over all contributors *)
-      let updated = NonterminalSet.fold (fun nt' accu ->
-       TerminalSet.union follow.(nt') accu
-      ) backward.(nt) original in
-      follow.(nt) <- updated;
-      TerminalSet.compare original updated <> 0
-    );
-
-    follow
-
-  )
-
-(* Define an accessor that triggers the computation of the FOLLOW sets
-   if it has not been performed already. *)
-
-let follow nt =
-  (Lazy.force follow).(nt)
-
-(* At log level 2, display the FOLLOW sets. *)
-
-let () =
-  Error.logG 2 (fun f ->
-    for nt = 0 to Nonterminal.n - 1 do
-      Printf.fprintf f "follow(%s) = %s\n"
-       (Nonterminal.print false nt)
-       (TerminalSet.print (follow nt))
-    done
-  )
-
-(* ------------------------------------------------------------------------ *)
-(* Provide explanations about FIRST sets. *)
-
-(* The idea is to explain why a certain token appears in the FIRST set
-   for a certain sequence of symbols. Such an explanation involves
-   basic assertions of the form (i) symbol N is nullable and (ii) the
-   token appears in the FIRST set for symbol N. We choose to take
-   these basic facts for granted, instead of recursively explaining
-   them, so as to keep explanations short. *)
-
-(* We first produce an explanation in abstract syntax, then
-   convert it to a human-readable string. *)
-
-type explanation =
-  | EObvious                                 (* sequence begins with desired token *)
-  | EFirst of Terminal.t * Nonterminal.t     (* sequence begins with a nonterminal that produces desired token *)
-  | ENullable of Symbol.t list * explanation (* sequence begins with a list of nullable symbols and ... *)
-
-let explain (tok : Terminal.t) (rhs : Symbol.t array) (i : int) =
-  let length = Array.length rhs in
-  let rec loop i =
-    assert (i < length);
-    let symbol = rhs.(i) in
-    match symbol with
-    | Symbol.T tok' ->
-       assert (Terminal.equal tok tok');
-       EObvious
-    | Symbol.N nt ->
-       if TerminalSet.mem tok first.(nt) then
-         EFirst (tok, nt)
-       else begin
-         assert nullable.(nt);
-         match loop (i + 1) with
-         | ENullable (symbols, e) ->
-             ENullable (symbol :: symbols, e)
-         | e ->
-             ENullable ([ symbol ], e)
-       end
-  in
-  loop i
-
-let rec convert = function
-  | EObvious ->
-      ""
-  | EFirst (tok, nt) ->
-      Printf.sprintf "%s can begin with %s"
-       (Nonterminal.print false nt)
-       (Terminal.print tok)
-  | ENullable (symbols, e) ->
-      let e = convert e in
-      Printf.sprintf "%scan vanish%s%s"
-       (Symbol.printl symbols)
-       (if e = "" then "" else " and ")
-       e
-
-(* ------------------------------------------------------------------------ *)
-(* Package the analysis results. *)
-
-module Analysis = struct
-
-  let nullable_first_rhs = nullable_first_rhs
-
-  let explain_first_rhs (tok : Terminal.t) (rhs : Symbol.t array) (i : int) =
-    convert (explain tok rhs i)
-
-  let follow = follow
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Conflict resolution via precedences. *)
-
-module Precedence = struct
-
-  type choice =
-    | ChooseShift
-    | ChooseReduce
-    | ChooseNeither
-    | DontKnow
-
-  type order = Lt | Gt | Eq | Ic
-
-  let precedence_order p1 p2 = 
-    match p1, p2 with
-      |        UndefinedPrecedence, _
-      | _, UndefinedPrecedence -> 
-         Ic
-
-      | PrecedenceLevel (m1, l1, _, _), PrecedenceLevel (m2, l2, _, _) ->
-         if not (Mark.same m1 m2) then
-           Ic
-         else
-           if l1 > l2 then 
-             Gt 
-           else if l1 < l2 then 
-             Lt
-           else 
-             Eq
-
-  let shift_reduce tok prod =
-    let fact1, tokp  = Terminal.precedence_level tok
-    and fact2, prodp = Production.shift_precedence prod in
-    match precedence_order tokp prodp with
-   
-      (* Our information is inconclusive. Drop [fact1] and [fact2],
-        that is, do not record that this information was useful. *)
-
-    | Ic ->
-       DontKnow
-
-      (* Our information is useful. Record that fact by evaluating
-        [fact1] and [fact2]. *)
-
-    | (Eq | Lt | Gt) as c ->
-       Lazy.force fact1;
-       Lazy.force fact2;
-       match c with
-
-       | Ic ->
-           assert false (* already dispatched *)
-
-       | Eq -> 
-           begin
-             match Terminal.associativity tok with
-             | LeftAssoc  -> ChooseReduce
-             | RightAssoc -> ChooseShift
-             | NonAssoc   -> ChooseNeither
-             | _          -> assert false
-                             (* If [tok]'s precedence level is defined, then
-                                its associativity must be defined as well. *)
-           end
-
-       | Lt ->
-           ChooseReduce
-
-       | Gt ->
-           ChooseShift
-
-
-  let reduce_reduce prod1 prod2 =
-    let rp1 = Production.reduce_precedence.(prod1) 
-    and rp2 = Production.reduce_precedence.(prod2) in
-    match precedence_order rp1 rp2 with
-    | Lt -> 
-       Some prod1
-    | Gt -> 
-       Some prod2
-    | Eq -> 
-       (* the order is strict except in presence of inlining: 
-          two branches can have the same precedence level when
-          they come from an inlined one. *)
-       None
-    | Ic -> 
-       None
-
-end
-  
-let diagnostics () =
-  TokPrecedence.diagnostics();
-  Production.diagnostics()
-
diff --git a/bundles/menhirLib/menhir-20120123/src/grammar.mli b/bundles/menhirLib/menhir-20120123/src/grammar.mli
deleted file mode 100644 (file)
index e9cddf7..0000000
+++ /dev/null
@@ -1,437 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module transforms [Front.grammar], an abstract syntax tree for
-   the grammar, into an internal representation of the grammar that is
-   more usable. *)
-
-(* ------------------------------------------------------------------------ *)
-(* Nonterminals. *)
-
-module Nonterminal : sig
-
-  (* The type of nonterminals. *)
-
-  type t
-
-  (* The number of nonterminals. This includes the extra nonterminals
-     that are internally generated for the grammar's entry points. *)
-
-  val n: int
-
-  (* [lookup] maps an identifier to a nonterminal, or raises [Not_found]. *)
-
-  val lookup : string -> t
-
-  (* Nonterminals can be converted to integers. This feature is
-     exploited in the table-based back-end. *)
-
-  val n2i: t -> int
-
-  (* This produces a string representation of a nonterminal. It should
-     in principle never be applied to one of the internally generated
-     nonterminals, as we do not wish users to become aware of the
-     existence of these extra nonterminals. However, we do sometimes
-     violate this rule when it is difficult to do otherwise.
-
-     The Boolean parameter tells whether the string representation
-     should be normalized, that is, whether parentheses and commas
-     should be eliminated. This is necessary if the string is intended
-     for use as a valid nonterminal name or as a valid Objective Caml
-     identifier. *)
-
-  val print: bool -> t -> string
-
-  (* This is the Objective Caml type associated with a nonterminal
-     symbol. It is known only if a %type declaration was provided.
-     This function is not applicable to the internally generated
-     nonterminals. *)
-
-  val ocamltype: t -> Stretch.ocamltype option
-
-  (* Iteration over nonterminals. The order in which elements are
-     examined, and the order of [map]'s output list, correspond to the
-     numeric indices produced by [n2i] above. *)
-
-  val iter: (t -> unit) -> unit
-  val fold: (t -> 'a -> 'a) -> 'a -> 'a
-  val map: (t -> 'a) -> 'a list
-
-  (* Iteration over all nonterminals, except the start nonterminals. *)
-
-  val iterx: (t -> unit) -> unit
-  val foldx: (t -> 'a -> 'a) -> 'a -> 'a 
-
-  (* Tabulation of a function over nonterminals. *)
-
-  val tabulate: (t -> 'a) -> (t -> 'a)
-
-  (* [positions nt] is a list of the positions associated with the
-     definition of [nt]. There can be more than one position because
-     definitions can be split over multiple files. *)
-
-  val positions: t -> Positions.t list
-
-  (* This tells whether a non-terminal symbol is one of the start
-     symbols. *)
-
-  val is_start: t -> bool
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Terminals. *)
-
-module Terminal : sig
-
-  (* The type of terminals. *)
-
-  type t
-
-  (* The number of terminals. This includes the two pseudo-tokens
-     [#] and [error]. *)
-
-  val n: int
-
-  (* Comparison. *)
-
-  val equal: t -> t -> bool
-
-  (* [lookup] maps an identifier to a terminal, or raises [Not_found]. *)
-
-  val lookup : string -> t
-
-  (* Terminals can be converted to integers. This feature is exploited
-     in the table-based back-end. *)
-
-  val t2i: t -> int
-
-  (* This produces a string representation of a terminal. *)
-
-  val print: t -> string
-
-  (* This is the Objective Caml type associated with a terminal
-     symbol. It is known only if the %token declaration was
-     accompanied with a type. *)
-
-  val ocamltype: t -> Stretch.ocamltype option
-
-  (* These are the two pseudo-tokens [#] and [error]. The former is
-     used to denote the end of the token stream. The latter is
-     accessible to the user and is used for handling errors. *)
-
-  val sharp: t
-  val error: t
-
-  (* This is the programmer-defined [EOF] token, if there is one. It
-     is recognized based solely on its name, which is fragile, but
-     this behavior is documented. This token is assumed to represent
-     [ocamllex]'s [eof] pattern. It is used only in emitting warnings
-     in [--error-recovery] mode. *)
-
-  val eof: t option
-
-  (* This returns [true] if and only if the token at hand is one of
-     [#] or [error]. *)
-
-  val pseudo: t -> bool
-
-  (* Iteration over terminals. The order in which elements are
-     examined, and the order of [map]'s output list, correspond to the
-     numeric indices produced by [t2i] above. [mapx] offers iteration
-     over all terminals except [#]. *)
-
-  val iter: (t -> unit) -> unit
-  val fold: (t -> 'a -> 'a) -> 'a -> 'a
-  val map: (t -> 'a) -> 'a list
-  val mapx: (t -> 'a) -> 'a list
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Sets and maps over terminals. *)
-
-module TerminalSet : sig
-
-  (* All of the operations documented in [GSet] are available. *)
-
-  include GSet.S with type element = Terminal.t
-
-  (* This offers a string representation of a set of terminals. The
-     symbols are simply listed one after the other and separated with
-     spaces. *)
-
-  val print: t -> string
-
-  (* This is the set of all terminal symbols except the pseudo-tokens
-     [#] and [error]. *)
-
-  val universe: t
-
-end
-
-(* All of the operations documented in [GMap] are available. *)
-
-module TerminalMap : GMap.S with type key = Terminal.t
-
-(* ------------------------------------------------------------------------ *)
-(* Symbols. *)
-
-module Symbol : sig
-
-  (* A symbol is either a nonterminal or a terminal. *)
-
-  type t =
-    | N of Nonterminal.t
-    | T of Terminal.t
-
-  (* Comparison. *)
-
-  val equal: t -> t -> bool
-  val lequal: t list -> t list -> bool
-
-  (* These produce a string representation of a symbol, of a list of
-     symbols, or of an array of symbols. The symbols are simply listed
-     one after the other and separated with spaces. [printao] prints
-     an array of symbols, starting at a particular offset. [printaod]
-     is analogous, but can also print a single dot at a particular
-     position between two symbols. *)
-
-  val print: t -> string
-  val printl: t list -> string
-  val printa: t array -> string
-  val printao: int -> t array -> string
-  val printaod: int -> int -> t array -> string
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Sets and maps over symbols. *)
-
-(* All of the operations documented in [Set] are available. *)
-
-module SymbolSet : Set.S with type elt = Symbol.t
-
-module SymbolMap : sig
-
-  (* All of the operations documented in [Map] are available. *)
-
-  include Map.S with type key = Symbol.t
-
-  val domain: 'a t -> key list
-
-  (* This returns [true] if and only if all of the symbols in
-     the domain of the map at hand are nonterminals. *)
-
-  val purelynonterminal: 'a t -> bool
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Productions. *)
-
-module Production : sig
-
-  (* This is the type of productions. This includes user-defined
-     productions as well as the internally generated productions
-     associated with the start symbols. *)
-
-  type index
-
-  (* Productions can be converted to integers and back. This is unsafe
-     and should be avoided as much as possible. This feature is
-     exploited, for efficiency, in the encoding of items. *)
-
-  val p2i: index -> int
-  val i2p: int -> index
-
-  (* The number of productions. *)
-
-  val n: int
-
-  (* These map a production index to the production's definition, that
-     is, a nonterminal (the left-hand side) and an array of symbols
-     (the right-hand side). *)
-
-  val def: index -> Nonterminal.t * Symbol.t array
-  val nt: index -> Nonterminal.t
-  val rhs: index -> Symbol.t array
-  val length: index -> int
-
-  (* This maps a production index to an array of the identifiers that
-     should be used for naming the semantic values of the symbols in
-     the right-hand side. *)
-
-  val identifiers: index -> Syntax.identifier array
-
-  (* This maps a production index to an array of Boolean flag. Each
-     flag tells whether the semantic value of the corresponding symbol
-     is used in the semantic action. This is a conservative
-     approximation: [true] means maybe, while [false] means certainly
-     not. *)
-
-  val used: index -> bool array  
-
-  (* This maps a production index to the production's semantic action.
-     This function is not applicable to a start production. *)
-
-  val action: index -> Syntax.action
-
-  (* [positions prod] is a list of the positions associated with
-     production [prod]. This is usually a singleton list, but there
-     can be more than one position for start productions when the
-     definition of the corresponding start symbol is split over
-     multiple files. *)
-
-  val positions: index -> Positions.t list
-
-  (* Iteration over all productions. The order in which elements
-     are examined, and the order of [map]'s output list, correspond
-     to the numeric indices produced by [p2i] above. *)
-
-  val iter: (index -> unit) -> unit
-  val fold: (index -> 'a -> 'a) -> 'a -> 'a
-  val map: (index -> 'a) -> 'a list
-
-  (* Iteration over all productions, except the start productions. *)
-
-  val iterx: (index -> unit) -> unit
-  val foldx: (index -> 'a -> 'a) -> 'a -> 'a
-
-  (* This maps a (user) non-terminal start symbol to the corresponding
-     start production. *)
-
-  val startsymbol2startprod: Nonterminal.t -> index
-
-  (* Iteration over the productions associated with a specific
-     nonterminal. *)
-
-  val iternt: Nonterminal.t -> (index -> unit) -> unit
-  val foldnt: Nonterminal.t -> 'a -> (index -> 'a -> 'a) -> 'a
-
-  (* This allows determining whether a production is a start
-     production. If it is a start production, the start symbol that it
-     is associated with is returned. If it is a regular production,
-     nothing is returned. *)
-
-  val classify: index -> Nonterminal.t option
-
-  (* This produces a string representation of a production. It should
-     never be applied to a start production, as we do not wish users
-     to become aware of the existence of these extra productions. *)
-
-  val print: index -> string
-
-  (* Tabulation of a Boolean function over nonterminals. [tabulate f]
-     returns a tabulated version of [f] as well as the number of
-     productions where [f] is true. *)
-
-  val tabulate: (index -> bool) -> (index -> bool) * int
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Maps over productions. *)
-
-module ProductionMap : sig
-
-  include GMap.S with type key = Production.index
-
-  (* Iteration over the start productions only. *)
-
-  val start: (Production.index -> 'a) -> 'a t
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Analysis of the grammar. *)
-
-module Analysis : sig
-
-  (* [nullable_first_rhs rhs i] considers the string of symbols found at
-     offset [i] in the array [rhs]. It returns its NULLABLE flag as well
-     as its FIRST set. The offset [i] must be contained between [0] and
-     [n], where [n] is the length of [rhs], inclusive. *)
-
-  val nullable_first_rhs: Symbol.t array -> int -> bool * TerminalSet.t
-
-  (* [explain_first_rhs tok rhs i] explains why the token [tok] appears
-     in the FIRST set for the string of symbols found at offset [i] in
-     the array [rhs]. *)
-
-  val explain_first_rhs: Terminal.t -> Symbol.t array -> int -> string
-
-  (* [follow nt] is the FOLLOW set of the non-terminal symbol [nt], that
-     is, the set of terminal symbols that could follow an expansion of
-     [nt] in a valid sentence. *)
-
-  val follow: Nonterminal.t -> TerminalSet.t
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Conflict resolution via precedences. *)
-
-module Precedence : sig
-
-  (* Shift/reduce conflicts require making a choice between shifting a
-     token and reducing a production. How these choices are made is of
-     no concern to the back-end, but here is a rough explanation.
-
-     Shifting is preferred when the token has higher precedence than
-     the production, or they have same precedence and the token is
-     right-associative.
-
-     Reducing is preferred when the token has lower precedence than
-     the production, or they have same precedence and the token is
-     left-associative.
-
-     Neither is allowed when the token and the production have same
-     precedence and the token is non-associative.
-
-     No preference is explicitly specified when the token or the
-     production has undefined precedence. In that case, the default
-     choice is to prefer shifting, but a conflict will be reported. *)
-
-  type choice =
-    | ChooseShift
-    | ChooseReduce
-    | ChooseNeither
-    | DontKnow
-
-  val shift_reduce: Terminal.t -> Production.index -> choice
-
-  (* Reduce/reduce conflicts require making a choice between reducing
-     two distinct productions. This is done by exploiting a partial
-     order on productions.
-
-     For compatibility with ocamlyacc, this order should be total and
-     should correspond to textual order when the two productions
-     originate in the same source file. When they originate in
-     different source files, the two productions should be
-     incomparable. *)
-
-  val reduce_reduce: Production.index -> Production.index -> Production.index option
-
-end
-
-(* ------------------------------------------------------------------------ *)
-(* Diagnostics. *)
-
-(* This function prints diagnostics about precedence declarations that
-   are never consulted. It is called after the automaton is
-   constructed. *)
-
-val diagnostics: unit -> unit
-
diff --git a/bundles/menhirLib/menhir-20120123/src/infer.ml b/bundles/menhirLib/menhir-20120123/src/infer.ml
deleted file mode 100644 (file)
index c1965b1..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Syntax
-open Stretch
-open UnparameterizedSyntax
-open IL
-open CodeBits
-open TokenType
-
-(* ------------------------------------------------------------------------- *)
-(* Naming conventions. *)
-
-(* The type variable associated with a nonterminal symbol. Its name
-   begins with a prefix which ensures that it cannot clash with
-   Objective Caml keywords. *)
-
-let ntvar symbol =
-  Printf.sprintf "tv_%s" (Misc.normalize symbol)
-
-(* The name of the temporary file. *)
-
-let base =
-  Settings.base
-
-let mlname =
-  base ^ ".ml"
-
-let mliname =
-  base ^ ".mli"
-
-(* ------------------------------------------------------------------------- *)
-(* Code production. *)
-
-(* [nttype nt] is the type of the nonterminal [nt], as currently
-   known. *)
-
-let nttype grammar nt =
-   try
-     TypTextual (StringMap.find nt grammar.types)
-   with Not_found ->
-     TypVar (ntvar nt)
-
-(* [is_standard] determines whether a branch derives from a standard
-   library definition. The method, based on a file name, is somewhat
-   fragile. *)
-
-let is_standard branch =
-  List.for_all (fun x -> x = Settings.stdlib_filename) (Action.filenames branch.action)
-
-(* [actiondef] turns a branch into a function definition. *)
-
-let actiondef grammar symbol branch =
-
-  (* Construct a list of the semantic action's formal parameters that
-     depend on the production's right-hand side. *)
-
-  let _, formals =
-    List.fold_left (fun (i, formals) (symbol, ido) ->
-      let id, startp, endp, starto, endo =
-       match ido with
-       | None ->
-           (* Symbols for which no name was chosen will be represented
-              by variables named _1, _2, etc. *)
-           Printf.sprintf "_%d" (i + 1),
-           Printf.sprintf "_startpos__%d_" (i + 1),
-           Printf.sprintf "_endpos__%d_" (i + 1),
-           Printf.sprintf "_startofs__%d_" (i + 1),
-           Printf.sprintf "_endofs__%d_" (i + 1)
-        | Some id ->
-           (* Symbols for which a name was explicitly chosen will be
-              known by that name in semantic actions. *)
-           id,
-           Printf.sprintf "_startpos_%s_" id,
-           Printf.sprintf "_endpos_%s_" id,
-           Printf.sprintf "_startofs_%s_" id,
-           Printf.sprintf "_endofs_%s_" id
-      in
-      let t =
-       try
-         let props = StringMap.find symbol grammar.tokens in
-         (* Symbol is a terminal. *)
-         match props.tk_ocamltype with
-         | None ->
-             tunit
-         | Some ocamltype ->
-             TypTextual ocamltype
-       with Not_found ->
-         (* Symbol is a nonterminal. *)
-         nttype grammar symbol
-      in
-      i + 1,
-      PAnnot (PVar id, t) ::
-      PAnnot (PVar startp, tposition) ::
-      PAnnot (PVar endp, tposition) ::
-      PAnnot (PVar starto, tint) ::
-      PAnnot (PVar endo, tint) ::
-      formals
-    ) (0, []) branch.producers
-  in
-
-  (* Extend the list with parameters that do not depend on the
-     right-hand side. *)
-
-  let formals =
-    PAnnot (PVar "_previouserror", tint) ::
-    PAnnot (PVar "_eRR", texn) ::
-    PAnnot (PVar "_startpos", tposition) ::
-    PAnnot (PVar "_endpos", tposition) ::
-    PAnnot (PVar "_startofs", tint) ::
-    PAnnot (PVar "_endofs", tint) ::
-    formals
-  in
-
-  (* Construct a function definition out of the above bindings and the
-     semantic action. *)
-
-  let body =
-    EAnnot (
-      Action.to_il_expr branch.action,
-      type2scheme (nttype grammar symbol)
-    )
-  in
-
-  match formals with
-  | [] ->
-      body
-  | _ ->
-      EFun (formals, body)
-
-(* [program] turns an entire grammar into a test program. *)
-
-let program grammar =
-
-  (* Turn the grammar into a bunch of function definitions. Grammar
-     productions that derive from the standard library are reflected
-     first, so that type errors are not reported in them. *)
-
-  let bindings1, bindings2 = 
-    StringMap.fold (fun symbol rule (bindings1, bindings2) ->
-      List.fold_left (fun (bindings1, bindings2) branch ->
-       if is_standard branch then
-         (PWildcard, actiondef grammar symbol branch) :: bindings1, bindings2
-       else
-         bindings1, (PWildcard, actiondef grammar symbol branch) :: bindings2
-      ) (bindings1, bindings2) rule.branches
-    ) grammar.rules ([], [])
-  in
-
-  (* Create entry points whose types are the unknowns that we are
-     looking for. *)
-
-  let ps, ts =
-    StringMap.fold (fun symbol _ (ps, ts) ->
-      PVar (Misc.normalize symbol) :: ps,
-      nttype grammar symbol :: ts
-    ) grammar.rules ([], [])
-  in
-
-  let def = {
-    valpublic = true;
-    valpat = PTuple ps;
-    valval = ELet (bindings1 @ bindings2, EAnnot (bottom, type2scheme (TypTuple ts)))
-  }
-  in
-
-  (* Insert markers to delimit the part of the file that we are
-     interested in. These markers are recognized by [Lexmli]. This
-     helps skip the values, types, exceptions, etc. that might be
-     defined by the prologue or postlogue. *)
-
-  let begindef = {
-    valpublic = true;
-    valpat = PVar "menhir_begin_marker";
-    valval = EIntConst 0
-  }
-  and enddef = {
-    valpublic = true;
-    valpat = PVar "menhir_end_marker";
-    valval = EIntConst 0
-  } in
-
-  (* Issue the test program. We include the definition of the type of
-     tokens, because, in principle, the semantic actions may refer to
-     it or to its data constructors. *)
-
-  {
-    paramdefs = PreFront.grammar.parameters;
-    prologue = PreFront.grammar.preludes;
-    excdefs = [];
-    typedefs = tokentypedef;
-    nonrecvaldefs = [ begindef; def; enddef ];
-    moduledefs = [];
-    valdefs = [];
-    postlogue = PreFront.grammar.postludes
-  }
-
-(* ------------------------------------------------------------------------- *)
-(* Writing the program associated with a grammar to a file. *)
-
-let write grammar () =
-  let ml = open_out mlname in
-  let module P = Printer.Make (struct
-    let f = ml
-    let locate_stretches = Some mlname
-    let raw_stretch_action = false
-  end) in
-  P.program (program grammar);
-  close_out ml
-
-let remove filename () =
-  Sys.remove filename
-
-(* ------------------------------------------------------------------------- *)
-(* Moving away and restoring a file. *)
-
-let mover filename =
-  if Sys.file_exists filename then
-    let newname =
-      filename ^ ".moved_by_menhir"
-    in
-    let moveaway () =
-      Sys.rename filename newname
-    and restore () =
-      Sys.rename newname filename
-    in
-    moveaway, restore
-  else
-    let nothing () = () in
-    nothing, nothing
-
-(* ------------------------------------------------------------------------- *)
-(* Running ocamldep on the program. *)
-
-type entry =
-    string (* basename *) * string (* filename *)
-
-type line =
-    entry (* target *) * entry list (* dependencies *)
-
-let depend grammar =
-
-  (* Create an [.ml] file and an [.mli] file, then invoke ocamldep to
-     compute dependencies for us. *)
-
-  (* If an old [.ml] or [.mli] file exists, we are careful to preserve
-     it. We temporarily move it out of the way and restore it when we
-     are done. There is no reason why dependency analysis should
-     destroy existing files. *)
-
-  let moveml, restoreml =
-    mover mlname
-  and movemli, restoremli =
-    mover mliname
-  in
-
-  let output =
-    IO.winvoke
-      [ moveml; movemli; write grammar; Interface.write ]
-      (Printf.sprintf "%s %s %s" Settings.ocamldep (Filename.quote mlname) (Filename.quote mliname))
-      [ remove mlname; remove mliname; restoreml; restoremli ]
-  in
-
-  (* Echo ocamldep's output. *)
-
-  print_string output;
-
-  (* If [--raw-depend] was specified on the command line, stop here.
-     This option is used by omake, which performs its own
-     postprocessing of [ocamldep]'s output. For normal [make] users,
-     who use [--depend], some postprocessing is required, which is
-     performed below. *)
-
-  begin match Settings.depend with
-  | Settings.OMNone ->
-      assert false (* we wouldn't be here in the first place *)
-  | Settings.OMRaw ->
-      ()
-  | Settings.OMPostprocess ->
-
-      (* Make sense out of ocamldep's output. *)
-
-      let lexbuf = Lexing.from_string output in
-      let lines : line list = Lexdep.main lexbuf in
-
-      (* Look for the line that concerns the [.cmo] target, and echo a
-        modified version of this line, where the [.cmo] target is
-        replaced with [.ml] and [.mli] targets, and where the dependency
-        over the [.cmi] file is dropped.
-
-        In doing so, we assume that the user's [Makefile] supports
-        bytecode compilation, so that it makes sense to request [bar.cmo]
-        to be built, as opposed to [bar.cmx]. This is not optimal, but
-        will do. [camldep] exhibits the same behavior. *)
-
-      (* TEMPORARY allow ocamldep to be called with flag -native. *)
-
-      List.iter (fun ((_, target_filename), dependencies) ->
-       if Filename.check_suffix target_filename ".cmo" then
-         let dependencies = List.filter (fun (basename, _) ->
-           basename <> base
-         ) dependencies in
-         if List.length dependencies > 0 then begin
-           Printf.printf "%s.ml %s.mli:" base base;
-           List.iter (fun (basename, filename) ->
-             Printf.printf " %s" filename
-           ) dependencies;
-           Printf.printf "\n%!"
-         end
-      ) lines
-
-  end;
-
-  (* Stop. *)
-
-  exit 0
-
-(* ------------------------------------------------------------------------- *)
-(* Inferring types for a grammar's nonterminals. *)
-
-let infer grammar =
-
-  (* Invoke ocamlc to do type inference for us. *)
-
-  let output =
-    IO.winvoke
-      [ write grammar ]
-      (Printf.sprintf "%s -c -i %s" Settings.ocamlc (Filename.quote mlname))
-      [ remove mlname ]
-  in
-
-  (* Make sense out of ocamlc's output. *)
-
-  let env : (string * int * int) list =
-    Lexmli.main (Lexing.from_string output)
-  in
-
-  let env : (string * ocamltype) list =
-    List.map (fun (id, openingofs, closingofs) ->
-      id, Inferred (String.sub output openingofs (closingofs - openingofs))
-    ) env
-  in
-
-  (* Augment the grammar with new %type declarations. *)
-
-  let types =
-    StringMap.fold (fun symbol _ types ->
-      let ocamltype =
-       try
-         List.assoc (Misc.normalize symbol) env
-       with Not_found ->
-         assert false
-      in
-      if StringMap.mem symbol grammar.types then
-       (* If there was a declared type, keep it. *)
-       types
-      else
-       (* Otherwise, insert the inferred type. *)
-       StringMap.add symbol ocamltype types
-    ) grammar.rules grammar.types
-  in
-
-  { grammar with types = types }
-
diff --git a/bundles/menhirLib/menhir-20120123/src/infer.mli b/bundles/menhirLib/menhir-20120123/src/infer.mli
deleted file mode 100644 (file)
index 432412c..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* [ntvar symbol] is the name of the type variable associated with a
-   nonterminal symbol. *)
-
-val ntvar: string -> string
-
-(* [infer grammar] analyzes the grammar [grammar] and returns a new
-   grammar, augmented with a [%type] declaration for every nonterminal
-   symbol. The [ocamlc] compiler is used to infer types. *)
-
-val infer: UnparameterizedSyntax.grammar -> UnparameterizedSyntax.grammar
-
-(* [depend grammar] prints (on the standard output channel) the
-   Objective Caml dependencies induced by the semantic actions.
-   Then, it exits the program. *)
-
-val depend: UnparameterizedSyntax.grammar -> 'a
-
diff --git a/bundles/menhirLib/menhir-20120123/src/infiniteArray.ml b/bundles/menhirLib/menhir-20120123/src/infiniteArray.ml
deleted file mode 100644 (file)
index 5619845..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: infiniteArray.ml,v 1.6 2007/09/10 21:09:37 fpottier Exp $ *)
-
-(** This module implements infinite arrays, that is, arrays that grow
-    transparently upon demand. *)
-
-type 'a t = {
-    default: 'a;
-    mutable table: 'a array;
-    mutable extent: int; (* the index of the greatest [set] ever, plus one *)
-  } 
-
-let default_size =
-  16384 (* must be non-zero *)
-
-let make x = {
-  default = x;
-  table = Array.make default_size x;
-  extent = 0;
-} 
-
-let rec new_length length i =
-  if i < length then
-    length
-  else
-    new_length (2 * length) i
-
-let ensure a i =
-  let table = a.table in
-  let length = Array.length table in
-  if i >= length then begin
-    let table' = Array.make (new_length (2 * length) i) a.default in
-    Array.blit table 0 table' 0 length;
-    a.table <- table'
-  end
-
-let get a i =
-  ensure a i;
-  a.table.(i)
-
-let set a i x =
-  ensure a i;
-  a.table.(i) <- x;
-  a.extent <- max (i + 1) a.extent
-
-let extent a =
-  a.extent
-
-let domain a =
-  Array.sub a.table 0 a.extent
-
diff --git a/bundles/menhirLib/menhir-20120123/src/infiniteArray.mli b/bundles/menhirLib/menhir-20120123/src/infiniteArray.mli
deleted file mode 100644 (file)
index f5d3b30..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: infiniteArray.mli,v 1.5 2007/09/10 21:09:37 fpottier Exp $ *)
-
-(** This module implements infinite arrays. **)
-type 'a t
-
-(** [make x] creates an infinite array, where every slot contains [x]. **)
-val make: 'a -> 'a t
-
-(** [get a i] returns the element contained at offset [i] in the array [a].
-   Slots are numbered 0 and up. **)
-val get: 'a t -> int -> 'a
-
-(** [set a i x] sets the element contained at offset [i] in the array
-    [a] to [x]. Slots are numbered 0 and up. **)
-val set: 'a t -> int -> 'a -> unit
-
-(** [extent a] is the length of an initial segment of the array [a]
-    that is sufficiently large to contain all [set] operations ever
-    performed. In other words, all elements beyond that segment have
-    the default value. *)
-val extent: 'a t -> int
-
-(** [domain a] is a fresh copy of an initial segment of the array [a]
-    whose length is [extent a]. *)
-val domain: 'a t -> 'a array
diff --git a/bundles/menhirLib/menhir-20120123/src/inliner.ml b/bundles/menhirLib/menhir-20120123/src/inliner.ml
deleted file mode 100644 (file)
index 9ba2d94..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open IL
-open CodeBits
-
-(* In the following, we only inline global functions. In order to
-   avoid unintended capture, as we traverse terms, we keep track of
-   local identifiers that hide global ones. The following little class
-   helps do that. (The pathological case where a local binding hides a
-   global one probably does not arise very often. Fortunately,
-   checking against it in this way is quite cheap, and lets me sleep
-   safely.) *)
-
-class locals table = object(self)
-
-  method pvar (locals : StringSet.t) (id : string) =
-    if Hashtbl.mem table id then StringSet.add id locals else locals
-
-end
-
-(* Here is the inliner. *)
-
-let inline ({ valdefs = defs } as p : program) =
-
-  (* Create a table of all global definitions. *)
-
-  let before, table = Traverse.tabulate_defs defs in
-
-  (* Prepare to count how many times each function is used, including
-     inside its own definition. The public functions serve as starting
-     points for this discovery phase. *)
-
-  let queue : valdef Queue.t =
-    Queue.create()
-  and usage : int StringMap.t ref =
-    ref StringMap.empty
-  in
-
-  (* [visit] is called at every identifier occurrence. *)
-
-  let visit locals id =
-    if StringSet.mem id locals then
-      (* This is a local identifier. Do nothing. *)
-      ()
-    else
-      try
-       let _, def = Hashtbl.find table id in
-
-       (* This is a globally defined identifier. Increment its usage
-          count. If it was never visited, enqueue its definition for
-           exploration. *)
-
-       let n =
-         try
-           StringMap.find id !usage
-         with Not_found ->
-           Queue.add def queue;
-           0
-       in
-       usage := StringMap.add id (n + 1) !usage
-
-      with Not_found ->
-       (* This identifier is not global. It is either local or a
-          reference to some external library, e.g. ocaml's standard
-          library. *)
-       ()
-  in
-
-  (* Look for occurrences of identifiers inside expressions. *)
-
-  let o =
-    object
-       inherit [ StringSet.t, unit ] Traverse.fold
-       inherit locals table
-       method evar locals () id =
-         visit locals id
-    end
-  in
-
-  (* Initialize the queue with all public definitions, and work from
-     there. We assume that the left-hand side of every definition is
-     a variable. *)
-
-  List.iter (fun { valpublic = public; valpat = p } ->
-    if public then
-      visit StringSet.empty (pat2var p)
-  ) defs;
-  Misc.qfold (o#valdef StringSet.empty) () queue;
-  let usage = !usage in
-
-  (* Now, inline every function that is called at most once. At the
-     same time, every function that is never called is dropped. The
-     public functions again serve as starting points for the
-     traversal. *)
-
-  let queue : valdef Queue.t =
-    Queue.create()
-  and emitted =
-    ref StringSet.empty
-  in
-
-  let enqueue def =
-    let id = pat2var def.valpat in
-    if not (StringSet.mem id !emitted) then begin
-      emitted := StringSet.add id !emitted;
-      Queue.add def queue
-    end
-  in
-
-  (* A simple application is an application of a variable to a number
-     of variables, constants, or record accesses out of variables. *)
-
-  let rec is_simple_arg = function
-    | EVar _
-    | EData (_, [])
-    | ERecordAccess (EVar _, _) ->
-       true
-    | EMagic e ->
-       is_simple_arg e
-    | _ ->
-       false
-  in
-
-  let is_simple_app = function
-    | EApp (EVar _, actuals) ->
-       List.for_all is_simple_arg actuals
-    | _ ->
-       false
-  in
-
-  (* Taking a fresh instance of a type scheme. Ugly. *)
-
-  let instance =
-    let count = ref 0 in
-    let fresh tv =
-      incr count;
-      tv, Printf.sprintf "freshtv%d" !count
-    in
-    fun scheme ->
-      let mapping = List.map fresh scheme.quantifiers in
-      let rec sub typ =
-       match typ with
-       | TypTextual _ ->
-           typ
-       | TypVar v ->
-           begin try
-             TypVar (List.assoc v mapping)
-           with Not_found ->
-             typ
-           end
-       | TypApp (f, typs) ->
-           TypApp (f, List.map sub typs)
-       | TypTuple typs ->
-           TypTuple (List.map sub typs)
-       | TypArrow (typ1, typ2) ->
-           TypArrow (sub typ1, sub typ2)
-      in
-      sub scheme.body
-  in
-
-  (* Destructuring a type annotation. *)
-
-  let rec annotate formals body typ =
-    match formals, typ with
-    | [], _ ->
-       [], EAnnot (body, type2scheme typ)
-    | formal :: formals, TypArrow (targ, tres) ->
-       let formals, body = annotate formals body tres in
-       PAnnot (formal, targ) :: formals, body
-    | _ :: _, _ ->
-       (* Type annotation has insufficient arity. *)
-       assert false
-  in
-
-  (* The heart of the inliner: rewriting a function call to a [let]
-     expression. 
-
-     If there was a type annotation at the function definition site,
-     it is dropped, provided [--infer] was enabled. Otherwise, it is
-     kept, because, due to the presence of [EMagic] expressions in the
-     code, dropping a type annotation could cause an ill-typed program
-     to become apparently well-typed. Keeping a type annotation
-     requires taking a fresh instance of the type scheme, because
-     OCaml doesn't have support for locally and existentially bound
-     type variables. Yuck. *)
-
-  let inline formals actuals body oscheme =
-    assert (List.length actuals = List.length formals);
-    match oscheme with
-    | Some scheme
-      when not Settings.infer ->
-
-       let formals, body = annotate formals body (instance scheme) in
-       mlet formals actuals body
-
-    | _ ->
-       mlet formals actuals body
-  in
-
-  (* Look for occurrences of identifiers inside expressions, branches,
-     etc. and replace them with their definitions if they have only
-     one use site or if their definitions are sufficiently simple. *)
-
-  let o =
-    object (self)
-      inherit [ StringSet.t ] Traverse.map as super
-      inherit locals table
-      method eapp locals e actuals =
-       match e with
-       | EVar id when
-           (Hashtbl.mem table id) &&       (* a global identifier *)
-           (not (StringSet.mem id locals)) (* not hidden by a local identifier *)
-         ->
-
-           let _, def = Hashtbl.find table id in (* cannot fail, thanks to the above check *)
-
-           let formals, body, oscheme =
-             match def with
-             | { valval = EFun (formals, body) } ->
-                 formals, body, None
-             | { valval = EAnnot (EFun (formals, body), scheme) } ->
-                 formals, body, Some scheme
-             | { valval = _ } ->
-                 (* The definition is not a function definition. This should not
-                    happen in the kind of code that we generate. *)
-                 assert false
-           in
-
-           assert (StringMap.mem id usage);
-           if StringMap.find id usage = 1 || is_simple_app body then
-
-             (* The definition can be inlined, with beta reduction. *)
-
-             inline formals (self#exprs locals actuals) (EComment (id, self#expr locals body)) oscheme
-
-           else begin
-
-             (* The definition cannot be inlined. *)
-
-             enqueue def;
-             super#eapp locals e actuals
-
-           end
-
-       | _ ->
-           (* The thing in function position is not a reference to a global. *)
-           super#eapp locals e actuals
-
-    end
-  in
-
-  (* Initialize the queue with all public definitions, and work from
-     there. *)
-
-  List.iter (function { valpublic = public } as def ->
-    if public then
-      enqueue def
-  ) defs;
-
-  let valdefs =
-    Misc.qfold (fun defs def ->
-      o#valdef StringSet.empty def :: defs
-    ) [] queue
-  in
-
-  Error.logC 1 (fun f ->
-    Printf.fprintf f "%d functions before inlining, %d functions after inlining.\n"
-       before (List.length valdefs));
-  
-  Time.tick "Inlining";
-
-  { p with valdefs = valdefs }
-
-(* The external entry point. *)
-
-let inline p =
-  if Settings.code_inlining then inline p else p
-
diff --git a/bundles/menhirLib/menhir-20120123/src/inliner.mli b/bundles/menhirLib/menhir-20120123/src/inliner.mli
deleted file mode 100644 (file)
index 7aa1305..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This transformer inlines every function that is called at most
-   once. It also inlines some functions whose body consists of a
-   single function call. At the same time, every function that is
-   never called is dropped. Public functions are never inlined or
-   dropped. *)
-
-val inline: IL.program -> IL.program
-
-
diff --git a/bundles/menhirLib/menhir-20120123/src/installation.mli b/bundles/menhirLib/menhir-20120123/src/installation.mli
deleted file mode 100644 (file)
index 0272d8b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module defines a number of installation settings.
-   Its source code is generated by the main [Makefile]. *)
-
-(* The directory where Menhir's standard library, [standard.mly],
-   is installed. *)
-
-val libdir: string
-
-(* Whether MenhirLib was installed via [ocamlfind] or (manually)
-   in the above directory. *)
-
-val ocamlfind: bool
-
diff --git a/bundles/menhirLib/menhir-20120123/src/interface.ml b/bundles/menhirLib/menhir-20120123/src/interface.ml
deleted file mode 100644 (file)
index 45c9b38..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open UnparameterizedSyntax
-open IL
-open CodeBits
-open TokenType
-
-(* This is the [Error] exception. *)
-
-let excname =
-  "Error"
-
-let excdef = {
-  excname = excname;
-  exceq = None;
-}
-
-let excredef = {
-  excdef with exceq = Some excname
-}
-
-(* The type of the entry point for the start symbol [symbol]. *)
-
-let entrytypescheme symbol =
-  let ocamltype =
-    try
-      StringMap.find symbol PreFront.grammar.types
-    with Not_found ->
-      (* Every start symbol should have a type. *)
-      assert false
-  in
-  type2scheme (marrow [ arrow tlexbuf ttoken; tlexbuf ] (TypTextual ocamltype))
-
-(* This is the interface of the generated parser. *)
-
-let interface = {
-
-  paramdecls =
-    PreFront.grammar.parameters;
-
-  excdecls =
-    [ excdef ];
-
-  typedecls =
-    tokentypedef;
-
-  valdecls =
-    StringSet.fold (fun symbol decls ->
-      (Misc.normalize symbol, entrytypescheme symbol) :: decls
-    ) PreFront.grammar.start_symbols []
-
-} 
-
-(* Writing the interface to a file. *)
-
-let write () =
-  let mli = open_out (Settings.base ^ ".mli") in
-  let module P = Printer.Make (struct
-    let f = mli
-    let locate_stretches = None
-    let raw_stretch_action = false
-  end) in
-  P.interface interface;
-  close_out mli
-
diff --git a/bundles/menhirLib/menhir-20120123/src/interface.mli b/bundles/menhirLib/menhir-20120123/src/interface.mli
deleted file mode 100644 (file)
index bcbd888..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module defines the interface of the generated parser. *)
-
-(* This is the [Error] exception. *)
-
-val excname: string
-val excdef: IL.excdef
-val excredef: IL.excdef
-
-(* The type of the entry point for the nonterminal start symbol
-   [symbol]. *)
-
-val entrytypescheme: string -> IL.typescheme
-
-(* This writes the interface of the generated parser to the [.mli]
-   file. *)
-
-val write: unit -> unit
-
diff --git a/bundles/menhirLib/menhir-20120123/src/internalSyntax.mli b/bundles/menhirLib/menhir-20120123/src/internalSyntax.mli
deleted file mode 100644 (file)
index f4f3acd..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-type grammar = 
-    {
-      p_preludes          : Stretch.t list;
-      p_postludes          : Syntax.trailer list;
-      p_parameters         : Stretch.t list;
-      p_start_symbols      : Positions.t StringMap.t;
-      p_types              : (Syntax.parameter * Stretch.ocamltype Positions.located) list;
-      p_tokens            : Syntax.token_properties StringMap.t;
-      p_rules             : Syntax.parameterized_rule StringMap.t;
-    }
diff --git a/bundles/menhirLib/menhir-20120123/src/interpret.ml b/bundles/menhirLib/menhir-20120123/src/interpret.ml
deleted file mode 100644 (file)
index 7e40865..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module is in charge of handling the [--interpret] option,
-   if it is present. *)
-
-open Grammar
-
-(* --------------------------------------------------------------------------- *)
-
-(* A sentence is a pair of an optional non-terminal start symbol and a
-   list of terminal symbols. *)
-
-type sentence =
-    Nonterminal.t option * Terminal.t list
-
-(* --------------------------------------------------------------------------- *)
-
-(* [stream] turns a finite list of terminals into a stream of terminals. *)
-
-exception EndOfStream
-
-let stream (toks : Terminal.t list) : unit -> Terminal.t * Lexing.position * Lexing.position =
-  let toks = ref toks in
-  fun () ->
-
-    let tok =
-      match !toks with
-      | tok :: more ->
-
-         (* Take a token off the list, and return it. *)
-
-         toks := more;
-         tok
-
-      | [] ->
-
-         (* The finite list has been exhausted. Here, two plausible behaviors
-            come to mind.
-
-            The first behavior consists in raising an exception. In that case,
-            we are creating a finite stream, and it is up to the parser to not
-            read past its end.
-
-            The second behavior consists in returning a designated token. In
-            that case, we are creating an infinite, eventually constant,
-            stream.
-
-            The choice between these two behaviors is somewhat arbitrary;
-            furthermore, in the second case, the choice of the designated
-            token is arbitrary as well. Here, we adopt the second behavior if
-            and only if the grammar has an EOF token, and we use EOF as the
-            designated token. Again, this is arbitrary, and could be changed
-            in the future. *)
-
-         match Terminal.eof with
-         | Some eof ->
-             eof
-         | None ->
-             raise EndOfStream
-
-    in
-
-    (* For now, return dummy positions. *)
-
-    tok, Lexing.dummy_pos, Lexing.dummy_pos
-
-(* --------------------------------------------------------------------------- *)
-
-(* [interpret] interprets a sentence. *)
-
-let interpret ((nto, toks) : sentence) : unit =
-
-  (* Check whether a start symbol was provided. If not, use the grammar's
-     unique start symbol, if there is one. *)
-
-  (* The code that finds the unique start symbol is not very pretty. *)
-
-  let nt =
-    match nto, ProductionMap.is_singleton Lr1.entry with
-    | Some nt, _ ->
-       nt
-    | None, Some (prod, _) ->
-       begin match Production.classify prod with
-       | Some nt ->
-           nt
-       | None ->
-           assert false
-       end
-    | None, None ->
-       Error.error []
-         "Because the grammar has multiple start symbols, each of the\n\
-           sentences provided on the standard input channel must be of the\n\
-           form: <start symbol>: <token>*"
-  in
-
-  (* Run the reference interpreter. This can produce a concrete syntax tree
-     ([Some cst]), fail with a parser error ([None]), or fail with a lexer error
-     ([EndOfStream]). *)
-
-  (* In either case, we produce just one line of output, so it should be clear
-     to the user which outcomes correspond to which sentences (should multiple
-     sentences be supplied). *)
-
-  begin try
-    match
-      MenhirLib.Convert.Simplified.traditional2revised
-       (ReferenceInterpreter.interpret Settings.trace nt)
-       (stream toks)
-    with
-
-    | Some cst ->
-
-       (* Success. *)
-
-       Printf.printf "ACCEPT";
-       if Settings.interpret_show_cst then begin
-         print_newline();
-         Cst.show stdout cst
-       end
-
-    | None ->
-
-       (* Parser failure. *)
-
-       Printf.printf "REJECT"
-
-  with EndOfStream ->
-
-    (* Lexer failure. *)
-    
-    Printf.printf "OVERSHOOT"
-
-  end;
-  print_newline()
-
-(* --------------------------------------------------------------------------- *)
-
-(* If [--interpret] is set, interpret the sentences found on the standard
-   input channel, then stop, without generating a parser. *)
-
-open Lexing
-
-let () =
-  if Settings.interpret then begin
-
-    (* Read a series of sentences from the standard input channel. *)
-
-    (* For more comfortable interaction, we interpret each sentence
-       as soon as it is read. *)
-
-    let lexbuf =
-      from_channel stdin
-    in
-    lexbuf.lex_curr_p <- { lexbuf.lex_curr_p with pos_fname = "(stdin)" };
-
-    let read () =
-      try
-       SentenceParser.sentence SentenceLexer.lex lexbuf
-      with Parsing.Parse_error ->
-       Error.error (Positions.lexbuf lexbuf) "Ill-formed input sentence."
-    in
-
-    let rec loop () =
-      match read() with
-      | None ->
-         exit 0
-      | Some sentence ->
-         interpret sentence;
-         loop()
-    in
-    loop()
-
-  end
diff --git a/bundles/menhirLib/menhir-20120123/src/interpret.mli b/bundles/menhirLib/menhir-20120123/src/interpret.mli
deleted file mode 100644 (file)
index a16647a..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module is in charge of handling the [--interpret] option,
-   if it is present. It offers no functionality. *)
-
diff --git a/bundles/menhirLib/menhir-20120123/src/invariant.ml b/bundles/menhirLib/menhir-20120123/src/invariant.ml
deleted file mode 100644 (file)
index 105b24a..0000000
+++ /dev/null
@@ -1,903 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module discovers information about the shape of the stack
-   in each of the automaton's states.
-
-   It would probably be possible to predict this information, instead
-   of discovering it, but it would then be less obvious that it is
-   correct. In this approach, it is more obvious that the discovered
-   invariant is correct. The drawback is that it is not necessarily
-   clear why it is strong enough to guarantee that the generated code
-   is well-typed. *)
-
-open Grammar
-
-(* ------------------------------------------------------------------------ *)
-(* Discover what is known of the structure of the stack in every
-   automaton node. *)
-
-(* A concrete stack is a list of pairs of a symbol and a state. *)
-
-(* An abstract stack is (a finite representation of) a possibly
-   infinite set of concrete stacks. *)
-
-(* The type [tail] has two values. [TailEmpty] represents a singleton
-   set that contains (only) the empty stack. [TailUnknown] represents
-   the full set of all stacks. *)
-
-type tail =
-  | TailEmpty
-  | TailUnknown
-
-(* An abstract cell is a pair of a symbol and a set of states. An
-   abstract word is a list of abstract cells. An abstract stack
-   is a pair of an abstract word, which represents a known suffix
-   of the stack, and a tail, which provides information about the
-   remainder of the stack. *)
-
-type cell =
-    Symbol.t * Lr1.NodeSet.t
-
-type word =
-    cell list
-
-type stack =
-    word * tail
-
-(* ------------------------------------------------------------------------ *)
-(* Equality of abstract stacks. *)
-
-let eq_tail tail1 tail2 =
-  match tail1, tail2 with
-  | TailEmpty, TailEmpty
-  | TailUnknown, TailUnknown ->
-      true
-  | _, _ ->
-      false
-
-let eq_cell (symbol1, states1) (symbol2, states2) =
-  Symbol.equal symbol1 symbol2 &&
-  Lr1.NodeSet.equal states1 states2
-
-let rec eq_word w1 w2 =
-  match w1, w2 with
-  | [], [] ->
-      true
-  | cell1 :: w1, cell2 :: w2 ->
-      eq_cell cell1 cell2 &&
-      eq_word w1 w2
-  | _, _ ->
-      false
-
-let eq_stack (w1, tail1) (w2, tail2) =
-  eq_tail tail1 tail2 &&
-  eq_word w1 w2
-
-(* ------------------------------------------------------------------------ *)
-(* Extending an abstract stack with a new cell. *)
-
-let extend_stack cell stack =
-  let (w, tail) = stack in
-  cell :: w, tail
-
-(* ------------------------------------------------------------------------ *)
-(* Computing the join of two abstract stacks. *)
-
-(* The join of [stack1] and [stack2] is their least upper bound, that
-   is, the best abstract description of the union of the two sets of
-   concrete stacks denoted by [stack1] and [stack2]. *)
-
-let rec join_tail (tail1 : tail) (tail2 : tail) : tail =
-  match tail1, tail2 with
-  | TailEmpty, TailEmpty ->
-      TailEmpty
-  | TailUnknown, _
-  | _, TailUnknown ->
-      TailUnknown
-
-let rec join_word (w1 : word) (w2 : word) : word * tail =
-  match w1, w2 with
-  | [], [] ->
-      (* Both stacks are empty. There is agreement. *)
-      [], TailEmpty
-  | [], _ :: _
-  | _ :: _, [] ->
-      (* One stack is empty, but the other isn't. The greatest
-        common suffix is empty, and there is disagreement. *)
-      [], TailUnknown
-  | (symbol1, states1) :: w1, (symbol2, states2) :: w2 ->
-      if Symbol.equal symbol1 symbol2 then
-       (* The stacks agree on their top cell. It is therefore part
-          of the greatest common suffix. *)
-        let w, tail = join_word w1 w2 in
-       (symbol1, Lr1.NodeSet.union states1 states2) :: w, tail
-      else
-        (* The stacks disagree on their top cell. Their greatest common
-          suffix is therefore empty. *)
-       [], TailUnknown
-
-let rec join_stack (stk1 : stack) (stk2 : stack) : stack =
-  let w1, tail1 = stk1
-  and w2, tail2 = stk2 in
-  let w, tail = join_word w1 w2 in
-  w, join_tail tail (join_tail tail1 tail2)
-
-(* ------------------------------------------------------------------------ *)
-(* Truncating an abstract stack at a certain depth. *)
-
-let truncate depth (w, tail) =
-  assert (List.length w >= depth);
-  Misc.truncate depth w, TailUnknown
-
-(* ------------------------------------------------------------------------ *)
-(* This abstract set denotes a singleton set of the empty stack. *)
-
-let empty : stack =
-  [], TailEmpty
-
-(* 2011/04/28: although this seems difficult to believe, the code that was
-   used until now to compute the invariant was completely broken. A single
-   pass over the automaton was used, so the abstract stacks that were computed
-   did not represent a least fixed point, but (for most of our sample
-   grammars) were strictly below the least fixed point. (That is, they produce
-   descriptions of the stack that were unsound / too strong.)  For some
-   reason, Menhir was apparently still able to produce correct code. (Some
-   type annotations in the code were probably incorrect, but apparently this
-   did not matter because the code is full of magic anyway.)
-
-   I am now fixing this problem (I hope!) by explicitly requesting the
-   computation of a least fixed point. *)
-
-(* ------------------------------------------------------------------------ *)
-(* The abstract stacks that we have presented above represent non-empty sets
-   of concrete stacks. In order to perform the fixed point computation, we
-   also need a bottom element, which represents an empty set of concrete
-   stacks. This element is used during the fixed point computation, but does
-   not appear in the least fixed point, provided every state of the automaton
-   is reachable. (A state is reachable if only if the least fixed point
-   associates it with a non-empty set of stacks.) *)
-
-type value =
-  | VEmptySet
-  | VNonEmptySet of stack
-
-let eq_value v1 v2 =
-  match v1, v2 with
-  | VEmptySet, VEmptySet ->
-      true
-  | VNonEmptySet stack1, VNonEmptySet stack2 ->
-      eq_stack stack1 stack2
-  | _, _ ->
-      false
-
-let join_value v1 v2 =
-  match v1, v2 with
-  | VEmptySet, v
-  | v, VEmptySet ->
-      v
-  | VNonEmptySet stack1, VNonEmptySet stack2 ->
-      VNonEmptySet (join_stack stack1 stack2)
-
-let extend_value cell v =
-  match v with
-  | VEmptySet ->
-      VEmptySet
-  | VNonEmptySet stack ->
-      VNonEmptySet (extend_stack cell stack)
-
-(* ------------------------------------------------------------------------ *)
-(* Instantiate the least fixed point computation machinery with states and
-   values. *)
-
-module F =
-  Fix.Make
-    (struct
-
-      type key =
-         Lr1.NodeMap.key
-
-      type 'data t =
-         'data Lr1.NodeMap.t ref
-
-      let create () =
-       ref Lr1.NodeMap.empty
-
-      let clear t =
-       t := Lr1.NodeMap.empty
-
-      let add k d t =
-       t := Lr1.NodeMap.add k d !t
-
-      let find k t =
-       Lr1.NodeMap.find k !t
-
-      let iter f t =
-       Lr1.NodeMap.iter f !t
-
-    end)
-    (struct
-      type property = value
-      let bottom = VEmptySet
-      let equal = eq_value
-      let is_maximal _ = false
-    end)
-
-(* ------------------------------------------------------------------------ *)
-(* Define the fixed point. *)
-
-let lfp : Lr1.node -> value =
-
-  F.lfp (fun node (get : Lr1.node -> value) ->
-
-    (* We use the fact that a state has incoming transitions if and only if
-       it is not a start state. This allows to us to simplify the following
-       code slightly. *)
-
-    match Lr1.incoming_symbol node with
-
-    | None ->
-       assert (Lr1.predecessors node = []);
-
-       (* If [node] is a start state, then the stack at [node] may be (in
-          fact, must be) the empty stack. *)
-
-       VNonEmptySet empty
-
-    | Some symbol ->
-
-       (* If [node] is not a start state, then include the contribution of
-          every incoming transition. We compute a join over all predecessors.
-          The contribution of one predecessor is the abstract value found at
-          this predecessor, extended with a new cell for this transition. *)
-
-       List.fold_left (fun v predecessor ->
-         join_value
-           v
-           (extend_value (symbol, Lr1.NodeSet.singleton predecessor) (get predecessor))
-       ) VEmptySet (Lr1.predecessors node)
-
-  )
-
-(* If every state is reachable, then the least fixed point must be non-bottom
-   everywhere, so we may view it as a function that produces a [stack], a
-   description of a non-empty set of stacks. *)
-
-let lfp (node : Lr1.node) : stack =
-  match lfp node with
-  | VEmptySet ->
-      (* apparently this node is unreachable *)
-      assert false
-  | VNonEmptySet stack ->
-      stack
-
-let stack =
-  lfp
-
-(* ------------------------------------------------------------------------ *)
-(* We now discover what can be said of the structure of the stack when
-   production [prod] is about to be reduced. At the same time, we
-   count how many states can reduce each production and warn about
-   productions that are never reduced. *)
-
-type info =
-  (* Production is never reduced. *)
-  | Zero
-  (* Production can be reduced at certain nodes with a certain stack structure. *)
-  | More of Lr1.NodeSet.t * stack
-
-type prodinfo =
-    info ProductionMap.t
-
-let find prod prodinfo =
-  try
-    ProductionMap.lookup prod prodinfo
-  with Not_found ->
-    Zero
-
-let prodinfo : prodinfo =
-  Lr1.fold (fun prodinfo node ->
-    TerminalMap.fold (fun _ prods prodinfo ->
-      let prod = Misc.single prods in
-      ProductionMap.add prod (
-       match find prod prodinfo with
-       | Zero ->
-           More (
-             Lr1.NodeSet.singleton node,
-             truncate (Production.length prod) (stack node)
-             (* the use of [truncate] guarantees that we do not accidentally
-                get more information than we would like; not sure whether/why
-                this is necessary *)
-            )
-       | More (nodes, stk') ->
-           More (
-             Lr1.NodeSet.add node nodes,
-             join_stack (stack node) stk'
-            )
-      ) prodinfo
-    ) (Lr1.reductions node) prodinfo
-  ) ProductionMap.empty
-
-let () =
-  let count = ref 0 in
-  Production.iter (fun prod ->
-    match find prod prodinfo, Production.classify prod with
-    | Zero, Some nt ->
-       incr count;
-       Error.grammar_warning
-         (Nonterminal.positions nt)
-         (Printf.sprintf "symbol %s is never accepted." (Nonterminal.print false nt))
-    | Zero, None ->
-       incr count;
-       Error.grammar_warning
-         (Production.positions prod)
-         (Printf.sprintf "production %sis never reduced." (Production.print prod))
-    | More (_, (w, _)), _ ->
-       assert (List.length w = Production.length prod)
-  );
-  if !count > 0 then
-    Error.grammar_warning []
-      (Printf.sprintf "in total, %d productions are never reduced." !count)
-
-let prodstack prod =
-  match find prod prodinfo with
-  | Zero ->
-      assert false
-  | More (_, stk) ->
-      stk
-
-(* ------------------------------------------------------------------------ *)
-(* We now determine which states must be represented, that is,
-   explicitly pushed onto the stack. For simplicity, a state is either
-   always represented or never represented. More fine-grained
-   strategies, where a single state is sometimes pushed onto the stack
-   and sometimes not pushed, depending on which outgoing transition is
-   being taken, are conceivable, but quite tricky, and probably not
-   worth the trouble.
-
-   (1) If two states are liable to appear within a single stack cell,
-   then one is represented if and only if the other is
-   represented. This ensures that the structure of stacks is known
-   everywhere and that we can propose types for stacks.
-
-   (2) If a state [s] has an outgoing transition along nonterminal
-   symbol [nt], and if the [goto] table for symbol [nt] has more than
-   one target, then state [s] is represented.
-
-   (3) If a stack cell contains more than one state and if at least
-   one of these states is able to handle the [error] token, then these
-   states are represented.
-
-   (4) If the semantic action associated with a production mentions
-   the [$syntaxerror] keyword, then the state that is being reduced to
-   (that is, the state that initiated the recognition of this
-   production) is represented. (Indeed, it will be passed as an
-   argument to [errorcase].) *)
-
-(* Data. *)
-
-let rep : bool UnionFind.point array =
-  Array.init Lr1.n (fun _ -> UnionFind.fresh false)
-
-(* Getter. *)
-
-let represented state =
-  rep.(Lr1.number state)
-
-(* Setters. *)
-
-let represent state =
-  UnionFind.change (represented state) true
-
-let represents states =
-  represent (Lr1.NodeSet.choose states)
-
-(* Enforce condition (1) above. *)
-
-let share (w, _) =
-  List.iter (fun (_, states) ->
-    let dummy = UnionFind.fresh false in
-    Lr1.NodeSet.iter (fun state ->
-      UnionFind.eunion dummy (represented state)
-    ) states
-  ) w
-
-let () =
-  Lr1.iter (fun node ->
-    share (lfp node)
-  );
-  Production.iter (fun prod ->
-    match find prod prodinfo with
-    | Zero ->
-       ()
-    | More (_, stk) ->
-       share stk
-  )
-
-(* Enforce condition (2) above. *)
-
-let () =
-  Nonterminal.iter (fun nt ->
-    let count = 
-      Lr1.targets (fun count _ _ ->
-       count + 1
-      ) 0 (Symbol.N nt)
-    in
-    if count > 1 then
-      Lr1.targets (fun () sources _ ->
-       List.iter represent sources
-      ) () (Symbol.N nt)
-  )
-
-(* Enforce condition (3) above. *)
-
-let handler state =
-  try
-    let _ = SymbolMap.find (Symbol.T Terminal.error) (Lr1.transitions state) in
-    true
-  with Not_found ->
-    try
-      let _ = TerminalMap.lookup Terminal.error (Lr1.reductions state) in
-      true
-    with Not_found ->
-      false
-
-let handlers states =
-  Lr1.NodeSet.exists handler states
-
-let () =
-  Lr1.iter (fun node ->
-    let (w, _) = lfp node in
-    List.iter (fun (_, states) ->
-      if Lr1.NodeSet.cardinal states >= 2 && handlers states then
-       represents states
-    ) w
-  )
-
-(* Enforce condition (4) above. *)
-
-let () =
-  Production.iterx (fun prod ->
-    if Action.has_syntaxerror (Production.action prod) then
-      match find prod prodinfo with
-      | Zero ->
-         ()
-      | More (sites, (w, _)) ->
-         let length = Production.length prod in
-         if length = 0 then
-           Lr1.NodeSet.iter represent sites
-         else
-           let (_, states) = List.nth w (length - 1) in
-           represents states
-  )
-
-(* Define accessors. *)
-
-let represented state =
-  UnionFind.find (represented state)
-
-let representeds states =
-  if Lr1.NodeSet.is_empty states then
-    assert false
-  else
-    represented (Lr1.NodeSet.choose states)
-
-let representedc (_, states) =
-  representeds states
-
-let handlerc (_, states) =
-  handlers states
-
-let fold f accu w =
-  List.fold_right (fun (symbol, states) accu ->
-    f accu (representeds states) symbol states
-  ) w accu
-
-let fold_top f accu w =
-  match w with
-  | [] ->
-      accu
-  | (symbol, states) :: _ ->
-      f (representeds states) symbol
-
-let () =
-  Error.logC 1 (fun f ->
-    let count =
-      Lr1.fold (fun count node ->
-        if represented node then count + 1 else count
-      ) 0
-    in
-    Printf.fprintf f "%d out of %d states are represented.\n" count Lr1.n
-  )
-
-(* ------------------------------------------------------------------------ *)
-(* Explain how the stack should be deconstructed when an error is
-   found.
-
-   We sometimes have a choice as too how many stack cells should be
-   popped. Indeed, several cells in the known suffix of the stack may
-   physically hold a state. If neither of these states handles errors,
-   then we could jump to either. (Indeed, if we jump to one that's
-   nearer, it will in turn pop further stack cells and jump to one
-   that's farther.) In the interests of code size, we should pop as
-   few stack cells as possible. So, we jump to the topmost represented
-   state in the known suffix. *)
-
-type state =
-  | Represented
-  | UnRepresented of Lr1.node
-
-type instruction =
-  | Die
-  | DownTo of word * state
-
-let rewind node : instruction =
-  let w, tail = stack node in
-
-  let rec rewind w =
-    match w, tail with
-    | [], TailEmpty ->
-       Die
-    | [], TailUnknown ->
-
-       (* I believe that every stack description either is definite
-          (that is, ends with [TailEmpty]) or contains at least one
-          represented state. This property, if true, ensures that
-          this assertion cannot fail. *)
-
-        (* TEMPORARY prove this property. If the property is not true in
-           general, one could make it true by making more states
-           represented. *)
-
-       assert false
-
-    | cell :: w, _ ->
-
-       if representedc cell then
-
-         (* Here is a represented state. We will pop this
-            cell and no more. *)
-
-         DownTo ([ cell ], Represented)
-
-       else if handlerc cell then
-
-         (* Here is an unrepresented state that can handle
-            errors. The cell must hold a singleton set of states, so
-            we know which state to jump to, even though it isn't
-            represented. *)
-
-         let (_, states) = cell in
-         assert (Lr1.NodeSet.cardinal states = 1);
-         let state = Lr1.NodeSet.choose states in
-         DownTo ([ cell ], UnRepresented state)
-
-       else
-
-         (* Here is an unrepresented state that does not handle
-            errors. Pop this cell and look further. *)
-
-         match rewind w with
-         | Die ->
-             Die
-         | DownTo (w, st) ->
-             DownTo (cell :: w, st)
-
-  in
-  rewind w
-
-(* ------------------------------------------------------------------------ *)
-(* Accessors for information about the stack. *)
-
-let stack node : word =
-  let (w, _) = stack node in
-  w
-
-let prodstack prod : word =
-  let (w, _) = prodstack prod in
-  w
-
-let gotostack : Nonterminal.t -> word =
-  Nonterminal.tabulate (fun nt ->
-    let sources =
-      Lr1.targets (fun accu sources _ ->
-       List.fold_right Lr1.NodeSet.add sources accu
-      ) Lr1.NodeSet.empty (Symbol.N nt)
-    in
-    [ Symbol.N nt, sources ]
-  )
-
-(* ------------------------------------------------------------------------ *)
-(* We now determine which positions must be kept track of. For
-   simplicity, we do this on a per symbol basis. That is, for each
-   symbol, either we never keep track of position information, or we
-   always do. In fact, we do distinguish start and end positions.
-   This leads to computing two sets of symbols -- those that keep
-   track of their start position and those that keep track of their
-   end position.
-
-   A symbol on the right-hand side of a production must keep track of
-   its (start or end) position if that position is explicitly
-   requested by a semantic action.
-
-   Furthermore, if the left-hand symbol of a production must keep
-   track of its start (resp. end) position, then the first
-   (resp. last) symbol of its right-hand side (if there is one) must
-   do so as well. That is, unless the right-hand side is empty. *)
-
-open Keyword
-
-let startp =
-  ref SymbolSet.empty
-
-let endp =
-  ref SymbolSet.empty
-
-let rec require where symbol =
-  let wherep =
-    match where with
-    | WhereStart ->
-       startp
-    | WhereEnd ->
-       endp
-  in
-  if not (SymbolSet.mem symbol !wherep) then begin
-    wherep := SymbolSet.add symbol !wherep;
-    match symbol with
-    | Symbol.T _ ->
-       ()
-    | Symbol.N nt ->
-       Production.iternt nt (require_aux where)
-  end
-
-and require_aux where prod =
-  let nt, rhs = Production.def prod in
-  let length = Array.length rhs in
-  if length > 0 then
-    match where with
-    | WhereStart ->
-       require where rhs.(0)
-    | WhereEnd ->
-       require where rhs.(length - 1)
-
-let () =
-  Production.iterx (fun prod ->
-    let rhs = Production.rhs prod
-    and ids = Production.identifiers prod
-    and action = Production.action prod in
-
-    KeywordSet.iter (function
-      | Dollar _
-      | PreviousError
-      | SyntaxError ->
-         ()
-      | Position (Left, where, _) ->
-         require_aux where prod
-      | Position (RightDollar i, where, _) ->
-         require where rhs.(i - 1)
-      | Position (RightNamed id, where, _) ->
-         Array.iteri (fun i id' ->
-           if id = id' then
-             require where rhs.(i)
-         ) ids
-    ) (Action.keywords action)
-  )
-
-let startp =
-  !startp
-
-let endp =
-  !endp
-
-let () =
-  Error.logC 1 (fun f ->
-    Printf.fprintf f
-      "%d out of %d symbols keep track of their start position.\n\
-       %d out of %d symbols keep track of their end position.\n"
-        (SymbolSet.cardinal startp) (Terminal.n + Nonterminal.n)
-        (SymbolSet.cardinal endp) (Terminal.n + Nonterminal.n))
-
-let startp symbol =
-  SymbolSet.mem symbol startp
-
-let endp symbol =
-  SymbolSet.mem symbol endp
-
-(* ------------------------------------------------------------------------ *)
-(* Information about which productions are reduced and where. *)
-
-let ever_reduced prod =
-   match find prod prodinfo with
-   | Zero ->
-       false
-   | More _ ->
-       true
-
-let fold_reduced f prod accu =
-  match find prod prodinfo with
-  | Zero ->
-      accu
-  | More (nodes, _) ->
-      Lr1.NodeSet.fold f nodes accu
-
-(* ------------------------------------------------------------------------- *)
-(* Miscellaneous. *)
-
-let universal symbol =
-  Lr1.fold (fun universal s ->
-    universal && (if represented s then SymbolMap.mem symbol (Lr1.transitions s) else true)
-  ) true
-
-(* ------------------------------------------------------------------------ *)
-(* Discover which states potentially can do error recovery.
-
-   They are the states whose incoming symbol is [error]. At these
-   states, [env.shifted] is zero, that is, no tokens have been
-   successfully shifted since the last error token was shifted.
-
-   We do not include in this definition the states where [env.shifted]
-   *may be* zero. That would involve adding in all states reachable
-   from the above states via reductions. However, error recovery will
-   never be performed in these states. Indeed, imagine we shift an
-   error token and enter a state that can do error recovery, according
-   to the above definition. If, at this point, we consult the
-   lookahead token [tok] and perform a reduction, then the new state
-   that we reach is, by construction, able to act upon [tok], so no
-   error recovery will be performed at that state, even though
-   [env.shifted] is still zero. However, we must not perform default
-   reductions at states that can do error recovery, otherwise we break
-   this reasoning.
-
-   If the option [--error-recovery] was not provided on the command
-   line, then no states will perform error recovery. This makes things
-   simpler (and saves some code) in the common case where people are
-   not interested in error recovery. This also disables the warning
-   about states that can do error recovery but do not accept the EOF
-   token. *)
-
-let recoverers =
-  if Settings.recovery then
-    Lr1.fold (fun recoverers node ->
-      match Lr1.incoming_symbol node with
-      | Some (Symbol.T tok)
-       when Terminal.equal tok Terminal.error ->
-         Lr1.NodeSet.add node recoverers
-      | _ ->
-         recoverers
-    ) Lr1.NodeSet.empty
-  else
-    Lr1.NodeSet.empty
-
-let recoverer node =
-  Lr1.NodeSet.mem node recoverers
-
-(* ------------------------------------------------------------------------ *)
-(* Discover which states can peek at an error. These are the states
-   where [env.shifted] may be -1, that is, where an error token may be
-   on the stream. These are all states that are targets of a reduce
-   action on [error]. *)
-
-let errorpeekers =
-  Lr1.fold (fun errorpeekers node ->
-    try
-      let prods = TerminalMap.lookup Terminal.error (Lr1.reductions node) in
-      let prod = Misc.single prods in
-      let nt = Production.nt prod in
-      Lr1.targets (fun errorpeekers _ target ->
-       Lr1.NodeSet.add target errorpeekers
-      ) errorpeekers (Symbol.N nt)
-    with Not_found ->
-      errorpeekers
-  ) Lr1.NodeSet.empty
-
-let errorpeeker node =
-  Lr1.NodeSet.mem node errorpeekers
-
-(* ------------------------------------------------------------------------ *)
-(* Here is how we check whether state [s] should have a default
-   reduction.
-
-   We check whether [s] has no outgoing shift transitions and only has
-   one possible reduction action. In that case, we produce a default
-   reduction action, that is, we perform reduction without consulting
-   the lookahead token. This saves code, but can alter the parser's
-   behavior in the presence of errors.
-
-   A state that can perform error recovery (that is, a state whose
-   incoming symbol is [error]) never performs a default
-   reduction. This is explained above. Actually, we allow one
-   exception: if the state has a single (reduction) action on "#", as
-   explained in the next paragraph, then we perform this default
-   reduction and do not allow error recovery to take place. Error
-   recovery would not make much sense, since we believe we are at the
-   end of file.
-
-   The check for default actions subsumes the check for the case where
-   [s] admits a reduce action with lookahead symbol "#". In that case,
-   it must be the only possible action -- see
-   [Lr1.default_conflict_resolution]. That is, we have reached a point
-   where we have recognized a well-formed input and are now expecting
-   an end-of-stream. In that case, performing reduction without
-   looking at the next token is the right thing to do, since there
-   should in fact be none. The state that we reduce to will also have
-   the same property, and so on, so we will in fact end up rewinding
-   the entire stack and accepting the input when the stack becomes
-   empty.
-
-   (New as of 2012/01/23.) A state where a shift/reduce conflict was
-   solved in favor of neither (due to a use of the %nonassoc
-   directive) must not perform a default reduction. Indeed, this would
-   effectively mean that the failure that was requested by the user is
-   forgotten and replaced with a reduction. This surprising behavior
-   is present in ocamlyacc and was present in earlier versions of
-   Menhir. See e.g. http://caml.inria.fr/mantis/view.php?id=5462
-
-   There is a chance that we might run into trouble if the ideas
-   described in the above two paragraphs collide, that is, if we
-   forbid a default reduction (due to a shift/reduce conflict solved
-   by %nonassoc) in a node where we would like to have default
-   reduction on "#". This situation seems unlikely to arise, so I will
-   not do anything about it for the moment. (Furthermore, someone who
-   uses precedence declarations is looking for trouble anyway.)
-
-*)
-
-let (has_default_reduction : Lr1.node -> (Production.index * TerminalSet.t) option), hdrcount =
-  Misc.tabulateo Lr1.number Lr1.fold Lr1.n (fun s ->
-
-    if Lr1.forbid_default_reduction s then
-      None
-    else
-
-      match ProductionMap.is_singleton (Lr1.invert (Lr1.reductions s)) with
-      | Some (_, toks)  as reduction
-         when SymbolMap.purelynonterminal (Lr1.transitions s) ->
-
-       if TerminalSet.mem Terminal.sharp toks then
-           (* Perform default reduction on "#". *)
-           reduction
-         else if recoverer s then
-           (* Do not perform default reduction. Allow error recovery. *)
-           None
-         else
-           (* Perform default reduction. *)
-           reduction
-
-      | Some _
-      | None ->
-         None
-
-  )
-
-let () =
-  Error.logC 1 (fun f ->
-    Printf.fprintf f
-       "%d out of %d states have a default reduction.\n"
-       hdrcount Lr1.n)
-
-(* ------------------------------------------------------------------------ *)
-
-let () =
-  Time.tick "Constructing the invariant"
-
-(* ------------------------------------------------------------------------ *)
-
-(* If any fatal error was signaled up to this point, stop now. This may include
-   errors signaled in the modules [lr1] and [invariant] by calling the function
-   [Error.grammar_warning]. *)
-
-let () =
-  if Error.errors() then
-    exit 1
-
diff --git a/bundles/menhirLib/menhir-20120123/src/invariant.mli b/bundles/menhirLib/menhir-20120123/src/invariant.mli
deleted file mode 100644 (file)
index 34a983c..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module discovers and publishes information about the
-   automaton.
-
-   It determines the shape of the stack when a state is about to be
-   entered, when a production is about to be reduced, and when a goto
-   transition is about to be taken.
-
-   It also determines which states should be represented (that is,
-   need to physically exist on the stack at runtime) and which symbols
-   need to keep track of (start or end) positions.
-
-   It also determines which automaton states could potentially perform
-   error recovery, and which states could have to deal with an [error]
-   token. *)
-
-open Grammar
-
-(* ------------------------------------------------------------------------- *)
-(* A representation of stack shapes. *)
-
-(* A word is a representation of a stack or stack suffix. *)
-
-type word
-
-(* [fold] folds over a word. At each cell, [f] is applied to the
-   accumulator, to a Boolean flag that tells whether the cell holds a
-   state, to the set of possible states of the cell, and to the symbol 
-   associated with the cell. The stack is visited from bottom to top. *)
-
-val fold: ('a -> bool -> Symbol.t -> Lr1.NodeSet.t -> 'a) -> 'a -> word -> 'a
-
-(* [fold_top f accu s] is analogous to [fold], but only folds over the
-   top stack cell, if there is one, so that [f] is either not invoked
-   at all or invoked just once. *)
-
-val fold_top: (bool -> Symbol.t -> 'a) -> 'a -> word -> 'a
-
-(* ------------------------------------------------------------------------- *)
-(* Information about the stack. *)
-
-(* [stack s] is the structure of the stack at state [s]. *)
-
-val stack: Lr1.node -> word
-
-(* [prodstack prod] is the structure of the stack when production
-   [prod] is about to be reduced. This function should not be called
-   if production [prod] is never reduced. *)
-
-val prodstack: Production.index -> word
-
-(* [gotostack nt] is the structure of the stack when a shift
-   transition over nonterminal [nt] is about to be taken. It
-   consists of just one cell. *)
-
-val gotostack: Nonterminal.t -> word
-
-(* [rewind s] explains how to rewind the stack when dealing with an
-   error in state [s]. It produces an instruction to either die
-   (because no state on the stack can handle errors) or pop a suffix
-   of the stack. In the latter case, one reaches a state that is
-   either represented (its identity is physically stored in the
-   bottommost cell that is popped) or unrepresented (its identity is
-   statically known). *)
-
-type instruction =
-  | Die
-  | DownTo of word * state
-
-and state =
-  | Represented
-  | UnRepresented of Lr1.node
-
-val rewind: Lr1.node -> instruction
-
-(* ------------------------------------------------------------------------- *)
-(* Information about which states and positions need to physically
-   exist on the stack. *)
-
-(* [represented s] tells whether state [s] must have an explicit
-   representation, that is, whether it is pushed onto the stack. *)
-
-val represented: Lr1.node -> bool
-
-(* [startp symbol] and [endp symbol] tell whether start or end
-   positions must be recorded for symbol [symbol]. *)
-
-val startp: Symbol.t -> bool
-val endp: Symbol.t -> bool
-
-(* ------------------------------------------------------------------------- *)
-(* Information about error handling. *)
-
-(* [recoverer s] tells whether state [s] can potentially do error
-   recovery. *)
-
-val recoverer: Lr1.node -> bool
-
-(* [errorpeeker s] tells whether state [s] can potentially peek at an
-   error. This is the case if, in state [s], [env.shifted] may be -1,
-   that is, if an error token may be on the stream. *)
-
-val errorpeeker: Lr1.node -> bool
-
-(* ------------------------------------------------------------------------- *)
-(* Information about which productions are reduced and where. *)
-
-(* [ever_reduced prod] tells whether production [prod] is ever reduced. *)
-
-val ever_reduced: Production.index -> bool
-
-(* [fold_reduced prod] folds over all states that can reduce
-   production [prod]. *)
-
-val fold_reduced: (Lr1.node -> 'a -> 'a) -> Production.index -> 'a -> 'a
-
-(* ------------------------------------------------------------------------- *)
-(* Information about default reductions. *)
-
-(* [has_default_reduction s] tells whether state [s] has a default reduction,
-   and, if so, upon which set of tokens. *)
-val has_default_reduction : Lr1.node -> (Production.index * TerminalSet.t) option
-
-(* ------------------------------------------------------------------------- *)
-(* Miscellaneous. *)
-
-(* [universal symbol] tells whether every represented state has an
-   outgoing transition along [symbol]. *)
-
-val universal: Symbol.t -> bool
-
diff --git a/bundles/menhirLib/menhir-20120123/src/item.ml b/bundles/menhirLib/menhir-20120123/src/item.ml
deleted file mode 100644 (file)
index ee0cc8b..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-(* ------------------------------------------------------------------------ *)
-(* Items. *)
-
-(* An LR(0) item encodes a pair of integers, namely the index of the
-   production and the index of the bullet in the production's
-   right-hand side. *)
-
-(* Both integers are packed into a single integer, using 7 bits for
-   the bullet position and the rest (usually 24 bits) for the
-   production index. These widths could be adjusted. *)
-
-type t = int
-
-let import (prod, pos) =
-  assert (pos < 128);
-  (Production.p2i prod) lsl 7 + pos
-
-let export t =
-  (Production.i2p (t lsr 7), t mod 128)
-
-(* Comparison. *)
-
-let equal (item1 : t) (item2: t) =
-  item1 = item2
-
-(* Position. *)
-
-let positions (item : t) =
-  let prod, _ = export item in
-  Production.positions prod
-
-(* [def item] looks up the production associated with this item in the
-   grammar and returns [prod, nt, rhs, pos, length], where [prod] is
-   the production's index, [nt] and [rhs] represent the production,
-   [pos] is the position of the bullet in the item, and [length] is
-   the length of the production's right-hand side. *)
-
-let def t =
-  let prod, pos = export t in
-  let nt, rhs = Production.def prod in
-  let length = Array.length rhs in
-  assert ((pos >= 0) && (pos <= length));
-  prod, nt, rhs, pos, length
-
-let nt t =
-  let _, nt, _, _, _ = def t in
-  nt
-
-let startnt t =
-  let _, _, rhs, pos, length = def t in
-  assert (pos = 0 && length = 1);
-  match rhs.(0) with
-  | Symbol.N nt ->
-      nt
-  | Symbol.T _ ->
-      assert false
-
-(* Printing. *)
-
-let print item =
-  let _, nt, rhs, pos, length = def item in
-  Printf.sprintf "%s -> %s" (Nonterminal.print false nt) (Symbol.printaod 0 pos rhs)
-
-(* Classifying items. *)
-
-type kind =
-  | Shift of Symbol.t * t
-  | Reduce of Production.index
-
-let classify item =
-  let prod, _, rhs, pos, length = def item in
-  if pos = length then
-    Reduce prod
-  else
-    Shift (rhs.(pos), import (prod, pos + 1))
-
-(* Sets of items and maps over items. Hashing these data structures is
-   specifically allowed, so balanced trees (for instance) would not be
-   applicable here. *)
-
-module Map = Patricia.Big
-module Set = Map.Domain
-
-(* This functor performs precomputation that helps efficiently compute
-   the closure of an LR(0) or LR(1) state. The precomputation requires
-   time linear in the size of the grammar. The nature of the lookahead
-   sets remains abstract. *)
-
-(* The precomputation consists in building the LR(0) nondeterministic
-   automaton. This is a graph whose nodes are items and whose edges
-   are epsilon transitions. (We do not care about shift transitions
-   here.) Lookahead information can be attached to nodes and is
-   propagated through the graph during closure computations. *)
-
-module Closure (L : Lookahead.S) = struct
-
-  type state = L.t Map.t
-
-  type node = {
-
-      (* Nodes are sequentially numbered so as to allow applying
-        Tarjan's algorithm (below). *)
-
-      num: int;
-
-      (* Each node is associated with an item. *)
-
-      item: t;
-
-      (* All of the epsilon transitions that leave a node have the
-        same behavior with respect to lookahead information. *)
-
-      (* The lookahead set transmitted along an epsilon transition is
-        either a constant, or the union of a constant and the lookahead
-        set at the source node. The former case corresponds to a source
-        item whose trailer is not nullable, the latter to a source item
-        whose trailer is nullable. *)
-
-      epsilon_constant: L.t;
-      epsilon_transmits: bool;
-
-      (* Each node carries pointers to its successors through
-        epsilon transitions. This field is never modified
-        once initialization is over. *)
-
-      mutable epsilon_transitions: node list;
-
-      (* The following fields are transient, that is, only used
-        temporarily during graph traversals. Marks are used to
-        recognize which nodes have been traversed already. Lists
-        of predecessors are used to record which edges have been
-        traversed. Lookahead information is attached with each
-        node. *)
-
-      mutable mark: Mark.t;
-      mutable predecessors: node list;
-      mutable lookahead: L.t;
-    }
-
-  (* Allocate one graph node per item and build a mapping of
-     items to nodes. *)
-
-  let count =
-    ref 0
-
-  let mapping : node array array =
-    Array.create Production.n [||]
-
-  let item2node item =
-    let prod, pos = export item in
-    mapping.(Production.p2i prod).(pos)
-
-  let () =
-    Production.iter (fun prod ->
-      let nt, rhs = Production.def prod in
-      let length = Array.length rhs in
-      mapping.(Production.p2i prod) <- Array.init (length+1) (fun pos ->
-
-       let item = import (prod, pos) in
-       let num = !count in
-       count := num + 1;
-
-       (* The lookahead set transmitted through an epsilon
-          transition is the FIRST set of the remainder of
-          the source item, plus, if that is nullable, the
-          lookahead set of the source item. *)
-
-       let constant, transmits =
-         if pos < length then
-           let nullable, first = Analysis.nullable_first_rhs rhs (pos + 1) in
-           L.constant first, nullable
-         else
-           (* No epsilon transitions leave this item. *)
-           L.empty, false
-       in
-         
-       {
-         num = num;
-         item = item;
-         epsilon_constant = constant;
-         epsilon_transmits = transmits;
-         epsilon_transitions = []; (* temporary placeholder *)
-         mark = Mark.none;
-         predecessors = [];
-         lookahead = L.empty;
-       }
-
-      )
-    )
-  
-  (* At each node, compute transitions. *)
-
-  let () =
-    Production.iter (fun prod ->
-      let nt, rhs = Production.def prod in
-      let length = Array.length rhs in
-      Array.iteri (fun pos node ->
-
-       node.epsilon_transitions <-
-         if pos < length then
-           match rhs.(pos) with
-           | Symbol.N nt ->
-               Production.foldnt nt [] (fun prod nodes ->
-                 (item2node (import (prod, 0))) :: nodes
-               )
-           | Symbol.T _ ->
-               []
-         else
-           []
-
-      ) mapping.(Production.p2i prod)
-    )
-
-  (* Detect and reject cycles of transitions that transmit a lookahead
-     set.
-
-     We need to ensure that there are no such cycles in order to be
-     able to traverse these transitions in topological order.
-
-     Each such cycle corresponds to a set of productions of the form
-     A1 -> A2, A2 -> A3, ..., An -> A1 (modulo nullable
-     trailers). Such cycles are unlikely to occur in realistic
-     grammars, so our current approach is to reject the grammar if
-     such a cycle exists. Actually, according to DeRemer and Pennello
-     (1982), such a cycle is exactly an includes cycle, and implies
-     that the grammar is not LR(k) for any k, unless A1, ..., An are
-     in fact uninhabited. In other words, this is a pathological
-     case. *)
-
-  (* Yes, indeed, this is called a cycle in Aho & Ullman's book,
-     and a loop in Grune & Jacobs' book. It is not difficult to
-     see that (provided all symbols are inhabited) the grammar
-     is infinitely ambiguous if and only if there is a loop. *)
-
-  module P = struct
-
-    type foo = node
-    type node = foo
-
-    let n =
-      !count
-
-    let index node =
-      node.num
-
-    let iter f =
-      Array.iter (fun nodes ->
-       Array.iter f nodes
-      ) mapping
-
-    let successors f node =
-      if node.epsilon_transmits then
-       List.iter f node.epsilon_transitions
-
-  end
-
-  module T = Tarjan.Run (P)
-
-  let cycle scc =
-    let items = List.map (fun node -> node.item) scc in
-    let positions = List.flatten (List.map positions items) in
-    let names = String.concat "\n" (List.map print items) in
-    Error.error
-      positions
-      (Printf.sprintf "the grammar is ambiguous.\n\
-                       The following items participate in an epsilon-cycle:\n\
-                       %s" names)
-
-  let () =
-     P.iter (fun node ->
-       let scc = T.scc node in
-       match scc with
-       | [] ->
-          ()
-       | [ node ] ->
-
-          (* This is a strongly connected component of one node. Check
-             whether it carries a self-loop. Forbidding self-loops is not
-             strictly required by the code that follows, but is consistent
-             with the fact that we forbid cycles of length greater than 1. *)
-
-          P.successors (fun successor ->
-            if successor.num = node.num then
-              cycle scc
-           ) node
-
-       | _ ->
-
-           (* This is a strongly connected component of at least two
-              elements. *)
-
-          cycle scc
-     )
-
-  (* Closure computation. *)
-
-  let closure (items : state) : state =
-
-    (* Explore the graph forwards, starting from these items. Marks
-       are used to tell which nodes have been visited. Build a list of
-       all visited nodes; this is in fact the list of all items in the
-       closure.
-
-       At initial nodes and when reaching a node through a transition,
-       record a lookahead set.
-
-       When we reach a node through a transition that transmits the
-       lookahead set found at its source, record its source, so as to
-       allow re-traversing this transition backwards (below). *)
-
-    let this = Mark.fresh() in
-    let nodes = ref [] in
-
-    let rec visit father transmits toks node =
-      if Mark.same node.mark this then begin
-       (* Node has been visited already. *)
-       node.lookahead <- L.union toks node.lookahead;
-       if transmits then
-         node.predecessors <- father :: node.predecessors
-      end
-      else begin
-       (* Node is new. *)
-       node.predecessors <- if transmits then [ father ] else [];
-       node.lookahead <- toks;
-       follow node
-      end
-
-    and follow node =
-      node.mark <- this;
-      nodes := node :: !nodes;
-      List.iter
-       (visit node node.epsilon_transmits node.epsilon_constant)
-       node.epsilon_transitions
-
-    in
-
-    Map.iter (fun item toks ->
-      let node = item2node item in
-      visit node (* dummy! *) false toks node
-    ) items;
-
-    let nodes =
-      !nodes in
-
-    (* Explore the graph of transmitting transitions backwards. By
-       hypothesis, it is acyclic, so this is a topological
-       walk. Lookahead sets are inherited through transitions. *)
-
-    let this = Mark.fresh() in
-
-    let rec walk node =
-      if not (Mark.same node.mark this) then begin
-       (* Node is new. *)
-       node.mark <- this;
-       (* Explore all predecessors and merge their lookahead
-          sets into the current node's own lookahead set. *)
-       List.iter (fun predecessor ->
-         walk predecessor;
-         node.lookahead <- L.union predecessor.lookahead node.lookahead
-        ) node.predecessors
-      end
-    in
-
-    List.iter walk nodes;
-
-    (* Done. Produce a mapping of items to lookahead sets.
-       Clear all transient fields so as to reduce pressure
-       on the GC -- this does not make much difference. *)
-
-    List.fold_left (fun closure node ->
-      node.predecessors <- [];
-      let closure = Map.add node.item node.lookahead closure in
-      node.lookahead <- L.empty;
-      closure
-    ) Map.empty nodes
-
-  (* End of closure computation *)
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/item.mli b/bundles/menhirLib/menhir-20120123/src/item.mli
deleted file mode 100644 (file)
index 222bad3..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-(* An LR(0) item encodes a pair of integers, namely the index of the
-   production and the index of the bullet in the production's
-   right-hand side. *)
-
-type t
-val import: Production.index * int -> t
-val export: t -> Production.index * int
-
-(* Comparison. *)
-
-val equal: t -> t -> bool
-
-(* [def item] looks up the production associated with this item in the
-   grammar and returns [prod, nt, rhs, pos, length], where [prod] is
-   the production's index, [nt] and [rhs] represent the production,
-   [pos] is the position of the bullet in the item, and [length] is
-   the length of the production's right-hand side. *)
-
-val def: t -> Production.index * Nonterminal.t * Symbol.t array * int * int
-
-(* If [item] is a start item, [startnt item] returns the start
-   nonterminal that corresponds to [item]. *)
-
-val startnt: t -> Nonterminal.t
-
-(* Printing. *)
-
-val print: t -> string
-
-(* Classifying items as shift or reduce items. A shift item is one
-   where the bullet can still advance. A reduce item is one where the
-   bullet has reached the end of the right-hand side. *)
-
-type kind =
-  | Shift of Symbol.t * t
-  | Reduce of Production.index
-
-val classify: t -> kind
-
-(* Sets of items and maps over items. Hashing these data structures is
-   specifically allowed. *)
-
-module Set : GSet.S with type element = t
-module Map : GMap.S with type key = t
-                     and type Domain.t = Set.t
-
-(* This functor performs precomputation that helps efficiently compute
-   the closure of an LR(0) or LR(1) state. The precomputation requires
-   time linear in the size of the grammar. The nature of the lookahead
-   sets remains abstract. *)
-
-module Closure (L : Lookahead.S) : sig
-
-  (* A state maps items to lookahead information. *)
-
-  type state = L.t Map.t
-
-  (* This takes the closure of a state through all epsilon transitions. *)
-
-  val closure: state -> state
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/keyword.ml b/bundles/menhirLib/menhir-20120123/src/keyword.ml
deleted file mode 100644 (file)
index 6aa3056..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module provides some type and function definitions
-   that help deal with the keywords that we recognize within
-   semantic actions. *)
-
-(* ------------------------------------------------------------------------- *)
-(* Types. *)
-
-(* The user can request position information either at type
-   [int] (a simple offset) or at type [Lexing.position]. *)
-
-type flavor =
-  | FlavorOffset
-  | FlavorPosition
-
-(* The user can request position information about the
-   start or end of a symbol. *)
-
-type where =
-  | WhereStart
-  | WhereEnd
-
-(* The user can request position information about a production's
-   left-hand side or about one of the symbols in its right-hand
-   side, which he can refer to by position or by name. *)
-
-type subject =
-  | Left
-  | RightDollar of int
-  | RightNamed of string
-
-(* Keywords inside semantic actions. They allow access to semantic
-   values or to position information. *)
-
-type keyword =
-  | Dollar of int
-  | Position of subject * where * flavor
-  | PreviousError
-  | SyntaxError
-
-(* ------------------------------------------------------------------------- *)
-(* These auxiliary functions help map a [Position] keyword to the
-   name of the variable that the keyword is replaced with. *)
-
-let where = function
-  | WhereStart ->
-      "start"
-  | WhereEnd ->
-      "end"
-
-let subject = function
-  | Left ->
-      ""
-  | RightDollar i ->
-      Printf.sprintf "__%d_" i
-  | RightNamed id ->
-      Printf.sprintf "_%s_" id
-
-let flavor = function
-  | FlavorPosition ->
-      "pos"
-  | FlavorOffset ->
-      "ofs"
-
-let posvar s w f =
-  Printf.sprintf "_%s%s%s" (where w) (flavor f) (subject s)
-
-(* ------------------------------------------------------------------------- *)
-(* Sets of keywords. *)
-
-module KeywordSet = 
-  struct 
-    include Set.Make (struct
-                       type t = keyword
-                       let compare = compare
-                     end)
-
-    (* This converts a list of keywords with positions into a set of keywords. *)
-    let from_list keywords =
-      List.fold_right add keywords empty
-
-  end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/keyword.mli b/bundles/menhirLib/menhir-20120123/src/keyword.mli
deleted file mode 100644 (file)
index 26955f7..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module provides some type and function definitions
-   that help deal with the keywords that we recognize within
-   semantic actions. *)
-
-(* The user can request position information either at type
-   [int] (a simple offset) or at type [Lexing.position]. *)
-
-type flavor =
-  | FlavorOffset
-  | FlavorPosition
-
-(* The user can request position information about the
-   start or end of a symbol. *)
-
-type where =
-  | WhereStart
-  | WhereEnd
-
-(* The user can request position information about a production's
-   left-hand side or about one of the symbols in its right-hand
-   side, which he can refer to by position or by name. *)
-
-type subject =
-  | Left
-  | RightDollar of int
-  | RightNamed of string
-
-(* Keywords inside semantic actions. They allow access to semantic
-   values or to position information. *)
-
-type keyword =
-  | Dollar of int
-  | Position of subject * where * flavor
-  | PreviousError
-  | SyntaxError
-
-(* This maps a [Position] keyword to the name of the variable that the
-   keyword is replaced with. *)
-
-val posvar: subject -> where -> flavor -> string
-
-(* Sets of keywords. *)
-module KeywordSet : 
-  sig 
-    include Set.S
-
-    (* This converts a list of keywords with positions into a set of keywords. *)
-    val from_list: elt list -> t
-
-  end with type elt = keyword
-
-(* (\* TEMPORARY These functions are replaced by the ones found  *)
-(*    in [Action]. *\) *)
-(* (\* These iterate over a list of keywords with positions, disregarding *)
-(*    the positions, and making sure that duplicate elements are not *)
-(*    presented. *\) *)
-
-(* val iter: (keyword -> unit) -> (keyword * 'a * 'b) list -> unit *)
-(* val fold: (keyword -> 'c -> 'c) -> (keyword * 'a * 'b) list -> 'c -> 'c *)
-
-(* (\* These tell whether a list of keywords with positions contains *)
-(*    a certain keyword. *\) *)
-  
-(* val has_previouserror: (keyword * 'a * 'b) list -> bool *)
-(* val has_syntaxerror: (keyword * 'a * 'b) list -> bool *)
-(* val has_leftstart: (keyword * 'a * 'b) list -> bool *)
-(* val has_leftend: (keyword * 'a * 'b) list -> bool *)
-(* val has_dollar: int -> (keyword * 'a * 'b) list -> bool *)
diff --git a/bundles/menhirLib/menhir-20120123/src/lexdep.mll b/bundles/menhirLib/menhir-20120123/src/lexdep.mll
deleted file mode 100644 (file)
index b336ccd..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This code analyzes the output of [ocamldep] and returns the list
-   of [.cmi] files that the [.cmo] file depends on. *)
-
-{
-
-  open Lexing
-
-  let fail lexbuf =
-    Error.error []
-      (Printf.sprintf
-        "failed to make sense of ocamldep's output (character %d)."
-        lexbuf.lex_curr_p.pos_cnum)
-
-}
-
-let newline = ('\n' | '\r' | "\r\n")
-
-let whitespace = ( ' ' | '\t' | ('\\' newline) )
-
-let entrychar = [^ '\n' '\r' '\t' ' ' '\\' ':' ]
-
-let entry = ((entrychar+ as basename) ".cm" ('i' | 'o' | 'x') as filename)
-
-(* [main] recognizes a sequence of lines, where a line consists of an
-   entry, followed by a colon, followed by a list of entries. *)
-
-rule main = parse
-| eof
-    { [] }
-| entry ":"
-    { let bfs = collect [] lexbuf in
-      ((basename, filename), bfs) :: main lexbuf }
-| _
-    { fail lexbuf }
-
-(* [collect] recognizes a list of entries, separated with spaces and
-   ending in a newline. *)
-
-and collect bfs = parse
-| whitespace+ entry
-    { collect ((basename, filename) :: bfs) lexbuf }
-| whitespace* newline
-    { bfs }
-| _
-| eof
-    { fail lexbuf }
-
diff --git a/bundles/menhirLib/menhir-20120123/src/lexer.mll b/bundles/menhirLib/menhir-20120123/src/lexer.mll
deleted file mode 100644 (file)
index a4a37c8..0000000
+++ /dev/null
@@ -1,500 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-{
-
-  open Lexing
-  open Parser
-  open Positions
-
-  (* This wrapper saves the current lexeme start, invokes its argument,
-     and restores it. This allows transmitting better positions to the
-     parser. *)
-
-  let savestart lexbuf f =
-    let startp = lexbuf.lex_start_p in
-    let token = f lexbuf in
-    lexbuf.lex_start_p <- startp;
-    token
-  
-  (* Updates the line counter, which is used in some error messages. *)
-
-  let update_loc lexbuf =
-    let pos = lexbuf.lex_curr_p in
-    lexbuf.lex_curr_p <- { pos with
-      pos_lnum = pos.pos_lnum + 1;
-      pos_bol = pos.pos_cnum;
-    }
-
-  (* Extracts a chunk out of the source file. *)    
-
-  let chunk ofs1 ofs2 =
-    let contents = Error.get_file_contents() in
-    let len = ofs2 - ofs1 in
-    String.sub contents ofs1 len
-
-  (* Extracts a chunk out of the source file, delimited by
-     one position and extending to the end of the file. *)
-
-  let echunk ofs1 =
-    let contents = Error.get_file_contents() in
-    let len = String.length contents - ofs1 in
-    String.sub contents ofs1 len
-
-  (* Overwrites an old character with a new one at a specified
-     offset in a string. *)
-
-  let overwrite content offset c1 c2 =
-    assert (content.[offset] = c1);
-    content.[offset] <- c2
-
-  (* Creates a stretch. *)
-
-  let mk_stretch parenthesize pos1 pos2 pkeywords = 
-    let ofs1 = pos1.pos_cnum
-    and ofs2 = pos2.pos_cnum in
-    let raw_content = chunk ofs1 ofs2 in
-    let content = String.copy raw_content in
-    (* Turn our keywords into valid Objective Caml identifiers
-       by replacing '$', '(', and ')' with '_'. Bloody. *)
-    List.iter (function { value = keyword; position = pos } ->
-      let pos = start_of_position pos in
-      let ofs = pos.pos_cnum - ofs1 in
-      overwrite content ofs '$' '_';
-      match keyword with
-      | Keyword.Dollar _
-      | Keyword.Position (Keyword.Left, _, _)
-      | Keyword.PreviousError ->
-         ()
-      | Keyword.SyntaxError ->
-         (* $syntaxerror is replaced with
-            (raise _eRR) *)
-          let source = "(raise _eRR)" in
-          String.blit source 0 content ofs (String.length source)
-      | Keyword.Position (subject, where, _) ->
-         let ofslpar =
-           match where with
-           | Keyword.WhereStart ->
-               ofs + 9
-           | Keyword.WhereEnd ->
-               ofs + 7
-         in
-         overwrite content ofslpar '(' '_';
-         match subject with
-         | Keyword.Left ->
-             assert false
-         | Keyword.RightDollar i ->
-             overwrite content (ofslpar + 1) '$' '_';
-             overwrite content (ofslpar + 2 + String.length (string_of_int i)) ')' '_'
-         | Keyword.RightNamed id ->
-             overwrite content (ofslpar + 1 + String.length id) ')' '_'
-    ) pkeywords;
-    (* Add whitespace so that the column numbers match those of the source file.
-       If requested, add parentheses so that the semantic action can be inserted
-       into other code without ambiguity. *)
-    let content =
-      if parenthesize then
-         (String.make (pos1.pos_cnum - pos1.pos_bol - 1) ' ') ^ "(" ^ content ^ ")"
-      else
-       (String.make (pos1.pos_cnum - pos1.pos_bol) ' ') ^ content
-    in
-    {
-      Stretch.stretch_filename = Error.get_filename();
-      Stretch.stretch_linenum = pos1.pos_lnum;
-      Stretch.stretch_linecount = pos2.pos_lnum - pos1.pos_lnum;
-      Stretch.stretch_content = content;
-      Stretch.stretch_raw_content = raw_content;
-      Stretch.stretch_keywords = pkeywords
-    } 
-
-  (* Translates the family of position-related keywords to abstract
-     syntax. *)
-
-  let mk_keyword lexbuf w f n id =
-    let where =
-      match w with
-      | Some _ ->
-         Keyword.WhereStart
-      | None ->
-         Keyword.WhereEnd
-    and flavor =
-      match f with
-      | Some _ ->
-         Keyword.FlavorPosition
-      | None ->
-         Keyword.FlavorOffset
-    and subject =
-      match n, id with
-      | Some n, None ->
-         Keyword.RightDollar (int_of_string n)
-      | None, Some id ->
-         Keyword.RightNamed id
-      | None, None ->
-         Keyword.Left
-      | Some _, Some _ ->
-          assert false
-    in
-    let keyword = Keyword.Position (subject, where, flavor) in
-    with_cpos lexbuf keyword
-
-  (* Objective Caml's reserved words. *)
-
-  let reserved =
-    let table = Hashtbl.create 149 in
-    List.iter (fun word -> Hashtbl.add table word ()) [
-      "and";
-      "as";
-      "assert";
-      "begin";
-      "class";
-      "constraint";
-      "do";
-      "done";
-      "downto";
-      "else";
-      "end";
-      "exception";
-      "external";
-      "false";
-      "for";
-      "fun";
-      "function";
-      "functor";
-      "if";
-      "in";
-      "include";
-      "inherit";
-      "initializer";
-      "lazy";
-      "let";
-      "match";
-      "method";
-      "module";
-      "mutable";
-      "new";
-      "object";
-      "of";
-      "open";
-      "or";
-      "parser";
-      "private";
-      "rec";
-      "sig";
-      "struct";
-      "then";
-      "to";
-      "true";
-      "try";
-      "type";
-      "val";
-      "virtual";
-      "when";
-      "while";
-      "with";
-      "mod";
-      "land";
-      "lor";
-      "lxor";
-      "lsl";
-      "lsr";
-      "asr";
-    ];
-    table
-
-  (* A short-hand. *)
-
-  let error1 pos msg =
-    Error.error (Positions.one pos) msg
-
-}
-
-let newline = ('\010' | '\013' | "\013\010")
-
-let whitespace = [ ' ' '\t' ';' ]
-
-let lowercase = ['a'-'z' '\223'-'\246' '\248'-'\255' '_']
-
-let uppercase = ['A'-'Z' '\192'-'\214' '\216'-'\222']
-
-let identchar = ['A'-'Z' 'a'-'z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255' '0'-'9'] (* '\'' forbidden *)
-
-let poskeyword = 
-  '$'
-  (("start" as w) | "end")
-  (("pos" as f) | "ofs")
-  ( '(' ( '$' (['0'-'9']+ as n) | ((lowercase identchar*) as id)) ')')?
-
-let previouserror =
-  "$previouserror"
-
-let syntaxerror =
-  "$syntaxerror"
-
-rule main = parse
-| "%token"
-    { TOKEN }
-| "%type"
-    { TYPE }
-| "%left"
-    { LEFT }
-| "%right"
-    { RIGHT }
-| "%nonassoc"
-    { NONASSOC }
-| "%start"
-    { START }
-| "%prec"
-    { PREC }
-| "%public"
-    { PUBLIC }
-| "%parameter"
-    { PARAMETER }
-| "%inline"
-    { INLINE }
-| "%%"
-    { let ofs = lexeme_end lexbuf in
-      PERCENTPERCENT (lazy (echunk ofs)) }
-| ":"
-    { COLON }
-| ","
-    { COMMA }
-| "="
-    { EQUAL }
-| "("
-    { LPAREN }
-| ")"
-    { RPAREN }
-| "|"
-    { BAR }
-| "?"
-    { QUESTION }
-| "*"
-    { STAR }
-| "+"
-    { PLUS }
-| (lowercase identchar *) as id
-    { if Hashtbl.mem reserved id then
-       Error.errorp
-         (Positions.with_poss (lexeme_start_p lexbuf) (lexeme_end_p lexbuf) ())
-         "this is an Objective Caml reserved word."
-      else
-       LID (with_pos (cpos lexbuf) id)
-    }
-| (uppercase identchar *) as id
-    { UID (with_pos (cpos lexbuf) id) }
-| "//" [^ '\010' '\013']* newline (* skip C++ style comment *)
-| newline
-    { update_loc lexbuf; main lexbuf }
-| whitespace+
-    { main lexbuf }
-| "/*"
-    { comment (lexeme_start_p lexbuf) lexbuf; main lexbuf }
-| "(*"
-    { ocamlcomment (lexeme_start_p lexbuf) lexbuf; main lexbuf }
-| "<"
-    { savestart lexbuf (ocamltype (lexeme_end_p lexbuf)) }
-| "%{"
-    { savestart lexbuf (fun lexbuf ->
-        let openingpos = lexeme_end_p lexbuf in
-        let closingpos, _ = action true openingpos [] lexbuf in
-       (* TEMPORARY if keyword list nonempty, issue an error *)
-        HEADER (mk_stretch false openingpos closingpos [])
-      ) }
-| "{"
-    { savestart lexbuf (fun lexbuf ->
-        let openingpos = lexeme_end_p lexbuf in
-        let closingpos, pkeywords = action false openingpos [] lexbuf in
-       let stretch = mk_stretch true openingpos closingpos pkeywords in
-        ACTION (Action.from_stretch stretch)
-      ) }
-(* TEMPORARY comprendre si la différence entre header et action est bien
-             justifiée et si certains choix comme le parenthésage et le
-             traitement des keywords ne pourraient pas Ãªtre effectués
-             plus loin. *)
-| eof
-    { EOF }
-| _
-    { error1 (lexeme_start_p lexbuf) "unexpected character(s)." }
-
-(* Skip C style comments. *)
-
-and comment openingpos = parse
-| newline
-    { update_loc lexbuf; comment openingpos lexbuf }
-| "*/"
-    { () }
-| eof
-    { error1 openingpos "unterminated comment." }
-| _
-    { comment openingpos lexbuf }
-
-(* Collect an O'Caml type delimited by angle brackets. Angle brackets can
-   appear as part of O'Caml function types. They might also appear as part
-   of O'Caml variant types, but we ignore that possibility for the moment. *)
-
-and ocamltype openingpos = parse
-| "->"
-    { ocamltype openingpos lexbuf }
-| '>'
-    { OCAMLTYPE (Stretch.Declared (mk_stretch true openingpos (lexeme_start_p lexbuf) [])) }
-| "(*"
-    { ocamlcomment (lexeme_start_p lexbuf) lexbuf; ocamltype openingpos lexbuf }
-| newline
-    { update_loc lexbuf; ocamltype openingpos lexbuf }
-| eof
-    { error1 openingpos "unterminated Objective Caml type." }
-| _
-    { ocamltype openingpos lexbuf }
-
-(* Collect O'Caml code delimited by curly brackets. Any occurrences of
-   the special ``$i'' identifiers are recorded in the accumulating
-   parameter [pkeywords]. Nested curly brackets must be properly
-   counted. Nested parentheses are also kept track of, so as to better
-   report errors when they are not balanced. *)
-
-and action percent openingpos pkeywords = parse
-| '{'
-    { let _, pkeywords = action false (lexeme_end_p lexbuf) pkeywords lexbuf in
-      action percent openingpos pkeywords lexbuf }
-| ("}" | "%}") as delimiter
-    { match percent, delimiter with
-      | true, "%}"
-      | false, "}" ->
-         (* This is the delimiter we were instructed to look for. *)
-         lexeme_start_p lexbuf, pkeywords
-      | _, _ ->
-         (* This is not it. *)
-         error1 openingpos "unbalanced opening brace."
-    }
-| '('
-    { let _, pkeywords = parentheses (lexeme_end_p lexbuf) pkeywords lexbuf in
-      action percent openingpos pkeywords lexbuf }
-| '$' (['0'-'9']+ as n)
-    { let pkeyword = with_cpos lexbuf (Keyword.Dollar (int_of_string n)) in
-      action percent openingpos (pkeyword :: pkeywords) lexbuf }
-| poskeyword
-    { let pkeyword = mk_keyword lexbuf w f n id in
-      action percent openingpos (pkeyword :: pkeywords) lexbuf }
-| previouserror
-    { let pkeyword = with_cpos lexbuf Keyword.PreviousError in
-      action percent openingpos (pkeyword :: pkeywords) lexbuf }
-| syntaxerror
-    { let pkeyword = with_cpos lexbuf Keyword.SyntaxError in
-      action percent openingpos (pkeyword :: pkeywords) lexbuf }
-| '"'
-    { string (lexeme_start_p lexbuf) lexbuf;
-      action percent openingpos pkeywords lexbuf }
-| "'"
-    { char lexbuf;
-      action percent openingpos pkeywords lexbuf }
-| "(*"
-    { ocamlcomment (lexeme_start_p lexbuf) lexbuf;
-      action percent openingpos pkeywords lexbuf }
-| newline
-    { update_loc lexbuf;
-      action percent openingpos pkeywords lexbuf }
-| ')'
-| eof
-    { error1 openingpos "unbalanced opening brace." }
-| _
-    { action percent openingpos pkeywords lexbuf }
-
-and parentheses openingpos pkeywords = parse
-| '('
-    { let _, pkeywords = parentheses (lexeme_end_p lexbuf) pkeywords lexbuf in
-      parentheses openingpos pkeywords lexbuf }
-| ')'
-    { lexeme_start_p lexbuf, pkeywords }
-| '{'
-    { let _, pkeywords = action false (lexeme_end_p lexbuf) pkeywords lexbuf in
-      parentheses openingpos pkeywords lexbuf }
-| '$' (['0'-'9']+ as n)
-    { let pkeyword = with_cpos lexbuf (Keyword.Dollar (int_of_string n)) in
-      parentheses openingpos (pkeyword :: pkeywords) lexbuf }
-| poskeyword
-    { let pkeyword = mk_keyword lexbuf w f n id in
-      parentheses openingpos (pkeyword :: pkeywords) lexbuf }
-| previouserror
-    { let pkeyword = with_cpos lexbuf Keyword.PreviousError in
-      parentheses openingpos (pkeyword :: pkeywords) lexbuf }
-| syntaxerror
-    { let pkeyword = with_cpos lexbuf Keyword.SyntaxError in
-      parentheses openingpos (pkeyword :: pkeywords) lexbuf }
-| '"'
-    { string (lexeme_start_p lexbuf) lexbuf; parentheses openingpos pkeywords lexbuf }
-| "'"
-    { char lexbuf; parentheses openingpos pkeywords lexbuf }
-| "(*"
-    { ocamlcomment (lexeme_start_p lexbuf) lexbuf; parentheses openingpos pkeywords lexbuf }
-| newline
-    { update_loc lexbuf; parentheses openingpos pkeywords lexbuf }
-| '}'
-| eof
-    { error1 openingpos "unbalanced opening parenthesis." }
-| _
-    { parentheses openingpos pkeywords lexbuf }
-
-(* Skip O'Caml comments. Comments can be nested and can contain
-   strings or characters, which must be correctly analyzed. (A string
-   could contain begin-of-comment or end-of-comment sequences, which
-   must be ignored; a character could contain a begin-of-string
-   sequence.) *)
-
-and ocamlcomment openingpos = parse
-| "*)"
-    { () }
-| "(*"
-    { ocamlcomment (lexeme_start_p lexbuf) lexbuf; ocamlcomment openingpos lexbuf }
-| '"'
-    { string (lexeme_start_p lexbuf) lexbuf; ocamlcomment openingpos lexbuf }
-| "'"
-    { char lexbuf; ocamlcomment openingpos lexbuf }
-| newline
-    { update_loc lexbuf; ocamlcomment openingpos lexbuf }
-| eof
-    { error1 openingpos "unterminated Objective Caml comment." }
-| _
-    { ocamlcomment openingpos lexbuf }
-
-(* Skip O'Caml strings. *)
-
-and string openingpos = parse
-| '"' 
-   { () }
-| '\\' newline
-| newline
-   { update_loc lexbuf; string openingpos lexbuf }
-| '\\' _
-   (* Upon finding a backslash, skip the character that follows,
-      unless it is a newline. Pretty crude, but should work. *)
-   { string openingpos lexbuf }
-| eof 
-   { error1 openingpos "unterminated Objective Caml string." }
-| _
-   { string openingpos lexbuf }
-
-(* Skip O'Caml characters. A lone quote character is legal inside
-   a comment, so if we don't recognize the matching closing quote,
-   we simply abandon. *)
-
-and char = parse
-| '\\'? newline "'"
-   { update_loc lexbuf }
-| [^ '\\' '\''] "'"
-| '\\' _ "'"
-| '\\' ['0'-'9'] ['0'-'9'] ['0'-'9'] "'"
-| '\\' 'x' ['0'-'9' 'a'-'f' 'A'-'F'] ['0'-'9' 'a'-'f' 'A'-'F'] "'"
-| ""
-   { () } 
-
diff --git a/bundles/menhirLib/menhir-20120123/src/lexmli.mll b/bundles/menhirLib/menhir-20120123/src/lexmli.mll
deleted file mode 100644 (file)
index e40e143..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This code analyzes the output of [ocamlc -i] and returns a list
-   of identifiers together with their types. Types are represented
-   by offsets in the source string. *)
-
-{
-
-  let fail () =
-    Error.error [] "failed to make sense of ocamlc's output."
-
-}
-
-let whitespace = [ ' ' '\t' '\n' '\r' ]
-
-let lowercase = ['a'-'z' '\223'-'\246' '\248'-'\255' '_']
-
-let identchar = ['A'-'Z' 'a'-'z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255' '0'-'9'] (* '\'' forbidden *)
-
-(* Read a list of bindings. We start immediately after a [val]
-   keyword, so we expect either an end marker, or an identifier,
-   followed by a colon, followed by a type, followed by another list
-   of bindings. In the latter case, we recognize the identifier and
-   the colon, record where the type begins, and pass control to
-   [type_then_bindings]. *)
-
-rule bindings env = parse
-| "menhir_end_marker : int"
-    { env }
-| whitespace* ((lowercase identchar*) as id) whitespace* ':' whitespace*
-    { type_then_bindings env id (Lexing.lexeme_end lexbuf) lexbuf }
-| _
-| eof
-    { fail() }
-
-(* Read a type followed by a list of bindings. *)
-
-and type_then_bindings env id openingofs = parse
-| whitespace+ "val" whitespace
-    { let closingofs = Lexing.lexeme_start lexbuf in
-      bindings ((id, openingofs, closingofs) :: env) lexbuf }
-| _
-    { type_then_bindings env id openingofs lexbuf }
-| eof
-    { fail() }
-
-(* Skip up to the first [val] keyword that follows the begin marker,
-   and start from there. *)
-
-and main = parse
-| _* "val menhir_begin_marker : int" whitespace+ "val" whitespace+
-    { bindings [] lexbuf }
-| _
-| eof
-    { fail() }
-
diff --git a/bundles/menhirLib/menhir-20120123/src/lineCount.mll b/bundles/menhirLib/menhir-20120123/src/lineCount.mll
deleted file mode 100644 (file)
index c20388d..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This simple function counts the number of newline characters
-   in a string. *)
-
-let newline = ('\010' | '\013' | "\013\010")
-
-let ordinary = [^ '\010' '\013']+
-
-rule count n = parse
-| eof
-    { n }
-| newline
-    { count (n + 1) lexbuf }
-| ordinary
-    { count n lexbuf }
-
diff --git a/bundles/menhirLib/menhir-20120123/src/listMonad.ml b/bundles/menhirLib/menhir-20120123/src/listMonad.ml
deleted file mode 100644 (file)
index e914c2d..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-type 'a m = 'a list
-
-let return x = 
-  [ x ] 
-
-let bind l f = 
-  List.flatten (List.map f l)
-
-let ( >>= ) l f = 
-  bind l f
-
-(* 
-   1. (return x) >>= f == f x
-
-   bind [ x ] f 
-   = List.flatten (List.map f [ x ]) 
-   = f x 
-
-   2. m >>= return == m
-
-   bind l return 
-   = List.flatten (List.map (fun x -> [ x ]) (x1::x2::..::xn))
-   = List.flatten ([x1]::...::[xn]) 
-   = x1::...::xn
-   = l
-
-   3. (m >>= f) >>= g == m >>= (\x -> f x >>= g)
-   
-   bind (bind l f) g
-   = List.flatten (List.map g (List.flatten (List.map f (x1::...::xn))))
-   = List.flatten (List.map g (f x1 :: f x2 :: ... :: f xn))
-   = List.flatten (List.map g ([fx1_1; fx1_2 ... ] :: [fx2_1; ... ] :: ...))
-   = List.flatten ([ g fx1_1; g fx_1_2 ... ] :: [ g fx_2_1; ... ] ...)
-   = List.flatten (List.map (fun x -> List.flatten (List.map g (f x))) l)
-   = bind l (fun x -> bind (f x) g)
-
-*)
-
diff --git a/bundles/menhirLib/menhir-20120123/src/listMonad.mli b/bundles/menhirLib/menhir-20120123/src/listMonad.mli
deleted file mode 100644 (file)
index 10d567e..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: listMonad.mli,v 1.2 2005/12/01 16:20:06 regisgia Exp $ *)
-
-(** Monad type which represents a list of results. *)
-type 'a m = 'a list
-
-(** [bind x f] applies [f] to a list of results, returning
-    a list of results. *)
-val bind: 'a m -> ('a -> 'b m) -> 'b m
-val ( >>= ) : 'a m -> ('a -> 'b m) -> 'b m
-
-(** [return x] is the left and right unit of [bind]. *)
-val return: 'a -> 'a m
-
-
diff --git a/bundles/menhirLib/menhir-20120123/src/lookahead.mli b/bundles/menhirLib/menhir-20120123/src/lookahead.mli
deleted file mode 100644 (file)
index 77ac869..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* These are the operations required of lookahead sets during
-   a closure computation. This signature is exploited by the
-   functor [Item.Closure]. *)
-
-module type S = sig
-
-  (* The type of lookahead sets. *)
-  type t
-
-  (* The empty lookahead set. Redundant with the following, but
-     convenient. *)
-  val empty: t
-
-  (* A concrete, constant set of terminal symbols. *)
-  val constant: Grammar.TerminalSet.t -> t
-
-  (* [union s1 s2] returns the union of [s1] and [s2].  *)
-  val union: t -> t -> t
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/lr0.ml b/bundles/menhirLib/menhir-20120123/src/lr0.ml
deleted file mode 100644 (file)
index c3b53ce..0000000
+++ /dev/null
@@ -1,562 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-module InfiniteArray =
-  MenhirLib.InfiniteArray
-
-(* ------------------------------------------------------------------------ *)
-(* Symbolic lookahead information. *)
-
-(* A symbolic lookahead set consists of an actual concrete set of
-   terminal symbols and of a number of set variables. Set variables as
-   encoded as integers. *)
-
-module SymbolicLookahead = struct
-
-  type t =
-    TerminalSet.t * CompressedBitSet.t
-
-  let constant toks =
-    (toks, CompressedBitSet.empty)
-
-  let empty =
-    constant TerminalSet.empty
-
-  let union (toks1, vars1) ((toks2, vars2) as s2) =
-    let toks = TerminalSet.union toks1 toks2
-    and vars = CompressedBitSet.union vars1 vars2 in
-    if toks2 == toks && vars2 == vars then
-      s2
-    else   
-      (toks, vars)
-
-  let variable (var : int) : t =
-    (TerminalSet.empty, CompressedBitSet.singleton var)
-
-  let project (toks, vars) =
-    assert (CompressedBitSet.is_empty vars);
-    toks
-
-end
-
-(* We will perform closure operations over symbolic lookahead sets.
-   This allows us to later represent LR(1) states as pairs of an
-   LR(0) node number and an array of concrete lookahead sets. *)
-
-module SymbolicClosure =
-  Item.Closure(SymbolicLookahead)
-
-(* Closure operations over concrete lookahead sets are also used (when
-   explaining conflicts). One could take another instance of the
-   functor. The approach below is somewhat less elegant and makes each
-   call to [closure] somewhat slower, but saves the cost of
-   instantiating the functor again -- which is linear in the size of
-   the grammar. *)
-
-type concretelr1state =
-    TerminalSet.t Item.Map.t
-
-let closure (state : concretelr1state) : concretelr1state =
-   Item.Map.map SymbolicLookahead.project
-     (SymbolicClosure.closure
-       (Item.Map.map SymbolicLookahead.constant state))
-
-(* ------------------------------------------------------------------------ *)
-(* Finding which non-epsilon transitions leave a set of items. This
-   code is parametric in the nature of lookahead sets. *)
-
-let transitions (state : 'a Item.Map.t) : 'a Item.Map.t SymbolMap.t =
-
-  Item.Map.fold (fun item toks transitions ->
-    match Item.classify item with
-    | Item.Shift (symbol, item') ->
-       let items : 'a Item.Map.t =
-         try
-           SymbolMap.find symbol transitions
-         with Not_found ->
-           Item.Map.empty
-       in
-       SymbolMap.add symbol (Item.Map.add item' toks items) transitions
-    | Item.Reduce _ ->
-       transitions
-  ) state SymbolMap.empty
-
-(* ------------------------------------------------------------------------ *)
-(* Determining the reduction opportunities at a (closed) state. They
-   are represented as a list of pairs of a lookahead set and a
-   production index. This code is again parametric in the nature of
-   lookahead sets. *)
-
-let reductions (state : 'a Item.Map.t) : ('a * Production.index) list =
-  Item.Map.fold (fun item toks accu ->
-    match Item.classify item with
-    | Item.Reduce prod ->
-       (toks, prod) :: accu
-    | Item.Shift _ ->
-       accu
-  ) state []
-
-(* ------------------------------------------------------------------------ *)
-(* Construction of the the LR(0) automaton. *)
-
-(* Nodes are numbered sequentially. *)
-
-type node =
-    int
-
-(* A symbolic transition is a pair of the target state number and an
-   array of symbolic lookahead sets. The variables in these sets are
-   numbered in [0,g) where g is the number of items in the source
-   LR(0) state. Items are numbered in the order of presentation by
-   [Item.Set.fold]. *)
-
-type symbolic_transition_target =
-    node * SymbolicLookahead.t array
-
-(* The automaton is represented by (growing) arrays of states (sets of
-   items), symbolic transition information, and symbolic reduction
-   information, indexed by node numbers. Conversely, a hash table maps
-   states (sets of items) to node numbers. *)
-
-let n =
-  ref 0
-
-let states : Item.Set.t InfiniteArray.t =
-  InfiniteArray.make Item.Set.empty
-
-let _transitions : symbolic_transition_target SymbolMap.t InfiniteArray.t =
-  InfiniteArray.make SymbolMap.empty
-
-let _reductions : (SymbolicLookahead.t * Production.index) list InfiniteArray.t =
-  InfiniteArray.make []
-
-let map : (Item.Set.t, node) Hashtbl.t =
-  Hashtbl.create 50021
-
-(* The automaton is built depth-first. *)
-
-let rec explore (state : Item.Set.t) : node =
-
-  (* Find out whether this state was already explored. *)
-
-  try
-    Hashtbl.find map state
-  with Not_found ->
-
-    (* If not, create a new node. *)
-
-    let k = !n in
-    n := k + 1;
-    InfiniteArray.set states k state;
-    Hashtbl.add map state k;
-
-    (* Build a symbolic version of the current state, where each item
-       is associated with a distinct lookahead set variable, numbered
-       consecutively. *)
-
-    let (_ : int), (symbolic_state : SymbolicClosure.state) =
-      Item.Set.fold (fun item (i, symbolic_state) ->
-       i+1, Item.Map.add item (SymbolicLookahead.variable i) symbolic_state
-      ) state (0, Item.Map.empty) in
-
-    (* Compute the symbolic closure. *)
-
-    let closure = SymbolicClosure.closure symbolic_state in
-
-    (* Compute symbolic information about reductions. *)
-
-    InfiniteArray.set _reductions k (reductions closure);
-
-    (* Compute symbolic information about the transitions, and, by
-       dropping the symbolic lookahead information, explore the
-       transitions to further LR(0) states. *)
-
-    InfiniteArray.set _transitions k (SymbolMap.map (fun symbolic_state ->
-      let (k : node) = explore (Item.Map.domain symbolic_state) in
-      let lookahead : SymbolicLookahead.t array =
-       Array.create (Item.Map.cardinal symbolic_state) SymbolicLookahead.empty in
-      let (_ : int) = Item.Map.fold (fun _ s i ->
-       lookahead.(i) <- s;
-       i+1
-      ) symbolic_state 0 in
-      ((k, lookahead) : symbolic_transition_target)
-    ) (transitions closure));
-
-    k
-
-(* Creating a start state out of a start production. It contains a
-   single item, consisting of the start production, at position 0. *)
-
-let start prod : Item.Set.t =
-   Item.Set.singleton (Item.import (prod, 0))
-
-(* This starts the construction of the automaton and records the
-   entry nodes in an array. *)
-
-let entry : node ProductionMap.t =
-  ProductionMap.start (fun prod ->
-    explore (start prod)
-  )
-
-let () =
-  Hashtbl.clear map
-
-let n =
-  !n
-
-let () =
-  Error.logA 1 (fun f -> Printf.fprintf f "Built an LR(0) automaton with %d states.\n" n);
-  Time.tick "Construction of the LR(0) automaton"
-
-(* ------------------------------------------------------------------------ *)
-(* Accessors. *)
-
-let items node : Item.Set.t =
-  InfiniteArray.get states node
-
-(* ------------------------------------------------------------------------ *)
-(* Help for building the LR(1) automaton. *)
-
-(* An LR(1) state is represented as a pair of an LR(0) state number
-   and an array of concrete lookahead sets (whose length depends on
-   the LR(0) state). *)
-
-type lr1state =
-    node * TerminalSet.t array
-
-(* An encoded LR(1) state can be turned into a concrete representation,
-   that is, a mapping of items to concrete lookahead sets. *)
-
-let export (k, toksr) =
-  let (_ : int), items = Item.Set.fold (fun item (i, items) ->
-    i+1, Item.Map.add item toksr.(i) items
-  ) (InfiniteArray.get states k) (0, Item.Map.empty) in
-  items
-
-(* Displaying a concrete state. *)
-
-let print_concrete (state : concretelr1state) =
-  let buffer = Buffer.create 1024 in
-  Item.Map.iter (fun item toks ->
-    Printf.bprintf buffer "%s[ %s ]\n" (Item.print item) (TerminalSet.print toks)
-  ) state;
-  Buffer.contents buffer
-
-(* Displaying a state. By default, only the kernel is displayed, not
-   the closure. *)
-
-let print state =
-  print_concrete (export state)
-
-let print_closure state =
-  print_concrete (closure (export state))
-
-(* The core of an LR(1) state is the underlying LR(0) state. *)
-
-let core (k, _) =
-  k
-
-(* A sanity check. *)
-
-let well_formed (k, toksr) =
-  Array.length toksr = Item.Set.cardinal (InfiniteArray.get states k)
-
-(* An LR(1) start state is the combination of an LR(0) start state
-   (which consists of a single item) with a singleton lookahead set
-   that consists of the end-of-file pseudo-token. *)
-
-let start k =
-  let state = (k, [| TerminalSet.singleton Terminal.sharp |]) in
-  assert (well_formed state);
-  state
-
-(* Interpreting a symbolic lookahead set with respect to a source
-   state. The variables in the symbolic lookahead set (which are
-   integers) are interpreted as indices into the state's array of
-   concrete lookahead sets. The result is a concrete lookahead set. *)
-
-let interpret
-    ((_, toksr) as state : lr1state)
-    ((toks, vars) : SymbolicLookahead.t)
-    : TerminalSet.t =
-
-  assert (well_formed state);
-  CompressedBitSet.fold (fun var toks ->
-    assert (var >= 0 && var < Array.length toksr);
-    TerminalSet.union toksr.(var) toks
-  ) vars toks
-
-(* Out of an LR(1) state, one produces information about reductions
-   and transitions. This is done in an efficient way by interpreting
-   the precomputed symbolic information with respect to that state. *)
-
-let reductions
-    ((k, _) as state : lr1state)
-    : (TerminalSet.t * Production.index) list =
-
-  List.map (fun (s, prod) ->
-    interpret state s, prod
-  ) (InfiniteArray.get _reductions k)
-
-let transitions
-    ((k, _) as state : lr1state)
-    : lr1state SymbolMap.t =
-
-  SymbolMap.map (fun ((k, sr) : symbolic_transition_target) ->
-    ((k, Array.map (interpret state) sr) : lr1state)
-  ) (InfiniteArray.get _transitions k)
-
-let outgoing_symbols
-    (k : node)
-    : Symbol.t list =
-
-  SymbolMap.domain (InfiniteArray.get _transitions k)
-
-let transition
-    symbol
-    ((k, _) as state : lr1state)
-    : lr1state =
-
-  let ((k, sr) : symbolic_transition_target) =
-    try
-      SymbolMap.find symbol (InfiniteArray.get _transitions k)
-    with Not_found ->
-      assert false (* no transition along this symbol *)
-  in
-  (k, Array.map (interpret state) sr)
-
-(* Equality of states. *)
-
-let equal ((k1, toksr1) as state1) ((k2, toksr2) as state2) =
-  assert (k1 = k2 && well_formed state1 && well_formed state2);
-  let rec loop i =
-    if i = 0 then
-      true
-    else
-      let i = i - 1 in
-      (TerminalSet.equal toksr1.(i) toksr2.(i)) && (loop i)
-  in
-  loop (Array.length toksr1)
-
-(* Subsumption between states. *)
-
-let subsume ((k1, toksr1) as state1) ((k2, toksr2) as state2) =
-  assert (k1 = k2 && well_formed state1 && well_formed state2);
-  let rec loop i =
-    if i = 0 then
-      true
-    else
-      let i = i - 1 in
-      (TerminalSet.subset toksr1.(i) toksr2.(i)) && (loop i)
-  in
-  loop (Array.length toksr1)
-
-(* This function determines whether two (core-equivalent) states are
-   compatible, according to a criterion that is close to Pager's weak
-   compatibility criterion.
-
-   Pager's criterion guarantees that if a merged state has a potential
-   conflict at [(i, j)] -- that is, some token [t] appears within the
-   lookahead sets of both item [i] and item [j] -- then there exists a
-   state in the canonical automaton that also has a potential conflict
-   at [(i, j)] -- that is, some token [u] appears within the lookahead
-   sets of both item [i] and item [j]. Note that [t] and [u] can be
-   distinct.
-
-   Pager has shown that his weak compatibility criterion is stable,
-   that is, preserved by transitions and closure. This means that, if
-   two states can be merged, then so can their successors. This is
-   important, because merging two states means committing to merging
-   their successors, even though we have not even built these
-   successors yet.
-
-   The criterion used here is a slightly more restrictive version of
-   Pager's criterion, which guarantees equality of the tokens [t] and
-   [u]. This is done essentially by applying Pager's original
-   criterion on a token-wise basis. Pager's original criterion states
-   that two states can be merged if the new state has no conflict or
-   one of the original states has a conflict. Our more restrictive
-   criterion states that two states can be merged if, for every token
-   [t], the new state has no conflict at [t] or one of the original
-   states has a conflict at [t].
-
-   This modified criterion is also stable. My experiments show that it
-   is almost as effective in practice: out of more than a hundred
-   real-world sample grammars, only one automaton was affected, and
-   only one extra state appeared as a result of using the modified
-   criterion. Its advantage is to potentially make conflict
-   explanations easier: if there appears to be a conflict at [t], then
-   some conflict at [t] can be explained. This was not true when using
-   Pager's original criterion. *)
-
-let compatible (k1, toksr1) (k2, toksr2) =
-  assert (k1 = k2);
-  let n = Array.length toksr1 in
-  (* Two states are compatible if and only if they are compatible
-     at every pair (i, j), where i and j are distinct. *)
-  let rec loopi i =
-    if i = n then
-      true
-    else
-      let toksr1i = toksr1.(i)
-      and toksr2i = toksr2.(i) in
-      let rec loopj j =
-       if j = i then
-         true
-       else
-         let toksr1j = toksr1.(j)
-         and toksr2j = toksr2.(j) in
-
-         (* The two states are compatible at (i, j) if every conflict
-            token in the merged state already was a conflict token in
-            one of the two original states. This could be written as
-            follows:
-
-            TerminalSet.subset
-             (TerminalSet.inter (TerminalSet.union toksr1i toksr2i) (TerminalSet.union toksr1j toksr2j))
-             (TerminalSet.union (TerminalSet.inter toksr1i toksr1j) (TerminalSet.inter toksr2i toksr2j))
-
-            but is easily seen (on paper) to be equivalent to:
-
-          *)
-
-            TerminalSet.subset
-              (TerminalSet.inter toksr2i toksr1j)
-              (TerminalSet.union toksr1i toksr2j)
-         &&
-            TerminalSet.subset
-              (TerminalSet.inter toksr1i toksr2j)
-              (TerminalSet.union toksr2i toksr1j)
-         &&
-            loopj (j+1)
-      in
-      loopj 0 && loopi (i+1)
-  in
-  loopi 0
-
-(* This function determines whether two (core-equivalent) states can
-   be merged without creating an end-of-stream conflict, now or in the
-   future.
-
-   The rule is, if an item appears in one state with the singleton "#"
-   as its lookahead set, then its lookahead set in the other state
-   must contain "#".
-
-   So, either the second lookahead set is also the singleton "#", and
-   no end-of-stream conflict exists, or it is larger, and the second
-   state already contains an end-of-stream conflict.
-
-   Put another way, we do not want to merge two lookahead sets when one
-   contains "#" alone and the other does not contain "#".
-
-   I invented this rule to complement Pager's criterion. I believe,
-   but I am not 100% sure, that it does indeed prevent end-of-stream
-   conflicts and that it is stable.
-
-   Thanks to Sébastien Hinderer for reporting the bug caused by the
-   absence of this extra criterion. *)
-
-let eos_compatible  (k1, toksr1) (k2, toksr2) =
-  assert (k1 = k2);
-  let n = Array.length toksr1 in
-  let rec loop i =
-    if i = n then
-      true
-    else
-      let toks1 = toksr1.(i)
-      and toks2 = toksr2.(i) in
-      begin
-       if TerminalSet.mem Terminal.sharp toks1 && TerminalSet.cardinal toks1 = 1 then
-         (* "#" is alone in one set: it must be a member of the other set. *)
-         TerminalSet.mem Terminal.sharp toks2
-       else if TerminalSet.mem Terminal.sharp toks2 && TerminalSet.cardinal toks2 = 1 then
-         (* Symmetric condition. *)
-         TerminalSet.mem Terminal.sharp toks1
-       else
-         true
-      end
-      && loop (i+1)
-  in
-  loop 0
-
-(* This function determines whether two (core-equivalent) states can
-   be merged without creating spurious reductions on the [error]
-   token.
-
-   The rule is, we merge two states only if they agree on which
-   reductions are permitted on the [error] token.
-
-   Without this restriction, we might end up in a situation where we
-   decide to introduce an [error] token into the input stream and
-   perform a reduction, whereas a canonical LR(1) automaton,
-   confronted with the same input string, would fail normally -- that
-   is, it would introduce an [error] token into the input stream, but
-   it would not be able to perform a reduction right away: the current
-   state would be discarded.
-
-   In the interest of more accurate (or sane, or predictable) error
-   handling, I decided to introduce this restriction as of 20110124.
-   This will cause an increase in the size of automata for grammars
-   that use the [error] token. It might actually make the [error]
-   token somewhat easier to use.
-
-   Note that two sets can be in the subsumption relation and still
-   be error-incompatible. Error-compatibility requires equality of
-   the lookahead sets, restricted to [error].
-
-   Thanks to Didier Rémy for reporting a bug caused by the absence
-   of this extra criterion. *)
-
-let error_compatible  (k1, toksr1) (k2, toksr2) =
-  assert (k1 = k2);
-  let n = Array.length toksr1 in
-  let rec loop i =
-    if i = n then
-      true
-    else
-      let toks1 = toksr1.(i)
-      and toks2 = toksr2.(i) in
-      begin
-       if TerminalSet.mem Terminal.error toks1 then
-         (* [error] is a member of one set: it must be a member of the other set. *)
-         TerminalSet.mem Terminal.error toks2
-       else if TerminalSet.mem Terminal.error toks2 then
-         (* Symmetric condition. *)
-         TerminalSet.mem Terminal.error toks1
-       else
-         true
-      end
-      && loop (i+1)
-  in
-  loop 0
-
-(* Union of two states. The two states must have the same core. The
-   new state is obtained by pointwise union of the lookahead sets. *)
-
-let union (k1, toksr1) (k2, toksr2) =
-  assert (k1 = k2);
-  k1, Array.init (Array.length toksr1) (fun i ->
-    TerminalSet.union toksr1.(i) toksr2.(i)
-  )
-
-(* Restriction of a state to a set of tokens of interest. Every
-   lookahead set is intersected with that set. *)
-
-let restrict toks (k, toksr) =
-  k, Array.map (fun toksri ->
-    TerminalSet.inter toksri toks
-  ) toksr
-
diff --git a/bundles/menhirLib/menhir-20120123/src/lr0.mli b/bundles/menhirLib/menhir-20120123/src/lr0.mli
deleted file mode 100644 (file)
index a2499b5..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-(* This module builds the LR(0) automaton associated with the grammar,
-   then provides access to it. It also provides facilities for
-   efficiently performing LR(1) constructions. *)
-
-(* ------------------------------------------------------------------------ *)
-(* The LR(0) automaton. *)
-
-(* The nodes of the LR(0) automaton are numbered. *)
-
-type node =
-    int
-
-(* This is the number of nodes in the LR(0) automaton. *)
-
-val n: int
-
-(* These are the automaton's entry states, indexed by the start productions. *)
-
-val entry: node ProductionMap.t
-
-(* A node can be converted to the underlying LR(0) set of items. This set is
-   not closed. *)
-
-val items: node -> Item.Set.t
-
-(* ------------------------------------------------------------------------ *)
-(* Help for building the LR(1) automaton. *)
-
-(* An LR(1) state is internally represented as a pair of an LR(0)
-   state number and an array of concrete lookahead sets (whose length
-   depends on the LR(0) state). *)
-
-type lr1state
-
-(* An encoded LR(1) state can be turned into a concrete representation,
-   that is, a mapping of items to concrete lookahead sets. *)
-
-type concretelr1state =
-    TerminalSet.t Item.Map.t
-
-val export: lr1state -> concretelr1state
-
-(* One can take the closure of a concrete LR(1) state. *)
-
-val closure: concretelr1state -> concretelr1state
-
-(* The core of an LR(1) state is the underlying LR(0) state. *)
-
-val core: lr1state -> node
-
-(* One can create an LR(1) start state out of an LR(0) start
-   node. *)
-val start: node -> lr1state
-
-(* Information about the transitions and reductions at a state. *)
-
-val transitions: lr1state -> lr1state SymbolMap.t
-val outgoing_symbols: node -> Symbol.t list
-val transition: Symbol.t -> lr1state -> lr1state
-
-val reductions: lr1state -> (TerminalSet.t * Production.index) list
-
-(* Equality of states. The two states must have the same core. Then,
-   they are equal if and only if their lookahead sets are pointwise
-   equal. *)
-
-val equal: lr1state -> lr1state -> bool
-
-(* Subsumption between states. The two states must have the same
-   core. Then, one subsumes the other if and only if their lookahead
-   sets are (pointwise) in the subset relation. *)
-
-val subsume: lr1state -> lr1state -> bool
-
-(* A slightly modified version of Pager's weak compatibility
-   criterion. The two states must have the same core. *)
-
-val compatible: lr1state -> lr1state -> bool
-
-(* This function determines whether two (core-equivalent) states can
-   be merged without creating an end-of-stream conflict. *)
-
-val eos_compatible: lr1state -> lr1state -> bool
-
-(* This function determines whether two (core-equivalent) states can
-   be merged without creating spurious reductions on the [error]
-   token. *)
-
-val error_compatible: lr1state -> lr1state -> bool
-
-(* Union of two states. The two states must have the same core. The
-   new state is obtained by pointwise union of the lookahead sets. *)
-
-val union: lr1state -> lr1state -> lr1state
-
-(* Restriction of a state to a set of tokens of interest. Every
-   lookahead set is intersected with that set. *)
-
-val restrict: TerminalSet.t -> lr1state -> lr1state
-
-(* Displaying a concrete state. *)
-
-val print_concrete: concretelr1state -> string
-
-(* Displaying a state. By default, only the kernel is displayed, not
-   the closure. *)
-
-val print: lr1state -> string
-val print_closure: lr1state -> string
-
diff --git a/bundles/menhirLib/menhir-20120123/src/lr1.ml b/bundles/menhirLib/menhir-20120123/src/lr1.ml
deleted file mode 100644 (file)
index b872197..0000000
+++ /dev/null
@@ -1,1044 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-(* This module constructs an LR(1) automaton by following Pager's method, that
-   is, by merging states on the fly when they are weakly compatible. *)
-
-(* ------------------------------------------------------------------------ *)
-(* Nodes. *)
-
-type node = {
-
-    (* A node number, assigned during construction. *)
-
-    raw_number: int;
-
-    (* A node number, assigned after conflict resolution has taken
-       place and after inacessible nodes have been removed. This
-       yields sequential numbers, from the client's point of view. *)
-
-    mutable number: int;
-
-    (* Each node is associated with a state. This state can change
-       during construction as nodes are merged. *)
-
-    mutable state: Lr0.lr1state;
-
-    (* Each node carries information about its outgoing transitions
-       and about its reductions. *)
-
-    mutable transitions: node SymbolMap.t;
-    mutable reductions: Production.index list TerminalMap.t;
-
-    (* Tokens for which there are several possible behaviors are
-       conflict tokens. *)
-
-    mutable conflict_tokens: TerminalSet.t;
-
-    (* Transitions are also stored in reverse, so as to allow reverse
-       traversals of the automaton. *)
-
-    mutable predecessors: node list;
-
-    (* If a node has any incoming transitions, then they all carry
-       the same symbol. This is it. *)
-
-    mutable incoming_symbol: Symbol.t option;
-
-    (* Transient marks are used during construction and traversal. *)
-
-    mutable mark: Mark.t;
-
-    (* (New as of 2012/01/23.) This flag records whether a shift/reduce
-       conflict in this node was solved in favor of neither (%nonassoc).
-       This is later used to forbid a default reduction at this node. *)
-
-    mutable forbid_default_reduction: bool;
-
-  }
-
-module Node = struct
-  type t = node
-  let compare node1 node2 =
-    node1.number - node2.number
-end
-
-module NodeSet =
-  Set.Make (Node)
-
-module NodeMap =
-  Map.Make (Node)
-
-(* ------------------------------------------------------------------------ *)
-
-(* Output debugging information if [--follow-construction] is enabled. *)
-
-let follow_transition (again : bool) (source : node) (symbol : Symbol.t) (state : Lr0.lr1state) =
-  if Settings.follow then
-    Printf.fprintf stderr
-      "%s transition out of state r%d along symbol %s.\nProposed target state:\n%s"
-      (if again then "Re-examining" else "Examining")
-      source.raw_number
-      (Symbol.print symbol)
-      (Lr0.print_closure state)
-
-let follow_state (msg : string) (node : node) (print : bool) =
-  if Settings.follow then
-    Printf.fprintf stderr
-      "%s: r%d.\n%s\n"
-      msg
-      node.raw_number
-      (if print then Lr0.print_closure node.state else "")
-
-(* ------------------------------------------------------------------------ *)
-
-(* The following two mutually recursive functions are invoked when the state
-   associated with an existing node grows. The node's descendants are examined
-   and grown into a fixpoint is reached.
-
-   This work is performed in an eager manner: we do not attempt to build any
-   new transitions until all existing nodes have been suitably grown. Indeed,
-   building new transitions requires making merging decisions, and such
-   decisions cannot be made on a sound basis unless all existing nodes have
-   been suitably grown. Otherwise, one could run into a dead end where two
-   successive, incompatible merging decisions are made, because the
-   consequences of the first decision (growing descendant nodes) were not made
-   explicit before the second decision was taken. This was a bug in versions
-   of Menhir ante 20070520.
-
-   Although I wrote this code independently, I later found out that it seems
-   quite similar to the code in Karl Schimpf's Ph.D. thesis (1981), page 35.
-
-   It is necessary that all existing transitions be explicit before the [grow]
-   functions are called. In other words, if it has been decided that there will
-   be a transition from [node1] to [node2], then [node1.transitions] must be
-   updated before [grow] is invoked. *)
-
-(* [grow node state] grows the existing node [node], if necessary, so that its
-   associated state subsumes [state]. If this represents an actual (strict)
-   growth, then [node]'s descendants are grown as well. *)
-
-let rec grow node state =
-  if Lr0.subsume state node.state then
-    follow_state "Target state is unaffected" node false
-   else begin
-
-     (* In versions of Menhir prior to June 2008, I wrote this:
-
-         If I know what I am doing, then the new state that is being
-         merged into the existing state should be compatible, in
-         Pager's sense, with the existing node. In other words,
-         compatibility should be preserved through transitions.
-
-        and the code contained this assertion:
-
-         assert (Lr0.compatible state node.state);
-         assert (Lr0.eos_compatible state node.state);
-
-       However, this was wrong. See, for instance, the sample grammars
-       cocci.mly and boris-mini.mly. The problem is particularly clearly
-       apparent in boris-mini.mly, where it only involves inclusion of
-       states -- the definition of Pager's weak compatibility does not
-       enter the picture. Here is, roughly, what is going on.
-
-       Assume we have built some state A, which, along some symbol S,
-       has a transition to itself. This means, in fact, that computing
-       the successor of A along S yields a *subset* of A, that is,
-       succ(A, S) <= A.
-
-       Then, we wish to build a new state A', which turns out to be a
-       superset of A, so we decide to grow A. (The fact that A is a
-       subset of A' implies that A and A' are Pager-compatible.) As
-       per the code below, we immediately update the state A in place,
-       to become A'. Then, we inspect the transition along symbol S.
-       We find that the state succ(A', S) must be merged into A'.
-
-       In this situation, the assertions above require succ(A', S)
-       to be compatible with A'. However, this is not necessarily
-       the case. By monotonicity of succ, we do have succ(A, S) <=
-       succ(A', S). But nothing says that succ(A', S) are related
-       with respect to inclusion, or even Pager-compatible. The
-       grammar in boris-mini.mly shows that they are not.
-
-     *)
-
-    (* Grow [node]. *)
-
-    node.state <- Lr0.union state node.state;
-    follow_state "Growing existing state" node true;
-
-    (* Grow [node]'s successors. *)
-
-    grow_successors node
-
-  end
-
-(* [grow_successors node] grows [node]'s successors. *)
-
-(* Note that, if there is a cycle in the graph, [grow_successors] can be
-   invoked several times at a single node [node], with [node.state] taking on
-   a new value every time. In such a case, this code should be correct,
-   although probably not very efficient. *)
-
-and grow_successors node =
-  SymbolMap.iter (fun symbol (successor_node : node) ->
-    let successor_state = Lr0.transition symbol node.state in
-    follow_transition true node symbol successor_state;
-    grow successor_node successor_state
-  ) node.transitions
-
-(* ------------------------------------------------------------------------ *)
-
-(* Data structures maintained during the construction of the automaton. *)
-
-(* A queue of pending nodes, whose outgoing transitions have not yet
-   been built. *)
-
-let queue : node Queue.t =
-  Queue.create()
-
-(* A mapping of LR(0) node numbers to lists of nodes. This allows us to
-   efficiently find all existing nodes that are core-compatible with a
-   newly found state. *)
-
-let map : node list array =
-  Array.create Lr0.n []
-
-(* A counter that allows assigning raw numbers to nodes. *)
-
-let num =
-  ref 0
-
-(* ------------------------------------------------------------------------ *)
-
-(* [create state] creates a new node that stands for the state [state].
-   It is expected that [state] does not subsume, and is not subsumed by,
-   any existing state. *)
-
-let create (state : Lr0.lr1state) : node =
-
-  (* Allocate a new node. *)
-
-  let node = {
-    state = state;
-    transitions = SymbolMap.empty;
-    reductions = TerminalMap.empty;
-    conflict_tokens = TerminalSet.empty;
-    raw_number = Misc.postincrement num;
-    number = 0; (* temporary placeholder *)
-    mark = Mark.none;
-    predecessors = [];
-    incoming_symbol = None;
-    forbid_default_reduction = false;
-  } in
-
-  (* Update the mapping of LR(0) cores to lists of nodes. *)
-
-  let k = Lr0.core state in
-  assert (k < Lr0.n);
-  map.(k) <- node :: map.(k);
-
-  (* Enqueue this node for further examination. *)
-
-  Queue.add node queue;
-
-  (* Debugging output. *)
-
-  follow_state "Creating a new state" node false;
-
-  (* Return the freshly created node. *)
-
-  node
-
-(* ------------------------------------------------------------------------ *)
-
-(* Materializing a transition turns its target state into a (fresh or
-   existing). There are three scenarios: the proposed new state can be
-   subsumed by an existing state, compatible with an existing state, or
-   neither. *)
-
-exception Subsumed of node
-
-exception Compatible of node
-
-let materialize (source : node) (symbol : Symbol.t) (target : Lr0.lr1state) : unit =
-  try
-
-    (* Debugging output. *)
-
-    follow_transition false source symbol target;
-
-    (* Find all existing core-compatible states. *)
-
-    let k = Lr0.core target in
-    assert (k < Lr0.n);
-    let similar = map.(k) in
-
-    (* Check whether one of these states subsumes the candidate new state. If
-       so, there is no need to create a new node: just reuse the existing
-       one. *)
-
-    (* 20110124: require error compatibility in addition to subsumption. *)
-
-    List.iter (fun node ->
-      if Lr0.subsume target node.state &&
-         Lr0.error_compatible target node.state then
-       raise (Subsumed node)
-    ) similar;
-
-    (* Check whether one of the existing states is compatible, in Pager's
-       sense, with the new state. If so, there is no need to create a new
-       state: just merge the new state into the existing one. *)
-
-    (* 20110124: require error compatibility in addition to the existing
-       compatibility criteria. *)
-
-    if Settings.pager then
-      List.iter (fun node ->
-       if Lr0.compatible target node.state &&
-          Lr0.eos_compatible target node.state &&
-          Lr0.error_compatible target node.state then
-         raise (Compatible node)
-      ) similar;
-
-    (* Both of the above checks have failed. Create a new node. Two states
-       that are in the subsumption relation are also compatible. This implies
-       that the newly created node does not subsume any existing states. *)
-
-    source.transitions <- SymbolMap.add symbol (create target) source.transitions
-
-  with
-
-  | Subsumed node ->
-
-      (* Join an existing target node. *)
-
-      follow_state "Joining existing state" node false;
-      source.transitions <- SymbolMap.add symbol node source.transitions
-
-  | Compatible node ->
-
-      (* Join and grow an existing target node. It seems important that the
-        new transition is created before [grow_successors] is invoked, so
-        that all transition decisions made so far are explicit. *)
-
-      node.state <- Lr0.union target node.state;
-      follow_state "Joining and growing existing state (Pager says, fine)" node true;
-      source.transitions <- SymbolMap.add symbol node source.transitions;
-      grow_successors node
-
-(* ------------------------------------------------------------------------ *)
-
-(* The actual construction process. *)
-
-(* Populate the queue with the start nodes and store them in an array. *)
-
-let entry : node ProductionMap.t =
-  ProductionMap.map (fun (k : Lr0.node) ->
-    create (Lr0.start k)
-  ) Lr0.entry
-
-(* Pick a node in the queue, that is, a node whose transitions have not yet
-   been built. Build these transitions, and continue. *)
-
-(* Note that building a transition can cause existing nodes to grow, so
-   [node.state] is not necessarily invariant throughout the inner loop. *)
-
-let () =
-  Misc.qiter (fun node ->
-    List.iter (fun symbol ->
-      materialize node symbol (Lr0.transition symbol node.state)
-    ) (Lr0.outgoing_symbols (Lr0.core node.state))
-  ) queue
-
-(* Record how many nodes were constructed. *)
-
-let n =
-  !num
-
-let () =
-  Error.logA 1 (fun f -> Printf.fprintf f "Built an LR(1) automaton with %d states.\n" !num)
-
-(* ------------------------------------------------------------------------ *)
-(* We now perform one depth-first traversal of the automaton,
-   recording predecessor edges, numbering nodes, sorting nodes
-   according to their incoming symbol, building reduction tables, and
-   finding out which nodes have conflicts. *)
-
-(* A count of all nodes. *)
-
-let () =
-  num := 0
-
-(* A list of all nodes. *)
-
-let nodes : node list ref =
-  ref []
-
-(* A list of nodes with conflicts. *)
-
-let conflict_nodes : node list ref =
-  ref []
-
-(* Counts of nodes with shift/reduce and reduce/reduce conflicts. *)
-
-let shift_reduce =
-  ref 0
-
-let reduce_reduce =
-  ref 0
-
-(* Count of the shift/reduce conflicts that could be silently
-   resolved. *)
-
-let silently_solved =
-  ref 0
-
-(* A mapping of symbols to lists of nodes that admit this incoming
-   symbol. *)
-
-let incoming : node list SymbolMap.t ref =
-  ref SymbolMap.empty
-
-(* Go ahead. *)
-
-let () =
-
-  let marked = Mark.fresh() in
-
-  let rec visit node =
-    if not (Mark.same node.mark marked) then begin
-      node.mark <- marked;
-      nodes := node :: !nodes;
-
-      (* Number this node. *)
-
-      let number = !num in
-      num := number + 1;
-      node.number <- number;
-
-      (* Insertion of a new reduce action into the table of reductions. *)
-
-      let addl prod tok reductions =
-       let prods =
-         try
-           TerminalMap.lookup tok reductions
-         with Not_found ->
-           []
-       in
-       TerminalMap.add tok (prod :: prods) reductions
-      in
-
-      (* Build the reduction table. Here, we gather all potential
-         reductions, without attempting to solve shift/reduce
-         conflicts on the fly, because that would potentially hide
-         shift/reduce/reduce conflicts, which we want to be aware
-         of. *)
-
-      let reductions =
-       List.fold_left (fun reductions (toks, prod) ->
-         TerminalSet.fold (addl prod) toks reductions
-        ) TerminalMap.empty (Lr0.reductions node.state)
-      in
-
-      (* Detect conflicts. Attempt to solve shift/reduce conflicts
-        when unambiguously allowed by priorities. *)
-
-      let has_shift_reduce = ref false
-      and has_reduce_reduce = ref false in
-
-      node.reductions <-
-       TerminalMap.fold (fun tok prods reductions ->
-         if SymbolMap.mem (Symbol.T tok) node.transitions then begin
-
-           (* There is a transition in addition to the reduction(s). We
-              have (at least) a shift/reduce conflict. *)
-
-           assert (not (Terminal.equal tok Terminal.sharp));
-           match prods with
-           | [] ->
-               assert false
-           | [ prod ] ->
-               begin
-
-                 (* This is a single shift/reduce conflict. If priorities tell
-                    us how to solve it, we follow that and modify the automaton. *)
-
-                 match Precedence.shift_reduce tok prod with
-
-                 | Precedence.ChooseShift ->
-
-                     (* Suppress the reduce action. *)
-
-                     incr silently_solved;
-                     reductions
-
-                 | Precedence.ChooseReduce ->
-
-                     (* Record the reduce action and suppress the shift transition.
-                        The automaton is modified in place. This can have the subtle
-                        effect of making some nodes unreachable. Any conflicts in these
-                        nodes will then be ignored (as they should be). *)
-
-                     incr silently_solved;
-                     node.transitions <- SymbolMap.remove (Symbol.T tok) node.transitions;
-                     TerminalMap.add tok prods reductions
-
-                 | Precedence.ChooseNeither ->
-
-                     (* Suppress the reduce action and the shift transition. *)
-
-                     incr silently_solved;
-                     node.transitions <- SymbolMap.remove (Symbol.T tok) node.transitions;
-                     node.forbid_default_reduction <- true;
-                     reductions
-
-                 | Precedence.DontKnow ->
-
-                     (* Priorities don't allow concluding. Record the
-                        existence of a shift/reduce conflict. *)
-
-                     node.conflict_tokens <- Grammar.TerminalSet.add tok node.conflict_tokens;
-                     has_shift_reduce := true;
-                     TerminalMap.add tok prods reductions
-
-               end
-
-           | prod1 :: prod2 :: _ ->
-
-               (* This is a shift/reduce/reduce conflict. If the priorities
-                  are such that each individual shift/reduce conflict is solved
-                  in favor of shifting or in favor of neither, then solve the entire
-                  composite conflict in the same way. Otherwise, report the conflict. *)
-
-               let choices = List.map (Precedence.shift_reduce tok) prods in
-
-               if List.for_all (fun choice ->
-                 match choice with
-                 | Precedence.ChooseShift -> true
-                 | _ -> false
-                ) choices then begin
-
-                 (* Suppress the reduce action. *)
-
-                 silently_solved := !silently_solved + List.length prods;
-                 reductions
-
-               end
-               else if List.for_all (fun choice ->
-                 match choice with
-                 | Precedence.ChooseNeither -> true
-                 | _ -> false
-                ) choices then begin
-
-                 (* Suppress the reduce action and the shift transition. *)
-
-                 silently_solved := !silently_solved + List.length prods;
-                 node.transitions <- SymbolMap.remove (Symbol.T tok) node.transitions;
-                 reductions
-
-               end
-               else begin
-
-                 (* Record a shift/reduce/reduce conflict. Keep all reductions. *)
-
-                 node.conflict_tokens <- Grammar.TerminalSet.add tok node.conflict_tokens;
-                 has_shift_reduce := true;
-                 has_reduce_reduce := true;
-                 TerminalMap.add tok prods reductions
-
-               end
-
-         end
-         else
-           let () = 
-             match prods with
-             | []
-             | [ _ ] ->
-                 ()
-             | prod1 :: prod2 :: _ ->
-
-                 (* There is no transition in addition to the reduction(s). We
-                    have a pure reduce/reduce conflict. Do nothing about it at
-                    this point. *)
-
-                 node.conflict_tokens <- Grammar.TerminalSet.add tok node.conflict_tokens;
-                 has_reduce_reduce := true
-
-           in
-           TerminalMap.add tok prods reductions
-
-      ) reductions TerminalMap.empty;
-
-      (* Record statistics about conflicts. *)
-
-      if not (TerminalSet.is_empty node.conflict_tokens) then begin
-       conflict_nodes := node :: !conflict_nodes;
-       if !has_shift_reduce then
-         incr shift_reduce;
-       if !has_reduce_reduce then
-         incr reduce_reduce
-      end;
-
-      (* Continue the depth-first traversal. Record predecessors edges
-         as we go. No ancestor appears twice in a list of
-         predecessors, because two nodes cannot be related by two
-         edges that carry distinct symbols. *)
-
-      SymbolMap.iter (fun symbol son ->
-        begin
-         match son.incoming_symbol with
-         | None ->
-             son.incoming_symbol <- Some symbol;
-             let others =
-               try
-                 SymbolMap.find symbol !incoming
-               with Not_found ->
-                 []
-             in
-             incoming := SymbolMap.add symbol (son :: others) !incoming
-         | Some symbol' ->
-             assert (Symbol.equal symbol symbol')
-       end;
-       son.predecessors <- node :: son.predecessors;
-       visit son
-      ) node.transitions
-    end
-  in
-  
-  ProductionMap.iter (fun _ node -> visit node) entry
-
-let nodes =
-  List.rev !nodes (* list is now sorted by increasing node numbers *)
-
-let conflict_nodes =
-  !conflict_nodes
-
-let incoming =
-  !incoming
-
-let () =
-  if !silently_solved = 1 then
-    Error.logA 1 (fun f -> Printf.fprintf f "One shift/reduce conflict was silently solved.\n")
-  else if !silently_solved > 1 then
-    Error.logA 1 (fun f -> Printf.fprintf f "%d shift/reduce conflicts were silently solved.\n" !silently_solved);
-  if !num < n then
-    Error.logA 1 (fun f -> Printf.fprintf f "Only %d states remain after resolving shift/reduce conflicts.\n" !num)
-
-let () =
-  Grammar.diagnostics()
-
-let n =
-  !num
-
-let forbid_default_reduction node =
-  node.forbid_default_reduction
-
-(* ------------------------------------------------------------------------ *)
-(* Breadth-first iteration over all nodes. *)
-
-let bfs =
-  let module B = Breadth.Make (struct
-    type vertex = node
-    type label = Symbol.t
-    let set_mark node m = node.mark <- m
-    let get_mark node = node.mark
-    let entry f = ProductionMap.iter (fun _ node -> f node) entry
-    let successors f node = SymbolMap.iter f node.transitions
-  end) in
-  B.search
-
-(* ------------------------------------------------------------------------ *)
-(* Iteration over all nodes. *)
-
-let fold f accu =
-  List.fold_left f accu nodes
-
-let iter f =
-  fold (fun () node -> f node) ()
-
-let map f =
-  List.map f nodes
-
-let foldx f =
-  fold (fun accu node ->
-          match node.incoming_symbol with
-            | None -> accu
-            | Some _ -> f accu node)
-
-let iterx f =
-  iter (fun node -> 
-    match node.incoming_symbol with 
-      | None -> () 
-      | Some _ -> f node)
-(* -------------------------------------------------------------------------- *)
-(* Our output channel. *)
-
-let out =
-  lazy (open_out (Settings.base ^ ".automaton"))
-
-(* ------------------------------------------------------------------------ *)
-(* If requested, dump a verbose description of the automaton. *)
-
-let () =
-  Time.tick "Construction of the LR(1) automaton";
-  if Settings.dump then begin
-    fold (fun () node ->
-      let out = Lazy.force out in
-      Printf.fprintf out "State %d%s:\n%s"
-       node.number
-       (if Settings.follow then Printf.sprintf " (r%d)" node.raw_number else "")
-       (Lr0.print node.state);
-      SymbolMap.iter (fun symbol node ->
-       Printf.fprintf out "-- On %s shift to state %d\n"
-         (Symbol.print symbol) node.number
-      ) node.transitions;
-      TerminalMap.iter (fun tok prods ->
-       List.iter (fun prod ->
-         (* TEMPORARY factoriser les symboles qui conduisent a reduire une meme production *)
-         Printf.fprintf out "-- On %s " (Terminal.print tok);
-         match Production.classify prod with
-         | Some nt ->
-             Printf.fprintf out "accept %s\n" (Nonterminal.print false nt)
-         | None ->
-             Printf.fprintf out "reduce production %s\n" (Production.print prod)
-       ) prods
-      ) node.reductions;
-      if not (TerminalSet.is_empty node.conflict_tokens) then
-       Printf.fprintf out "** Conflict on %s\n" (TerminalSet.print node.conflict_tokens);
-      Printf.fprintf out "\n%!"
-    ) ();
-    Time.tick "Dumping the LR(1) automaton"
-  end
-
-(* ------------------------------------------------------------------------ *)
-(* [reverse_dfs goal] performs a reverse depth-first search through
-   the automaton, starting at node [goal], and marking the nodes
-   traversed. It returns a function that tells whether a node is
-   marked, that is, whether a path leads from that node to the goal
-   node. *)
-
-let reverse_dfs goal =
-
-  let mark = Mark.fresh() in
-
-  let marked node =
-    Mark.same node.mark mark
-  in
-
-  let rec visit node =
-     if not (marked node) then begin
-       node.mark <- mark;
-       List.iter visit node.predecessors
-     end
-  in
-
-  visit goal;
-  marked
-
-(* ------------------------------------------------------------------------ *)
-(* Iterating over all nodes that are targets of edges carrying a
-   certain symbol. The sources of the corresponding edges are also
-   provided. *)
-
-let targets f accu symbol =
-  let targets =
-    try
-      SymbolMap.find symbol incoming
-    with Not_found ->
-      (* There are no incoming transitions on the start symbols. *)
-      []
-  in
-  List.fold_left (fun accu target ->
-    f accu target.predecessors target
-  ) accu targets
-
-(* ------------------------------------------------------------------------ *)
-(* Converting a start node into the single item that it contains. *)
-
-let start2item node =
-  let state : Lr0.lr1state = node.state in
-  let core : Lr0.node = Lr0.core state in
-  let items : Item.Set.t = Lr0.items core in
-  assert (Item.Set.cardinal items = 1);
-  Item.Set.choose items
-
-(* ------------------------------------------------------------------------ *)
-(* Accessors. *)
-
-let number node =
-  node.number
-
-let state node =
-  node.state
-
-let transitions node =
-  node.transitions
-
-let reductions node =
-  node.reductions
-
-let conflicts f =
-  List.iter (fun node ->
-    f node.conflict_tokens node
-  ) conflict_nodes
-
-let incoming_symbol node =
-  node.incoming_symbol
-
-let predecessors node =
-  node.predecessors
-
-(* ------------------------------------------------------------------------ *)
-
-(* This inverts a mapping of tokens to productions into a mapping of
-   productions to sets of tokens. *)
-
-(* This is needed, in [CodeBackend], to avoid producing two (or more)
-   separate branches that call the same [reduce] function. Instead,
-   we generate just one branch, guarded by a [POr] pattern. *)
-
-let invert reductions : TerminalSet.t ProductionMap.t =
-  TerminalMap.fold (fun tok prods inverse ->
-    let prod = Misc.single prods in
-    let toks =
-      try
-       ProductionMap.lookup prod inverse
-      with Not_found ->
-       TerminalSet.empty
-    in
-    ProductionMap.add prod (TerminalSet.add tok toks) inverse
-  ) reductions ProductionMap.empty
-    
-(* ------------------------------------------------------------------------ *)
-(* Computing which terminal symbols a state is willing to act upon.
-
-   This function is currently unused, but could be used as part of an error
-   reporting system.
-
-   One must keep in mind that, due to the merging of states, a state might be
-   willing to perform a reduction on a certain token, yet the reduction can
-   take us to another state where this token causes an error. In other words,
-   the set of terminal symbols that is computed here is really an
-   over-approximation of the set of symbols that will not cause an error. And
-   there seems to be no way of performing an exact computation, as we would
-   need to know not only the current state, but the contents of the stack as
-   well. *)
-
-let acceptable_tokens (s : node) =
-
-  (* If this state is willing to act on the error token, ignore it -- we do
-     not wish to report that an error would be accepted in this state :-) *)
-
-  let transitions =
-    SymbolMap.remove (Symbol.T Terminal.error) (transitions s)
-  and reductions =
-    TerminalMap.remove Terminal.error (reductions s)
-  in
-
-  (* Accumulate the tokens carried by outgoing transitions. *)
-
-  let covered =
-    SymbolMap.fold (fun symbol _ covered ->
-      match symbol with
-      | Symbol.T tok ->
-         TerminalSet.add tok covered
-      | Symbol.N _ ->
-         covered
-    ) transitions TerminalSet.empty
-  in
-
-  (* Accumulate the tokens that permit reduction. *)
-
-  let covered =
-    ProductionMap.fold (fun _ toks covered ->
-      TerminalSet.union toks covered
-    ) (invert reductions) covered
-  in
-
-  (* That's it. *)
-
-  covered
-
-(* ------------------------------------------------------------------------ *)
-(* Report statistics. *)
-
-(* Produce the reports. *)
-
-let () =
-  if !shift_reduce = 1 then
-    Error.grammar_warning [] "one state has shift/reduce conflicts."
-  else if !shift_reduce > 1 then
-    Error.grammar_warning [] (Printf.sprintf "%d states have shift/reduce conflicts." !shift_reduce);
-  if !reduce_reduce = 1 then
-    Error.grammar_warning [] "one state has reduce/reduce conflicts."
-  else if !reduce_reduce > 1 then
-    Error.grammar_warning [] (Printf.sprintf "%d states have reduce/reduce conflicts." !reduce_reduce)
-
-(* There is a global check for errors at the end of [Invariant], so we do
-   not need to check & stop here. *)
-
-(* ------------------------------------------------------------------------ *)
-(* When requested by the code generator, apply default conflict
-   resolution to ensure that the automaton is deterministic. *)
-
-(* [best prod prods] chooses which production should be reduced
-   among the list [prod :: prods]. It fails if no best choice
-   exists. *)
-
-let rec best choice = function
-  | [] ->
-      choice
-  | prod :: prods ->
-      match Precedence.reduce_reduce choice prod with
-      | Some choice ->
-         best choice prods
-      | None ->
-         Error.signal
-           (Production.positions choice @ Production.positions prod)
-           (Printf.sprintf
-              "will not resolve reduce/reduce conflict between\n\
-                productions that originate in distinct source files:\n%s\n%s"
-                  (Production.print choice)
-                  (Production.print prod));
-         choice (* dummy *)
-
-(* Go ahead. *)
-
-let default_conflict_resolution () =
-
-  let shift_reduce =
-    ref 0
-  and reduce_reduce =
-    ref 0
-  in
-
-  List.iter (fun node ->
-
-    node.reductions <-
-      TerminalMap.fold (fun tok prods reductions ->
-       try
-         let (_ : node) =
-           SymbolMap.find (Symbol.T tok) node.transitions
-         in
-         (* There is a transition at this symbol, so this
-            is a (possibly multiway) shift/reduce conflict.
-            Resolve in favor of shifting by suppressing all
-            reductions. *)
-         shift_reduce := List.length prods + !shift_reduce;
-          reductions
-       with Not_found ->
-         (* There is no transition at this symbol. Check
-            whether we have multiple reductions. *)
-         match prods with
-         | [] ->
-             assert false
-         | [ _ ] ->
-             TerminalMap.add tok prods reductions
-         | prod :: ((_ :: _) as prods) ->
-             (* We have a reduce/reduce conflict. Resolve, if
-                possible, in favor of a single reduction.
-                This reduction must be preferrable to each
-                of the others. *)
-             reduce_reduce := List.length prods + !reduce_reduce;
-             TerminalMap.add tok [ best prod prods ] reductions
-
-      ) node.reductions TerminalMap.empty
-
-  ) conflict_nodes;
-
-  if !shift_reduce = 1 then
-    Error.warning [] "one shift/reduce conflict was arbitrarily resolved."
-  else if !shift_reduce > 1 then
-    Error.warning [] (Printf.sprintf "%d shift/reduce conflicts were arbitrarily resolved." !shift_reduce);
-  if !reduce_reduce = 1 then
-    Error.warning [] "one reduce/reduce conflict was arbitrarily resolved."
-  else if !reduce_reduce > 1 then
-    Error.warning [] (Printf.sprintf "%d reduce/reduce conflicts were arbitrarily resolved." !reduce_reduce);
-
-  (* Now, ensure that states that have a reduce action at the
-     pseudo-token "#" have no other action. *)
-
-  let ambiguities =
-    ref 0
-  in
-
-  fold (fun () node ->
-    
-    try
-      let prods, reductions = TerminalMap.lookup_and_remove Terminal.sharp node.reductions in
-      let prod = Misc.single prods in
-
-      (* This node has a reduce action at "#". Determine whether there
-        exist other actions. If there exist any other actions,
-        suppress this reduce action, and signal an ambiguity.
-
-        We signal an ambiguity even in the case where all actions at
-        this node call for reducing a single production. Indeed, in
-        that case, even though we know that this production must be
-        reduced, we do not know whether we should first discard the
-        current token (and call the lexer). *)
-
-      let has_ambiguity = ref false in
-      let toks = ref TerminalSet.empty in
-
-      TerminalMap.iter (fun tok prods ->
-       node.reductions <- reductions;
-       has_ambiguity := true;
-       toks := TerminalSet.add tok !toks
-      ) reductions;
-
-      SymbolMap.iter (fun symbol _ ->
-       match symbol with
-       | Symbol.N _ ->
-           ()
-       | Symbol.T tok ->
-           node.reductions <- reductions;
-           has_ambiguity := true;
-           toks := TerminalSet.add tok !toks
-      ) node.transitions;
-
-      if !has_ambiguity then begin
-       incr ambiguities;
-       if Settings.dump then begin
-         Printf.fprintf (Lazy.force out)
-           "State %d has an end-of-stream conflict. There is a tension between\n\
-            (1) %s\n\
-            without even requesting a lookahead token, and\n\
-            (2) checking whether the lookahead token is %s%s,\n\
-             which would require some other action.\n\n"
-            (number node)
-            (match Production.classify prod with
-           | Some nt ->
-               Printf.sprintf "accepting %s" (Nonterminal.print false nt)
-           | None ->
-               Printf.sprintf "reducing production %s" (Production.print prod))
-            (if TerminalSet.cardinal !toks > 1 then "one of " else "")
-            (TerminalSet.print !toks)
-       end
-      end
-
-    with Not_found ->
-      ()
-
-  ) ();
-
-  if !ambiguities = 1 then
-    Error.grammar_warning [] "one state has an end-of-stream conflict."
-  else if !ambiguities > 1 then
-    Error.grammar_warning [] (Printf.sprintf "%d states have an end-of-stream conflict." !ambiguities)
-
diff --git a/bundles/menhirLib/menhir-20120123/src/lr1.mli b/bundles/menhirLib/menhir-20120123/src/lr1.mli
deleted file mode 100644 (file)
index c9806a5..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-(* This module constructs an LR(1) automaton by following Pager's
-   method, that is, by merging states on the fly when they are found
-   to be (weakly) compatible. *)
-
-(* Shift/reduce conflicts are silently resolved when (and only when)
-   that is allowed in a clean way by user-specified priorities. This
-   includes shift/reduce/reduce conflicts when (and only when) there
-   is agreement that the shift action should be preferred. Conflicts
-   that cannot be silently resolved in this phase will be reported,
-   explained, and arbitrarily resolved immediately before code
-   generation. *)
-
-(* ------------------------------------------------------------------------- *)
-(* Accessors. *)
-
-(* This is the type of the automaton's nodes. *)
-
-type node
-
-module Node : Set.OrderedType with type t = node
-
-module NodeSet : Set.S with type elt = node
-
-module NodeMap : Map.S with type key = node
-
-(* These are the automaton's entry states, indexed by the start productions. *)
-
-val entry: node ProductionMap.t
-
-(* Nodes are numbered sequentially from [0] to [n-1]. *)
-
-val n: int
-val number: node -> int
-
-(* This provides access to the LR(1) state that a node stands for. *)
-
-val state: node -> Lr0.lr1state
-
-(* This converts a start node into the single item that it contains. *)
-
-val start2item: node -> Item.t
-
-(* This maps a node to its incoming symbol, that is, the symbol
-   carried by all of the edges that enter this node. A node has zero
-   incoming edges (and, thus, no incoming symbol) if and only if it is
-   a start node. *)
-
-val incoming_symbol: node -> Symbol.t option
-
-(* This maps a node to its predecessors. *)
-
-val predecessors: node -> node list
-
-(* This provides access to a node's transitions and reductions. *)
-
-val transitions: node -> node SymbolMap.t
-val reductions: node -> Production.index list TerminalMap.t
-
-(* (New as of 2012/01/23.) This tells whether a shift/reduce conflict
-   in this node was solved in favor of neither (%nonassoc). This implies
-   that one must forbid a default reduction at this node. *)
-
-val forbid_default_reduction: node -> bool
-
-(* This inverts a mapping of tokens to productions into a mapping of
-   productions to sets of tokens. *)
-
-val invert : ProductionMap.key list TerminalMap.t -> TerminalSet.t ProductionMap.t
-
-(* Computing which terminal symbols a state is willing to act upon.
-
-   This function is currently unused, but could be used as part of an error
-   reporting system. *)
-
-val acceptable_tokens: node -> TerminalSet.t
-
-(* Iteration over all nodes. The order in which elements are examined,
-   and the order of [map]'s output list, correspond to the numeric
-   indices produced by [number] above. *)
-
-val fold: ('a -> node -> 'a) -> 'a -> 'a
-val iter: (node -> unit) -> unit
-val map: (node -> 'a) -> 'a list
-
-(* Iteration over non-start nodes *)
-val foldx: ('a -> node -> 'a) -> 'a -> 'a
-val iterx: (node -> unit) -> unit
-
-(* Breadth-first iteration over all edges. See [Breadth]. *)
-
-val bfs: (bool -> node -> Symbol.t -> node -> unit) -> unit
-
-(* Iteration over all edges that carry a certain symbol. Edges are
-   grouped in families, where all edges in a single family have the
-   same target node. [targets f accu symbol] invokes [f accu sources
-   target] once for every family, where [sources] are the sources of
-   the edges in the family and [target] is their common target. *)
-
-val targets: ('a -> node list -> node -> 'a) -> 'a -> Symbol.t -> 'a
-
-(* Iteration over all nodes with conflicts. [conflicts f] invokes [f
-   toks node] once for every node [node] with a conflict, where [toks]
-   are the tokens involved in the conflicts at that node. *)
-
-val conflicts: (TerminalSet.t -> node -> unit) -> unit
-
-(* [reverse_dfs goal] performs a reverse depth-first search through
-   the automaton, starting at node [goal], and marking the nodes
-   traversed. It returns a function that tells whether a node is
-   marked, that is, whether a path leads from that node to the goal
-   node. *)
-
-val reverse_dfs: node -> (node -> bool)
-
-(* ------------------------------------------------------------------------- *)
-(* Modifications of the automaton. *)
-
-(* This function performs default conflict resolution.
-
-   First, it resolves standard (shift/reduce and reduce/reduce)
-   conflicts (thus ensuring that the automaton is deterministic) by
-   removing some reduction actions.
-
-   Second, it resolves end-of-stream conflicts by ensuring that states
-   that have a reduce action at the pseudo-token "#" have no other
-   action.
-
-   It is called after conflicts have been explained and before code
-   generation takes place. The automaton is modified in place. *)
-
-val default_conflict_resolution: unit -> unit
-
diff --git a/bundles/menhirLib/menhir-20120123/src/lr1partial.ml b/bundles/menhirLib/menhir-20120123/src/lr1partial.ml
deleted file mode 100644 (file)
index b8d0d67..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-module Run (X : sig
-
-  (* A restricted set of tokens of interest. *)
-
-  val tokens: TerminalSet.t
-
-  (* A state of the (merged) LR(1) automaton that we're trying to
-     simulate. *)
-
-  val goal: Lr1.node
-
-end) = struct
-
-  (* First, let's restrict our interest to the nodes of the merged
-     LR(1) automaton that can reach the goal node. Some experiments
-     show that this can involve one tenth to one half of all nodes.
-     This optimization seems minor, but is easy to implement. *)
-
-  let relevant =
-    Lr1.reverse_dfs X.goal
-
-  (* Second, all of the states that we shall consider are restricted
-     to the set of tokens of interest. This is an important idea: by
-     abstracting away some information, we make the construction much
-     faster. *)
-
-  let restrict =
-    Lr0.restrict X.tokens
-
-  (* Constructing the automaton. The automaton is represented as a
-     graph. States are never merged -- this is a canonical LR(1)
-     construction!
-
-     As we go, we record the correspondence between nodes in this
-     automaton and nodes in the merged LR(1) automaton. This allows
-     us to tell when we have reached the desired place.
-
-     This also allows us not to follow transitions that have already
-     been eliminated, in the merged automaton, via resolution of
-     shift/reduce conflicts. Whenever we follow a transition in the
-     canonical LR(1) automaton, we check that the corresponding
-     transition is legal in the merged LR(1) automaton.
-
-     The automaton is explored breadth-first and shortest paths from
-     every node to one of the start nodes are recorded. *)
-
-  type node = {
-      state: Lr0.lr1state;
-      ancestor: (Symbol.t * node) option;
-      shadow: Lr1.node;
-    }
-
-  (* A queue of pending nodes, whose successors should be explored. *)
-
-  let queue : node Queue.t =
-    Queue.create()
-
-  (* Mapping of LR(0) state numbers to lists of nodes. *)
-
-  let map : node list array =
-    Array.create Lr0.n []
-
-  (* Exploring a state. This creates a new node, if necessary, and
-     enqueues it for further exploration. *)
-
-  exception Goal of node * Terminal.t
-
-  let explore ancestor shadow (state : Lr0.lr1state) : unit =
-
-    (* Find all existing nodes that share the same LR(0) core. *)
-
-    let k = Lr0.core state in
-    assert (k < Lr0.n);
-    let similar = map.(k) in
-
-    (* Check whether one of these nodes coincides with the candidate
-       new node. If so, stop. This check requires comparing not only
-       the states of the partial, canonical automaton, but also their
-       shadows in the full, merged automaton. This is because a single
-       state of the canonical automaton may be reached along several
-       different paths, leading to distinct shadows in the merged
-       automaton, and we must explore all of these paths in order to
-       ensure that we eventually find a goal node. *)
-
-    if not (List.exists (fun node ->
-      Lr0.equal state node.state && shadow == node.shadow
-    ) similar) then begin
-
-      (* Otherwise, create a new node. *)
-
-      let node = {
-       state = state;
-       ancestor = ancestor;
-       shadow = shadow;
-      } in
-
-      map.(k) <- node :: similar;
-      Queue.add node queue;
-
-      (* Check whether this is a goal node. A node [N] is a goal node
-        if (i) [N] has a conflict involving one of the tokens of
-        interest and (ii) [N] corresponds to the goal node, that is,
-        the path that leads to [N] in the canonical LR(1) automaton
-        leads to the goal node in the merged LR(1) automaton. Note
-        that these conditions do not uniquely define [N]. *)
-
-      if shadow == X.goal then
-       let can_reduce =
-         ref TerminalSet.empty in
-       let reductions1 : Production.index list TerminalMap.t =
-         Lr1.reductions shadow in
-       List.iter (fun (toks, prod) ->
-         TerminalSet.iter (fun tok ->
-
-           (* We are looking at a [(tok, prod)] pair -- a reduction
-              in the canonical automaton state. *)
-
-           (* Check that this reduction, which exists in the canonical
-              automaton state, also exists in the merged automaton --
-              that is, it wasn't suppressed by conflict resolution. *)
-
-           if List.mem prod (TerminalMap.lookup tok reductions1) then 
-
-             try
-               let (_ : Lr1.node) =
-                 SymbolMap.find (Symbol.T tok) (Lr1.transitions shadow)
-               in
-               (* Shift/reduce conflict. *)
-               raise (Goal (node, tok))
-             with Not_found ->
-               let toks = !can_reduce in
-               (* We rely on the property that [TerminalSet.add tok toks]
-                  preserves physical equality when [tok] is a member of
-                  [toks]. *)
-               let toks' = TerminalSet.add tok toks in
-               if toks == toks' then
-                 (* Reduce/reduce conflict. *)
-                 raise (Goal (node, tok))
-               else
-                 (* No conflict so far. *)
-                 can_reduce := toks'
-
-         ) toks
-       ) (Lr0.reductions state)
-
-    end
-
-  (* Populate the queue with the start nodes. Until we find a goal
-     node, take a node out the queue, construct the nodes that
-     correspond to its successors, and enqueue them. *)
-
-  let goal, token =
-    try
-
-      ProductionMap.iter (fun (prod : Production.index) (k : Lr0.node) ->
-       let shadow = try
-           ProductionMap.find prod Lr1.entry
-         with Not_found ->
-           assert false
-       in
-       if relevant shadow then
-         explore None shadow (restrict (Lr0.start k))
-      ) Lr0.entry;
-
-      Misc.qiter (fun node ->
-       SymbolMap.iter (fun symbol state ->
-         try
-           let shadow =
-             SymbolMap.find symbol (Lr1.transitions node.shadow) in
-           if relevant shadow then
-             explore (Some (symbol, node)) shadow (restrict state)
-         with Not_found ->
-           (* No shadow. This can happen if a shift/reduce conflict
-               was resolved in favor in reduce. Ignore that transition. *)
-            ()
-       ) (Lr0.transitions node.state)
-      ) queue;
-
-      (* We didn't find a goal node. This shouldn't happen! If the
-        goal node in the merged LR(1) automaton has a conflict,
-        then there should exist a node with a conflict in the
-        canonical automaton as well. Otherwise, Pager's construction
-        is incorrect. *)
-      
-      begin
-       Printf.fprintf stderr "** Internal failure (Pager's theorem).\n";
-       Printf.fprintf stderr "** Tokens of interest: %s\n" (TerminalSet.print X.tokens);
-       Printf.fprintf stderr "** Goal state: %d\n" (Lr1.number X.goal);
-       Printf.fprintf stderr "** Please send your grammar to Menhir's developers.\n%!";
-       exit 1
-      end
-
-    with Goal (node, tok) ->
-      node, tok
-  
-  (* Query the goal node that was found about the shortest path from
-     it to one of the entry nodes. *)
-
-  let source, path =
-
-    let rec follow path node =
-      match node.ancestor with
-      | None ->
-         Lr1.start2item node.shadow, Array.of_list path
-      | Some (symbol, node) ->
-         follow (symbol :: path) node
-    in
-    follow [] goal
-
-  let goal =
-    Lr0.export goal.state
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/lr1partial.mli b/bundles/menhirLib/menhir-20120123/src/lr1partial.mli
deleted file mode 100644 (file)
index 43a913b..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-
-module Run (X : sig
-
-  (* A restricted set of tokens of interest. *)
-
-  val tokens: TerminalSet.t
-
-  (* A state of the (merged) LR(1) automaton that we're trying to
-     simulate. *)
-
-  val goal: Lr1.node
-
-end) : sig
-
-  (* What we are after is a path, in the canonical LR(1) automaton,
-     that leads from some entry node to a node [N] such that (i)
-     [N] has a conflict involving one of the tokens of interest
-     and (ii) [N] corresponds to the goal node, that is, the path
-     that leads to [N] in the canonical LR(1) automaton leads to
-     the goal node in the merged LR(1) automaton. *)
-
-  val source: Item.t
-
-  val path: Symbol.t array
-
-  val goal: Lr0.concretelr1state
-
-  (* An (arbitrarily chosen) conflict token in the goal state. *)
-
-  val token: Terminal.t
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/mark.ml b/bundles/menhirLib/menhir-20120123/src/mark.ml
deleted file mode 100644 (file)
index 8c022f1..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(** This module implements a very simple notion of ``mark''. A mark is
-    really a reference cell (without content). Creating a new mark
-    requires allocating a new cell, and comparing marks requires
-    comparing pointers. *)
-
-type t =
-    unit ref
-
-let fresh =
-  ref
-
-let same =
-  (==)
-
-let none =
-  fresh()
-
diff --git a/bundles/menhirLib/menhir-20120123/src/mark.mli b/bundles/menhirLib/menhir-20120123/src/mark.mli
deleted file mode 100644 (file)
index 0310bb1..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(** This module implements a very simple notion of ``mark''. *)
-
-(** The type of marks. *)
-type t
-
-(** [fresh()] generates a fresh mark, that is, a mark that is guaranteed
-    to be distinct from all existing marks. *)
-val fresh: unit -> t
-
-(** [same mark1 mark2] tells whether [mark1] and [mark2] are the same
-    mark, that is, were created by the same call to [fresh]. *)
-val same: t -> t -> bool
-
-(** [none] is a distinguished mark, created via an initial call to
-    [fresh()]. *)
-val none: t
-
diff --git a/bundles/menhirLib/menhir-20120123/src/misc.ml b/bundles/menhirLib/menhir-20120123/src/misc.ml
deleted file mode 100644 (file)
index 8b2e18a..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-let ( $$ ) x f = f x
-
-let unSome = function
-   None -> assert false
-  | Some x -> x
-
-let o2s o f =
-  match o with
-  | None ->
-      ""
-  | Some x ->
-      f x
-
-let single = function
-  | [ x ] ->
-      x
-  | _ ->
-      assert false
-
-let rec mapd f = function
-  | [] ->
-      []
-  | x :: xs ->
-      let y1, y2 = f x in
-      y1 :: y2 :: mapd f xs
-
-let tabulateb n f =
-  let a = Array.init n f in
-  Array.get a,
-  Array.fold_left (fun count element ->
-    if element then count + 1 else count
-  ) 0 a
-
-let tabulateo number fold n f =
-  let a = Array.create n None in
-  let c = ref 0 in
-  let () = fold (fun () element ->
-    let image = f element in
-    a.(number element) <- image;
-    match image with
-    | Some _ ->
-       incr c
-    | None ->
-       ()
-  ) () in
-  let get element =
-    a.(number element)
-  in
-  get, !c
-
-let rec truncate k xs =
-  match k, xs with
-  | 0, _ ->
-      []
-  | _, [] ->
-      assert false
-  | _, x :: xs ->
-      x :: truncate (k-1) xs
-
-let truncate k xs =
-  if List.length xs <= k then xs else truncate k xs
-
-module IntSet = Set.Make (struct 
-                           type t = int
-                           let compare = ( - )
-                         end)
-
-let separated_list_to_string printer separator list = 
-
-  let rec loop x = function
-    | [] ->
-        printer x
-    | y :: xs ->
-        printer x 
-       ^ separator 
-       ^ loop y xs
-  in
-
-  match list with
-  | [] ->
-      ""
-  | x :: xs ->
-      loop x xs
-
-
-let index_map string_map = 
-  let n = StringMap.cardinal string_map in
-  let a = Array.create n None in
-  let conv, _ = StringMap.fold 
-    (fun k v (conv, idx) ->
-       a.(idx) <- Some (k, v);
-       StringMap.add k idx conv, idx + 1)
-    string_map (StringMap.empty, 0) 
-  in
-    ((fun n -> snd (unSome a.(n))),
-     (fun k -> StringMap.find k conv),
-     (fun n -> fst (unSome a.(n))))
-  
-let support_assoc l x =
-  try
-    List.assoc x l
-  with Not_found -> x
-
-let index (strings : string list) : int * string array * int StringMap.t =
-  let name = Array.of_list strings
-  and n, map = List.fold_left (fun (n, map) s ->
-    n+1, StringMap.add s n map
-  ) (0, StringMap.empty) strings in
-  n, name, map
-
-(* Turning an implicit list, stored using pointers through a hash
-   table, into an explicit list. The head of the implicit list is
-   not included in the explicit list. *)
-
-let materialize (table : ('a, 'a option) Hashtbl.t) (x : 'a) : 'a list =
-  let rec loop x =
-    match Hashtbl.find table x with
-    | None ->
-       []
-    | Some x ->
-       x :: loop x
-  in
-  loop x
-
-(* [iteri] implements a [for] loop over integers, from 0 to
-   [n-1]. *)
-
-let iteri n f =
-  for i = 0 to n - 1 do
-    f i
-  done
-
-(* [foldi] implements a [for] loop over integers, from 0 to [n-1],
-   with an accumulator. [foldij] implements a [for] loop over
-   integers, from [start] to [n-1], with an accumulator. *)
-
-let foldij start n f accu =
-  let rec loop i accu =
-    if i = n then
-      accu
-    else
-      loop (i+1) (f i accu)
-  in
-  loop start accu
-
-let foldi n f accu =
-  foldij 0 n f accu
-
-(* [mapi n f] produces the list [ f 0; ... f (n-1) ]. *)
-
-let mapi n f =
-  List.rev (
-    foldi n (fun i accu ->
-      f i :: accu
-    ) []
-  )
-
-(* [qfold f accu q] repeatedly takes an element [x] off the queue [q]
-   and applies [f] to the accumulator and to [x], until [q] becomes
-   empty. Of course, [f] can add elements to [q] as a side-effect.
-
-   We allocate an option to ensure that [qfold] is tail-recursive. *)
-
-let rec qfold f accu q =
-  match
-    try
-      Some (Queue.take q)
-    with Queue.Empty ->
-      None
-  with
-  | Some x ->
-      qfold f (f accu x) q
-  | None ->
-      accu
-
-(* [qiter f q] repeatedly takes an element [x] off the queue [q] and
-   applies [f] to [x], until [q] becomes empty. Of course, [f] can add
-   elements to [q] as a side-effect. *)
-
-let qiter f q =
-  try
-    while true do
-      f (Queue.take q)
-    done
-  with Queue.Empty ->
-    ()
-
-let rec smap f = function
-  | [] ->
-      []
-  | (x :: xs) as l ->
-      let x' = f x
-      and xs' = smap f xs in
-      if x == x' && xs == xs' then
-       l
-      else
-       x' :: xs'
-
-let rec smapa f accu = function
-  | [] ->
-      accu, []
-  | (x :: xs) as l ->
-      let accu, x' = f accu x in
-      let accu, xs' = smapa f accu xs in
-      accu,
-      if x == x' && xs == xs' then
-       l
-      else
-       x' :: xs'
-
-let normalize s =
-  let s = String.copy s in
-  let n = String.length s in
-  for i = 0 to n - 1 do
-    match s.[i] with
-    | '('
-    | ')'
-    | ',' ->
-       s.[i] <- '_'
-    | _ ->
-       ()
-  done;
-  s
-
-(* [postincrement r] increments [r] and returns its original value. *)
-
-let postincrement r =
-  let x = !r in
-  r := x + 1;
-  x
-
-(* [gcp] returns the greatest common prefix of two strings. *)
-
-let gcp s1 s2 =
-  let n1 = String.length s1
-  and n2 = String.length s2 in
-  let rec loop i =
-    if (i < n1) && (i < n2) && (s1.[i] = s2.[i]) then
-      loop (i+1)
-    else
-      String.sub s1 0 i
-  in
-  loop 0
-
-(* [gcps] returns the greatest common prefix of a nonempty list of strings. *)
-
-let rec gcps = function
-  | [] ->
-      assert false
-  | s :: ss ->
-      let rec loop accu = function
-       | [] ->
-           accu
-       | s :: ss ->
-           loop (gcp s accu) ss
-      in
-      loop s ss
-
-(* [array_forall p a] computes the conjunction of the predicate [p] over all
-   elements of the array [a]. *)
-
-exception ArrayForall
-
-let _ArrayForall =
-  ArrayForall
-
-let array_forall (p : 'a -> bool) (a : 'a array) : bool =
-  try
-    for i = 0 to Array.length a - 1 do
-      let x = Array.get a i in
-      if not (p x) then
-       raise _ArrayForall
-    done;
-    true
-  with ArrayForall ->
-    false
-
diff --git a/bundles/menhirLib/menhir-20120123/src/misc.mli b/bundles/menhirLib/menhir-20120123/src/misc.mli
deleted file mode 100644 (file)
index 99bbcc5..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* TEMPORARY tidy up, comment, remove dead code *)
-
-(* Converting an option to a string, with [None] converted
-   to the empty string. *)
-
-val o2s: 'a option -> ('a -> string) -> string
-
-(* Projection out of a singleton list. *)
-
-val single: 'a list -> 'a
-
-(* A variant of [List.map] where [f] returns a pair of elements,
-   to be flattened into the new list. *)
-
-val mapd: ('a -> 'b * 'b) -> 'a list -> 'b list
-
-(* Tabulating a function using an internal array. [tabulateb n f]
-   returns a function that is extensionally equal to [f], but relies
-   on an internal array. Arguments to [f] are of type [int] and are
-   supposed to lie in the range [0..n). The result type of [f] is
-   assumed to be of type [bool]. [tabulateb] also returns the number
-   of points where [f] is [true]. *)
-
-val tabulateb: int -> (int -> bool) -> (int -> bool) * int
-
-(* [tabulateo number fold n f] returns a function that is
-   extensionally equal to [f], but relies on an internal
-   array. Arguments to [f] are of type ['a] and are mapped by [number]
-   into the range [0..n). [fold] allows folding over the domain of
-   [f]. The result type of [f] is an option type, and [tabulateo] also
-   returns the number of points where [f] is [Some _]. *)
-
-val tabulateo: ('a -> int) -> ((unit -> 'a -> unit) -> unit -> unit) -> int -> ('a -> 'b option) -> ('a -> 'b option) * int
-
-(* Truncature of a list. *)
-
-val truncate: int -> 'a list -> 'a list
-
-(* Reverse function application. *)
-
-val ( $$ ) : 'a -> ('a -> 'b) -> 'b
-
-(* Sets of strings and maps over strings. *)
-
-module IntSet    : Set.S with type elt = int
-
-(* [separated_list_to_string printer sep l] converts [l] into a string
-   representation built using [printer] on each element and [sep] as 
-   a separator. *)
-
-val separated_list_to_string: ('a -> string) -> string -> 'a list -> string
-
-(* [index_map f] returns a triple (indexed_f, domain_indexation, domain_array).
-   [indexed_f] is a mapping from [0..n-1] to the elements of the map [f] 
-   ([n] being the size of the image of [f]). 
-   [domain_indexation] is a mapping from the domain of the map [f] to indexes. 
-   [domain_array] is a mapping from the indexes to the domain of [f]. 
-   The indexation implements [f] ie:
-   - forall x in domain(m), indexed_f (domain_indexation x) = f (x).
-   - forall x in domain(m), domain_array (domain_indexation x) = x. *)
-
-val index_map 
-  : 'a StringMap.t -> (int -> 'a) * (string -> int) * (int -> string)
-
-(* [support_assoc l x] returns the second component of the first couple
-   in [l] whose first component is [x]. If it does not exist, it returns
-   [x]. *)
-
-val support_assoc : ('a * 'a) list -> 'a -> 'a
-
-(* [index] indexes a list of (distinct) strings, that is, assigns an
-   integer index to each string and builds mappings both ways between
-   strings and indices. *)
-
-val index: string list -> int * string array * int StringMap.t
-
-(* Turning an implicit list, stored using pointers through a hash
-   table, into an explicit list. The head of the implicit list is
-   not included in the explicit list. *)
-
-val materialize: ('a, 'a option) Hashtbl.t -> 'a -> 'a list
-
-(* [iteri] implements a [for] loop over integers, from 0 to
-   [n-1]. *)
-
-val iteri: int -> (int -> unit) -> unit
-
-(* [foldi] implements a [for] loop over integers, from 0 to [n-1],
-   with an accumulator. [foldij] implements a [for] loop over
-   integers, from [start] to [n-1], with an accumulator. *)
-
-val foldi: int -> (int -> 'a -> 'a) -> 'a -> 'a
-val foldij: int -> int -> (int -> 'a -> 'a) -> 'a -> 'a
-
-(* [mapi n f] produces the list [ f 0; ... f (n-1) ]. *)
-
-val mapi: int -> (int -> 'a) -> 'a list
-
-(* [qfold f accu q] repeatedly takes an element [x] off the queue [q]
-   and applies [f] to the accumulator and to [x], until [q] becomes
-   empty. Of course, [f] can add elements to [q] as a side-effect. *)
-
-val qfold: ('a -> 'b -> 'a) -> 'a -> 'b Queue.t -> 'a
-
-(* [qiter f q] repeatedly takes an element [x] off the queue [q] and
-   applies [f] to [x], until [q] becomes empty. Of course, [f] can add
-   elements to [q] as a side-effect. *)
-
-val qiter: ('b -> unit) -> 'b Queue.t -> unit
-
-(* [smap] has the same semantics as [List.map], but attempts to
-   physically return the input list when [f] is the identity. *)
-
-val smap: ('a -> 'a) -> 'a list -> 'a list
-
-(* [smapa] is a variant of [smap] that maintains an accumulator. *)
-
-val smapa: ('b -> 'a -> 'b * 'a) -> 'b -> 'a list -> 'b * 'a list
-
-(* [normalize s] returns a copy of [s] where parentheses and commas
-   are replaced with underscores. *)
-
-val normalize: string -> string
-
-(* [postincrement r] increments [r] and returns its original value. *)
-
-val postincrement: int ref -> int
-
-(* [gcp] returns the greatest common prefix of two strings. *)
-
-val gcp: string -> string -> string
-
-(* [gcps] returns the greatest common prefix of a nonempty list of strings. *)
-
-val gcps : string list -> string
-
-(* [array_forall p a] computes the conjunction of the predicate [p] over all
-   elements of the array [a]. *)
-
-val array_forall: ('a -> bool) -> 'a array -> bool
-
diff --git a/bundles/menhirLib/menhir-20120123/src/nonTerminalDefinitionInlining.ml b/bundles/menhirLib/menhir-20120123/src/nonTerminalDefinitionInlining.ml
deleted file mode 100644 (file)
index 2d26eac..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: nonTerminalDefinitionInlining.ml,v 1.17 2006/06/26 09:41:33 regisgia Exp $ *)
-open UnparameterizedSyntax
-open ListMonad
-
-(* This exception will be raised when a branch does not need inlining. *)
-exception NoInlining
-
-(* Color are used to detect cycles. *)
-type 'a color = 
-  | BeingExpanded
-  | Expanded of 'a
-
-(* Inline a grammar. The resulting grammar does not contain any definitions
-   that can be inlined. *)
-let inline grammar = 
-
-  let names producers = 
-    List.fold_left (fun s -> function (_, Some x) -> StringSet.add x s | _ -> s) 
-      StringSet.empty producers 
-  in
-
-  (* This function returns a fresh name beginning with [prefix] and 
-     that is not in the set of names [names]. *)
-  let rec fresh ?(c=0) names prefix =
-    let name = prefix^string_of_int c in
-      if StringSet.mem name names then
-       fresh ~c:(c+1) names prefix
-      else 
-       name
-  in
-
-  let use_inline = ref false in
-
-  (* This table associates a color to each non terminal that can be expanded. *)
-  let expanded_non_terminals = 
-    Hashtbl.create 13 
-  in
-
-  let expanded_state k = 
-    Hashtbl.find expanded_non_terminals k 
-  in
-      
-  let mark_as_being_expanded k = 
-    Hashtbl.add expanded_non_terminals k BeingExpanded
-  in
-
-  let mark_as_expanded k r =
-    Hashtbl.replace expanded_non_terminals  k (Expanded r);
-    r
-  in
-
-  (* This function traverses the producers of the branch [b] and find
-     the first non terminal that can be inlined. If it finds one, it
-     inlines its branches into [b], that's why this function can return
-     several branches. If it does not find one non terminal to be 
-     inlined, it raises [NoInlining]. *)
-  let rec find_inline_producer b = 
-    let prefix, nt, p, psym, suffix = 
-      let rec chop_inline i (prefix, suffix) =
-       match suffix with
-         | [] -> 
-             raise NoInlining
-
-         | ((nt, id) as x) :: xs ->
-             try
-               let r = StringMap.find nt grammar.rules in
-               let id = match id with
-                 | None -> "_"^string_of_int i
-                 | Some id -> id
-               in
-                 if r.inline_flag then 
-                   (* We have to inline the rule [r] into [b] between
-                      [prefix] and [xs]. *)
-                   List.rev prefix, nt, r, id, xs
-                 else 
-                   chop_inline (i + 1) (x :: prefix, xs) 
-             with Not_found -> 
-               chop_inline (i + 1) (x :: prefix, xs) 
-      in
-       chop_inline 1 ([], b.producers)
-    in
-      prefix, expand_rule nt p, nt, psym, suffix
-
-  (* We have to rename producers' names of the inlined production 
-     if they clashes with the producers' names of the branch into 
-     which we do the inlining. *)
-  and rename_if_necessary b producers =
-
-    (* First we compute the set of names already in use. *)
-    let producers_names = names (b.producers @ producers) in
-
-    (* Compute a renaming and the new inlined producers' names. *)
-    let phi, producers' =
-      List.fold_left (fun (phi, producers) -> function (p, Some x) -> 
-               if StringSet.mem x producers_names then
-                 let x' = fresh producers_names x in
-                   ((x, x') :: phi, (p, Some x') :: producers)
-               else 
-                 (phi, (p, Some x) :: producers)
-               | p -> phi, p :: producers) ([], []) producers
-    in
-      phi, List.rev producers'
-       
-  (* Inline the non terminals that can be inlined in [b]. We use the 
-     ListMonad to combine the results. *)
-  and expand_branch (b : branch) : branch ListMonad.m =
-    try 
-      let prefix, p, nt, psym, suffix = find_inline_producer b in
-       use_inline := true;
-       if Action.use_dollar b.action then
-         Error.error [ b.branch_position ]
-           (Printf.sprintf 
-              "You cannot use %s and the $i syntax in this branch since the \
-               definition of %s has to be inlined."
-              nt nt)
-       else      
-         (* Inline a branch of [nt] at position [prefix] ... [suffix] in 
-            the branch [b]. *)
-         let inline_branch pb = 
-           (* Rename the producers of this branch is they conflict with 
-              the name of the host's producers. *)
-           let phi, inlined_producers = rename_if_necessary b pb.producers in
-
-           (* Define the renaming environment given the shape of the branch. *)
-           let renaming_env, prefix', suffix' = 
-             
-             let start_position, prefix' = 
-               match List.rev prefix with 
-
-                 (* If the prefix is empty, the start position is the rule 
-                    start position. *)
-                 | [] -> (Keyword.Left, Keyword.WhereStart), prefix
-                     
-                 (* If the last producer of prefix is unnamed, we cannot refer to 
-                    its position. We give it a name. *)
-                 | (p, None) :: ps -> 
-                     let x = fresh (names (inlined_producers @ prefix @ suffix)) (CodeBits.prefix "p") in
-                       (Keyword.RightNamed x, Keyword.WhereEnd), List.rev ((p, Some x) :: ps)
-
-                (* The last producer of prefix is named [x], 
-                   $startpos in the inlined rule will be changed to $endpos(x). *)
-                | (_, Some x) :: _ -> (Keyword.RightNamed x, Keyword.WhereEnd), prefix
-
-             in
-             (* Same thing for the suffix. *)
-             let end_position, suffix' = 
-               match suffix with 
-                 | [] -> (Keyword.Left, Keyword.WhereEnd), suffix
-                 | (p, None) :: ps -> 
-                     let x = fresh (names (inlined_producers @ prefix' @ suffix)) (CodeBits.prefix "p") in
-                       ((Keyword.RightNamed x, Keyword.WhereStart), (p, Some x) :: ps)
-                | (_, Some x) :: _ -> (Keyword.RightNamed x, Keyword.WhereStart), suffix
-             in
-               (psym, start_position, end_position), prefix', suffix' 
-           in
-           (* Rename the host semantic action. 
-              Each reference of the inlined non terminal [psym] must be taken into 
-              account. $startpos(psym) is changed to $startpos(x) where [x] is
-              the first producer of the inlined branch if it is not empty or
-              the preceding producer found in the prefix. *)
-           let outer_action, (used1, used2) = 
-             Action.rename_inlined_psym renaming_env [] b.action
-           in
-           let action', (used1', used2') = 
-             Action.rename renaming_env phi pb.action 
-           in
-           let prefix = if used1 || used1' then prefix' else prefix in
-           let suffix = if used2 || used2' then suffix' else suffix in
-
-             { b with
-                 producers = prefix @ inlined_producers @ suffix;
-                 action = Action.compose psym action' outer_action
-             }
-         in
-           List.map inline_branch p.branches >>= expand_branch 
-         
-    with NoInlining -> 
-      return b
-       
-  (* Expand a rule if necessary. *)
-  and expand_rule k r = 
-    try 
-      (match expanded_state k with
-        | BeingExpanded ->
-            Error.error
-              r.positions
-              (Printf.sprintf "there is a cycle in the definition of %s." k)
-        | Expanded r ->
-            r)
-    with Not_found ->
-      mark_as_being_expanded k;
-      mark_as_expanded k { r with branches = r.branches >>= expand_branch }
-  in
-
-    (* We check that the %inline rules do not use $i syntax since 
-       expansion of $i is impossible. *)
-  let _ = 
-    StringMap.iter 
-      (fun _ r -> 
-        if r.inline_flag 
-          && List.exists (fun b -> Action.use_dollar b.action) r.branches then
-            Error.error r.positions 
-              (Printf.sprintf 
-                 "You cannot use $i syntax in this branch since its \
-                   definition will be inlined."))
-      grammar.rules
-  in
-
-    (* If we are in Coq mode, %inline is forbidden. *)
-  let _ =
-    if Settings.coq then
-      StringMap.iter 
-        (fun _ r -> 
-          if r.inline_flag then
-             Error.error r.positions
-               (Printf.sprintf "%%inline is not supported by the coq back-end"))
-        grammar.rules
-  in
-
-    (* To expand a grammar, we expand all its rules and remove 
-       the %inline rules. *)
-  let expanded_rules = 
-    StringMap.mapi expand_rule grammar.rules
-  and useful_types = 
-      StringMap.filter 
-       (fun k _ -> try not (StringMap.find k grammar.rules).inline_flag
-        with Not_found -> true)
-       grammar.types
-  in
-
-    { grammar with 
-       rules = StringMap.filter (fun _ r -> not r.inline_flag) expanded_rules;
-       types = useful_types
-    }, !use_inline
-      
diff --git a/bundles/menhirLib/menhir-20120123/src/nonTerminalDefinitionInlining.mli b/bundles/menhirLib/menhir-20120123/src/nonTerminalDefinitionInlining.mli
deleted file mode 100644 (file)
index e5f4cb3..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: nonTerminalDefinitionInlining.mli,v 1.5 2005/12/01 16:20:06 regisgia Exp $ *)
-
-(** [inline g] traverses the rules of [g] and inlines the non terminal
-    definitions that are marked with [%inline]. It returns a pair of the transformed
-    grammar and a flag that tells whether any inlining was actually done. *)
-val inline: UnparameterizedSyntax.grammar -> UnparameterizedSyntax.grammar * bool
diff --git a/bundles/menhirLib/menhir-20120123/src/nonpositiveCycles.ml b/bundles/menhirLib/menhir-20120123/src/nonpositiveCycles.ml
deleted file mode 100644 (file)
index efb4aec..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module uses Floyd and Warshall's algorithm to detect whether a graph
-   with integer-weighted edges contains a simple cycle of negative weight. *)
-
-(* The algorithm runs in cubic time in the number of vertices. It may be
-   worthwhile to first use Tarjan's algorithm to obtain the graph's strongly
-   connected components, and use Floyd and Warshall's algorithm only on each
-   component. *)
-
-module Run (G : sig
-
-  type node
-
-  (* We assume each node has a unique index. Indices must range from
-     $0$ to $n-1$, where $n$ is the number of nodes in the graph. *)
-
-  val n: int
-  val index: node -> int
-
-  (* Iterating over a node's immediate successors. Edges are weighted. *)
-
-  val successors: (int -> node -> unit) -> node -> unit
-
-  (* Iterating over all nodes. *)
-
-  val iter: (node -> unit) -> unit
-
-end) = struct
-
-  open G
-
-  (* Integers with infinity. *)
-
-  type distance =
-    | Infinity
-    | Finite of int
-
-  let add d1 d2 =
-    match d1, d2 with
-    | Infinity, _
-    | _, Infinity ->
-       Infinity
-    | Finite i1, Finite i2 ->
-       Finite (i1 + i2)
-
-  let min d1 d2 =
-    match d1, d2 with
-    | Infinity, d
-    | d, Infinity ->
-       d
-    | Finite i1, Finite i2 ->
-       Finite (min i1 i2)
-
-  let le d1 d2 =
-    match d1, d2 with
-    | Infinity, Infinity ->
-       true
-    | Infinity, Finite _ ->
-       false
-    | Finite _, Infinity ->
-       true
-    | Finite i1, Finite i2 ->
-       i1 <= i2
-
-  (* Allocate and initialize a distance matrix. At allocation time, every entry
-     is initialized to infinity. Then, we iterate over all edges, and copy them
-     into the distance matrix. *)
-
-  (* Note that, by default, [d.(i).(i)] is not initialized to zero: it is 
-     initialized to infinity. This is because we are looking for paths of
-     non-zero length. In other words, we are computing a transitive closure,
-     not a reflexive, transitive closure. *)
-
-  let d =
-    Array.init n (fun i ->
-      Array.init n (fun j ->
-       Infinity
-      )
-    )
-
-  let () =
-    iter (fun source ->
-      successors (fun weight target ->
-       (* We use a min operation, so the graph may be a multi-graph, that is,
-          multiple edges between two nodes are permitted. *)
-       let i = index source
-       and j = index target in
-       d.(i).(j) <- min (Finite weight) d.(i).(j)
-      ) source
-    )
-
-  (* The algorithm. *)
-
-  (* Stefan Hougardy notes that, in the presence of negative cycles, distances
-     can grow exponentially fast (towards minus infinity), so there is a risk
-     of overflow. To avoid this, one must check for negative cycles during the
-     computation -- as opposed to waiting until the end. *)
-
-  exception Detection
-
-  let graph_has_nonpositive_simple_cycle : bool =
-    try
-      for k = 0 to n-1 do
-       for i = 0 to n-1 do
-         for j = 0 to n-1 do
-           d.(i).(j) <- min d.(i).(j) (add d.(i).(k) d.(k).(j));
-           if i = j && le d.(i).(j) (Finite 0) then
-             raise Detection
-         done
-       done
-      done;
-      false
-    with Detection ->
-      true
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/nonpositiveCycles.mli b/bundles/menhirLib/menhir-20120123/src/nonpositiveCycles.mli
deleted file mode 100644 (file)
index fe667e7..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module uses Floyd and Warshall's algorithm to detect whether a graph
-   with integer-weighted edges contains a simple cycle of negative weight. *)
-
-(* The algorithm runs in cubic time in the number of vertices. It may be
-   worthwhile to first use Tarjan's algorithm to obtain the graph's strongly
-   connected components, and use Floyd and Warshall's algorithm only on each
-   component. *)
-
-module Run (G : sig
-
-  type node
-
-  (* We assume each node has a unique index. Indices must range from
-     $0$ to $n-1$, where $n$ is the number of nodes in the graph. *)
-
-  val n: int
-  val index: node -> int
-
-  (* Iterating over a node's immediate successors. Edges are weighted. *)
-
-  val successors: (int -> node -> unit) -> node -> unit
-
-  (* Iterating over all nodes. *)
-
-  val iter: (node -> unit) -> unit
-
-end) : sig
-
-  val graph_has_nonpositive_simple_cycle : bool
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/option.ml b/bundles/menhirLib/menhir-20120123/src/option.ml
deleted file mode 100644 (file)
index 01378e4..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-let map f = function
-  | None ->
-      None
-  | Some x ->
-      Some (f x)
-
-let iter f o =
-  match o with
-  | None ->
-      ()
-  | Some x ->
-      f x
-
-let fold f o accu =
-  match o with
-  | None ->
-      accu
-  | Some x ->
-      f x accu
-
diff --git a/bundles/menhirLib/menhir-20120123/src/option.mli b/bundles/menhirLib/menhir-20120123/src/option.mli
deleted file mode 100644 (file)
index edd1bc3..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-val map: ('a -> 'b) -> 'a option -> 'b option
-val iter: ('a -> unit) -> 'a option -> unit
-val fold: ('a -> 'b -> 'b) -> 'a option -> 'b -> 'b
diff --git a/bundles/menhirLib/menhir-20120123/src/packedIntArray.ml b/bundles/menhirLib/menhir-20120123/src/packedIntArray.ml
deleted file mode 100644 (file)
index b31c744..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* A packed integer array is represented as a pair of an integer [k] and
-   a string [s]. The integer [k] is the number of bits per integer that we
-   use. The string [s] is just an array of bits, which is read in 8-bit
-   chunks. *)
-
-(* The ocaml programming language treats string literals and array literals
-   in slightly different ways: the former are statically allocated, while
-   the latter are dynamically allocated. (This is rather arbitrary.) In the
-   context of Menhir's table-based back-end, where compact, immutable
-   integer arrays are needed, ocaml strings are preferable to ocaml arrays. *)
-
-type t =
-  int * string
-
-(* The magnitude [k] of an integer [v] is the number of bits required
-   to represent [v]. It is rounded up to the nearest power of two, so
-   that [k] divides [Sys.word_size]. *)
-
-let magnitude (v : int) =
-  if v < 0 then
-    Sys.word_size
-  else
-    let rec check k max = (* [max] equals [2^k] *)
-      if (max <= 0) || (v < max) then
-       k
-         (* if [max] just overflew, then [v] requires a full ocaml
-            integer, and [k] is the number of bits in an ocaml integer
-            plus one, that is, [Sys.word_size]. *)
-      else
-       check (2 * k) (max * max)
-    in
-    check 1 2
-
-(* [pack a] turns an array of integers into a packed integer array. *)
-
-(* Because the sign bit is the most significant bit, the magnitude of
-   any negative number is the word size. In other words, [pack] does
-   not achieve any space savings as soon as [a] contains any negative
-   numbers, even if they are ``small''. *)
-
-let pack (a : int array) : t =
-
-  let m = Array.length a in
-  
-  (* Compute the maximum magnitude of the array elements. This tells
-     us how many bits per element we are going to use. *)
-
-  let k =
-    Array.fold_left (fun k v ->
-      max k (magnitude v)
-    ) 1 a
-  in
-
-  (* Because access to ocaml strings is performed on an 8-bit basis,
-     two cases arise. If [k] is less than 8, then we can pack multiple
-     array entries into a single character. If [k] is greater than 8,
-     then we must use multiple characters to represent a single array
-     entry. *)
-
-  if k <= 8 then begin
-
-    (* [w] is the number of array entries that we pack in a character. *)
-
-    assert (8 mod k = 0);
-    let w = 8 / k in
-
-    (* [n] is the length of the string that we allocate. *)
-
-    let n =
-      if m mod w = 0 then
-       m / w
-      else
-       m / w + 1
-    in
-
-    let s =
-      String.create n
-    in
-
-    (* Define a reader for the source array. The reader might run off
-       the end if [w] does not divide [m]. *)
-
-    let i = ref 0 in
-    let next () =
-      let ii = !i in
-      if ii = m then
-       0 (* ran off the end, pad with zeroes *)
-      else
-       let v = a.(ii) in
-       i := ii + 1;
-       v
-    in
-
-    (* Fill up the string. *)
-
-    for j = 0 to n - 1 do
-      let c = ref 0 in
-      for x = 1 to w do
-       c := (!c lsl k) lor next()
-      done;
-      s.[j] <- Char.chr !c
-    done;
-
-    (* Done. *)
-
-    k, s
-
-  end
-  else begin (* k > 8 *)
-
-    (* [w] is the number of characters that we use to encode an array entry. *)
-
-    assert (k mod 8 = 0);
-    let w = k / 8 in
-
-    (* [n] is the length of the string that we allocate. *)
-
-    let n =
-      m * w
-    in
-
-    let s =
-      String.create n
-    in
-
-    (* Fill up the string. *)
-
-    for i = 0 to m - 1 do
-      let v = ref a.(i) in
-      for x = 1 to w do
-       s.[(i + 1) * w - x] <- Char.chr (!v land 255);
-       v := !v lsr 8
-      done
-    done;
-
-    (* Done. *)
-
-    k, s
-
-  end
-
-(* Access to a string. *)
-
-let read (s : string) (i : int) : int =
-  Char.code (String.unsafe_get s i)
-
-(* [get1 t i] returns the integer stored in the packed array [t] at index [i].
-   It assumes (and does not check) that the array's bit width is [1]. The
-   parameter [t] is just a string. *)
-
-let get1 (s : string) (i : int) : int =
-  let c = read s (i lsr 3) in
-  let c = c lsr ((lnot i) land 0b111) in
-  let c = c land 0b1 in
-  c
-
-(* [get t i] returns the integer stored in the packed array [t] at index [i]. *)
-
-(* Together, [pack] and [get] satisfy the following property: if the index [i]
-   is within bounds, then [get (pack a) i] equals [a.(i)]. *)
-
-let get ((k, s) : t) (i : int) : int =
-  match k with
-  | 1 ->
-      get1 s i
-  | 2 ->
-      let c = read s (i lsr 2) in
-      let c = c lsr (2 * ((lnot i) land 0b11)) in
-      let c = c land 0b11 in
-      c
-  | 4 ->
-      let c = read s (i lsr 1) in
-      let c = c lsr (4 * ((lnot i) land 0b1)) in
-      let c = c land 0b1111 in
-      c
-  | 8 ->
-      read s i
-  | 16 ->
-      let j = 2 * i in
-      (read s j) lsl 8 + read s (j + 1)
-  | _ ->
-      assert (k = 32); (* 64 bits unlikely, not supported *)
-      let j = 4 * i in
-      (((read s j lsl 8) + read s (j + 1)) lsl 8 + read s (j + 2)) lsl 8 + read s (j + 3)
-
diff --git a/bundles/menhirLib/menhir-20120123/src/packedIntArray.mli b/bundles/menhirLib/menhir-20120123/src/packedIntArray.mli
deleted file mode 100644 (file)
index 5705193..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* A packed integer array is represented as a pair of an integer [k] and
-   a string [s]. The integer [k] is the number of bits per integer that we
-   use. The string [s] is just an array of bits, which is read in 8-bit
-   chunks. *)
-
-(* The ocaml programming language treats string literals and array literals
-   in slightly different ways: the former are statically allocated, while
-   the latter are dynamically allocated. (This is rather arbitrary.) In the
-   context of Menhir's table-based back-end, where compact, immutable
-   integer arrays are needed, ocaml strings are preferable to ocaml arrays. *)
-
-type t =
-  int * string
-
-(* [pack a] turns an array of integers into a packed integer array. *)
-
-(* Because the sign bit is the most significant bit, the magnitude of
-   any negative number is the word size. In other words, [pack] does
-   not achieve any space savings as soon as [a] contains any negative
-   numbers, even if they are ``small''. *)
-
-val pack: int array -> t
-
-(* [get t i] returns the integer stored in the packed array [t] at index [i]. *)
-
-(* Together, [pack] and [get] satisfy the following property: if the index [i]
-   is within bounds, then [get (pack a) i] equals [a.(i)]. *)
-
-val get: t -> int -> int
-
-(* [get1 t i] returns the integer stored in the packed array [t] at index [i].
-   It assumes (and does not check) that the array's bit width is [1]. The
-   parameter [t] is just a string. *)
-
-val get1: string -> int -> int
-
diff --git a/bundles/menhirLib/menhir-20120123/src/parameterizedGrammar.ml b/bundles/menhirLib/menhir-20120123/src/parameterizedGrammar.ml
deleted file mode 100644 (file)
index 02be1b5..0000000
+++ /dev/null
@@ -1,639 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Positions
-open Syntax
-open UnparameterizedSyntax
-open InternalSyntax
-open Misc
-
-(* Inference for non terminals. *)
-
-(* Unification variables convey [variable_info] to describe
-   the multi-equation they take part of. *)
-type variable_info = 
-    {
-      mutable structure : nt_type option;
-      mutable name      : string option;
-      mutable mark      : Mark.t
-    }
-
-(* [UnionFind] is used to improve the union and the equality test
-   between multi-equations. *)
-and variable = variable_info UnionFind.point
-
-(* Types are simple types. 
-   [star] denotes the type of ground symbol (non terminal or terminal).
-   [Arrow] describes the type of a parameterized non terminal. *)
-and nt_type = 
-    Arrow of variable list 
-
-let star =
-  Arrow []
-
-(* [var_name] is a name generator for unification variables. *)
-let var_name =
-  let name_counter = ref (-1) in
-  let next_name () = 
-    incr name_counter;
-    String.make 1 (char_of_int (97 + !name_counter mod 26))
-    ^ let d = !name_counter / 26 in if d = 0 then "" else string_of_int d
-  in
-    fun v -> 
-      let repr = UnionFind.find v in 
-       match repr.name with
-           None -> let name = next_name () in repr.name <- Some name; name
-         | Some x -> x
-
-(* [string_of_nt_type] is a simple pretty printer for types (they can be 
-   recursive). *)
-
-(* 2011/04/05: types can no longer be recursive, but I won't touch the printer -fpottier *)
-
-let string_of paren_fun ?paren ?colors t : string = 
-  let colors = 
-    match colors with 
-       None    -> (Mark.fresh (), Mark.fresh ()) 
-      | Some cs -> cs 
-  in
-  let s, p = paren_fun colors t in
-    if paren <> None && p = true then 
-      "("^ s ^")"
-    else s
-
-let rec paren_nt_type ((white, black) as colors) = function
-    
-    Arrow [] -> 
-      "*", false
-
-  | Arrow ins ->
-      let args = separated_list_to_string 
-       (string_of paren_var ~paren:true ~colors) ", " ins 
-      in
-      let args = 
-       if List.length ins > 1 then
-         "("^ args ^ ")"
-       else 
-         args
-      in
-       args^" -> *", true
-       
-and paren_var (white, black) x = 
-  let descr = UnionFind.find x in
-    if Mark.same descr.mark white then begin
-      descr.mark <- black;
-      var_name x, false
-    end 
-    else begin 
-      descr.mark <- white;
-      let s, p = match descr.structure with
-         None -> var_name x, false
-       | Some t -> paren_nt_type (white, black) t
-      in
-       if Mark.same descr.mark black then
-         (var_name x ^ " = " ^ s, true)
-       else 
-         (s, p)
-    end
-
-let string_of_nt_type ?paren ?colors t = 
-  string_of ?colors paren_nt_type t
-
-let string_of_var ?paren ?colors v = 
-  string_of ?colors paren_var v
-
-(* [print_env env] returns a string description of the typing environment. *)
-let print_env = 
-  List.iter (fun (k, (_, v)) -> 
-              Printf.eprintf "%s: %s\n" k (string_of_var v))
-
-(* [occurs_check x y] checks that [x] does not occur within [y]. *)
-
-let dfs action x =
-
-  let black = Mark.fresh () in
-
-  let rec visit_var x =
-    let descr = UnionFind.find x in 
-    if not (Mark.same descr.mark black) then begin
-      descr.mark <- black;
-      action x;
-      match descr.structure with
-      | None ->
-         ()
-      | Some t -> 
-         visit_term t
-    end
-
-  and visit_term (Arrow ins) =
-    List.iter visit_var ins
-
-  in
-  visit_var x
-
-exception OccursError of variable * variable
-
-let occurs_check x y =
-  dfs (fun z -> if UnionFind.equivalent x z then raise (OccursError (x, y))) y
-
-(* First order unification. *)
-
-(* 2011/04/05: perform an eager occurs check and prevent the construction
-   of any cycles. *)
-
-let fresh_flexible_variable () = 
-  UnionFind.fresh { structure = None; name = None; mark = Mark.none }
-
-let fresh_structured_variable t = 
-  UnionFind.fresh { structure = Some t; name = None; mark = Mark.none }
-
-let star_variable =
-  fresh_structured_variable star
-
-exception UnificationError of nt_type * nt_type
-exception BadArityError of int * int
-
-let rec unify_var toplevel x y =
-  if not (UnionFind.equivalent x y) then
-    let reprx, repry = UnionFind.find x, UnionFind.find y in
-      match reprx.structure, repry.structure with
-         None, Some t    -> occurs_check x y; UnionFind.union x y
-       | Some t, None    -> occurs_check y x; UnionFind.union y x
-       | None, None      -> UnionFind.union x y
-       | Some t, Some t' -> unify toplevel t t'; UnionFind.union x y
-           
-and unify toplevel t1 t2 = 
-  match t1, t2 with
-
-    | Arrow ins, Arrow ins' ->
-       let n1, n2 = List.length ins, List.length ins' in
-       if n1 <> n2 then
-         if n1 = 0 || n2 = 0 || not toplevel then
-           raise (UnificationError (t1, t2))
-         else
-           (* the flag [toplevel] is used only here and influences which
-              exception is raised; BadArityError is raised only at toplevel *)
-           raise (BadArityError (n1, n2));
-       List.iter2 (unify_var false) ins ins'
-
-let unify_var x y =
-  unify_var true x y
-
-(* Typing environment. *)
-type environment =
-    (string * (Positions.t list * variable)) list
-
-(* [lookup x env] returns the type related to [x] in the typing environment
-   [env]. 
-   By convention, identifiers that are not in [env] are terminals. They are
-   given the type [Star]. *)
-let lookup x (env: environment) = 
-  try 
-    snd (List.assoc x env)
-  with Not_found -> star_variable
-
-(* This function checks that the symbol [k] has the type [expected_type]. *)
-let check positions env k expected_type =
-  let inference_var = lookup k env in
-  let checking_var = fresh_structured_variable expected_type in
-    try
-      unify_var inference_var checking_var
-    with 
-       UnificationError (t1, t2) ->
-         Error.error
-           positions
-           (Printf.sprintf 
-              "How is this symbol parameterized?\n\
-             It is used at sorts %s and %s.\n\
-              The sort %s is not compatible with the sort %s."
-              (string_of_var inference_var) (string_of_var checking_var)
-              (string_of_nt_type t1) (string_of_nt_type t2))
-           
-      | BadArityError (n1, n2) ->
-         Error.error
-           positions
-           (Printf.sprintf
-              "does this symbol expect %d or %d arguments?" 
-              (min n1 n2) (max n1 n2))
-
-      | OccursError (x, y) ->
-         Error.error
-           positions
-           (Printf.sprintf 
-              "How is this symbol parameterized?\n\
-             It is used at sorts %s and %s.\n\
-              The sort %s cannot be unified with the sort %s."
-              (string_of_var inference_var) (string_of_var checking_var)
-              (string_of_var x) (string_of_var y))
-         
-
-
-(* An identifier can be used either in a total application or as a
-   higher-order non terminal (no partial application is allowed). *)
-let rec parameter_type env = function
-  | ParameterVar x ->
-      lookup x.value env
-
-  | ParameterApp (x, args) ->
-      assert (args <> []);
-      let expected_type =
-       (* [x] is applied, it must be to the exact number 
-          of arguments. *)
-       Arrow (List.map (parameter_type env) args) 
-      in
-       (* Check the well-formedness of the application. *)
-       check [x.position] env x.value expected_type;
-
-       (* Similarly, if it was a total application the result is 
-          [Star] otherwise it is the flexible variable. *)
-       star_variable
-
-let check_grammar p_grammar = 
-  (* [n] is the grammar size. *)
-  let n        = StringMap.cardinal p_grammar.p_rules in
-
-  (* The successors of the non terminal [N] are its producers. It 
-     induce a graph over the non terminals and its successor function
-     is implemented by [successors]. Non terminals are indexed using
-     [nt].
-  *) 
-  let nt, conv, iconv = index_map p_grammar.p_rules in
-  let parameters, name, branches, positions = 
-    (fun n -> (nt n).pr_parameters), (fun n -> (nt n).pr_nt),
-    (fun n -> (nt n).pr_branches), (fun n -> (nt n).pr_positions)
-  in
-    
-  (* The successors function is implemented as an array using the 
-     indexing previously created. *)
-  let successors = 
-    Array.init n (fun node -> 
-      (* We only are interested by parameterized non terminals. *)
-      if parameters node <> [] then
-       List.fold_left (fun succs { pr_producers = symbols } ->
-         List.fold_left (fun succs -> function (_, p) -> 
-           let symbol, _ = Parameters.unapp p in
-           try 
-             let symbol_node = conv symbol.value in
-               (* [symbol] is a parameterized non terminal, we add it 
-                  to the successors set. *)
-               if parameters symbol_node <> [] then
-                 IntSet.add symbol_node succs
-               else 
-                 succs
-           with Not_found -> 
-             (* [symbol] is a token, it is not interesting for type inference
-                purpose. *)
-             succs
-         ) succs symbols
-        ) IntSet.empty (branches node)
-      else
-       Misc.IntSet.empty
-    )
-  in
-
-  (* The successors function and the indexing induce the following graph 
-     module. *)
-  let module RulesGraph = 
-      struct
-
-       type node = int
-
-       let n = n
-
-       let index node = 
-         node
-
-       let successors f node = 
-         IntSet.iter f successors.(node)
-
-       let iter f = 
-         for i = 0 to n - 1 do 
-           f i
-         done
-
-      end
-  in
-  let module ConnectedComponents = Tarjan.Run (RulesGraph) in
-    (* We check that:
-       - all the parameterized definitions of a particular component
-       have the same number of parameters.
-       - every parameterized non terminal definition always uses
-       parameterized definitions of the same component with its
-       formal parameters.
-    
-       Components are marked during the traversal:
-       -1 means unvisited
-       n with n > 0 is the number of parameters of the clique.
-    *)
-  let unseen = -1 in
-  let marked_components = Array.create n unseen in
-    
-  let flexible_arrow args =
-    let ty = Arrow (List.map (fun _ -> fresh_flexible_variable ()) args) in
-      fresh_structured_variable ty 
-  in
-
-  (* [nt_type i] is the type of the i-th non terminal. *)
-  let nt_type i =
-    match parameters i with
-      | [] -> 
-         star_variable
-           
-      | x -> 
-         flexible_arrow x
-  in
-
-  (* [actual_parameters_as_formal] is the well-formedness checker for 
-     parameterized non terminal application. *)
-  let actual_parameters_as_formal actual_parameters formal_parameters = 
-    List.for_all2 (fun y -> (function ParameterVar x -> x.value = y 
-                             | _ -> false)) 
-      formal_parameters actual_parameters
-  in
-
-  (* The environment is initialized. *)
-  let env : environment = StringMap.fold  
-    (fun k r acu -> 
-       (k, (r.pr_positions, nt_type (conv k))) 
-       :: acu)
-    p_grammar.p_rules []
-  in
-
-    (* We traverse the graph checking each parameterized non terminal
-       definition is well-formed. *)
-    RulesGraph.iter 
-      (fun i ->
-        let params    = parameters i 
-        and iname     = name i 
-        and repr      = ConnectedComponents.representative i 
-        and positions = positions i
-        in
-
-        (* The environment is augmented with the parameters whose types are
-           unknown. *)
-        let env' = List.map 
-          (fun k -> (k, (positions, fresh_flexible_variable ()))) params
-        in
-        let env = env' @ env in
-          
-        (* The type of the parameterized non terminal is constrained to be
-           [expected_ty]. *)
-        let check_type () = 
-          check positions env iname (Arrow (List.map (fun (_, (_, t)) -> t) env'))
-        in
-
-        (* We check the number of parameters. *)
-        let check_parameters () = 
-          let parameters_len = List.length params in
-            (* The component is visited for the first time. *)
-            if marked_components.(repr) = unseen then
-              marked_components.(repr) <- parameters_len
-            else (* Otherwise, we check that the arity is homogeneous 
-                    in the component. *) 
-              if marked_components.(repr) <> parameters_len then 
-                Error.error positions
-                  (Printf.sprintf 
-                     "Mutually recursive definitions must have the same parameters.\n\
-                       This is not the case for %s and %s."
-                        (name repr) iname)
-        in
-
-       (* In each production rule, the parameterized non terminal
-          of the same component must be instantiated with the same
-          formal arguments. *)
-        let check_producers () =
-          List.iter 
-            (fun { pr_producers = symbols } -> List.iter 
-               (function (_, p) ->
-                  let symbol, actuals = Parameters.unapp p in
-                  (* We take the use of each symbol into account. *)
-                    check [ symbol.position ] env symbol.value 
-                      (if actuals = [] then star else 
-                         Arrow (List.map (parameter_type env) actuals));
-                  (* If it is in the same component, check in addition that
-                     the arguments are the formal arguments. *)
-                  try 
-                    let idx = conv symbol.value in 
-                      if ConnectedComponents.representative idx = repr then
-                        if not (actual_parameters_as_formal actuals params)
-                        then
-                          Error.error [ symbol.position ]
-                            (Printf.sprintf
-                               "Mutually recursive definitions must have the same \
-                                 parameters.\n\
-                                This is not the case for %s."
-                                (let name1, name2 = (name idx), (name i) in
-                                   if name1 <> name2 then name1 ^ " and "^ name2
-                                   else name1))
-                  with _ -> ())
-                   symbols) (branches i)
-        in
-          check_type ();
-          check_parameters ();
-          check_producers ())
-
-      
-let rec subst_parameter subst = function
-  | ParameterVar x ->
-      (try 
-       List.assoc x.value subst 
-      with Not_found ->
-       ParameterVar x)
-
-  | ParameterApp (x, ps) -> 
-      (try 
-       match List.assoc x.value subst with
-         | ParameterVar y ->
-             ParameterApp (y, List.map (subst_parameter subst) ps)
-
-         | ParameterApp _ ->
-             (* Type-checking ensures that we cannot do partial
-                application. Consequently, if an higher-order non terminal
-                is an actual argument, it cannot be the result of a 
-                partial application. *)
-             assert false
-
-      with Not_found -> 
-         ParameterApp (x, List.map (subst_parameter subst) ps))
-
-let subst_parameters subst = 
-  List.map (subst_parameter subst)
-
-let names_of_p_grammar p_grammar = 
-  StringMap.fold (fun tok _ acu -> StringSet.add tok acu) 
-    p_grammar.p_tokens StringSet.empty 
-    $$ (StringMap.fold (fun nt _ acu -> StringSet.add nt acu)
-         p_grammar.p_rules)
-
-let expand p_grammar = 
-  (* Check that it is safe to expand this parameterized grammar. *)
-  check_grammar p_grammar;
-
-  (* Set up a mechanism that ensures that names are unique -- and, in
-     fact, ensures the stronger condition that normalized names are
-     unique. *)
-
-  let names =
-    ref (StringSet.empty) 
-  in
-  let ensure_fresh name =
-    let normalized_name = Misc.normalize name in
-    if StringSet.mem normalized_name !names then
-      Error.error []
-       (Printf.sprintf "internal name clash over %s" normalized_name);
-    names := StringSet.add normalized_name !names;
-    name
-  in 
-  let expanded_rules = 
-    Hashtbl.create 13 
-  in
-  let module InstanceTable = 
-    Hashtbl.Make (Parameters)
-  in
-  let rule_names = 
-    InstanceTable.create 13 
-  in
-
-  (* [mangle p] chooses a name for the new nonterminal symbol that corresponds
-     to the parameter [p]. *)
-
-  let rec mangle = function 
-    | ParameterVar x
-    | ParameterApp (x, []) ->
-       Positions.value x
-    | ParameterApp (x, ps) ->
-
-       (* We include parentheses and commas in the names that we
-          assign to expanded nonterminals, because that is more
-          readable and acceptable in many situations. We replace them
-          with underscores in situations where these characters are
-          not valid. *)
-
-       Printf.sprintf "%s(%s)"
-         (Positions.value x)
-         (separated_list_to_string mangle "," ps)
-
-  in
-  let name_of symbol parameters = 
-    let param = ParameterApp (symbol, parameters) in
-    try 
-      InstanceTable.find rule_names param
-    with Not_found ->
-      let name = ensure_fresh (mangle param) in
-      InstanceTable.add rule_names param name;
-      name
-  in
-  (* Given the substitution [subst] from parameters to non terminal, we
-     instantiate the parameterized branch. *)
-  let rec expand_branch subst pbranch = 
-    let new_producers = List.map 
-      (function (ido, p) ->
-        let sym, actual_parameters = 
-          Parameters.unapp p in
-        let sym, actual_parameters =         
-          try 
-            match List.assoc sym.value subst with
-              | ParameterVar x ->
-                  x, subst_parameters subst actual_parameters
-
-              | ParameterApp (x, ps) ->
-                  assert (actual_parameters = []);
-                  x, ps
-                      
-          with Not_found -> 
-            sym, subst_parameters subst actual_parameters
-        in
-          (* Instantiate the definition of the producer. *)
-          (expand_branches subst sym actual_parameters, Option.map Positions.value ido))
-      pbranch.pr_producers
-    in
-      {
-        branch_position          = pbranch.pr_branch_position;
-       producers                = new_producers;
-       action                   = pbranch.pr_action;
-       branch_shift_precedence  = pbranch.pr_branch_shift_precedence;
-       branch_reduce_precedence = pbranch.pr_branch_reduce_precedence;
-      }
-
-  (* Instantiate the branches of sym for a particular set of actual
-     parameters. *)
-  and expand_branches subst sym actual_parameters =
-    let nsym = name_of sym actual_parameters in
-      try
-       if not (Hashtbl.mem expanded_rules nsym) then begin
-         let prule = StringMap.find (Positions.value sym) p_grammar.p_rules in
-         let subst = 
-           (* Type checking ensures that parameterized non terminal 
-              instantiations are well defined. *)
-           assert (List.length prule.pr_parameters 
-                   = List.length actual_parameters);
-           List.combine prule.pr_parameters actual_parameters @ subst in
-           Hashtbl.add expanded_rules nsym 
-             { branches = []; positions = []; inline_flag = false };
-         let rules = List.map (expand_branch subst) prule.pr_branches in
-           Hashtbl.replace expanded_rules nsym
-             { 
-               branches    = rules; 
-               positions   = prule.pr_positions; 
-               inline_flag = prule.pr_inline_flag;
-             }
-       end;
-       nsym
-      (* If [sym] is a terminal, then it is not in [p_grammar.p_rules]. 
-        Expansion is not needed. *)
-      with Not_found -> Positions.value sym 
-  in
-  let rec types_from_list = function
-    | [] -> StringMap.empty
-    | (nt, ty)::q ->
-        let accu = types_from_list q in
-        let mangled = mangle nt in
-        if StringMap.mem mangled accu then
-          Error.error [Positions.position (Parameters.with_pos nt)]
-            (Printf.sprintf
-               "There are multiple %%type definitions for nonterminal %s."
-               mangled);
-        StringMap.add mangled (Positions.value ty) accu
-  in
-
-  let start_symbols = StringMap.domain (p_grammar.p_start_symbols) in
-  {
-    preludes      = p_grammar.p_preludes;
-    postludes    = p_grammar.p_postludes;
-    parameters    = p_grammar.p_parameters;
-    start_symbols = start_symbols;
-    types         = types_from_list p_grammar.p_types;
-    tokens       = p_grammar.p_tokens;
-    rules        = 
-      let closed_rules = StringMap.fold 
-       (fun k prule rules -> 
-          (* If [k] is a start symbol then it cannot be parameterized. *)
-          if prule.pr_parameters <> [] && StringSet.mem k start_symbols then
-            Error.error []
-              (Printf.sprintf "The start symbol `%s' cannot be parameterized."
-                 k);
-
-          (* Entry points are the closed non terminals. *)
-          if prule.pr_parameters = [] then 
-            StringMap.add k { 
-              branches    = List.map (expand_branch []) prule.pr_branches;
-              positions   = prule.pr_positions;
-              inline_flag = prule.pr_inline_flag;
-            } rules
-          else rules)
-       p_grammar.p_rules
-       StringMap.empty
-      in
-       Hashtbl.fold StringMap.add expanded_rules closed_rules 
-  }
diff --git a/bundles/menhirLib/menhir-20120123/src/parameterizedGrammar.mli b/bundles/menhirLib/menhir-20120123/src/parameterizedGrammar.mli
deleted file mode 100644 (file)
index 5e835a2..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: parameterizedGrammar.mli,v 1.6 2005/12/01 16:20:06 regisgia Exp $ *)
-
-(* This turns a grammar where nonterminal symbols can be parameterized
-   into a grammar where nonterminal symbols are not parameterized. The
-   transformation is a textual expansion process, whose termination is
-   guaranteed by a simple type system.
-
-   Expansion creates new nonterminal symbols whose names contain
-   parentheses and commas. These names can be printed directly in
-   informational messages (error messages, conflict reports,
-   descriptions of the automaton, etc.). However, they must be
-   sanitized via [Misc.normalize] when printed in a context where a
-   valid identifier is expected. *)
-
-val expand : InternalSyntax.grammar -> UnparameterizedSyntax.grammar
-
-
diff --git a/bundles/menhirLib/menhir-20120123/src/parameters.ml b/bundles/menhirLib/menhir-20120123/src/parameters.ml
deleted file mode 100644 (file)
index bebb71a..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: parameters.ml,v 1.12 2005/12/02 16:16:22 regisgia Exp $ *)
-
-(* TEMPORARY clean up and write an .mli file *)
-
-open Syntax
-open Misc
-open Positions
-
-let app p ps =
-  match ps with
-  | [] ->
-      ParameterVar p
-  | _ ->
-      ParameterApp (p, ps)
-
-let oapp1 o p =
-  match o with
-  | None ->
-      p
-  | Some var ->
-      ParameterApp (var, [ p ])
-
-let unapp = function
-  | ParameterVar x ->
-      (x, [])
-
-  | ParameterApp (p, ps) ->
-      (p, ps)
-
-let rec map f = function
-  | ParameterVar x ->
-      ParameterVar (f x)
-
-  | ParameterApp (p, ps) ->
-      ParameterApp (f p, List.map (map f) ps)
-
-
-let rec fold f init = function
-  | ParameterVar x ->
-      f init x
-
-  | ParameterApp (p, ps) ->
-      f (List.fold_left (fold f) init ps) p
-       
-let identifiers m p = 
-  fold (fun acu x -> StringMap.add x.value x.position acu) m p
-
-type t = parameter
-
-let rec equal x y = 
-  match x, y with
-    | ParameterVar x, ParameterVar y when x.value = y.value ->
-       true
-    | ParameterApp (p1, p2), ParameterApp (p1', p2') ->
-       p1.value = p1'.value && List.for_all2 equal p2 p2'
-    | _ -> false
-
-let hash = function
-  | ParameterVar x
-  | ParameterApp (x, _) ->
-      Hashtbl.hash (Positions.value x)
-
-let position = function
-  | ParameterVar x 
-  | ParameterApp (x, _) ->
-      Positions.position x
-
-let with_pos p =
-  Positions.with_pos (position p) p
diff --git a/bundles/menhirLib/menhir-20120123/src/parser.mly b/bundles/menhirLib/menhir-20120123/src/parser.mly
deleted file mode 100644 (file)
index 6e64df4..0000000
+++ /dev/null
@@ -1,344 +0,0 @@
-/**************************************************************************/
-/*                                                                        */
-/*  Menhir                                                                */
-/*                                                                        */
-/*  François Pottier, INRIA Rocquencourt                                  */
-/*  Yann Régis-Gianas, PPS, Université Paris Diderot                      */
-/*                                                                        */
-/*  Copyright 2005-2008 Institut National de Recherche en Informatique    */
-/*  et en Automatique. All rights reserved. This file is distributed      */
-/*  under the terms of the Q Public License version 1.0, with the change  */
-/*  described in file LICENSE.                                            */
-/*                                                                        */
-/**************************************************************************/
-
-/* This is the crude version of the parser. It is meant to be processed
-   by ocamlyacc. Its existence is necessary for bootstrapping. It is kept
-   in sync with [fancy-parser]. The two parsers accept the same language,
-   but [fancy-parser] performs more refined error recovery. */
-
-%{
-
-open Keyword
-open ConcreteSyntax
-open Syntax
-open Positions
-
-%}
-
-%token TOKEN TYPE LEFT RIGHT NONASSOC START PREC PUBLIC COLON BAR EOF EQUAL 
-%token INLINE LPAREN RPAREN COMMA QUESTION STAR PLUS PARAMETER
-%token <string Positions.located> LID UID 
-%token <Stretch.t> HEADER
-%token <Stretch.ocamltype> OCAMLTYPE
-%token <string Lazy.t> PERCENTPERCENT
-%token <Syntax.action> ACTION
-%start grammar
-%type <ConcreteSyntax.grammar> grammar
-
-/* These declarations solve a shift-reduce conflict in favor of
-   shifting: when the declaration of a non-terminal symbol begins with
-   a leading bar, it is understood as an (insignificant) leading
-   optional bar, *not* as an empty right-hand side followed by a bar.
-   This ambiguity arises due to the existence of a new notation for
-   letting several productions share a single semantic action. */
-
-%nonassoc no_optional_bar
-%nonassoc BAR
-
-%%
-
-/* ------------------------------------------------------------------------- */
-/* A grammar consists of declarations and rules, followed by an optional
-   trailer, which we do not parse. */
-
-grammar:
-  declarations PERCENTPERCENT rules trailer
-    { 
-      { 
-       pg_filename          = ""; (* filled in by the caller *)
-       pg_declarations      = List.rev $1;
-       pg_rules             = $3;
-       pg_trailer           = $4 
-      }
-    }
-
-trailer:
-  EOF
-    { None }
-| PERCENTPERCENT /* followed by actual trailer */
-    { Some (Lazy.force $1) }
-
-/* ------------------------------------------------------------------------- */
-/* A declaration is an %{ Objective Caml header %}, or a %token, %start,
-   %type, %left, %right, or %nonassoc declaration. */
-
-declarations:
-  /* epsilon */
-    { [] }
-| declarations declaration
-    { $2 @ $1 }
-
-declaration:
-| HEADER /* lexically delimited by %{ ... %} */
-    { [ unknown_pos (DCode $1) ] }
-
-| TOKEN optional_ocamltype terminals
-    { List.map (Positions.map (fun terminal -> DToken ($2, terminal))) $3 }
-
-| START nonterminals
-    { List.map (Positions.map (fun nonterminal -> DStart nonterminal)) $2 }
-
-| TYPE OCAMLTYPE actual_parameters
-    { List.map (Positions.map (fun nt -> DType ($2, nt)))
-        (List.map Parameters.with_pos $3) }
-
-| START OCAMLTYPE nonterminals
-    /* %start <ocamltype> foo is syntactic sugar for %start foo %type <ocamltype> foo */
-    { Misc.mapd (fun ntloc -> 
-        Positions.mapd (fun nt -> DStart nt, DType ($2, ParameterVar ntloc)) ntloc) $3 }
-
-| priority_keyword symbols
-    { let prec = ParserAux.current_token_precedence (rhs_start_pos 1) (rhs_end_pos 1) in
-      List.map (Positions.map (fun symbol -> DTokenProperties (symbol, $1, prec))) $2 }
-
-| PARAMETER OCAMLTYPE
-    { [ unknown_pos (DParameter $2) ] }
-
-optional_ocamltype:
-  /* epsilon */
-    { None }
-| OCAMLTYPE /* lexically delimited by angle brackets */
-    { Some $1 }
-
-priority_keyword:
-  LEFT
-    { LeftAssoc }
-| RIGHT
-    { RightAssoc }
-| NONASSOC
-    { NonAssoc }
-
-/* ------------------------------------------------------------------------- */
-/* A symbol is a terminal or nonterminal symbol. One would like to
-   require nonterminal symbols to begin with a lowercase letter, so as
-   to lexically distinguish them from terminal symbols, which must
-   begin with an uppercase letter. However, for compatibility with
-   ocamlyacc, this is impossible. It can be required only for
-   nonterminal symbols that are also start symbols. */
-
-symbols:
-  /* epsilon */
-    { [] }
-| symbols optional_comma symbol
-    { $3 :: $1 }
-
-symbol:
-  LID
-    { $1 }
-| UID
-    { $1 }
-
-optional_comma:
-  /* epsilon */
-    { () }
-| COMMA
-    { () }
-
-/* ------------------------------------------------------------------------- */
-/* Terminals must begin with an uppercase letter. Nonterminals that are
-   declared to be start symbols must begin with a lowercase letter. */
-
-terminals:
-  /* epsilon */
-    { [] }
-| terminals optional_comma UID
-    { $3 :: $1 }
-
-nonterminals:
-  /* epsilon */
-    { [] }
-| nonterminals LID
-    { $2 :: $1 }
-
-/* ------------------------------------------------------------------------- */
-/* A rule defines a symbol. It is optionally declared %public, and optionally
-   carries a number of formal parameters. The right-hand side of the definition
-   consists of a list of production groups. */
-
-rules:
-  /* epsilon */
-    { [] }
-| rules rule
-    { $2 :: $1 }
-
-rule:
-  flags
-  symbol
-  optional_formal_parameters
-  COLON optional_bar
-  production_group production_groups
-    { 
-      let public, inline = $1 in
-      { pr_public_flag = public; 
-       pr_inline_flag = inline;
-       pr_nt          = Positions.value $2;
-       pr_positions   = [ Positions.position $2 ];
-       pr_parameters  = $3;
-       pr_branches    = List.flatten ($6 :: List.rev $7)
-      }
-    }
-
-flags:
-  /* epsilon */
-    { false, false }
-| PUBLIC
-    { true, false }
-| INLINE
-    { false, true }
-| PUBLIC INLINE
-    { true, true }
-| INLINE PUBLIC
-    { true, true }
-
-/* ------------------------------------------------------------------------- */
-/* Parameters are surroundered with parentheses and delimited by commas.
-   The syntax of actual parameters allows applications, whereas the syntax
-   of formal parameters does not. It also allows use of the "?", "+", and
-   "*" shortcuts. */
-
-optional_formal_parameters:
-  /* epsilon */
-    { [] }
-| LPAREN formal_parameters RPAREN
-    { $2 }
-
-formal_parameters:
-  symbol
-    { [ Positions.value $1 ] }
-| symbol COMMA formal_parameters
-    { Positions.value $1 :: $3 }
-
-optional_actual_parameters:
-  /* epsilon */
-    { [] }
-| LPAREN actual_parameters_comma RPAREN
-    { $2 }
-
-actual_parameters_comma:
-  actual_parameter 
-    { [ $1 ] }
-| actual_parameter COMMA actual_parameters_comma
-    { $1 :: $3 }
-
-actual_parameter:
-  symbol optional_actual_parameters optional_modifier
-    { Parameters.oapp1 $3 (Parameters.app $1 $2) }
-
-actual_parameters:
-  /* epsilon */
-    { [] }
-| actual_parameters optional_comma actual_parameter
-    { $3::$1 }
-
-optional_bar:
-  /* epsilon */ %prec no_optional_bar
-    { () }
-| BAR
-    { () }
-
-/* ------------------------------------------------------------------------- */
-/* The "?", "+", and "*" modifiers are short-hands for applications of
-   certain parameterized nonterminals, defined in the standard library. */
-
-optional_modifier:
-  /* epsilon */
-    { None }
-| modifier
-    { Some $1 }
-
-modifier:
-  QUESTION
-    { unknown_pos "option" }
-| PLUS
-    { unknown_pos "nonempty_list" }
-| STAR
-    { unknown_pos "list" }
-
-/* ------------------------------------------------------------------------- */
-/* A production group consists of a list of productions, followed by a
-   semantic action and an optional precedence specification. */
-
-production_groups:
-  /* epsilon */
-    { [] }
-| production_groups BAR production_group
-    { $3 :: $1 }
-
-production_group:
-  productions ACTION /* action is lexically delimited by braces */ optional_precedence
-    { 
-      let productions, action, oprec2 = $1, $2, $3 in
-
-      ParserAux.check_production_group
-       productions
-       (rhs_start_pos 2) (rhs_end_pos 2) action;
-
-      List.map (fun (producers, oprec1, rprec, pos) -> {
-       pr_producers                = producers;
-       pr_action                   = action;
-       pr_branch_shift_precedence  = ParserAux.override pos oprec1 oprec2;
-       pr_branch_reduce_precedence = rprec;
-       pr_branch_position          = pos
-      }) productions
-    }
-
-optional_precedence:
-  /* epsilon */
-    { None }
-| PREC symbol
-    { Some $2 }
-
-/* ------------------------------------------------------------------------- */
-/* A production is a list of producers, optionally followed by a
-   precedence declaration. Lists of productions are nonempty and
-   separated with bars. */
-
-productions:
-  production
-    { [ $1 ] }
-| production bar_productions
-    { $1 :: $2 }
-
-bar_productions:
-  BAR production
-    { [ $2 ] }
-| BAR production bar_productions
-    { $2 :: $3 }
-
-production:
-  producers optional_precedence
-    { List.rev $1,
-      $2,
-      ParserAux.current_reduce_precedence(),
-      Positions.lex_join (symbol_start_pos()) (symbol_end_pos())
-    }
-
-producers:
-  /* epsilon */ 
-    { [] }
-| producers producer
-    { $2 :: $1 }
-
-/* ------------------------------------------------------------------------- */
-/* A producer is an actual parameter, possibly preceded by a
-   binding. */
-
-producer:
-| actual_parameter
-    { None, $1 }
-| LID EQUAL actual_parameter
-    { Some $1, $3 }
-
-%%
-
diff --git a/bundles/menhirLib/menhir-20120123/src/parserAux.ml b/bundles/menhirLib/menhir-20120123/src/parserAux.ml
deleted file mode 100644 (file)
index af8971c..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Positions
-open Syntax
-
-let current_token_precedence =
-  let c = ref 0 in
-  fun pos1 pos2 ->
-    incr c;
-    PrecedenceLevel (Error.get_filemark (), !c, pos1, pos2)
-      
-let current_reduce_precedence =
-  let c = ref 0 in
-  fun () ->
-    incr c;
-    PrecedenceLevel (Error.get_filemark (), !c, Lexing.dummy_pos, Lexing.dummy_pos)
-
-module IdSet = Set.Make (struct
-  type t = identifier located
-  let compare id1 id2 =
-    compare (value id1) (value id2)
-end)
-
-let defined_identifiers ((ido, _) : producer) accu =
-  Option.fold IdSet.add ido accu
-
-let defined_identifiers (producers : producer list) =
-  List.fold_right defined_identifiers producers IdSet.empty
-
-let check_production_group right_hand_sides pos1 pos2 action =
-
-  begin
-    match right_hand_sides with
-    | [] ->
-       assert false
-    | ((producers : producer list), _, _, _) :: right_hand_sides ->
-       let ids = defined_identifiers producers in
-       List.iter (fun (producers, _, _, _) ->
-         let ids' = defined_identifiers producers in
-         try
-           let id =
-             IdSet.choose (IdSet.union
-                                 (IdSet.diff ids ids')
-                                 (IdSet.diff ids' ids))
-           in
-           Error.error [Positions.position id]
-             "Two productions that share a semantic action must define\n\
-              exactly the same identifiers."
-         with Not_found ->
-           ()
-         ) right_hand_sides
-  end;
-  begin
-    if List.length right_hand_sides > 1 && Action.use_dollar action then
-      Error.signal (Positions.two pos1 pos2)
-       "A semantic action that is shared between several productions must\n\
-        not use the $i notation -- semantic values must be named instead."
-  end
-
-let override pos o1 o2 =
-  match o1, o2 with
-  | Some _, Some _ ->
-      Error.signal [ pos ] "This production carries two %prec declarations.";
-      o2
-  | None, Some _ ->
-      o2
-  | _, None ->
-      o1
diff --git a/bundles/menhirLib/menhir-20120123/src/parserAux.mli b/bundles/menhirLib/menhir-20120123/src/parserAux.mli
deleted file mode 100644 (file)
index 6c75c54..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module provides utilities that are shared by the two versions
-   of the parser. *)
-
-open Syntax
-
-(* TEMPORARY document *)
-
-val current_token_precedence: Lexing.position -> Lexing.position -> precedence_level
-val current_reduce_precedence: unit -> precedence_level
-
-(* [check_disjunctive_production] accepts production group and checks
-   that they all productions in the group define the same set of
-   identifiers. It also checks that the semantic action does not use
-   any [$i] keyword. *)
-
-val check_production_group:
-  (producer list * 'a * 'b * 'c) list ->
-  Lexing.position -> Lexing.position -> Action.t -> unit
-
-(* [override pos oprec1 oprec2] decides which of the two optional
-   %prec declarations [oprec1] and [oprec2] applies to a
-   production. It signals an error if the two are present. *)
-
-val override: Positions.t -> 'a option -> 'a option -> 'a option
-
diff --git a/bundles/menhirLib/menhir-20120123/src/partialGrammar.ml b/bundles/menhirLib/menhir-20120123/src/partialGrammar.ml
deleted file mode 100644 (file)
index 8e55c14..0000000
+++ /dev/null
@@ -1,777 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: partialGrammar.ml,v 1.63 2006/10/22 14:07:57 fpottier Exp $ *)
-open Misc
-open Syntax
-open Stretch
-open ConcreteSyntax
-open InternalSyntax
-open Positions
-open Keyword
-
-(* ------------------------------------------------------------------------- *)
-(* This adds one declaration [decl], as found in file [filename], to
-   the grammar [grammar]. *)
-
-let join_declaration filename (grammar : grammar) decl = 
-  match decl.value with
-
-  (* Preludes are stored in an arbitrary order. The order of
-     preludes within a single source file is preserved. Same
-     treatment for functor parameters. *)
-
-  | DCode code -> 
-      { grammar with p_preludes = grammar.p_preludes @ [ code ] }
-  | DParameter (Stretch.Declared stretch) -> 
-      { grammar with p_parameters = grammar.p_parameters @ [ stretch ] }
-  | DParameter (Stretch.Inferred _) ->
-      assert false
-
-  (* Token declarations are recorded. Things are made somewhat
-     difficult by the fact that %token and %left-%right-%nonassoc
-     declarations are independent. *)
-
-  | DToken (ocamltype, terminal) ->
-      let token_property = 
-       try
-
-         (* Retrieve any previous definition for this token. *)
-
-         let token_property =
-           StringMap.find terminal grammar.p_tokens
-         in
-
-         (* If the previous definition was actually a %token declaration
-            (as opposed to a %left, %right, or %nonassoc specification),
-            signal an error. *)
-
-         if token_property.tk_is_declared then
-           Error.errorp decl
-             (Printf.sprintf "the token %s has multiple definitions." terminal)
-
-         (* Otherwise, update the previous definition. *)
-
-         else 
-           { token_property with 
-             tk_is_declared = true;
-             tk_ocamltype   = ocamltype;
-             tk_filename    = filename;
-             tk_position    = decl.position;
-           }
-
-       with Not_found -> 
-
-         (* If no previous definition exists, create one. *)
-
-         { 
-           tk_filename      = filename; 
-           tk_ocamltype     = ocamltype;
-           tk_associativity = UndefinedAssoc;
-           tk_priority      = UndefinedPrecedence;
-           tk_position      = decl.position;
-           tk_is_declared   = true
-         } 
-
-      in
-      { grammar with
-       p_tokens = StringMap.add terminal token_property grammar.p_tokens }
-
-  (* Start symbols. *)
-
-  | DStart nonterminal ->
-      { grammar with
-        p_start_symbols = StringMap.add nonterminal decl.position grammar.p_start_symbols }
-
-  (* Type declarations for nonterminals. *)
-
-  | DType (ocamltype, nonterminal) ->
-      { grammar with
-          p_types = (nonterminal, with_pos (position decl) ocamltype)::grammar.p_types }
-
-  (* Token associativity and precedence. *)
-
-  | DTokenProperties (terminal, assoc, prec) ->
-
-      (* Retrieve the property record for this token, creating one
-        if none existed (but without deeming the token to have been
-        declared). *)
-
-      let token_properties, grammar = 
-       try 
-         StringMap.find terminal grammar.p_tokens, grammar
-       with Not_found -> 
-         let p = { 
-           tk_filename      = filename; 
-           tk_ocamltype     = None;
-           tk_associativity = UndefinedAssoc;
-           tk_priority      = prec;
-           tk_is_declared   = false;
-           (* Will be updated later. *)
-           tk_position      = decl.position;
-         } in 
-         p, { grammar with 
-              p_tokens = StringMap.add terminal p grammar.p_tokens }
-      in
-
-      (* Reject duplicate precedence declarations. *)
-
-      if token_properties.tk_associativity <> UndefinedAssoc then 
-       Error.error
-         [ decl.position; token_properties.tk_position ]
-         (Printf.sprintf "there are multiple precedence declarations for token %s." terminal);
-
-      (* Record the new declaration. *)
-
-      token_properties.tk_priority <- prec;
-      token_properties.tk_associativity <- assoc;
-      grammar
-
-(* ------------------------------------------------------------------------- *)
-(* This stores an optional trailer into a grammar. 
-   Trailers are stored in an arbitrary order. *)
-
-let join_trailer trailer grammar = 
-  match trailer with
-  | None -> 
-      grammar 
-  | Some trailer -> 
-      { grammar with p_postludes = trailer :: grammar.p_postludes }
-
-(* ------------------------------------------------------------------------- *)
-(* We rewrite definitions when nonterminals are renamed. The
-   renaming [phi] is an association list of names to names. *)
-
-type renaming =
-   (nonterminal * nonterminal) list
-
-let identity_renaming = 
-  [] 
-
-let rewrite_nonterminal (phi : renaming) nonterminal =
-  Misc.support_assoc phi nonterminal
-
-let rewrite_parameter phi parameter = 
-  Parameters.map (Positions.map (Misc.support_assoc phi)) parameter
-
-let rewrite_element phi (ido, parameter) =
-  ido, rewrite_parameter phi parameter
-
-let rewrite_branch phi ({ pr_producers = producers } as branch) =
-  { branch with pr_producers = List.map (rewrite_element phi) producers }
-
-let rewrite_branches phi branches =
-  match phi with
-  | [] ->
-      branches
-  | _ ->
-      List.map (rewrite_branch phi) branches
-
-let fresh_counter = ref 0 
-
-let names = ref StringSet.empty
-
-let use_name name = 
-  names := StringSet.add name !names
-
-let used_name name = 
-  StringSet.mem name !names
-
-let rec fresh ?(hint = "v") () = 
-  let name = 
-    incr fresh_counter;
-    hint ^ string_of_int !fresh_counter
-  in
-    if used_name name then
-      fresh ~hint ()
-    else (
-      use_name name;
-      name
-    )
-      
-(* Alpha conversion of [prule]. We rename bound parameters using
-   fresh names. *)
-let alphaconvert_rule parameters prule = 
-  let phi = 
-    List.combine parameters (List.map (fun x -> fresh ~hint:x ()) parameters)
-  in
-    { prule with
-       pr_parameters  = List.map (Misc.support_assoc phi) prule.pr_parameters;
-       pr_branches    = rewrite_branches phi prule.pr_branches
-    }
-
-(* Rewrite a rule taking bounded names into account. We rename parameters
-   to avoid capture. *)
-let rewrite_rule phi prule = 
-  let ids = 
-    List.fold_left (fun acu (f, d) -> StringSet.add f (StringSet.add d acu)) 
-      StringSet.empty phi 
-  in
-  let captured_parameters = 
-    List.filter (fun p -> StringSet.mem p ids) prule.pr_parameters
-  in
-  let prule = 
-    alphaconvert_rule captured_parameters prule
-  in
-    { prule with
-       pr_nt = rewrite_nonterminal phi prule.pr_nt;
-       pr_branches = rewrite_branches phi prule.pr_branches }
-      
-let rewrite_rules phi rules =
-  List.map (rewrite_rule phi) rules
-
-let rewrite_grammar phi grammar =
-  (* We assume that [phi] affects only private symbols, so it does
-     not affect the start symbols. *)
-  if phi = identity_renaming then 
-    grammar
-  else 
-    { grammar with pg_rules = rewrite_rules phi grammar.pg_rules }
-
-(* ------------------------------------------------------------------------- *)
-(* To rename (internalize) a nonterminal, we prefix it with its filename.
-   This guarantees that names are unique. *)
-
-let is_valid_nonterminal_character = function
-  | 'A' .. 'Z' 
-  | 'a' .. 'z'
-  | '_'
-  | '\192' .. '\214'
-  | '\216' .. '\246'
-  | '\248' .. '\255'
-  | '0' .. '9' ->
-      true
-  | _ ->
-      false
-
-let restrict filename =
-  let m = String.copy (Filename.chop_suffix filename (if Settings.coq then ".vy" else ".mly")) in
-  for i = 0 to String.length m - 1 do
-    if not (is_valid_nonterminal_character m.[i]) then
-      m.[i] <- '_'
-  done;
-  m
-
-let rename nonterminal filename = 
-  let name = restrict filename ^ "_" ^ nonterminal in
-    if used_name name then
-      fresh ~hint:name ()
-    else 
-      (use_name name; name)
-
-(* ------------------------------------------------------------------------- *)
-(* A nonterminal is considered public if it is declared using %public
-   or %start. *)
-
-let is_public grammar prule =
-  prule.pr_public_flag || StringMap.mem prule.pr_nt grammar.p_start_symbols
-
-(* ------------------------------------------------------------------------- *)
-type symbol_kind =
-    
-  (* The nonterminal is declared public at a particular position. *)
-  | PublicNonTerminal of Positions.t
-
-  (* The nonterminal is not declared public at a particular position. *)
-  | PrivateNonTerminal of Positions.t
-
-  (* The symbol is a token. *)
-  | Token of token_properties
-
-  (* We do not know yet what does the symbol means. 
-     This is defined in the sequel or it is free in the partial grammar. *)
-  | DontKnow of Positions.t
-
-type symbol_table =
-    (symbol, symbol_kind) Hashtbl.t
-
-let find_symbol symbols symbol =
-  Hashtbl.find symbols symbol
-
-let add_in_symbol_table symbols symbol kind =
-  use_name symbol;
-  Hashtbl.add symbols symbol kind;
-  symbols
-
-let replace_in_symbol_table symbols symbol kind =
-  Hashtbl.replace symbols symbol kind;
-  symbols
-
-let empty_symbol_table () =
-  Hashtbl.create 13
-
-let store_symbol symbols symbol kind = 
-  try
-    let sym_info = find_symbol symbols symbol in
-      match sym_info, kind with
-         
-       (* There are two definitions of the same symbol in one
-          particular unit. This is forbidden. *)
-       | (PublicNonTerminal p | PrivateNonTerminal p),
-         (PublicNonTerminal p' | PrivateNonTerminal p') ->
-           Error.error [ p; p'] 
-             (Printf.sprintf 
-                "the nonterminal symbol %s is multiply defined."
-                symbol)
-
-       (* The symbol is known to be a token but declared as a non terminal.*)
-       | (Token tkp, (PrivateNonTerminal p | PublicNonTerminal p)) 
-       | ((PrivateNonTerminal p | PublicNonTerminal p), Token tkp) ->
-           Error.error [ p; tkp.tk_position ]
-             (Printf.sprintf 
-                "The identifier %s is a reference to a token."
-                symbol)
-
-       (* We do not gain any piece of information. *)
-       | _, DontKnow _ | Token _, Token _ ->
-           symbols 
-
-       (* We learn that the symbol is a non terminal or a token. *)
-       | DontKnow _, _ ->
-           replace_in_symbol_table symbols symbol kind
-
-  with Not_found ->
-    add_in_symbol_table symbols symbol kind
-
-let store_used_symbol position tokens symbols symbol =
-  try
-    store_symbol symbols symbol (Token (StringMap.find symbol tokens))
-  with Not_found ->
-    store_symbol symbols symbol (DontKnow position)
-
-let non_terminal_is_not_reserved symbol positions = 
-  if symbol = "error" then
-    Error.error positions
-      (Printf.sprintf "%s is reserved and thus cannot be used \
-                       as a non-terminal symbol." symbol)
-
-let non_terminal_is_not_a_token tokens symbol positions = 
-  try
-    let tkp = StringMap.find symbol tokens in
-      Error.error (positions @ [ tkp.tk_position ])
-      (Printf.sprintf 
-        "The identifier %s is a reference to a token."
-        symbol)
-  with Not_found -> ()
-
-let store_public_nonterminal tokens symbols symbol positions =
-  non_terminal_is_not_reserved symbol positions;
-  non_terminal_is_not_a_token tokens symbol positions;
-  store_symbol symbols symbol (PublicNonTerminal (List.hd positions))
-      
-let store_private_nonterminal tokens symbols symbol positions =
-  non_terminal_is_not_reserved symbol positions;
-  non_terminal_is_not_a_token tokens symbol positions;
-  store_symbol symbols symbol (PrivateNonTerminal (List.hd positions))
-
-let string_of_kind = function
-  | PublicNonTerminal p ->
-      Printf.sprintf "public (%s)" (Positions.string_of_pos p)
-
-  | PrivateNonTerminal p ->
-      Printf.sprintf "private (%s)" (Positions.string_of_pos p)
-
-  | Token tk ->
-      Printf.sprintf "token (%s)" tk.tk_filename
-
-  | DontKnow p ->
-      Printf.sprintf "only used at (%s)" (Positions.string_of_pos p)
-
-let string_of_symbol_table t = 
-  let b = Buffer.create 13 in
-  let m = 1 + Hashtbl.fold (fun k v acu -> max (String.length k) acu) t 0 in
-  let fill_blank s =
-    let s' = String.make m ' ' in
-      String.blit s 0 s' 0 (String.length s);
-      s'
-  in
-    Hashtbl.iter (fun k v -> Buffer.add_string b 
-                   (Printf.sprintf "%s: %s\n" 
-                      (fill_blank k) (string_of_kind v))) t;
-    Buffer.contents b
-
-let is_private_symbol t x = 
-  try
-    match Hashtbl.find t x with
-      | PrivateNonTerminal _ ->
-         true
-           
-      | _ ->
-         false
-  with Not_found -> 
-    false
-
-let is_public_symbol t x = 
-  try
-    match Hashtbl.find t x with
-      | PublicNonTerminal _ ->
-         true
-           
-      | _ ->
-         false
-  with Not_found -> 
-    false
-
-let fold_on_private_symbols f init t = 
-  Hashtbl.fold 
-    (fun k -> function PrivateNonTerminal _ -> (fun acu -> f acu k)
-       | _ -> (fun acu -> acu))
-    t init
-
-let fold_on_public_symbols f init t = 
-  Hashtbl.fold 
-    (fun k -> function PublicNonTerminal _ -> (fun acu -> f acu k)
-       | _ -> (fun acu -> acu))
-    t init
-
-let iter_on_only_used_symbols f t = 
-  Hashtbl.iter 
-    (fun k -> function DontKnow pos -> f k pos
-       | _ -> ())
-    t 
-
-let symbols_of grammar (pgrammar : ConcreteSyntax.grammar) = 
-  let tokens = grammar.p_tokens in
-  let symbols_of_rule symbols prule = 
-    let rec store_except_rule_parameters = 
-      fun symbols (symbol, parameters) ->
-       (* Rule parameters are bound locally, so they are not taken into
-          account. *)
-       if List.mem symbol.value prule.pr_parameters then
-         symbols
-       else 
-         (* Otherwise, mark this symbol as being used and analyse its
-            parameters. *)
-         List.fold_left 
-           (fun symbols -> function 
-              | ParameterApp (symbol, parameters) -> 
-                  store_except_rule_parameters symbols (symbol, parameters)
-              | ParameterVar symbol ->
-                  store_except_rule_parameters symbols (symbol, [])
-           )
-           (store_used_symbol symbol.position tokens symbols symbol.value) parameters
-    in
-      
-    (* Analyse each branch. *)
-    let symbols = List.fold_left (fun symbols branch ->
-      List.fold_left (fun symbols (_, p) -> 
-       let symbol, parameters = Parameters.unapp p in
-       store_except_rule_parameters symbols (symbol, parameters)
-      ) symbols branch.pr_producers
-    ) symbols prule.pr_branches
-    in
-      (* Store the symbol declaration. *)
-      if prule.pr_public_flag 
-       || StringMap.mem prule.pr_nt grammar.p_start_symbols then 
-       store_public_nonterminal tokens symbols prule.pr_nt prule.pr_positions
-      else
-       store_private_nonterminal tokens symbols prule.pr_nt prule.pr_positions
-  in
-    List.fold_left symbols_of_rule (empty_symbol_table ()) pgrammar.pg_rules
-
-let merge_rules tokens symbols pgs = 
-
-  (* Retrieve all the public symbols. *)
-  let public_symbols =
-    List.fold_left (fold_on_public_symbols (fun s k -> StringSet.add k s)) 
-      (StringSet.singleton "error")
-      symbols
-  in
-
-  (* We check the references in each grammar can be bound to 
-     a public symbol. *)
-  let _ = 
-    List.iter 
-      (iter_on_only_used_symbols 
-        (fun k pos -> if not (StringSet.mem k public_symbols) then
-           Error.error [ pos ]
-             (Printf.sprintf "%s is undefined." k)))
-      symbols
-  in
-  (* Detect private symbol clashes and rename them if necessary. *)
-  let detect_private_symbol_clashes = 
-    fold_on_private_symbols 
-      (fun (defined, clashes) symbol ->
-        if StringSet.mem symbol defined 
-          || StringSet.mem symbol public_symbols then
-          (defined, StringSet.add symbol clashes)
-        else 
-          (StringSet.add symbol defined, clashes))
-  in 
-  let private_symbols, clashes = 
-    List.fold_left detect_private_symbol_clashes (StringSet.empty, StringSet.empty) symbols
-  in 
-  let rpgs = List.map 
-    (fun (symbol_table, pg) ->
-       let renaming = 
-        StringSet.fold 
-          (fun x phi ->
-             if is_private_symbol symbol_table x then begin
-                 let x' = rename x pg.pg_filename in
-                   Printf.fprintf stderr
-                     "Note: the nonterminal symbol %s (from %s) is renamed %s.\n"
-                     x pg.pg_filename x';
-                   (x, x') :: phi
-               end
-             else phi)
-          clashes []    
-       in
-        rewrite_grammar renaming pg)
-    pgs
-  in
-    
-    (* Merge public nonterminal definitions 
-       and copy private nonterminal definitions. Since the clash between
-       private symbols have already been resolved, these copies are safe. *)
-    List.fold_left 
-      (fun rules rpg -> List.fold_left 
-        (fun rules r -> 
-           let r = 
-             try
-               let r' = StringMap.find r.pr_nt rules in
-               let positions = r.pr_positions @ r'.pr_positions in
-               let ra, ra' = 
-                 List.length r.pr_parameters, 
-                 List.length r'.pr_parameters            
-               in
-                 (* The arity of the parameterized symbols must be constant.*)
-                 if ra <> ra' then 
-                   Error.error positions 
-                     (Printf.sprintf "symbol %s is defined with arities %d and %d."
-                        r.pr_nt ra ra')
-                 else if r.pr_inline_flag <> r'.pr_inline_flag then
-                   Error.error positions
-                     (Printf.sprintf 
-                        "not all definitions of %s are marked %%inline." r.pr_nt)
-                 else 
-                   (* We combine the different branches. The parameters 
-                      could have different names, we rename them with
-                      the fresh names assigned earlier (see the next 
-                      comment). *)
-                   let phi = List.combine r.pr_parameters r'.pr_parameters in
-                   let rbr = rewrite_branches phi r.pr_branches in
-                     { r' with 
-                         pr_positions = positions;
-                         pr_branches  = rbr @ r'.pr_branches 
-                     } 
-             with Not_found ->
-               (* We alphaconvert the rule in order to avoid the capture of 
-                  private symbols coming from another unit. *)
-               alphaconvert_rule r.pr_parameters r
-           in
-             StringMap.add r.pr_nt r rules) rules rpg.pg_rules)
-      StringMap.empty rpgs
-
-let empty_grammar =
-  {
-    p_preludes                = [];
-    p_postludes               = [];
-    p_parameters              = [];
-    p_start_symbols           = StringMap.empty;
-    p_types                   = [];
-    p_tokens                  = StringMap.empty;
-    p_rules                   = StringMap.empty
-  }
-
-let join grammar pgrammar =
-  let filename = pgrammar.pg_filename in
-    List.fold_left (join_declaration filename) grammar pgrammar.pg_declarations
-    $$ join_trailer pgrammar.pg_trailer
-
-(* Check that the $i's are consistent, that is, that they are within
-   bounds and that they are not used when symbols are explicitly
-   named. Check also that no two symbols carry the same name. *)
-
-let check_keywords grammar producers action =
-  let length = List.length producers in
-    List.iter
-      (function keyword ->
-        match Positions.value keyword with
-          | Dollar i
-          | Position (RightDollar i, _, _) ->
-              if i < 1 || i > length then
-                Error.errorp keyword
-                  (Printf.sprintf "$%d refers to a nonexistent symbol." i);
-              let ido, param = List.nth producers (i - 1) in
-              begin
-                match ido with
-                  | Some { value = id } ->
-                      Error.errorp keyword
-                        (Printf.sprintf 
-                           "please do not say: $%d. Instead, say: %s." i id)
-                  | None ->
-                      ()
-              end
-          | Position (RightNamed id, _, _) ->
-              let found =
-                ref false 
-              in
-              List.iter (fun (ido, param) ->
-                match ido with
-                | Some { value = id' } when id = id' ->
-                    found := true
-                | _ ->
-                    ()
-              ) producers;
-              if not !found then
-                Error.errorp keyword
-                  (Printf.sprintf "%s refers to a nonexistent symbol." id)
-          | Position (Left, _, _)
-          | PreviousError
-          | SyntaxError ->
-              ()
-      ) (Action.pkeywords action)
-
-let check_parameterized_grammar_is_well_defined grammar =
-
-  (* Every start symbol is defined and has a %type declaration. *)
-  StringMap.iter 
-    (fun nonterminal p ->
-       if not (StringMap.mem nonterminal grammar.p_rules) then
-        Error.error [p] (Printf.sprintf "the start symbol %s is undefined." 
-                          nonterminal);
-       if not (List.exists (function 
-                            | ParameterVar { value = id }, _ -> id = nonterminal
-                            | _ -> false) grammar.p_types) then
-        Error.error [p]
-          (Printf.sprintf 
-             "the type of the start symbol %s is unspecified." nonterminal);
-    ) grammar.p_start_symbols;
-
-  let rec parameter_head_symb = function
-    | ParameterVar id -> id
-    | ParameterApp (id, _) -> id
-  in
-
-  List.iter (fun (symbol, _) ->
-    let head_symb = parameter_head_symb symbol in
-    if not (StringMap.mem (value head_symb) grammar.p_rules) then
-      Error.errorp (Parameters.with_pos symbol)
-       (Printf.sprintf
-          "this is a terminal symbol.\n\
-             %%type declarations are applicable only to nonterminal symbols."))
-    grammar.p_types;
-
-  (* Every reference to a symbol is well defined. *)
-  let reserved = [ "error" ] in
-  let used_tokens = ref StringSet.empty in
-  let mark_token_as_used token = 
-    used_tokens := StringSet.add token !used_tokens
-  in
-  let check_identifier_reference grammar prule s p = 
-    (* Mark the symbol as a used token if this is a token. *)
-    if StringMap.mem s grammar.p_tokens then
-      mark_token_as_used s;
-    
-    if not (StringMap.mem s grammar.p_rules
-          || StringMap.mem s grammar.p_tokens
-          || List.mem s prule.pr_parameters
-          || List.mem s reserved) then
-      Error.error [ p ] (Printf.sprintf "%s is undefined." s)
-  in
-    StringMap.iter
-      (fun k prule -> List.iter
-
-        (* Check each branch. *)
-        (fun { pr_producers = producers; 
-              pr_branch_shift_precedence = sprec;
-              pr_action = action 
-            } -> ignore (List.fold_left
-                           
-           (* Check the producers. *)
-            (fun already_seen (id, p) ->
-              let symbol, parameters = Parameters.unapp p in
-              let s = symbol.value and p = symbol.position in
-              let already_seen = 
-                match id with
-                    None -> already_seen
-                  | Some id -> 
-                      (* Check the producer id is unique. *)
-                      if StringSet.mem id.value already_seen then
-                        Error.error [ id.position ]
-                          (Printf.sprintf
-                             "there are multiple producers named %s in this sequence." 
-                             id.value);
-                      StringSet.add id.value already_seen
-              in
-
-                (* Check that the producer is defined somewhere. *)
-                check_identifier_reference grammar prule s p;
-                StringMap.iter (check_identifier_reference grammar prule) 
-                  (List.fold_left Parameters.identifiers StringMap.empty parameters);
-                
-                (* Check the %prec is a valid reference to a token. *)
-                (try
-                    if not ((StringMap.find s grammar.p_tokens).tk_is_declared
-                           || List.mem s reserved) then 
-                     Error.errorp symbol
-                       (Printf.sprintf "%s has not been declared as a token." s)
-                 with Not_found -> ());
-                already_seen
-                                
-            ) StringSet.empty producers);
-
-           check_keywords grammar producers action;
-
-            match sprec with
-
-              | None -> ()
-
-              | Some terminal ->
-                 check_identifier_reference grammar prule 
-                   terminal.value terminal.position;
-
-                 (* It is forbidden to use the %prec directive with %inline. *)
-                 if prule.pr_inline_flag then
-                   Error.errorp terminal
-                     "use of %prec is forbidden in an %inlined nonterminal definition.";
-
-                 (* Furthermore, the symbol following %prec must be a valid
-                    token identifier. *)  
-                  if not (StringMap.mem terminal.value grammar.p_tokens) then
-                   Error.errorp terminal
-                     (Printf.sprintf "%s is undefined." terminal.value))
-
-        prule.pr_branches;
-
-        (* It is forbidden to use %inline on a %start symbol. *)
-        if (prule.pr_inline_flag 
-            && StringMap.mem k grammar.p_start_symbols) then
-          Error.error prule.pr_positions 
-            (Printf.sprintf 
-               "%s cannot be both a start symbol and inlined." k);
-
-      ) grammar.p_rules;
-    
-  (* Check that every token is used. *)
-  begin match Settings.token_type_mode with
-  | Settings.TokenTypeOnly ->
-      ()
-  | Settings.TokenTypeAndCode
-  | Settings.CodeOnly _ ->
-      StringMap.iter (fun token { tk_position = p } -> 
-       if not (StringSet.mem token !used_tokens) then
-         Error.warning [p] 
-           (Printf.sprintf "the token %s is unused." token)
-      ) grammar.p_tokens
-  end;
-    
-  grammar
-
-let join_partial_grammars pgs =
-  let grammar = List.fold_left join empty_grammar pgs in
-  let symbols = List.map (symbols_of grammar) pgs in
-  let tpgs = List.combine symbols pgs in
-  let rules = merge_rules grammar.p_tokens symbols tpgs in 
-  check_parameterized_grammar_is_well_defined { grammar with p_rules = rules }
diff --git a/bundles/menhirLib/menhir-20120123/src/partialGrammar.mli b/bundles/menhirLib/menhir-20120123/src/partialGrammar.mli
deleted file mode 100644 (file)
index 978a663..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: partialGrammar.mli,v 1.4 2005/12/01 16:20:07 regisgia Exp $ *)
-
-val join_partial_grammars : 
-  ConcreteSyntax.grammar list -> InternalSyntax.grammar
diff --git a/bundles/menhirLib/menhir-20120123/src/patricia.ml b/bundles/menhirLib/menhir-20120123/src/patricia.ml
deleted file mode 100644 (file)
index 981258d..0000000
+++ /dev/null
@@ -1,1204 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This is an implementation of Patricia trees, following Chris Okasaki's paper at the 1998 ML Workshop in Baltimore.
-   Both big-endian and little-endian trees are provided. Both sets and maps are implemented on top of Patricia
-   trees. *)
-
-(*i --------------------------------------------------------------------------------------------------------------- i*)
-(*s \mysection{Little-endian vs big-endian trees} *)
-
-  (* A tree is little-endian if it expects the key's least significant bits to be tested first during a search. It is
-     big-endian if it expects the key's most significant bits to be tested first.
-
-     Most of the code is independent of this design choice, so it is written as a functor, parameterized by a small
-     structure which defines endianness. Here is the interface which must be adhered to by such a structure. *)
-
-module Endianness = struct
-
-  module type S = sig
-
-    (* A mask is an integer with a single one bit (i.e. a power of 2). *)
-
-    type mask = int
-
-    (* [branching_bit] accepts two distinct integers and returns a mask which identifies the first bit where they
-       differ. The meaning of ``first'' varies according to the endianness being implemented. *)
-
-    val branching_bit: int -> int -> mask
-
-    (* [mask i m] returns an integer [i'], where all bits which [m] says are relevant are identical to those in [i],
-       and all others are set to some unspecified, but fixed value. Which bits are ``relevant'' according to a given
-       mask varies according to the endianness being implemented. *)
-
-    val mask: int -> mask -> int
-
-    (* [shorter m1 m2] returns [true] if and only if [m1] describes a shorter prefix than [m2], i.e. if it makes fewer
-       bits relevant. Which bits are ``relevant'' according to a given mask varies according to the endianness being
-       implemented. *)
-
-    val shorter: mask -> mask -> bool
-
-  end
-
-  (* Now, let us define [Little] and [Big], two possible [Endiannness] choices. *)
-
-  module Little = struct
-
-    type mask = int
-
-    let lowest_bit x =
-      x land (-x)
-
-    (* Performing a logical ``xor'' of [i0] and [i1] yields a bit field where all differences between [i0] and [i1]
-       show up as one bits. (There must be at least one, since [i0] and [i1] are distinct.) The ``first'' one is
-       the lowest bit in this bit field, since we are checking least significant bits first. *)
-
-    let branching_bit i0 i1 =
-      lowest_bit (i0 lxor i1)
-
-    (* The ``relevant'' bits in an integer [i] are those which are found (strictly) to the right of the single one bit
-       in the mask [m]. We keep these bits, and set all others to 0. *)
-
-    let mask i m =
-      i land (m-1)
-
-    (* The smaller [m] is, the fewer bits are relevant. *)
-
-    let shorter =
-      (<)
-
-  end
-
-  module Big = struct
-
-    type mask = int
-
-    let lowest_bit x =
-      x land (-x)
-
-    let rec highest_bit x =
-      let m = lowest_bit x in
-      if x = m then
-       m
-      else
-       highest_bit (x - m)
-
-    (* Performing a logical ``xor'' of [i0] and [i1] yields a bit field where all differences between [i0] and [i1]
-       show up as one bits. (There must be at least one, since [i0] and [i1] are distinct.) The ``first'' one is
-       the highest bit in this bit field, since we are checking most significant bits first.
-
-       In Okasaki's paper, this loop is sped up by computing a conservative initial guess. Indeed, the bit at which
-       the two prefixes disagree must be somewhere within the shorter prefix, so we can begin searching at the
-       least-significant valid bit in the shorter prefix. Unfortunately, to allow computing the initial guess, the
-       main code has to pass in additional parameters, e.g. a mask which describes the length of each prefix. This
-       ``pollutes'' the endianness-independent code. For this reason, this optimization isn't implemented here. *)
-
-    let branching_bit i0 i1 =
-      highest_bit (i0 lxor i1)
-
-    (* The ``relevant'' bits in an integer [i] are those which are found (strictly) to the left of the single one bit
-       in the mask [m]. We keep these bits, and set all others to 0. Okasaki uses a different convention, which allows
-       big-endian Patricia trees to masquerade as binary search trees. This feature does not seem to be useful here. *)
-
-    let mask i m =
-      i land (lnot (2*m-1))
-
-    (* The smaller [m] is, the more bits are relevant. *)
-
-    let shorter =
-      (>)
-
-  end
-
-end
-
-(*i --------------------------------------------------------------------------------------------------------------- i*)
-(*s \mysection{Patricia-tree-based maps} *)
-
-module Make (X : Endianness.S) = struct
-
-  (* Patricia trees are maps whose keys are integers. *)
-
-  type key = int
-
-  (* A tree is either empty, or a leaf node, containing both the integer key and a piece of data, or a binary node.
-     Each binary node carries two integers. The first one is the longest common prefix of all keys in this
-     sub-tree. The second integer is the branching bit. It is an integer with a single one bit (i.e. a power of 2),
-     which describes the bit being tested at this node. *)
-
-  type 'a t =
-    | Empty
-    | Leaf of int * 'a
-    | Branch of int * X.mask * 'a t * 'a t
-
-  (* The empty map. *)
-
-  let empty =
-    Empty
-
-  (* [choose m] returns an arbitrarily chosen binding in [m], if [m]
-     is nonempty, and raises [Not_found] otherwise. *)
-
-  let rec choose = function
-    | Empty ->
-       raise Not_found
-    | Leaf (key, data) ->
-       key, data
-    | Branch (_, _, tree0, _) ->
-       choose tree0
-
-  (* [lookup k m] looks up the value associated to the key [k] in the map [m], and raises [Not_found] if no value is
-     bound to [k].
-
-     This implementation takes branches \emph{without} checking whether the key matches the prefix found at the
-     current node. This means that a query for a non-existent key shall be detected only when finally reaching
-     a leaf, rather than higher up in the tree. This strategy is better when (most) queries are expected to be
-     successful. *)
-
-  let rec lookup key = function
-    | Empty ->
-       raise Not_found
-    | Leaf (key', data) ->
-       if key = key' then
-         data
-       else
-         raise Not_found
-    | Branch (_, mask, tree0, tree1) ->
-       lookup key (if (key land mask) = 0 then tree0 else tree1)
-
-  let find =
-    lookup
-
-  (* [mem k m] tells whether the key [k] appears in the domain of the
-     map [m]. *)
-
-  let mem k m =
-    try
-      let _ = lookup k m in
-      true
-    with Not_found ->
-      false
-
-  (* The auxiliary function [join] merges two trees in the simple case where their prefixes disagree.
-
-     Assume $t_0$ and $t_1$ are non-empty trees, with longest common prefixes $p_0$ and $p_1$, respectively. Further,
-     suppose that $p_0$ and $p_1$ disagree, that is, neither prefix is contained in the other. Then, no matter how
-     large $t_0$ and $t_1$ are, we can merge them simply by creating a new [Branch] node that has $t_0$ and $t_1$
-     as children! *)
-
-  let join p0 t0 p1 t1 =
-    let m = X.branching_bit p0 p1 in
-    let p = X.mask p0 (* for instance *) m in
-    if (p0 land m) = 0 then
-      Branch(p, m, t0, t1)
-    else
-      Branch(p, m, t1, t0)
-
-  (* The auxiliary function [match_prefix] tells whether a given key has a given prefix. More specifically,
-     [match_prefix k p m] returns [true] if and only if the key [k] has prefix [p] up to bit [m].
-
-     Throughout our implementation of Patricia trees, prefixes are assumed to be in normal form, i.e. their
-     irrelevant bits are set to some predictable value. Formally, we assume [X.mask p m] equals [p] whenever [p]
-     is a prefix with [m] relevant bits. This allows implementing [match_prefix] using only one call to
-     [X.mask]. On the other hand, this requires normalizing prefixes, as done e.g. in [join] above, where
-     [X.mask p0 m] has to be used instead of [p0]. *)
-
-  let match_prefix k p m =
-    X.mask k m = p
-
-  (* [fine_add decide k d m] returns a map whose bindings are all bindings in [m], plus a binding of the key [k] to
-     the datum [d]. If a binding from [k] to [d0] already exists, then the resulting map contains a binding from
-     [k] to [decide d0 d]. *)
-
-  type 'a decision = 'a -> 'a -> 'a
-
-  exception Unchanged
-
-  let basic_add decide k d m =
-
-    let rec add t =
-      match t with
-      |        Empty ->
-         Leaf (k, d)
-      |        Leaf (k0, d0) ->
-         if k = k0 then
-           let d' = decide d0 d in
-           if d' == d0 then
-             raise Unchanged
-           else
-             Leaf (k, d')
-         else
-           join k (Leaf (k, d)) k0 t
-      |        Branch (p, m, t0, t1) ->
-         if match_prefix k p m then
-           if (k land m) = 0 then Branch (p, m, add t0, t1)
-           else Branch (p, m, t0, add t1)
-         else
-           join k (Leaf (k, d)) p t in
-
-    add m
-
-  let strict_add k d m =
-    basic_add (fun _ _ -> raise Unchanged) k d m
-
-  let fine_add decide k d m =
-    try
-      basic_add decide k d m
-    with Unchanged ->
-      m
-
-  (* [add k d m] returns a map whose bindings are all bindings in [m], plus a binding of the key [k] to the datum
-     [d]. If a binding already exists for [k], it is overridden. *)
-
-  let add k d m =
-    fine_add (fun old_binding new_binding -> new_binding) k d m
-
-  (* [singleton k d] returns a map whose only binding is from [k] to [d]. *)
-
-  let singleton k d =
-    Leaf (k, d)
-
-  (* [is_singleton m] returns [Some (k, d)] if [m] is a singleton map
-     that maps [k] to [d]. Otherwise, it returns [None]. *)
-
-  let is_singleton = function
-    | Leaf (k, d) ->
-       Some (k, d)
-    | Empty
-    | Branch _ ->
-       None
-
-  (* [is_empty m] returns [true] if and only if the map [m] defines no bindings at all. *)
-
-  let is_empty = function
-    | Empty ->
-       true
-    | Leaf _
-    | Branch _ ->
-       false
-
-  (* [cardinal m] returns [m]'s cardinal, that is, the number of keys it binds, or, in other words, its domain's
-     cardinal. *)
-
-  let rec cardinal = function
-    | Empty ->
-       0
-    | Leaf _ ->
-       1
-    | Branch (_, _, t0, t1) ->
-       cardinal t0 + cardinal t1
-
-  (* [remove k m] returns the map [m] deprived from any binding involving [k]. *)
-
-  let remove key m =
-
-    let rec remove = function
-      | Empty ->
-         raise Not_found
-      | Leaf (key', _) ->
-         if key = key' then
-           Empty
-         else
-           raise Not_found
-      | Branch (prefix, mask, tree0, tree1) ->
-         if (key land mask) = 0 then
-           match remove tree0 with
-           | Empty ->
-               tree1
-           | tree0 ->
-               Branch (prefix, mask, tree0, tree1)
-         else
-           match remove tree1 with
-           | Empty ->
-               tree0
-           | tree1 ->
-               Branch (prefix, mask, tree0, tree1) in
-
-    try
-      remove m
-    with Not_found ->
-      m
-
-  (* [lookup_and_remove k m] looks up the value [v] associated to the key [k] in the map [m], and raises [Not_found]
-     if no value is bound to [k]. The call returns the value [v], together with the map [m] deprived from the binding
-     from [k] to [v]. *)
-
-  let rec lookup_and_remove key = function
-    | Empty ->
-       raise Not_found
-    | Leaf (key', data) ->
-       if key = key' then
-         data, Empty
-       else
-         raise Not_found
-    | Branch (prefix, mask, tree0, tree1) ->
-       if (key land mask) = 0 then
-         match lookup_and_remove key tree0 with
-         | data, Empty ->
-             data, tree1
-         | data, tree0 ->
-             data, Branch (prefix, mask, tree0, tree1)
-       else
-         match lookup_and_remove key tree1 with
-         | data, Empty ->
-             data, tree0
-         | data, tree1 ->
-             data, Branch (prefix, mask, tree0, tree1)
-
-  let find_and_remove =
-    lookup_and_remove
-
-  (* [fine_union decide m1 m2] returns the union of the maps [m1] and
-     [m2]. If a key [k] is bound to [x1] (resp. [x2]) within [m1]
-     (resp. [m2]), then [decide] is called. It is passed [x1] and
-     [x2], and must return the value which shall be bound to [k] in
-     the final map. The operation returns [m2] itself (as opposed to a
-     copy of it) when its result is equal to [m2]. *)
-
-  let reverse decision elem1 elem2 =
-    decision elem2 elem1
-
-  let fine_union decide m1 m2 =
-
-    let rec union s t =
-      match s, t with
-       
-      |        Empty, _ ->
-         t
-      | (Leaf _ | Branch _), Empty ->
-         s
-
-      | Leaf(key, value), _ ->
-         fine_add (reverse decide) key value t
-      | Branch _, Leaf(key, value) ->
-         fine_add decide key value s
-
-      | Branch(p, m, s0, s1), Branch(q, n, t0, t1) ->
-         if (p = q) & (m = n) then
-
-           (* The trees have the same prefix. Merge their sub-trees. *)
-
-           let u0 = union s0 t0
-           and u1 = union s1 t1 in
-           if t0 == u0 && t1 == u1 then t
-           else Branch(p, m, u0, u1)
-
-         else if (X.shorter m n) & (match_prefix q p m) then
-
-           (* [q] contains [p]. Merge [t] with a sub-tree of [s]. *)
-
-           if (q land m) = 0 then
-             Branch(p, m, union s0 t, s1)
-           else
-             Branch(p, m, s0, union s1 t)
-
-         else if (X.shorter n m) & (match_prefix p q n) then
-
-           (* [p] contains [q]. Merge [s] with a sub-tree of [t]. *)
-
-           if (p land n) = 0 then
-             let u0 = union s t0 in
-             if t0 == u0 then t
-             else Branch(q, n, u0, t1)
-           else
-             let u1 = union s t1 in
-             if t1 == u1 then t
-             else Branch(q, n, t0, u1)
-
-         else
-
-           (* The prefixes disagree. *)
-
-           join p s q t in
-
-    union m1 m2
-
-  (* [union m1 m2] returns the union of the maps [m1] and
-     [m2]. Bindings in [m2] take precedence over those in [m1]. *)
-
-  let union m1 m2 =
-    fine_union (fun d d' -> d') m1 m2
-
-  (* [iter f m] invokes [f k x], in turn, for each binding from key [k] to element [x] in the map [m]. Keys are
-     presented to [f] according to some unspecified, but fixed, order. *)
-
-  let rec iter f = function
-    | Empty ->
-       ()
-    | Leaf (key, data) ->
-       f key data
-    | Branch (_, _, tree0, tree1) ->
-       iter f tree0;
-       iter f tree1
-
-  (* [fold f m seed] invokes [f k d accu], in turn, for each binding from key [k] to datum [d] in the map
-     [m]. Keys are presented to [f] in increasing order according to the map's ordering. The initial value of
-     [accu] is [seed]; then, at each new call, its value is the value returned by the previous invocation of [f]. The
-     value returned by [fold] is the final value of [accu]. *)
-
-  let rec fold f m accu =
-    match m with
-    | Empty ->
-       accu
-    | Leaf (key, data) ->
-       f key data accu
-    | Branch (_, _, tree0, tree1) ->
-       fold f tree1 (fold f tree0 accu)
-
-  (* [fold_rev] performs exactly the same job as [fold], but presents keys to [f] in the opposite order. *)
-
-  let rec fold_rev f m accu =
-    match m with
-    | Empty ->
-       accu
-    | Leaf (key, data) ->
-       f key data accu
-    | Branch (_, _, tree0, tree1) ->
-       fold_rev f tree0 (fold_rev f tree1 accu)
-
-  (* It is valid to evaluate [iter2 f m1 m2] if and only if [m1] and [m2] have the same domain. Doing so invokes
-     [f k x1 x2], in turn, for each key [k] bound to [x1] in [m1] and to [x2] in [m2]. Bindings are presented to [f]
-     according to some unspecified, but fixed, order. *)
-
-  let rec iter2 f t1 t2 =
-    match t1, t2 with
-    | Empty, Empty ->
-       ()
-    | Leaf (key1, data1), Leaf (key2, data2) ->
-       assert (key1 = key2);
-       f key1 (* for instance *) data1 data2
-    | Branch (p1, m1, left1, right1), Branch (p2, m2, left2, right2) ->
-       assert (p1 = p2);
-       assert (m1 = m2);
-       iter2 f left1 left2;
-       iter2 f right1 right2
-    | _, _ ->
-       assert false
-
-  (* [map f m] returns the map obtained by composing the map [m] with the function [f]; that is, the map
-     $k\mapsto f(m(k))$. *)
-
-  let rec map f = function
-    | Empty ->
-       Empty
-    | Leaf (key, data) ->
-       Leaf(key, f data)
-    | Branch (p, m, tree0, tree1) ->
-       Branch (p, m, map f tree0, map f tree1)
-
-  (* [endo_map] is similar to [map], but attempts to physically share its result with its input. This saves
-     memory when [f] is the identity function. *)
-
-  let rec endo_map f tree =
-    match tree with
-    | Empty ->
-       tree
-    | Leaf (key, data) ->
-       let data' = f data in
-       if data == data' then
-         tree
-       else
-         Leaf(key, data')
-    | Branch (p, m, tree0, tree1) ->
-       let tree0' = endo_map f tree0 in
-       let tree1' = endo_map f tree1 in
-       if (tree0' == tree0) & (tree1' == tree1) then
-         tree
-       else
-         Branch (p, m, tree0', tree1')
-
-  (* [iterator m] returns a stateful iterator over the map [m]. *)
-
-  (* TEMPORARY performance could be improved, see JCF's paper *)
-
-  let iterator m =
-
-    let remainder = ref [ m ] in
-
-    let rec next () =
-      match !remainder with
-      | [] ->
-         None
-      | Empty :: parent ->
-         remainder := parent;
-         next()
-      | (Leaf (key, data)) :: parent ->
-         remainder := parent;
-         Some (key, data)
-      | (Branch(_, _, s0, s1)) :: parent ->
-         remainder := s0 :: s1 :: parent;
-         next () in
-
-    next
-
-  (* If [dcompare] is an ordering over data, then [compare dcompare]
-     is an ordering over maps. *)
-
-  exception Got of int
-
-  let compare dcompare m1 m2 =
-    let iterator2 = iterator m2 in
-    try
-      iter (fun key1 data1 ->
-       match iterator2() with
-       | None ->
-           raise (Got 1)
-       | Some (key2, data2) ->
-           let c = Pervasives.compare key1 key2 in
-           if c <> 0 then
-             raise (Got c)
-           else
-             let c = dcompare data1 data2 in
-             if c <> 0 then
-               raise (Got c)
-      ) m1;
-      match iterator2() with
-      | None ->
-         0
-      | Some _ ->
-         -1
-    with Got c ->
-      c
-
-(*i --------------------------------------------------------------------------------------------------------------- i*)
-(*s \mysection{Patricia-tree-based sets} *)
-
-(* To enhance code sharing, it would be possible to implement maps as sets of pairs, or (vice-versa) to implement
-   sets as maps to the unit element. However, both possibilities introduce some space and time inefficiency. To
-   avoid it, we define each structure separately. *)
-
-module Domain = struct
-
-  type element = int
-
-  type t =
-    | Empty
-    | Leaf of int
-    | Branch of int * X.mask * t * t
-
-  (* The empty set. *)
-
-  let empty =
-    Empty
-
-  (* [is_empty s] returns [true] if and only if the set [s] is empty. *)
-
-  let is_empty = function
-    | Empty ->
-       true
-    | Leaf _
-    | Branch _ ->
-       false
-
-  (* [singleton x] returns a set whose only element is [x]. *)
-
-  let singleton x =
-    Leaf x
-
-  (* [is_singleton s] returns [Some x] if [s] is a singleton
-     containing [x] as its only element; otherwise, it returns
-     [None]. *)
-
-  let is_singleton = function
-    | Leaf x ->
-       Some x
-    | Empty
-    |  Branch _ ->
-       None
-
-  (* [choose s] returns an arbitrarily chosen element of [s], if [s]
-     is nonempty, and raises [Not_found] otherwise. *)
-
-  let rec choose = function
-    | Empty ->
-       raise Not_found
-    | Leaf x ->
-       x
-    | Branch (_, _, tree0, _) ->
-       choose tree0
-
-  (* [cardinal s] returns [s]'s cardinal. *)
-
-  let rec cardinal = function
-    | Empty ->
-       0
-    | Leaf _ ->
-       1
-    | Branch (_, _, t0, t1) ->
-       cardinal t0 + cardinal t1
-
-  (* [mem x s] returns [true] if and only if [x] appears in the set [s]. *)
-
-  let rec mem x = function
-    | Empty ->
-       false
-    | Leaf x' ->
-       x = x'
-    | Branch (_, mask, tree0, tree1) ->
-       mem x (if (x land mask) = 0 then tree0 else tree1)
-
-  (* The auxiliary function [join] merges two trees in the simple case where their prefixes disagree. *)
-
-  let join p0 t0 p1 t1 =
-    let m = X.branching_bit p0 p1 in
-    let p = X.mask p0 (* for instance *) m in
-    if (p0 land m) = 0 then
-      Branch(p, m, t0, t1)
-    else
-      Branch(p, m, t1, t0)
-
-  (* [add x s] returns a set whose elements are all elements of [s], plus [x]. *)
-
-  exception Unchanged
-
-  let rec strict_add x t =
-    match t with
-    | Empty ->
-       Leaf x
-    | Leaf x0 ->
-       if x = x0 then
-         raise Unchanged
-       else
-         join x (Leaf x) x0 t
-    | Branch (p, m, t0, t1) ->
-       if match_prefix x p m then
-         if (x land m) = 0 then Branch (p, m, strict_add x t0, t1)
-         else Branch (p, m, t0, strict_add x t1)
-       else
-         join x (Leaf x) p t
-
-  let add x s =
-    try
-      strict_add x s
-    with Unchanged ->
-      s
-
-  (* [make2 x y] creates a set whose elements are [x] and [y]. [x] and [y] need not be distinct. *)
-
-  let make2 x y =
-    add x (Leaf y)
-
-  (* [fine_add] does not make much sense for sets of integers. Better warn the user. *)
-
-  type decision = int -> int -> int
-
-  let fine_add decision x s =
-    assert false
-
-  (* [remove x s] returns a set whose elements are all elements of [s], except [x]. *)
-
-  let remove x s =
-
-    let rec strict_remove = function
-      | Empty ->
-         raise Not_found
-      | Leaf x' ->
-       if x = x' then
-         Empty
-       else
-         raise Not_found
-      | Branch (prefix, mask, tree0, tree1) ->
-         if (x land mask) = 0 then
-           match strict_remove tree0 with
-           | Empty ->
-               tree1
-           | tree0 ->
-               Branch (prefix, mask, tree0, tree1)
-         else
-           match strict_remove tree1 with
-           | Empty ->
-               tree0
-           | tree1 ->
-               Branch (prefix, mask, tree0, tree1) in
-
-    try
-      strict_remove s
-    with Not_found ->
-      s
-
-  (* [union s1 s2] returns the union of the sets [s1] and [s2]. *)
-
-  let rec union s t =
-    match s, t with
-
-    | Empty, _ ->
-       t
-    | _, Empty ->
-       s
-
-    | Leaf x, _ ->
-       add x t
-    | _, Leaf x ->
-       add x s
-
-    | Branch(p, m, s0, s1), Branch(q, n, t0, t1) ->
-       if (p = q) & (m = n) then
-
-         (* The trees have the same prefix. Merge their sub-trees. *)
-
-         let u0 = union s0 t0
-         and u1 = union s1 t1 in
-         if t0 == u0 && t1 == u1 then t
-         else Branch(p, m, u0, u1)
-
-       else if (X.shorter m n) & (match_prefix q p m) then
-
-         (* [q] contains [p]. Merge [t] with a sub-tree of [s]. *)
-
-         if (q land m) = 0 then
-           Branch(p, m, union s0 t, s1)
-         else
-           Branch(p, m, s0, union s1 t)
-
-       else if (X.shorter n m) & (match_prefix p q n) then
-
-         (* [p] contains [q]. Merge [s] with a sub-tree of [t]. *)
-
-         if (p land n) = 0 then
-           let u0 = union s t0 in
-           if t0 == u0 then t
-           else Branch(q, n, u0, t1)
-         else
-           let u1 = union s t1 in
-           if t1 == u1 then t
-           else Branch(q, n, t0, u1)
-
-       else
-
-         (* The prefixes disagree. *)
-
-         join p s q t
-
-  (* [fine_union] does not make much sense for sets of integers. Better warn the user. *)
-
-  let fine_union decision s1 s2 =
-    assert false
-
-  (* [build] is a ``smart constructor''. It builds a [Branch] node with the specified arguments, but ensures
-     that the newly created node does not have an [Empty] child. *)
-
-  let build p m t0 t1 =
-    match t0, t1 with
-    |  Empty, Empty ->
-       Empty
-    |  Empty, _ ->
-       t1
-    |  _, Empty ->
-       t0
-    |  _, _ ->
-       Branch(p, m, t0, t1)
-
-  (* [diff s t] returns the set difference of [s] and [t], that is, $s\setminus t$. *)
-
-  let rec diff s t =
-    match s, t with
-
-    |  Empty, _
-    |  _, Empty ->
-       s
-
-    |  Leaf x, _ ->
-       if mem x t then Empty else s
-    |  _, Leaf x ->
-       remove x s
-
-    | Branch(p, m, s0, s1), Branch(q, n, t0, t1) ->
-       if (p = q) & (m = n) then
-
-         (* The trees have the same prefix. Compute the differences of their sub-trees. *)
-
-         build p m (diff s0 t0) (diff s1 t1)
-
-       else if (X.shorter m n) & (match_prefix q p m) then
-
-         (* [q] contains [p]. Subtract [t] off a sub-tree of [s]. *)
-
-         if (q land m) = 0 then
-           build p m (diff s0 t) s1
-         else
-           build p m s0 (diff s1 t)
-
-       else if (X.shorter n m) & (match_prefix p q n) then
-
-         (* [p] contains [q]. Subtract a sub-tree of [t] off [s]. *)
-
-         diff s (if (p land n) = 0 then t0 else t1)
-
-       else
-
-         (* The prefixes disagree. *)
-
-         s
-
-  (* [inter s t] returns the set intersection of [s] and [t], that is, $s\cap t$. *)
-
-  let rec inter s t =
-    match s, t with
-
-    | Empty, _
-    | _, Empty ->
-       Empty
-
-    | (Leaf x as s), t
-    | t, (Leaf x as s) ->
-       if mem x t then s else Empty
-
-    | Branch(p, m, s0, s1), Branch(q, n, t0, t1) ->
-       if (p = q) & (m = n) then
-
-         (* The trees have the same prefix. Compute the intersections of their sub-trees. *)
-
-         build p m (inter s0 t0) (inter s1 t1)
-
-       else if (X.shorter m n) & (match_prefix q p m) then
-
-         (* [q] contains [p]. Intersect [t] with a sub-tree of [s]. *)
-
-         inter (if (q land m) = 0 then s0 else s1) t
-
-       else if (X.shorter n m) & (match_prefix p q n) then
-
-         (* [p] contains [q]. Intersect [s] with a sub-tree of [t]. *)
-
-         inter s (if (p land n) = 0 then t0 else t1)
-
-       else
-
-         (* The prefixes disagree. *)
-
-         Empty
-
-  (* [disjoint s1 s2] returns [true] if and only if the sets [s1] and [s2] are disjoint, i.e. iff their intersection
-     is empty. It is a specialized version of [inter], which uses less space. *)
-
-  exception NotDisjoint
-
-  let disjoint s t =
-
-    let rec inter s t =
-      match s, t with
-
-      | Empty, _
-      | _, Empty ->
-         ()
-
-      | Leaf x, _ ->
-         if mem x t then
-           raise NotDisjoint
-      | _, Leaf x ->
-         if mem x s then
-           raise NotDisjoint
-
-      | Branch(p, m, s0, s1), Branch(q, n, t0, t1) ->
-         if (p = q) & (m = n) then begin
-           inter s0 t0;
-           inter s1 t1
-         end
-         else if (X.shorter m n) & (match_prefix q p m) then
-           inter (if (q land m) = 0 then s0 else s1) t
-         else if (X.shorter n m) & (match_prefix p q n) then
-           inter s (if (p land n) = 0 then t0 else t1)
-         else
-           () in
-
-    try
-      inter s t;
-      true
-    with NotDisjoint ->
-      false
-
-  (* [iter f s] invokes [f x], in turn, for each element [x] of the set [s]. Elements are presented to [f] according
-     to some unspecified, but fixed, order. *)
-
-  let rec iter f = function
-    | Empty ->
-       ()
-    | Leaf x ->
-       f x
-    | Branch (_, _, tree0, tree1) ->
-       iter f tree0;
-       iter f tree1
-
-  (* [fold f s seed] invokes [f x accu], in turn, for each element [x] of the set [s]. Elements are presented to [f]
-     according to some unspecified, but fixed, order. The initial value of [accu] is [seed]; then, at each new call,
-     its value is the value returned by the previous invocation of [f]. The value returned by [fold] is the final
-     value of [accu]. In other words, if $s = \{ x_1, x_2, \ldots, x_n \}$, where $x_1 < x_2 < \ldots < x_n$, then
-     [fold f s seed] computes $([f]\,x_n\,\ldots\,([f]\,x_2\,([f]\,x_1\,[seed]))\ldots)$. *)
-
-  let rec fold f s accu =
-    match s with
-    |  Empty ->
-       accu
-    |  Leaf x ->
-       f x accu
-    |  Branch (_, _, s0, s1) ->
-       fold f s1 (fold f s0 accu)
-
-  (* [elements s] is a list of all elements in the set [s]. *)
-
-  let elements s =
-    fold (fun tl hd -> tl :: hd) s []
-
-  (* [fold_rev] performs exactly the same job as [fold], but presents elements to [f] in the opposite order. *)
-
-  let rec fold_rev f s accu =
-    match s with
-    | Empty ->
-       accu
-    | Leaf x ->
-       f x accu
-    | Branch (_, _, s0, s1) ->
-       fold_rev f s0 (fold_rev f s1 accu)
-
-  (* [iter2] does not make much sense for sets of integers. Better warn the user. *)
-
-  let rec iter2 f t1 t2 =
-    assert false
-
-  (* [iterator s] returns a stateful iterator over the set [s]. That is, if $s = \{ x_1, x_2, \ldots, x_n \}$, where
-     $x_1 < x_2 < \ldots < x_n$, then [iterator s] is a function which, when invoked for the $k^{\text{th}}$ time,
-     returns [Some]$x_k$, if $k\leq n$, and [None] otherwise. Such a function can be useful when one wishes to
-     iterate over a set's elements, without being restricted by the call stack's discipline.
-
-     For more comments about this algorithm, please see module [Baltree], which defines a similar one. *)
-
-  let iterator s =
-
-    let remainder = ref [ s ] in
-
-    let rec next () =
-      match !remainder with
-      | [] ->
-         None
-      | Empty :: parent ->
-         remainder := parent;
-         next()
-      | (Leaf x) :: parent ->
-         remainder := parent;
-         Some x
-      | (Branch(_, _, s0, s1)) :: parent ->
-         remainder := s0 :: s1 :: parent;
-         next () in
-
-    next
-
-  (* [exists p s] returns [true] if and only if some element of [s] matches the predicate [p]. *)
-
-  exception Exists
-
-  let exists p s =
-    try
-      iter (fun x ->
-       if p x then
-         raise Exists
-      ) s;
-      false
-    with Exists ->
-      true
-
-  (* [compare] is an ordering over sets. *)
-
-  exception Got of int
-
-  let compare s1 s2 =
-    let iterator2 = iterator s2 in
-    try
-      iter (fun x1 ->
-       match iterator2() with
-       | None ->
-           raise (Got 1)
-       | Some x2 ->
-           let c = Pervasives.compare x1 x2 in
-           if c <> 0 then
-             raise (Got c)
-      ) s1;
-      match iterator2() with
-      | None ->
-         0
-      | Some _ ->
-         -1
-    with Got c ->
-      c
-
-  (* [equal] implements equality over sets. *)
-
-  let equal s1 s2 =
-    compare s1 s2 = 0
-
-  (* [subset] implements the subset predicate over sets. In other words, [subset s t] returns [true] if and only if
-     $s\subseteq t$. It is a specialized version of [diff]. *)
-
-  exception NotSubset
-
-  let subset s t =
-
-    let rec diff s t =
-      match s, t with
-
-      | Empty, _ ->
-         ()
-      | _, Empty
-
-      | Branch _, Leaf _ ->
-         raise NotSubset
-      | Leaf x, _ ->
-         if not (mem x t) then
-           raise NotSubset
-
-      | Branch(p, m, s0, s1), Branch(q, n, t0, t1) ->
-
-         if (p = q) & (m = n) then begin
-
-           diff s0 t0;
-           diff s1 t1
-
-         end
-         else if (X.shorter n m) & (match_prefix p q n) then
-
-           diff s (if (p land n) = 0 then t0 else t1)
-
-         else
-
-           (* Either [q] contains [p], which means at least one of [s]'s sub-trees is not contained within [t],
-              or the prefixes disagree. In either case, the subset relationship cannot possibly hold. *)
-
-           raise NotSubset in
-
-    try
-      diff s t;
-      true
-    with NotSubset ->
-      false
-
-  (* [filter p s] returns the subset of [s] formed by all elements which satisfy the predicate [p]. *)
-
-  let filter predicate s =
-    let modified = ref false in
-
-    let subset = fold (fun element subset ->
-      if predicate element then
-       add element subset
-      else begin
-       modified := true;
-       subset
-      end
-    ) s Empty in
-
-    if !modified then
-      subset
-    else
-      s
-
-  (* [map f s] computes the image of [s] through [f]. *)
-
-  let map f s =
-    fold (fun element accu ->
-      add (f element) accu
-    ) s Empty
-
-  (* [monotone_map] and [endo_map] do not make much sense for sets of integers. Better warn the user. *)
-
-  let monotone_map f s =
-    assert false
-
-  let endo_map f s =
-    assert false
-
-end
-
-(*i --------------------------------------------------------------------------------------------------------------- i*)
-(*s \mysection{Relating sets and maps} *)
-
-  (* Back to the world of maps. Let us now describe the relationship which exists between maps and their domains. *)
-
-  (* [domain m] returns [m]'s domain. *) 
-
-  let rec domain = function
-    | Empty ->
-       Domain.Empty
-    | Leaf (k, _) ->
-       Domain.Leaf k
-    | Branch (p, m, t0, t1) ->
-       Domain.Branch (p, m, domain t0, domain t1)
-
-  (* [lift f s] returns the map $k\mapsto f(k)$, where $k$ ranges over a set of keys [s]. *)
-
-  let rec lift f = function
-    | Domain.Empty ->
-       Empty
-    | Domain.Leaf k ->
-       Leaf (k, f k)
-    | Domain.Branch (p, m, t0, t1) ->
-       Branch(p, m, lift f t0, lift f t1)
-
-  (* [build] is a ``smart constructor''. It builds a [Branch] node with the specified arguments, but ensures
-     that the newly created node does not have an [Empty] child. *)
-
-  let build p m t0 t1 =
-    match t0, t1 with
-    | Empty, Empty ->
-       Empty
-    | Empty, _ ->
-       t1
-    | _, Empty ->
-       t0
-    | _, _ ->
-       Branch(p, m, t0, t1)
-
-  (* [corestrict m d] performs a co-restriction of the map [m] to the domain [d]. That is, it returns the map
-     $k\mapsto m(k)$, where $k$ ranges over all keys bound in [m] but \emph{not} present in [d]. Its code resembles
-     [diff]'s. *)
-
-    let rec corestrict s t =
-      match s, t with
-
-      |        Empty, _
-      |        _, Domain.Empty ->
-         s
-
-      |        Leaf (k, _), _ ->
-         if Domain.mem k t then Empty else s
-      |        _, Domain.Leaf k ->
-         remove k s
-      
-      | Branch(p, m, s0, s1), Domain.Branch(q, n, t0, t1) ->
-         if (p = q) & (m = n) then
-
-           build p m (corestrict s0 t0) (corestrict s1 t1)
-
-         else if (X.shorter m n) & (match_prefix q p m) then
-
-           if (q land m) = 0 then
-             build p m (corestrict s0 t) s1
-           else
-             build p m s0 (corestrict s1 t)
-
-         else if (X.shorter n m) & (match_prefix p q n) then
-
-           corestrict s (if (p land n) = 0 then t0 else t1)
-
-         else
-
-           s
-
-end
-
-(*i --------------------------------------------------------------------------------------------------------------- i*)
-(*s \mysection{Instantiating the functor} *)
-
-module Little = Make(Endianness.Little)
-
-module Big = Make(Endianness.Big)
-
diff --git a/bundles/menhirLib/menhir-20120123/src/patricia.mli b/bundles/menhirLib/menhir-20120123/src/patricia.mli
deleted file mode 100644 (file)
index c49b8b2..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This is an implementation of Patricia trees, following Chris Okasaki's paper at the 1998 ML Workshop in Baltimore.
-   Both big-endian and little-endian trees are provided. Both sets and maps are implemented on top of Patricia
-   trees. *)
-
-module Little : GMap.S with type key = int
-
-module Big : GMap.S with type key = int
-
diff --git a/bundles/menhirLib/menhir-20120123/src/positions.ml b/bundles/menhirLib/menhir-20120123/src/positions.ml
deleted file mode 100644 (file)
index 73da659..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: positions.ml,v 1.9 2005/12/01 16:20:07 regisgia Exp $ *)
-
-(* TEMPORARY vérifier que ces fonctions sont utilisées partout et
-             de façon cohérente; interaction avec [Error]? *)
-
-open Lexing
-
-type t = 
-    { 
-      start_p : Lexing.position; 
-      end_p   : Lexing.position 
-    }
-
-type 'a located =
-    {
-      value    : 'a;
-      position : t;
-    }
-
-let value { value = v } =
-  v
-
-let position { position = p } =
-  p
-
-let with_pos p v =
-  {
-    value     = v;
-    position  = p;
-  }
-
-let with_poss p1 p2 v =
-  with_pos { start_p = p1; end_p = p2 } v
-
-let map f v =
-  {
-    value     = f v.value;
-    position  = v.position;
-  }
-
-let iter f { value = v } =
-  f v
-
-let mapd f v =
-  let w1, w2 = f v.value in
-  let pos = v.position in
-  { value = w1; position = pos },
-  { value = w2; position = pos }
-
-let dummy = 
-  {
-    start_p = Lexing.dummy_pos;
-    end_p   = Lexing.dummy_pos
-  }
-
-let unknown_pos v = 
-  {
-    value     = v;
-    position  = dummy
-  }
-
-let start_of_position p = p.start_p
-
-let end_of_position p = p.end_p
-
-let filename_of_position p = 
-  p.start_p.Lexing.pos_fname
-
-let line p =
-  p.pos_lnum
-
-let column p =
-  p.pos_cnum - p.pos_bol
-
-let characters p1 p2 =
-  (column p1, p2.pos_cnum - p1.pos_bol) (* intentionally [p1.pos_bol] *)
-
-let join x1 x2 =
-{
-  start_p = if x1 = dummy then x2.start_p else x1.start_p;
-  end_p   = if x2 = dummy then x1.end_p else x2.end_p
-}
-
-let lex_join x1 x2 =
-{
-  start_p = x1;
-  end_p   = x2
-}
-
-let join_located l1 l2 f = 
-  {
-    value    = f l1.value l2.value;
-    position = join l1.position l2.position;
-  }
-
-let string_of_lex_pos p = 
-  let c = p.pos_cnum - p.pos_bol in
-  (string_of_int p.pos_lnum)^":"^(string_of_int c)
-
-let string_of_pos p = 
-  let filename = filename_of_position p in
-  assert (filename <> "");
-  let l = line p.start_p in
-  let c1, c2 = characters p.start_p p.end_p in
-  Printf.sprintf "File \"%s\", line %d, characters %d-%d" filename l c1 c2
-
-let pos_or_undef = function
-  | None -> dummy
-  | Some x -> x
-
-let cpos lexbuf =
-  { 
-    start_p = Lexing.lexeme_start_p lexbuf;
-    end_p   = Lexing.lexeme_end_p   lexbuf; 
-  }
-
-let with_cpos lexbuf v =
-  with_pos (cpos lexbuf) v
-
-let string_of_cpos lexbuf = 
-  string_of_pos (cpos lexbuf)
-
-let joinf f t1 t2 = 
-  join (f t1) (f t2)
-
-let ljoinf f =
-  List.fold_left (fun p t -> join p (f t)) dummy
-
-let join_located_list ls f = 
-  {
-    value     = f (List.map (fun l -> l.value) ls);
-    position  = ljoinf (fun x -> x.position) ls
-  }
-
-(* The functions that print error messages and warnings require a list of
-   positions. The following auxiliary functions help build such lists. *)
-
-type positions =
-    t list
-
-let one (pos : Lexing.position) : positions =
-  [ { start_p = pos; end_p = pos } ] (* or: lex_join pos pos *)
-
-let two (pos1 : Lexing.position) (pos2 : Lexing.position) : positions =
-  [ lex_join pos1 pos2 ]
-
-let lexbuf (lexbuf : Lexing.lexbuf) : positions =
-  [ lex_join lexbuf.Lexing.lex_start_p lexbuf.Lexing.lex_curr_p ]
-
diff --git a/bundles/menhirLib/menhir-20120123/src/positions.mli b/bundles/menhirLib/menhir-20120123/src/positions.mli
deleted file mode 100644 (file)
index 2f16394..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: positions.mli,v 1.10 2005/12/01 16:20:07 regisgia Exp $ *)
-
-(* TEMPORARY faire un peu le ménage dans cette interface pléthorique? *)
-
-(** Extension of standard library's positions. *)
-
-(** {2 Extended lexing positions} *)
-
-(** Abstract type for pairs of positions in the lexing stream. *)
-type t
-
-(** Decoration of a value with a position. *)
-type 'a located =
-    {
-      value    : 'a;
-      position : t;
-    }
-
-(** [value dv] returns the raw value that underlies the
-    decorated value [dv]. *)
-val value: 'a located -> 'a
-
-(** [position dv] returns the position that decorates the
-    decorated value [dv]. *)
-val position: 'a located -> t
-
-(** [with_pos p v] decorates [v] with a position [p]. *)
-val with_pos : t -> 'a -> 'a located
-val with_cpos: Lexing.lexbuf -> 'a -> 'a located
-val with_poss : Lexing.position -> Lexing.position -> 'a -> 'a located
-
-val unknown_pos : 'a -> 'a located
-
-(** [map f v] extends the decoration from [v] to [f v]. *)
-val map: ('a -> 'b) -> 'a located -> 'b located
-
-(** [iter f dv] applies [f] to the value inside [dv]. *)
-val iter: ('a -> unit) -> 'a located -> unit
-
-(** [mapd f v] extends the decoration from [v] to both members of the pair [f v]. *)
-val mapd: ('a -> 'b1 * 'b2) -> 'a located -> 'b1 located * 'b2 located
-
-(** This value is used when an object does not from
-    a particular input location. *)
-val dummy: t
-
-(** {2 Accessors} *)
-
-(** [column p] returns the number of characters from the 
-    beginning of the line of the Lexing.position [p]. *)
-val column : Lexing.position -> int
-
-(** [column p] returns the line number of to the Lexing.position [p]. *)
-val line : Lexing.position -> int
-
-(** [characters p1 p2] returns the character interval 
-    between [p1] and [p2] assuming they are located in the same
-    line. 
-*)
-val characters : Lexing.position -> Lexing.position -> int * int
-
-val start_of_position: t -> Lexing.position
-
-val end_of_position: t -> Lexing.position
-
-val filename_of_position: t -> string 
-
-(** {2 Position handling} *)
-
-(** [join p1 p2] returns a position that starts where [p1]
-    starts and stops where [p2] stops. *)
-val join : t -> t -> t
-
-val lex_join : Lexing.position -> Lexing.position -> t
-
-val ljoinf : ('a -> t) -> 'a list -> t
-
-val joinf : ('a -> t) -> 'a -> 'a -> t
-
-val join_located : 'a located -> 'b located -> ('a -> 'b -> 'c) -> 'c located
-
-val join_located_list : 
-  ('a located) list -> ('a list -> 'b list) -> ('b list) located
-  
-
-(** [string_of_lex_pos p] returns a string representation for
-    the lexing position [p]. *)
-val string_of_lex_pos : Lexing.position -> string
-
-(** [string_of_pos p] returns the standard (Emacs-like) representation
-    of the position [p]. *)
-val string_of_pos : t -> string
-
-(** [pos_or_undef po] is the identity function except if po = None,
-    in that case, it returns [undefined_position]. *)
-val pos_or_undef : t option -> t
-
-(** {2 Interaction with the lexer runtime} *)
-
-(** [cpos lexbuf] returns the current position of the lexer. *)
-val cpos : Lexing.lexbuf -> t
-
-(** [string_of_cpos p] returns a string representation of 
-    the lexer's current position. *)
-val string_of_cpos : Lexing.lexbuf -> string
-
-(* The functions that print error messages and warnings require a list of
-   positions. The following auxiliary functions help build such lists. *)
-
-type positions =
-    t list
-
-val one: Lexing.position -> positions
-
-val two: Lexing.position -> Lexing.position -> positions
-
-val lexbuf: Lexing.lexbuf -> positions
-
diff --git a/bundles/menhirLib/menhir-20120123/src/pprint.ml b/bundles/menhirLib/menhir-20120123/src/pprint.ml
deleted file mode 100644 (file)
index 0cceb70..0000000
+++ /dev/null
@@ -1,920 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This is an adaptation of Daan Leijen's [PPrint] library, which itself is
-   based on the ideas developed by Philip Wadler in ``A Prettier Printer''.
-   For more information, see:
-
-     http://www.cs.uu.nl/~daan/pprint.html
-     http://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf *)
-
-(* ------------------------------------------------------------------------- *)
-
-(* A uniform interface for output channels. *)
-
-module type OUTPUT = sig
-  type channel
-  val char: channel -> char -> unit
-  val substring: channel -> string -> int (* offset *) -> int (* length *) -> unit
-end
-
-(* ------------------------------------------------------------------------- *)
-
-(* Two implementations of the above interface, respectively based on
-   output channels and memory buffers. This compensates for the fact
-   that ocaml's standard library does not allow creating an output
-   channel out of a memory buffer (a regrettable omission). *)
-
-module ChannelOutput : OUTPUT with type channel = out_channel = struct
-  type channel = out_channel
-  let char = output_char
-  let substring = output
-end
-
-module BufferOutput : OUTPUT with type channel = Buffer.t = struct
-  type channel = Buffer.t
-  let char = Buffer.add_char
-  let substring = Buffer.add_substring
-end
-
-(* ------------------------------------------------------------------------- *)
-
-(* Here is the algebraic data type of documents. It is analogous to Daan
-   Leijen's version, but the binary constructor [Union] is replaced with
-   the unary constructor [Group], and the constant [Line] is replaced with
-   more general constructions, namely [IfFlat], which provides alternative
-   forms depending on the current flattening mode, and [HardLine], which
-   represents a newline character, and is invalid in flattening mode. *)
-
-type document =
-
-    (* [Empty] is the empty document. *)
-
-  | Empty
-
-    (* [Char c] is a document that consists of the single character [c]. We
-       enforce the invariant that [c] is not a newline character. *)
-
-  | Char of char
-
-    (* [String (s, ofs, len)] is a document that consists of the portion of
-       the string [s] delimited by the offset [ofs] and the length [len]. We
-       assume, but do not check, that this portion does not contain a newline
-       character. *)
-
-  | String of string * int * int
-
-    (* [Blank n] is a document that consists of [n] blank characters. *)
-
-  | Blank of int
-
-    (* When in flattening mode, [IfFlat (d1, d2)] turns into the document
-       [d1]. When not in flattening mode, it turns into the document [d2]. *)
-
-  | IfFlat of document * document
-
-    (* When in flattening mode, [HardLine] is illegal. When not in flattening
-       mode, it represents a newline character, followed with an appropriate
-       number of indentation. A safe way of using [HardLine] is to only use it
-       directly within the right branch of an [IfFlat] construct. *)
-
-  | HardLine
-
-    (* [Cat doc1 doc2] is the concatenation of the documents [doc1] and
-       [doc2]. *)
-
-  | Cat of document * document
-
-    (* [Nest (j, doc)] is the document [doc], in which the indentation level
-       has been increased by [j], that is, in which [j] blanks have been
-       inserted after every newline character. *)
-
-  | Nest of int * document
-
-    (* [Group doc] represents an alternative: it is either a flattened form of
-       [doc], in which occurrences of [Group] disappear and occurrences of
-       [IfFlat] resolve to their left branch, or [doc] itself. *)
-
-  | Group of document
-
-    (* [Column f] is the document obtained by applying [f] to the current
-       column number. *)
-
-  | Column of (int -> document)
-
-    (* [Nesting f] is the document obtained by applying [f] to the current
-       indentation level, that is, the number of blanks that were printed
-       at the beginning of the current line. *)
-
-  | Nesting of (int -> document)
-
-(* ------------------------------------------------------------------------- *)
-
-(* A signature for document renderers. *)
-
-module type RENDERER = sig
-  
-  (* Output channels. *)
-
-  type channel
-
-  (* [pretty rfrac width channel document] pretty-prints the document
-     [document] to the output channel [channel]. The parameter [width] is the
-     maximum number of characters per line. The parameter [rfrac] is the
-     ribbon width, a fraction relative to [width]. The ribbon width is the
-     maximum number of non-indentation characters per line. *)
-
-  val pretty: float -> int -> channel -> document -> unit
-
-  (* [compact channel document] prints the document [document] to the output
-     channel [channel]. No indentation is used. All newline instructions are
-     respected, that is, no groups are flattened. *)
-
-  val compact: channel -> document -> unit
-
-end
-
-(* ------------------------------------------------------------------------- *)
-
-(* The pretty rendering algorithm: preliminary declarations. *)
-
-(* The renderer is supposed to behave exactly like Daan Leijen's, although its
-   implementation is quite radically different. Instead of relying on
-   Haskell's lazy evaluation mechanism, we implement an abstract machine with
-   mutable current state, forking, backtracking (via an explicit stack of
-   choice points), and cut (disposal of earlier choice points). *)
-
-(* The renderer's input consists of an ordered sequence of documents. Each
-   document carries an extra indentation level, akin to an implicit [Nest]
-   constructor, and a ``flattening'' flag, which, if set, means that this
-   document should be printed in flattening mode. *)
-
-(* An alternative coding style would be to avoid decorating each input
-   document with an indentation level and a flattening mode, and allow
-   the input sequence to contain instructions that set the current
-   nesting level or reset the flattening mode. That would perhaps be
-   slightly more readable, and slightly less efficient. *)
-
-type input =
-  | INil
-  | ICons of int * bool * document * input
-
-(* When possible (that is, when the stack is empty), the renderer writes
-   directly to the output channel. Otherwise, output is buffered until either
-   a failure point is reached (then, the buffered output is discarded) or a
-   cut is reached (then, all buffered output is committed to the output
-   channel). At all times, the length of the buffered output is at most one
-   line. *)
-
-(* The buffered output consists of a list of characters and strings. It is
-   stored in reverse order (the head of the list should be printed last). *)
-
-type output =
-  | OEmpty
-  | OChar of char * output
-  | OString of string * int * int * output
-  | OBlank of int * output
-
-(* The renderer maintains the following state record. For efficiency, the
-   record is mutable; it is copied when the renderer forks, that is, at
-   choice points. *)
-
-type 'channel state = {
-
-    (* The line width and ribbon width. *)
-
-    width: int;
-    ribbon: int;
-
-    (* The output channel. *)
-
-    channel: 'channel;
-
-    (* The current indentation level. This is the number of blanks that
-       were printed at the beginning of the current line. *)
-
-    mutable indentation: int;
-
-    (* The current column. *)
-
-    mutable column: int;
-
-    (* The renderer's input. For efficiency, the input is assumed to never be
-       empty, and the leading [ICons] constructor is inlined within the state
-       record. In other words, the fields [nest1], [flatten1], and [input1]
-       concern the first input document, and the field [input] contains the
-       rest of the input sequence. *)
-
-    mutable indent1: int;
-    mutable flatten1: bool;
-    mutable input1: document;
-    mutable input: input;
-
-    (* The renderer's buffer output. *)
-
-    mutable output: output;
-
-  }
-
-(* The renderer maintains a stack of resumptions, that is, states in which
-   execution should be resumed if the current thread of execution fails by
-   lack of space on the current line. *)
-
-(* It is not difficult to prove that the stack is empty if and only if
-   flattening mode is off. Furthermore, when flattening mode is on,
-   all groups are ignored, so no new choice points are pushed onto the
-   stack. As a result, the stack has height one at most at all times,
-   so that the stack height is zero when flattening mode is off and
-   one when flattening mode is on. *)
-
-type 'channel stack =
-    'channel state list
-
-(* ------------------------------------------------------------------------- *)
-
-(* The pretty rendering algorithm: code. *)
-
-(* The renderer is parameterized over an implementation of output channels. *)
-
-module Renderer (Output : OUTPUT) = struct
-
-  type channel =
-      Output.channel
-
-  (* Printing blank space (indentation characters). *)
-
-  let blank_length =
-    80
-
-  let blank_buffer =
-    String.make blank_length ' '
-
-  let rec blanks channel n =
-    if n <= 0 then
-      ()
-    else if n <= blank_length then
-      Output.substring channel blank_buffer 0 n
-    else begin
-      Output.substring channel blank_buffer 0 blank_length;
-      blanks channel (n - blank_length)
-    end
-
-  (* Committing buffered output to the output channel. The list is printed in
-     reverse order. The code is not tail recursive, but there is no risk of
-     stack overflow, since the length of the buffered output cannot exceed one
-     line. *)
-
-  let rec commit channel = function
-    | OEmpty ->
-       ()
-    | OChar (c, output) ->
-       commit channel output;
-       Output.char channel c
-    | OString (s, ofs, len, output) ->
-       commit channel output;
-       Output.substring channel s ofs len
-    | OBlank (n, output) ->
-       commit channel output;
-       blanks channel n
-
-  (* The renderer's abstract machine. *)
-
-  (* The procedures [run], [shift], [emit_char], [emit_string], and
-     [emit_blanks] are mutually recursive, and are tail recursive. They
-     maintain a stack and a current state. The states in the stack, and the
-     current state, are pairwise distinct, so that the current state can be
-     mutated without affecting the contents of the stack. *)
-
-  (* An invariant is: the buffered output is nonempty only when the stack is
-     nonempty. The contrapositive is: if the stack is empty, then the buffered
-     output is empty. Indeed, the fact that the stack is empty means that no
-     choices were made, so we are not in a speculative mode of execution: as a
-     result, all output can be sent directly to the output channel. On the
-     contrary, when the stack is nonempty, there is a possibility that we
-     might backtrack in the future, so all output should be held in a
-     buffer. *)
-
-  (* [run] is allowed to call itself recursively only when no material is
-     printed.  In that case, the check for failure is skipped -- indeed,
-     this test is performed only within [shift]. *)
-
-  let rec run (stack : channel stack) (state : channel state) : unit =
-
-    (* Examine the first piece of input, as well as (in some cases) the
-       current flattening mode. *)
-
-    match state.input1, state.flatten1 with
-
-    (* The first piece of input is an empty document. Discard it
-       and continue. *)
-
-    | Empty, _ ->
-       shift stack state
-
-    (* The first piece of input is a character. Emit it and continue. *)
-
-    | Char c, _ ->
-       emit_char stack state c
-
-    (* The first piece of input is a string. Emit it and continue. *)
-
-    | String (s, ofs, len), _ ->
-       emit_string stack state s ofs len
-    | Blank n, _ ->
-       emit_blanks stack state n
-
-    (* The first piece of input is a hard newline instruction. Such an
-       instruction is valid only when flattening mode is off. *)
-
-    (* We emit a newline character, followed by the prescribed amount of
-       indentation. We update the current state to record how many
-       indentation characters were printed and to to reflect the new
-       column number. Then, we discard the current piece of input and
-       continue. *)
-
-    | HardLine, flattening ->
-       assert (not flattening); (* flattening mode must be off. *)
-       assert (stack = []);     (* since flattening mode is off, the stack must be empty. *)
-       Output.char state.channel '\n';
-       let i = state.indent1 in
-       blanks state.channel i;
-       state.column <- i;
-       state.indentation <- i;
-       shift stack state
-
-    (* The first piece of input is an [IfFlat] conditional instruction. *)
-
-    | IfFlat (doc, _), true
-    | IfFlat (_, doc), false ->
-       state.input1 <- doc;
-       run stack state
-
-    (* The first piece of input is a concatenation operator. We take it
-       apart and queue both documents in the input sequence. *)
-
-    | Cat (doc1, doc2), _ ->
-       state.input1 <- doc1;
-       state.input <- ICons (state.indent1, state.flatten1, doc2, state.input);
-       run stack state
-
-    (* The first piece of input is a [Nest] operator. We increase the amount
-       of indentation to be applied to the first input document. *)
-
-    | Nest (j, doc), _ ->
-       state.indent1 <- state.indent1 + j;
-       state.input1 <- doc;
-       run stack state
-
-    (* The first piece of input is a [Group] operator, and flattening mode
-       is currently off. This introduces a choice point: either we flatten
-       this whole group, or we don't. We try the former possibility first:
-       this is done by enabling flattening mode. Should this avenue fail,
-       we push the current state, in which flattening mode is disabled,
-       onto the stack. *)
-
-    (* Note that the current state is copied before continuing, so that
-       the state that is pushed on the stack is not affected by future
-       modifications. This is a fork. *)
-
-    | Group doc, false ->
-       state.input1 <- doc;
-       run (state :: stack) { state with flatten1 = true }
-
-    (* The first piece of input is a [Group] operator, and flattening mode
-       is currently on. The operator is ignored. *)
-
-    | Group doc, true ->
-       state.input1 <- doc;
-       run stack state
-
-    (* The first piece of input is a [Column] operator. The current column
-       is fed into it, so as to produce a document, with which we continue. *)
-
-    | Column f, _ ->
-       state.input1 <- f state.column;
-       run stack state
-
-    (* The first piece of input is a [Column] operator. The current
-       indentation level is fed into it, so as to produce a document, with
-       which we continue. *)
-
-    | Nesting f, _ ->
-       state.input1 <- f state.indentation;
-       run stack state
-
-  (* [shift] discards the first document in the input sequence, so that the
-     second input document, if there is one, becomes first. The renderer stops
-     if there is none. *)
-
-  and shift stack state =
-
-    assert (state.output = OEmpty || stack <> []);
-    assert (state.flatten1 = (stack <> []));
-
-    (* If the stack is nonempty and we have exceeded either the width or the
-       ribbon width parameters, then fail. Backtracking is implemented by
-       discarding the current state, popping a state off the stack, and making
-       it the current state. *)
-
-    match stack with
-    | resumption :: stack
-      when state.column > state.width
-        || state.column - state.indentation > state.ribbon ->
-       run stack resumption
-    | _ ->
-
-       match state.input with
-       | INil ->
-
-           (* End of input. Commit any buffered output and stop. *)
-
-           commit state.channel state.output
-
-       | ICons (indent, flatten, head, tail) ->
-
-           (* There is an input document. Move it one slot ahead and
-              check if we are leaving flattening mode. *)
-
-           state.indent1 <- indent;
-           state.input1 <- head;
-           state.input <- tail;
-           if state.flatten1 && not flatten then begin
-
-             (* Leaving flattening mode means success: we have flattened
-                a certain group, and fitted it all on a line, without
-                reaching a failure point. We would now like to commit our
-                decision to flatten this group. This is a Prolog cut. We
-                discard the stack of choice points, replacing it with an
-                empty stack, and commit all buffered output. *)
-
-             state.flatten1 <- flatten; (* false *)
-             commit state.channel state.output;
-             state.output <- OEmpty;
-             run [] state
-
-           end
-           else
-             run stack state
-
-  (* [emit_char] prints a character (either to the output channel or to the
-     output buffer), increments the current column, discards the first piece
-     of input, and continues. *)
-
-  and emit_char stack state c =
-    begin match stack with
-    | [] ->
-       Output.char state.channel c
-    | _ ->
-       state.output <- OChar (c, state.output)
-    end;
-    state.column <- state.column + 1;
-    shift stack state
-
-  (* [emit_string] prints a string (either to the output channel or to the
-     output buffer), updates the current column, discards the first piece of
-     input, and continues. *)
-
-  and emit_string stack state s ofs len =
-    begin match stack with
-    | [] ->
-       Output.substring state.channel s ofs len
-    | _ ->
-       state.output <- OString (s, ofs, len, state.output)
-    end;
-    state.column <- state.column + len;
-    shift stack state
-
-  (* [emit_blanks] prints a blank string (either to the output channel or to
-     the output buffer), updates the current column, discards the first piece
-     of input, and continues. *)
-
-  and emit_blanks stack state n =
-    begin match stack with
-    | [] ->
-       blanks state.channel n
-    | _ ->
-       state.output <- OBlank (n, state.output)
-    end;
-    state.column <- state.column + n;
-    shift stack state
-
-  (* This is the renderer's main entry point. *)
-
-  let pretty rfrac width channel document =
-    run [] {
-      width = width;
-      ribbon = max 0 (min width (truncate (float_of_int width *. rfrac)));
-      channel = channel;
-      indentation = 0;
-      column = 0;
-      indent1 = 0;
-      flatten1 = false;
-      input1 = document;
-      input = INil;
-      output = OEmpty;
-    }
-
-(* ------------------------------------------------------------------------- *)
-
-(* The compact rendering algorithm. *)
-
-  let compact channel document =
-
-    let column =
-      ref 0
-    in
-
-    let rec scan = function
-      | Empty ->
-         ()
-      | Char c ->
-         Output.char channel c;
-         column := !column + 1
-      | String (s, ofs, len) ->
-         Output.substring channel s ofs len;
-         column := !column + len
-      | Blank n ->
-         blanks channel n;
-         column := !column + n
-      | HardLine ->
-         Output.char channel '\n';
-         column := 0
-      | Cat (doc1, doc2) ->
-         scan doc1;
-         scan doc2
-      | IfFlat (doc, _)
-      | Nest (_, doc)
-      | Group doc ->
-         scan doc
-      | Column f ->
-         scan (f !column)
-      | Nesting f ->
-         scan (f 0)
-    in
-
-    scan document
-
-end
-
-(* ------------------------------------------------------------------------- *)
-
-(* Instantiating the renderers for the two kinds of output channels. *)
-
-module Channel =
-  Renderer(ChannelOutput)
-
-module Buffer =
-  Renderer(BufferOutput)
-
-(* ------------------------------------------------------------------------- *)
-
-(* Constructors. *)
-
-let empty =
-  Empty
-
-let (^^) x y =
-  match x, y with
-  | Empty, x
-  | x, Empty ->
-      x
-  | _, _ ->
-      Cat (x, y)
-
-let ifflat doc1 doc2 =
-  IfFlat (doc1, doc2)
-
-let hardline =
-  HardLine
-
-let char c =
-  assert (c <> '\n');
-  Char c
-
-let substring s ofs len =
-  if len = 0 then
-    Empty
-  else
-    String (s, ofs, len)
-
-let text s =
-  substring s 0 (String.length s)
-
-let blank n =
-  if n = 0 then
-    Empty
-  else
-    Blank n
-
-let nest i x =
-  assert (i >= 0);
-  Nest (i, x)
-
-let column f =
-  Column f
-
-let nesting f =
-  Nesting f
-
-let group x =
-  Group x
-
-(* ------------------------------------------------------------------------- *)
-
-(* Low-level combinators for alignment and indentation. *)
-
-let align d =
-  column (fun k ->
-    nesting (fun i ->
-      nest (k - i) d
-    )
-  )
-
-let hang i d =
-  align (nest i d)
-
-let indent i d =
-  hang i (blank i ^^ d)
-
-(* ------------------------------------------------------------------------- *)
-
-(* High-level combinators. *)
-
-let lparen          = char '('
-let rparen          = char ')'
-let langle          = char '<'
-let rangle          = char '>'
-let lbrace          = char '{'
-let rbrace          = char '}'
-let lbracket        = char '['
-let rbracket        = char ']'
-let squote          = char '\''
-let dquote          = char '"'
-let bquote          = char '`'
-let semi            = char ';'
-let colon           = char ':'
-let comma           = char ','
-let space           = char ' '
-let dot             = char '.'
-let sharp           = char '#'
-let backslash       = char '\\'
-let equals          = char '='
-let qmark           = char '?'
-let tilde           = char '~'
-let at              = char '@'
-let percent         = char '%'
-let dollar          = char '$'
-let caret           = char '^'
-let ampersand       = char '&'
-let star            = char '*'
-let plus            = char '+'
-let minus           = char '-'
-let underscore      = char '_'
-let bang            = char '!'
-let bar             = char '|'
-
-let break i         = ifflat (text (String.make i ' ')) hardline
-let break0          = ifflat empty hardline
-let break1          = ifflat space hardline
-
-let string s =
-  let n = String.length s in
-  let rec chop i =
-    try
-      let j = String.index_from s i '\n' in
-      substring s i (j - i) ^^ break1 ^^ chop (j + 1)
-    with Not_found ->
-      substring s i (n - i)
-  in
-  chop 0
-
-let group_break1 = group break1
-
-let words s =
-  let n = String.length s in
-  let rec blank accu i = (* we have skipped over at least one blank character *)
-    if i = n then
-      accu ^^ group_break1
-    else match s.[i] with
-    | ' '
-    | '\t'
-    | '\n'
-    | '\r' ->
-       blank accu (i + 1)
-    | _ ->
-       word break1 accu i (i + 1)
-  and word prefix accu i j = (* we have skipped over at least one non-blank character *)
-    if j = n then
-      accu ^^ group (prefix ^^ substring s i (j - i))
-    else match s.[j] with
-    | ' '
-    | '\t'
-    | '\n'
-    | '\r' ->
-       blank (accu ^^ group (prefix ^^ substring s i (j - i))) (j + 1)
-    | _ ->
-       word prefix accu i (j + 1)
-  in
-  if n = 0 then
-    empty
-  else
-    match s.[0] with
-    | ' '
-    | '\t'
-    | '\n'
-    | '\r' ->
-       blank empty 1
-    | _ ->
-       word empty empty 0 1
-
-let enclose l r x   = l ^^ x ^^ r
-
-let squotes         = enclose squote squote
-let dquotes         = enclose dquote dquote
-let bquotes         = enclose bquote bquote
-let braces          = enclose lbrace rbrace
-let parens          = enclose lparen rparen
-let angles          = enclose langle rangle
-let brackets        = enclose lbracket rbracket
-
-let fold f docs     = List.fold_right f docs empty
-
-let rec fold1 f docs =
-   match docs with
-   | [] ->
-       empty
-   | [ doc ] ->
-       doc
-   | doc :: docs ->
-       f doc (fold1 f docs)
-
-let rec fold1map f g docs =
-   match docs with
-   | [] ->
-       empty
-   | [ doc ] ->
-       g doc
-   | doc :: docs ->
-       let doc = g doc in (* force left-to-right evaluation *)
-       f doc (fold1map f g docs)
-
-let sepmap sep g docs =
-  fold1map (fun x y -> x ^^ sep ^^ y) g docs
-
-let optional f = function
-  | None ->
-      empty
-  | Some x ->
-      f x
-
-let group1 d = group (nest 1 d)
-let group2 d = group (nest 2 d)
-
-module Operators = struct
-  let ( !^ ) = text
-  let ( ^^ ) = ( ^^ )
-  let ( ^/^ ) x y = x ^^ break1 ^^ y
-  let ( ^//^ ) x y = group (x ^^ nest 2 (break1 ^^ y))
-  let ( ^@^ ) x y = group (x ^^ break1 ^^ y)
-  let ( ^@@^ ) x y = group2 (x ^^ break1 ^^ y)
-end
-
-open Operators
-let prefix op x = !^op ^//^ x
-let infix op x y = (x ^^ space ^^ !^op) ^//^ y
-let infix_dot op x y = group2 ((x ^^ !^op) ^^ break0 ^^ y)
-let infix_com op x y = x ^^ !^op ^^ group_break1 ^^ y
-let surround n sep open_doc contents close_doc =
-  group (open_doc ^^ nest n (sep ^^ contents) ^^ sep ^^ close_doc)
-let surround1 open_txt contents close_txt =
-  surround 1 break0 !^open_txt contents !^close_txt
-let surround2 open_txt contents close_txt =
-  surround 2 break1 !^open_txt contents !^close_txt
-
-let soft_surround n sep open_doc contents close_doc =
-  group (open_doc ^^ nest n (group sep ^^ contents) ^^
-         group (sep ^^ close_doc))
-
-let seq indent break empty_seq open_seq sep_seq close_seq = function
-  | [] -> empty_seq
-  | xs ->
-      surround indent break
-        open_seq (fold1 (fun x xs -> x ^^ sep_seq ^^ xs) xs) close_seq
-let seq1 open_txt sep_txt close_txt =
-  seq 1 break0 !^(open_txt ^ close_txt) !^open_txt (!^sep_txt ^^ break1) !^close_txt
-let seq2 open_txt sep_txt close_txt =
-  seq 2 break1 !^(open_txt ^ close_txt) !^open_txt (!^sep_txt ^^ break1) !^close_txt
-
-let sprintf fmt = Printf.ksprintf string fmt
-
-(* A signature for value representations.
-   This is compatible with the associated Camlp4 generator:
-     SwitchValueRepresentation *)
-
-module type VALUE_REPRESENTATION = sig
-  (* The type of value representation *)
-  type t
-
-  (* [variant type_name data_constructor_name tag arguments]
-        Given information about the variant and its arguments,
-        this function produces a new value representation. *)
-  val variant : string -> string -> int -> t list -> t
-
-  (* [record type_name fields]
-        Given a type name and a list of record fields, this function
-        produces the value representation of a record. *)
-  val record : string -> (string * t) list -> t
-
-  (* [tuple arguments]
-        Given a list of value representation this function produces
-        a new value representation. *)
-  val tuple : t list -> t
-
-  (* ------------------------------------------------------------------------- *)
-
-  (* Value representation for primitive types. *)
-
-  val string : string -> t
-  val int : int -> t
-  val int32 : int32 -> t
-  val int64 : int64 -> t
-  val nativeint : nativeint -> t
-  val float : float -> t
-  val char : char -> t
-  val bool : bool -> t
-  val option : ('a -> t) -> 'a option -> t
-  val list : ('a -> t) -> 'a list -> t
-  val array : ('a -> t) -> 'a array -> t
-  val ref : ('a -> t) -> 'a ref -> t
-
-  (* Value representation for any other value. *)
-  val unknown : string -> 'a -> t
-end
-
-module type DOCUMENT_VALUE_REPRESENTATION =
-  VALUE_REPRESENTATION with type t = document
-
-(* please remove as soon as this will be available in ocaml *)
-module MissingFloatRepr = struct
-  let valid_float_lexeme s =
-    let l = String.length s in
-    let rec loop i =
-      if i >= l then s ^ "." else
-      match s.[i] with
-      | '0' .. '9' | '-' -> loop (i+1)
-      | _ -> s
-    in loop 0
-
-  let float_repres f =
-    match classify_float f with
-      FP_nan -> "nan"
-    | FP_infinite ->
-        if f < 0.0 then "neg_infinity" else "infinity"
-    | _ ->
-        let s1 = Printf.sprintf "%.12g" f in
-        if f = float_of_string s1 then valid_float_lexeme s1 else
-        let s2 = Printf.sprintf "%.15g" f in
-        if f = float_of_string s2 then valid_float_lexeme s2 else
-        Printf.sprintf "%.18g" f
-end
-
-module ML = struct
-  type t = document
-  let tuple = seq1 "(" "," ")"
-  let variant _ cons _ args =
-    if args = [] then !^cons else !^cons ^^ tuple args
-  let record _ fields =
-    seq2 "{" ";" "}" (List.map (fun (k, v) -> infix ":" !^k v) fields)
-  let option f = function
-    | Some x -> !^"Some" ^^ tuple [f x]
-    | None -> !^"None"
-  let list f xs = seq2 "[" ";" "]" (List.map f xs)
-  let array f xs = seq2 "[|" ";" "|]" (Array.to_list (Array.map f xs))
-  let ref f x = record "ref" ["contents", f !x]
-  let float f = string (MissingFloatRepr.float_repres f)
-  let int = sprintf "%d"
-  let int32 = sprintf "%ld"
-  let int64 = sprintf "%Ld"
-  let nativeint = sprintf "%nd"
-  let char = sprintf "%C"
-  let bool = sprintf "%B"
-  let string = sprintf "%S"
-  let unknown tyname _ = sprintf "<abstr:%s>" tyname
-end
-
-(* Deprecated *)
-let line            = ifflat space hardline
-let linebreak       = ifflat empty hardline
-let softline        = group line
-let softbreak       = group linebreak
diff --git a/bundles/menhirLib/menhir-20120123/src/pprint.mli b/bundles/menhirLib/menhir-20120123/src/pprint.mli
deleted file mode 100644 (file)
index 6988cea..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* ------------------------------------------------------------------------- *)
-
-(* Basic combinators for building documents. *)
-
-type document
-
-val empty: document
-val hardline: document
-val char: char -> document
-val substring: string -> int -> int -> document
-val text: string -> document
-val blank: int -> document
-val (^^): document -> document -> document
-val nest: int -> document -> document
-val column: (int -> document) -> document
-val nesting: (int -> document) -> document
-val group: document -> document
-val ifflat: document -> document -> document
-
-(* ------------------------------------------------------------------------- *)
-
-(* Low-level combinators for alignment and indentation. *)
-
-val align: document -> document
-val hang: int -> document -> document
-val indent: int -> document -> document
-
-(* ------------------------------------------------------------------------- *)
-
-(* High-level combinators for building documents. *)
-
-(* [break n] Puts [n] spaces in flat mode and a new line otherwise.
-   Equivalent to: [ifflat (String.make n ' ') hardline] *)
-val break: int -> document
-
-(* [break0] equivalent to [break 0] *)
-val break0: document
-
-(* [break1] equivalent to [break 1] *)
-val break1: document
-
-val string: string -> document
-val words: string -> document
-
-val lparen: document
-val rparen: document
-val langle: document
-val rangle: document
-val lbrace: document
-val rbrace: document
-val lbracket: document
-val rbracket: document
-val squote: document
-val dquote: document
-val bquote: document
-val semi: document
-val colon: document
-val comma: document
-val space: document
-val dot: document
-val sharp: document
-val backslash: document
-val equals: document
-val qmark: document
-val tilde: document
-val at: document
-val percent: document
-val dollar: document
-val caret: document
-val ampersand: document
-val star: document
-val plus: document
-val minus: document
-val underscore: document
-val bang: document
-val bar: document
-
-val squotes: document -> document
-val dquotes: document -> document
-val bquotes: document -> document
-val braces: document -> document
-val parens: document -> document
-val angles: document -> document
-val brackets: document -> document
-
-val fold: (document -> document -> document) -> document list -> document
-val fold1: (document -> document -> document) -> document list -> document
-val fold1map: (document -> document -> document) -> ('a -> document) -> 'a list -> document
-val sepmap: document -> ('a -> document) -> 'a list -> document
-
-val optional: ('a -> document) -> 'a option -> document
-
-(* [prefix left right]
-      Flat layout: [left] [right]
-      Otherwise:   [left]
-                     [right]
- *)
-val prefix: string -> document -> document
-
-(* [infix middle left right]
-      Flat layout: [left] [middle] [right]
-      Otherwise:   [left] [middle]
-                     [right]
- *)
-val infix: string -> document -> document -> document
-
-(* [infix_com middle left right]
-      Flat layout: [left][middle] [right]
-      Otherwise:   [left][middle]
-                     [right]
- *)
-val infix_com: string -> document -> document -> document
-
-(* [infix_dot middle left right]
-      Flat layout: [left][middle][right]
-      Otherwise: [left][middle]
-                    [right]
- *)
-val infix_dot: string -> document -> document -> document
-
-(* [surround nesting break open_doc contents close_doc] *)
-val surround: int -> document -> document -> document -> document -> document
-
-(* [surround1 open_txt contents close_txt]
-     Flat:      [open_txt][contents][close_txt]
-     Otherwise: [open_txt]
-                 [contents]
-                [close_txt]
- *)
-val surround1: string -> document -> string -> document
-
-(* [surround2 open_txt contents close_txt]
-     Flat:      [open_txt] [contents] [close_txt]
-     Otherwise: [open_txt]
-                  [contents]
-                [close_txt]
- *)
-val surround2: string -> document -> string -> document
-
-(* [soft_surround nesting break open_doc contents close_doc] *)
-val soft_surround: int -> document -> document -> document -> document -> document
-
-(* [seq indent break empty_seq open_seq sep_seq close_seq contents] *)
-val seq: int -> document -> document -> document -> document -> document ->
-         document list -> document 
-
-(* [seq1 open_seq sep_seq close_seq contents]
-     Flat layout: [open_seq][contents][sep_seq]...[sep_seq][contents][close_seq]
-     Otherwise:   [open_seq]
-                   [contents][sep_seq]...[sep_seq][contents]
-                  [close_seq]
- *)
-val seq1: string -> string -> string -> document list -> document
-
-(* [seq2 open_seq sep_seq close_seq contents]
-     Flat layout: [open_seq] [contents][sep_seq]...[sep_seq][contents] [close_seq]
-     Otherwise:   [open_seq]
-                    [contents][sep_seq]...[sep_seq][contents]
-                  [close_seq]
- *)
-val seq2: string -> string -> string -> document list -> document
-
-(* [group1 d] equivalent to [group (nest 1 d)] *)
-val group1: document -> document
-
-(* [group2 d] equivalent to [group (nest 2 d)] *)
-val group2: document -> document
-
-module Operators : sig
-  val ( ^^ ) : document -> document -> document
-  val ( !^ ) : string -> document
-  val ( ^/^ ) : document -> document -> document
-  val ( ^//^ ) : document -> document -> document
-  val ( ^@^ ) : document -> document -> document
-  val ( ^@@^ ) : document -> document -> document
-end
-
-(* ------------------------------------------------------------------------- *)
-
-(* A signature for document renderers. *)
-
-module type RENDERER = sig
-  
-  (* Output channels. *)
-
-  type channel
-
-  (* [pretty rfrac width channel document] pretty-prints the document
-     [document] to the output channel [channel]. The parameter [width] is the
-     maximum number of characters per line. The parameter [rfrac] is the
-     ribbon width, a fraction relative to [width]. The ribbon width is the
-     maximum number of non-indentation characters per line. *)
-
-  val pretty: float -> int -> channel -> document -> unit
-
-  (* [compact channel document] prints the document [document] to the output
-     channel [channel]. No indentation is used. All newline instructions are
-     respected, that is, no groups are flattened. *)
-
-  val compact: channel -> document -> unit
-
-end
-
-(* ------------------------------------------------------------------------- *)
-
-(* Renderers to output channels and to memory buffers. *)
-
-module Channel : RENDERER with type channel = out_channel
-
-module Buffer : RENDERER with type channel = Buffer.t
-
-(* ------------------------------------------------------------------------- *)
-
-(* A signature for value representations.
-   This is compatible with the associated Camlp4 generator:
-     SwitchValueRepresentation *)
-
-module type VALUE_REPRESENTATION = sig
-  (* The type of value representation *)
-  type t
-
-  (* [variant type_name data_constructor_name tag arguments]
-        Given information about the variant and its arguments,
-        this function produces a new value representation. *)
-  val variant : string -> string -> int -> t list -> t
-
-  (* [record type_name fields]
-        Given a type name and a list of record fields, this function
-        produces the value representation of a record. *)
-  val record : string -> (string * t) list -> t
-
-  (* [tuple arguments]
-        Given a list of value representation this function produces
-        a new value representation. *)
-  val tuple : t list -> t
-
-  (* ------------------------------------------------------------------------- *)
-
-  (* Value representation for primitive types. *)
-
-  val string : string -> t
-  val int : int -> t
-  val int32 : int32 -> t
-  val int64 : int64 -> t
-  val nativeint : nativeint -> t
-  val float : float -> t
-  val char : char -> t
-  val bool : bool -> t
-  val option : ('a -> t) -> 'a option -> t
-  val list : ('a -> t) -> 'a list -> t
-  val array : ('a -> t) -> 'a array -> t
-  val ref : ('a -> t) -> 'a ref -> t
-
-  (* Value representation for any other value. *)
-  val unknown : string -> 'a -> t
-end
-
-(* A signature for source printers. *)
-
-module type DOCUMENT_VALUE_REPRESENTATION =
-  VALUE_REPRESENTATION with type t = document
-
-module ML : DOCUMENT_VALUE_REPRESENTATION
-
-(* Deprecated *)
-val line: document
-val linebreak: document
-val softline: document
-val softbreak: document
diff --git a/bundles/menhirLib/menhir-20120123/src/preFront.ml b/bundles/menhirLib/menhir-20120123/src/preFront.ml
deleted file mode 100644 (file)
index d9931b4..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Printf
-open Syntax
-
-let read_whole_file filename =
-
-  (* Open the file in text mode, so that (under Windows) CRLF is converted to LF.
-     This guarantees that one byte is one character and seems to be required in
-     order to report accurate positions. *)
-
-  let channel = open_in filename in
-
-  (* The standard library functions [pos_in] and [seek_in] do not work correctly
-     when CRLF conversion is being performed, so we abandon their use. (They were
-     used to go and extract the text of semantic actions.) Instead we load the
-     entire file into memory up front, and work with a string. *)
-
-  (* The standard library function [in_channel_length] does not work correctly
-     when CRLF conversion is being performed, so we do not use it to read the
-     whole file. And the standard library function [Buffer.add_channel] uses
-     [really_input] internally, so we cannot use it either. Bummer. *)
-
-  let block_size = 16384 in
-  let b = Buffer.create block_size in
-  let s = String.create block_size in
-
-  let rec loop () =
-    let read = input channel s 0 block_size in
-    if read > 0 then begin
-      Buffer.add_substring b s 0 read;
-      loop()
-    end
-  in
-
-  loop();
-  close_in channel;
-  Buffer.contents b
-
-let load_partial_grammar filename = 
-  if Filename.check_suffix filename (if Settings.coq then ".vy" else ".mly") then
-    Error.set_filename filename
-  else
-    Error.error [] (sprintf "argument file names should end in .mly. \"%s\" is not accepted." filename);
-  try
-
-    let contents = read_whole_file filename in
-    Error.file_contents := Some contents;
-    let lexbuf = Lexing.from_string contents in
-    lexbuf.Lexing.lex_curr_p <-
-       { 
-         Lexing.pos_fname = filename; 
-         Lexing.pos_lnum  = 1;
-         Lexing.pos_bol   = 0; 
-         Lexing.pos_cnum  = 0
-       };
-    let grammar =
-      { (Parser.grammar Lexer.main lexbuf) with ConcreteSyntax.pg_filename = filename }
-    in
-    Error.file_contents := None;
-
-    (* If there were errors during parsing, stop. This has to be done
-       explicitly here because the parser performs error recovery and
-       does not die at the first error. One could even go further and
-       attempt to work with the grammar in spite of the parse errors,
-       but we choose not to. *)
-
-    if Error.errors () then
-      exit 1
-    else
-      grammar
-
-  with Sys_error msg ->
-    Error.error [] msg
-
-let partial_grammars = 
-  List.map load_partial_grammar Settings.filenames
-
-let () =
-  Time.tick "Lexing and parsing"
-
-let parameterized_grammar = 
-  PartialGrammar.join_partial_grammars partial_grammars
-
-let grammar = 
-  ParameterizedGrammar.expand parameterized_grammar
-
-let () =
-  Time.tick "Joining and expanding"
-
diff --git a/bundles/menhirLib/menhir-20120123/src/preFront.mli b/bundles/menhirLib/menhir-20120123/src/preFront.mli
deleted file mode 100644 (file)
index 70f1bba..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module drives the first half of the front-end. It opens and
-   parses the input files, which yields a number of partial
-   grammars. It joins these grammars, expands them to get rid of
-   parameterized nonterminals, and performs reachability
-   analysis. This yields a single unified grammar.
-
-   More transformations over this grammar are performed in the second
-   half of the front-end, which is driven by [Front]. The modules
-   [PreFront] and [Front] are separated because it is convenient to
-   insert auxiliary modules, such as [TokenType] and [Infer], in
-   between the two.  *)
-
-val grammar: UnparameterizedSyntax.grammar
-
diff --git a/bundles/menhirLib/menhir-20120123/src/printer.ml b/bundles/menhirLib/menhir-20120123/src/printer.ml
deleted file mode 100644 (file)
index 36aba64..0000000
+++ /dev/null
@@ -1,667 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* A pretty-printer for [IL]. *)
-
-open IL
-open Printf
-
-module Make (X : sig
-
-  (* This is the channel that is being written to. *)
-
-  val f: out_channel
-
-  (* If [raw_stretch_action] is set, then we print the semantic actions
-     as they are found into the original source code. *)
-  val raw_stretch_action: bool
-
-  (* This controls the way we print Objective Caml stretches (types and
-     semantic actions). We either surround them with #line directives
-     (for better error reports if the generated code is ill - typed) or
-     don't (for better readability). The value is either [None] -- do
-     not provide #line directives -- or [Some filename] -- do provide
-     them. [filename] is the name of the file that is being written
-     to. *)
-
-  val locate_stretches: string option
-
-end) = struct
-
-(* ------------------------------------------------------------------------- *)
-(* Dealing with newlines and indentation. *)
-
-let maxindent =
-  120
-
-let whitespace =
-  String.make maxindent ' '
-
-let indentation =
-  ref 0
-
-let line =
-  ref 1
-
-(* [rawnl] is, in principle, the only place where writing a newline
-   character to the output channel is permitted. This ensures that the
-   line counter remains correct. But see also [stretch] and [typ0]. *)
-
-let rawnl f =
-  incr line;
-  output_char f '\n'
-
-let nl f =
-  rawnl f;
-  output f whitespace 0 !indentation
-
-let indent ofs producer f x =
-  let old_indentation = !indentation in
-  let new_indentation = old_indentation + ofs in
-  if new_indentation <= maxindent then
-    indentation := new_indentation;
-  nl f;
-  producer f x;
-  indentation := old_indentation
-
-(* This produces a #line directive. *)
-
-let sharp f line file =
-  fprintf f "%t# %d \"%s\"%t" rawnl line file rawnl
-
-(* ------------------------------------------------------------------------- *)
-(* Printers of atomic elements. *)
-
-let nothing f =
-  ()
-
-let space f =
-  output_char f ' '
-
-let comma f =
-  output_string f ", "
-
-let seminl f =
-  output_char f ';';
-  nl f
-
-let times f =
-  output_string f " * "
-
-let letrec f =
-  output_string f "let rec "
-
-let letnonrec f =
-  output_string f "let "
-
-let keytyp f =
-  output_string f "type "
-
-let exc f =
-  output_string f "exception "
-
-let et f =
-  output_string f "and "
-
-let var f x =
-  output_string f x
-
-let bar f =
-  output_string f " | "
-
-(* ------------------------------------------------------------------------- *)
-(* List printers. *)
-
-let rec list elem sep f = function
-  | [] ->
-      ()
-  | e :: es ->
-      fprintf f "%t%a%a" sep elem e (list elem sep) es
-
-let rec typeparams p0 p1 f = function
-  | [] ->
-      ()
-  | [ param ] ->
-      fprintf f "%a " p0 param
-  | param :: params ->
-      fprintf f "(%a%a) " p1 param (list p1 comma) params
-
-(* ------------------------------------------------------------------------- *)
-(* Expression printer. *)
-
-(* We use symbolic constants that stand for subsets of the
-   expression constructors. We do not use numeric levels
-   to stand for subsets, because our subsets do not form
-   a linear inclusion chain. *)
-
-type subset =
-  | All
-  | AllButSeq
-  | AllButFunTryMatch
-  | AllButFunTryMatchSeq
-  | AllButLetFunTryMatch
-  | AllButLetFunTryMatchSeq
-  | AllButIfThen
-  | AllButIfThenSeq
-  | OnlyAppOrAtom
-  | OnlyAtom
-
-(* This computes the intersection of a subset with the
-   constraint "should not be a sequence". *)
-
-let andNotSeq = function
-  | All
-  | AllButSeq ->
-      AllButSeq
-  | AllButFunTryMatch
-  | AllButFunTryMatchSeq ->
-      AllButFunTryMatchSeq
-  | AllButLetFunTryMatch
-  | AllButLetFunTryMatchSeq ->
-      AllButLetFunTryMatchSeq
-  | AllButIfThen
-  | AllButIfThenSeq ->
-      AllButIfThenSeq
-  | OnlyAppOrAtom ->
-      OnlyAppOrAtom
-  | OnlyAtom ->
-      OnlyAtom
-
-(* This defines the semantics of subsets by relating
-   expressions with subsets. *)
-
-let rec member e k =
-  match e with
-  | EComment _
-  | EPatComment _ ->
-      true
-  | EFun _
-  | ETry _
-  | EMatch _ ->
-      begin
-       match k with
-       | AllButFunTryMatch
-       | AllButFunTryMatchSeq
-       | AllButLetFunTryMatch
-       | AllButLetFunTryMatchSeq
-       | OnlyAppOrAtom
-       | OnlyAtom ->
-           false
-       | _ ->
-           true
-      end
-  | ELet ([], e) ->
-      member e k
-  | ELet ((PUnit, _) :: _, _) ->
-      begin
-       match k with
-       | AllButSeq
-       | AllButFunTryMatchSeq
-       | AllButLetFunTryMatchSeq
-       | AllButIfThenSeq
-       | OnlyAppOrAtom
-       | OnlyAtom ->
-           false
-       | _ ->
-           true
-      end
-  | ELet (_ :: _, _) ->
-      begin
-       match k with
-       | AllButLetFunTryMatch
-       | AllButLetFunTryMatchSeq
-       | OnlyAppOrAtom
-       | OnlyAtom ->
-           false
-       | _ ->
-           true
-      end
-  | EIfThen _ ->
-      begin
-       match k with
-       | AllButIfThen
-       | AllButIfThenSeq
-       | OnlyAppOrAtom
-       | OnlyAtom ->
-           false
-       | _ ->
-           true
-      end
-  | EApp (_, _ :: _)
-  | EData (_, _ :: _)
-  | EMagic _
-  | ERepr _
-  | ERaise _ ->
-      begin
-       match k with
-       | OnlyAtom ->
-           false
-       | _ ->
-           true
-      end
-  | ERecordWrite _
-  | EIfThenElse _ ->
-      begin
-       match k with
-       | OnlyAppOrAtom
-       | OnlyAtom ->
-           false
-       | _ ->
-           true
-      end
-  | EVar _
-  | ETextual _
-  | EApp (_, [])
-  | EData (_, [])
-  | ETuple _
-  | EAnnot _
-  | ERecord _
-  | ERecordAccess (_, _)
-  | EIntConst _
-  | EStringConst _
-  | EUnit
-  | EArray _
-  | EArrayAccess (_, _) ->
-      true
-
-
-let rec exprlet k pes f e2 =
-  match pes with
-  | [] ->
-      exprk k f e2
-  | (PUnit, e1) :: pes ->
-      fprintf f "%a%t%a" (exprk AllButLetFunTryMatch) e1 seminl (exprlet k pes) e2
-  | (PVar id1, EAnnot (e1, ts1)) :: pes ->
-      (* TEMPORARY current ocaml does not support type schemes here; drop quantifiers, if any *)
-      fprintf f "let %s : %a = %a in%t%a" id1 typ ts1.body (* scheme ts1 *) expr e1 nl (exprlet k pes) e2
-  | (PVar id1, EFun (ps1, e1)) :: pes ->
-      fprintf f "let %s%a = %a in%t%t%a"
-       id1 (list pat0 space) ps1 (indent 2 expr) e1 nl nl (exprlet k pes) e2
-  | (p1, (ELet _ as e1)) :: pes ->
-      fprintf f "let %a =%a%tin%t%a" pat p1 (indent 2 expr) e1 nl nl (exprlet k pes) e2
-  | (p1, e1) :: pes ->
-      fprintf f "let %a = %a in%t%a" pat p1 expr e1 nl (exprlet k pes) e2
-
-and atom f e =
-  exprk OnlyAtom f e
-
-and app f e =
-  exprk OnlyAppOrAtom f e
-
-and expr f e =
-  exprk All f e
-
-and exprk k f e =
-  if member e k then
-    match e with
-    | EComment (c, e) ->
-       if Settings.comment then
-         fprintf f "(* %s *)%t%a" c nl (exprk k) e
-       else
-         exprk k f e
-    | EPatComment (s, p, e) ->
-       if Settings.comment then
-         fprintf f "(* %s%a *)%t%a" s pat p nl (exprk k) e
-       else
-         exprk k f e
-    | ELet (pes, e2) ->
-       exprlet k pes f e2
-    | ERecordWrite (e1, field, e2) ->
-       fprintf f "%a.%s <- %a" atom e1 field (exprk (andNotSeq k)) e2
-    | EMatch (e, []) ->
-       assert false
-    | EMatch (e, brs) ->
-       fprintf f "match %a with%a" expr e (branches k) brs
-    | ETry (_, []) ->
-       assert false
-    | ETry (e, brs) ->
-       fprintf f "try%a%twith%a" (indent 2 expr) e nl (branches k) brs
-    | EIfThen (e1, e2) ->
-       fprintf f "if %a then%a" expr e1 (indent 2 (exprk (andNotSeq k))) e2
-    | EIfThenElse (e0, e1, e2) ->
-       fprintf f "if %a then%a%telse%a"
-          expr e0 (indent 2 (exprk AllButIfThenSeq)) e1 nl (indent 2 (exprk (andNotSeq k))) e2
-    | EFun (ps, e) ->
-       fprintf f "fun%a ->%a" (list pat0 space) ps (indent 2 (exprk k)) e
-    | EApp (EVar op, [ e1; e2 ])
-      when op.[0] = '(' && op.[String.length op - 1] = ')' ->
-       let op = String.sub op 1 (String.length op - 2) in
-       fprintf f "%a %s %a" app e1 op app e2
-    | EApp (e, args) ->
-       fprintf f "%a%a" app e (list atom space) args
-    | ERaise e ->
-       fprintf f "raise %a" atom e
-    | EMagic e ->
-       fprintf f "Obj.magic %a" atom e
-    | ERepr e ->
-       fprintf f "Obj.repr %a" atom e
-    | EData (d, []) ->
-       var f d
-    | EData (d, [ arg ]) ->
-       fprintf f "%s %a" d atom arg
-    | EData (d, arg :: args) ->
-       fprintf f "%s (%a%a)" d app arg (list app comma) args
-    | EVar v ->
-       var f v
-    | ETextual action ->
-       stretch (X.raw_stretch_action) f action
-    | EUnit ->
-       fprintf f "()"
-    | EIntConst k ->
-       if k >= 0 then
-         fprintf f "%d" k
-       else
-         fprintf f "(%d)" k
-    | EStringConst s ->
-       fprintf f "\"%s\"" (String.escaped s)
-    | ETuple [] ->
-       assert false
-    | ETuple [ e ] ->
-       atom f e
-    | ETuple (e :: es) ->
-       fprintf f "(%a%a)" app e (list app comma) es
-    | EAnnot (e, s) ->
-       (* TEMPORARY current ocaml does not support type schemes here; drop quantifiers, if any *)
-       fprintf f "(%a : %a)" app e typ s.body (* should be scheme s *)
-    | ERecordAccess (e, field) ->
-       fprintf f "%a.%s" atom e field
-    | ERecord fs ->
-       fprintf f "{%a}" (indent 2 (list field nothing)) fs
-    | EArray fs ->
-       fprintf f "[|%a|]" (indent 2 (list array_field nothing)) fs
-    | EArrayAccess (e, i) ->
-       fprintf f "%a.(%a)" atom e expr i
-  else
-    fprintf f "(%a)" expr e
-
-and stretch raw f stretch =
-  let content = stretch.Stretch.stretch_content
-  and raw_content = stretch.Stretch.stretch_raw_content in
-  match X.locate_stretches with
-  | Some basename ->
-      sharp f stretch.Stretch.stretch_linenum stretch.Stretch.stretch_filename;
-      output_string f content;
-      line := !line + stretch.Stretch.stretch_linecount;
-      sharp f (!line + 2) basename;
-      output f whitespace 0 !indentation
-  | None ->
-      output_string f (if raw then raw_content else content)
-
-and branches k f = function
-  | [] ->
-      ()
-  | [ br ] ->
-      fprintf f "%t| %a" nl (branch k) br
-  | br :: brs ->
-      fprintf f "%t| %a%a" nl (branch AllButFunTryMatch) br (branches k) brs
-
-and branch k f br =
-  fprintf f "%a ->%a" pat br.branchpat (indent 4 (exprk k)) br.branchbody
-
-and field f (label, e) =
-  fprintf f "%s = %a%t" label app e seminl
-
-and fpats f fps =
-  list fpat nothing f fps
-
-and fpat f = function
-  | (_, PWildcard) ->
-      () (* in a record pattern, fields can be omitted *)
-  | (label, p) ->
-      fprintf f "%s = %a%t" label pat p seminl
-
-and array_field f e =
-  fprintf f "%a%t" app e seminl
-
-and pat0 f = function
-  | PUnit ->
-      fprintf f "()"
-  | PWildcard ->
-      fprintf f "_"
-  | PVar x ->
-      var f x
-  | PData (d, []) ->
-      var f d
-  | PTuple [] ->
-      assert false
-  | PTuple [ p ] ->
-      pat0 f p
-  | PTuple (p :: ps) ->
-      fprintf f "(%a%a)" pat1 p (list pat1 comma) ps
-  | PAnnot (p, t) ->
-      fprintf f "(%a : %a)" pat p typ t
-  | PRecord fps ->
-      fprintf f "{%a}" (indent 2 fpats) fps
-  | p ->
-      fprintf f "(%a)" pat p
-
-and pat1 f = function
-  | PData (d, [ arg ]) ->
-      fprintf f "%s %a" d pat0 arg
-  | PData (d, arg :: args) ->
-      fprintf f "%s (%a%a)" d pat1 arg (list pat1 comma) args
-  | PTuple [ p ] ->
-      pat1 f p
-  | p ->
-      pat0 f p
-
-and pat2 f = function
-  | POr [] ->
-      assert false
-  | POr (p :: ps) ->
-      fprintf f "%a%a" pat2 p (list pat2 bar) ps
-  | PTuple [ p ] ->
-      pat2 f p
-  | p ->
-      pat1 f p
-
-and pat f p =
-  pat2 f p
-
-and typevar f v =
-  fprintf f "'%s" v
-
-and typ0 f = function
-  | TypTextual (Stretch.Declared ocamltype) ->
-      (* Parentheses are necessary to avoid confusion between 1 - ary
-        data constructor with n arguments and n - ary data constructor. *)
-      fprintf f "(%a)" (stretch true) ocamltype
-  | TypTextual (Stretch.Inferred t) ->
-      line := !line + LineCount.count 0 (Lexing.from_string t);
-      fprintf f "(%s)" t
-  | TypVar v ->
-      typevar f v
-  | TypApp (t, params) ->
-      fprintf f "%a%s" (typeparams typ0 typ) params t
-  | t ->
-      fprintf f "(%a)" typ t
-
-and typ1 f = function
-  | TypTuple [] ->
-      assert false
-  | TypTuple [ t ] ->
-      typ1 f t
-  | TypTuple (t :: ts) ->
-      fprintf f "%a%a" typ0 t (list typ0 times) ts
-  | t ->
-      typ0 f t
-
-and typ2 f = function
-  | TypArrow (t1, t2) ->
-      fprintf f "%a -> %a" typ1 t1 typ2 t2
-  | t ->
-      typ1 f t
-
-and typ f =
-  typ2 f
-
-and scheme f scheme =
-  match scheme.quantifiers with
-  | [] ->
-      typ f scheme.body
-  | qs ->
-      fprintf f "%a. %a" (list typevar space) qs typ scheme.body
-
-(* ------------------------------------------------------------------------- *)
-(* Toplevel definition printer. *)
-
-let datavalparams f = function
-  | [] ->
-      ()
-  | valparam :: valparams ->
-      fprintf f " of %a%a" typ valparam (list typ times) valparams
-
-let datatypeparams f = function
-  | None ->
-      ()
-  | Some typs ->
-      fprintf f "(* %a*)" (list typ space) typs (* TEMPORARY not great *)
-
-let datadef f def =
-  fprintf f "  | %s%a%a" def.dataname datavalparams def.datavalparams datatypeparams def.datatypeparams
-
-let fielddef f def =
-  fprintf f "  %s%s: %a"
-    (if def.modifiable then "mutable " else "")
-    def.fieldname
-    scheme def.fieldtype
-
-let typerhs f = function
-  | TDefRecord [] ->
-      assert false
-  | TDefRecord (field :: fields) ->
-      fprintf f " = {%t%a%a%t}" nl fielddef field (list fielddef seminl) fields nl
-  | TDefSum [] ->
-      ()
-  | TDefSum defs ->
-      fprintf f " = %a" (list datadef nl) defs
-  | TAbbrev t ->
-      fprintf f " = %a" typ t
-
-let typeconstraint f = function
-  | None ->
-      ()
-  | Some (t1, t2) ->
-      fprintf f "%tconstraint %a = %a" nl typ t1 typ t2
-
-let typedef f def =
-  fprintf f "%a%s%a%a%t%t"
-    (typeparams typevar typevar) def.typeparams
-    def.typename
-    typerhs def.typerhs
-    typeconstraint def.typeconstraint
-    nl nl
-
-let rec pdefs pdef sep1 sep2 f = function
-  | [] ->
-      ()
-  | def :: defs ->
-      fprintf f "%t%a%a" sep1 pdef def (pdefs pdef sep2 sep2) defs
-
-let valdef f = function
-  | { valpat = PVar id; valval = EAnnot (e, ts) } ->
-      (* TEMPORARY current ocaml does not support type schemes here; drop quantifiers, if any *)
-      fprintf f "%s : %a =%a%t%t" id typ ts.body (* scheme ts *) (indent 2 expr) e nl nl
-  | { valpat = p; valval = e } ->
-      fprintf f "%a =%a%t%t" pat p (indent 2 expr) e nl nl
-
-let valdefs =
-  pdefs valdef letrec et
-
-let nonrecvaldefs =
-  pdefs valdef letnonrec letnonrec
-
-let typedefs =
-  pdefs typedef keytyp et
-
-let directive f = function
-  | DirOpen s ->
-      fprintf f "open %s%t%t" s nl nl
-  | DirInclude s ->
-      fprintf f "include %s%t%t" s nl nl
-
-let directives =
-  pdefs directive nothing nothing
-
-let excdef f def =
-  match def.exceq with
-  | None ->
-      fprintf f "%s%t%t" def.excname nl nl
-  | Some s ->
-      fprintf f "%s = %s%t%t" def.excname s nl nl
-
-let excdefs =
-  pdefs excdef exc exc
-
-let functorparams intf body b f params =
-  match params with
-  | [] ->
-      fprintf f "%a%!" body b
-  | _ ->
-      fprintf f "module Make%a%t%s%t%a%t%tend%t%!"
-       (list (stretch false) nl) params
-       nl (if intf then ": sig" else "= struct") nl
-       (indent 2 body) b
-       nl nl nl
-
-let structure f p =
-  fprintf f "struct%aend" (
-    indent 2 (fun f p ->
-      fprintf f "%t%a%a%a"
-       nl
-       excdefs p.struct_excdefs
-       typedefs p.struct_typedefs
-       nonrecvaldefs p.struct_nonrecvaldefs
-    )
-  ) p
-
-
-let rec modexpr f = function
-  | MVar x ->
-      fprintf f "%s" x
-  | MStruct s ->
-      structure f s
-  | MApp (e1, e2) ->
-      fprintf f "%a (%a)" modexpr e1 modexpr e2
-
-let moduledef f d =
-  fprintf f "module %s = %a%t%t" d.modulename modexpr d.modulerhs nl nl
-
-let program f p =
-  fprintf f "%a%a"
-    excdefs p.excdefs
-    typedefs p.typedefs;
-  List.iter (stretch false f) p.prologue;
-  fprintf f "%a%a%a"
-    nonrecvaldefs p.nonrecvaldefs
-    (list moduledef nothing) p.moduledefs
-    valdefs p.valdefs;
-  List.iter (output_string f) p.postlogue
-
-let valdecl f (x, ts) =
-  fprintf f "val %s: %a" x typ ts.body
-
-let interface f i =
-  fprintf f "%a%a%a%!" excdefs i.excdecls typedefs i.typedecls (list valdecl nl) i.valdecls
-
-let program p =
-  functorparams false program p X.f p.paramdefs
-
-let interface i =
-  functorparams true interface i X.f i.paramdecls
-
-let expr e =
-  expr X.f e
-
-end
diff --git a/bundles/menhirLib/menhir-20120123/src/printer.mli b/bundles/menhirLib/menhir-20120123/src/printer.mli
deleted file mode 100644 (file)
index 7f013af..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* A pretty-printer for [IL]. *)
-
-module Make (X : sig
-
-  (* This is the channel that is being written to. *)
-
-  val f: out_channel
-
-  (* If [raw_stretch_action] is set, then we print the semantic actions 
-     as they are found into the original source code. *)
-  val raw_stretch_action: bool
-
-  (* This controls the way we print Objective Caml stretches (types and
-     semantic actions). We either surround them with #line directives
-     (for better error reports if the generated code is ill-typed) or
-     don't (for better readability). The value is either [None] -- do
-     not provide #line directives -- or [Some filename] -- do provide
-     them. [filename] is the name of the file that is being written. *)
-
-  val locate_stretches: string option
-
-end) : sig
-
-  val program: IL.program -> unit
-
-  val expr: IL.expr -> unit
-
-  val interface: IL.interface -> unit
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/rawPrinter.ml b/bundles/menhirLib/menhir-20120123/src/rawPrinter.ml
deleted file mode 100644 (file)
index 53f6f15..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* A debugging pretty-printer for [IL]. Newlines are used liberally, so as to
-   facilitate diffs. *)
-
-open IL
-open Printf
-
-module Make (X : sig
-
-  (* This is the channel that is being written to. *)
-
-  val f: out_channel
-
-end) = struct
-
-(* ------------------------------------------------------------------------- *)
-(* XML-style trees. *)
-
-type tree =
-  | Node of string * tree list
-
-let node label ts =
-  Node (label, ts)
-
-(* ------------------------------------------------------------------------- *)
-(* Dealing with newlines and indentation. *)
-
-let maxindent =
-  120
-
-let whitespace =
-  String.make maxindent ' '
-
-let indentation =
-  ref 0
-
-let line =
-  ref 1
-
-(* [rawnl] is, in principle, the only place where writing a newline
-   character to the output channel is permitted. This ensures that the
-   line counter remains correct. But see also [stretch] and [typ0]. *)
-
-let rawnl f =
-  incr line;
-  output_char f '\n'
-
-let nl f =
-  rawnl f;
-  output f whitespace 0 !indentation
-
-let indent ofs producer f x =
-  let old_indentation = !indentation in
-  let new_indentation = old_indentation + ofs in
-  if new_indentation <= maxindent then
-    indentation := new_indentation;
-  nl f;
-  producer f x;
-  indentation := old_indentation
-
-(* ------------------------------------------------------------------------- *)
-(* Tree printers. *)
-
-let rec print_tree f = function
-  | Node (label, []) ->
-      output_char f '<';
-      output_string f label;
-      output_char f '/';
-      output_char f '>';
-      nl f
-  | Node (label, ts) ->
-      output_char f '<';
-      output_string f label;
-      output_char f '>';
-      indent 2 print_trees f ts;
-      output_char f '<';
-      output_char f '/';
-      output_string f label;
-      output_char f '>';
-      nl f
-
-and print_trees f = function
-  | [] ->
-      ()
-  | t :: ts ->
-      print_tree f t;
-      print_trees f ts
-
-(* ------------------------------------------------------------------------- *)
-(* Expression-to-tree converter. *)
-
-let rec expr e =
-  match e with
-  | EComment (c, e) ->
-      node "comment" [ string c; expr e ]
-  | EPatComment (s, p, e) ->
-      node "patcomment" [ string s; pat p; expr e ]
-  | ELet (pes, e2) ->
-      node "let" ( patexprs pes @ [ expr e2 ])
-  | ERecordWrite (e1, field, e2) ->
-      node "recordwrite" [ expr e1; string field; expr e2 ]
-  | EMatch (e, brs) ->
-      node "match" ( expr e :: branches brs )
-  | ETry (e, brs) ->
-      node "try" ( expr e :: branches brs )
-  | EIfThen (e1, e2) ->
-      node "ifthen" [ expr e1; expr e2 ]
-  | EIfThenElse (e0, e1, e2) ->
-      node "ifthenelse" [ expr e0; expr e1; expr e2 ]
-  | EFun (ps, e) ->
-      node "fun" ( pats ps @ [ expr e ])
-  | EApp (e, args) ->
-      node "app" ( expr e :: exprs args )
-  | ERaise e ->
-      node "raise" [ expr e ]
-  | EMagic e ->
-      node "magic" [ expr e ]
-  | ERepr e ->
-      node "repr" [ expr e ]
-  | EData (d, args) ->
-      node "data" ( string d :: exprs args )
-  | EVar v ->
-      node "var" [ string v ]
-  | ETextual action ->
-      node "text" [ stretch action ]
-  | EUnit ->
-      node "unit" []
-  | EIntConst k ->
-      node "int" [ int k ]
-  | EStringConst s ->
-      node "string" [ string s ]
-  | ETuple es ->
-      node "tuple" ( exprs es )
-  | EAnnot (e, s) ->
-      node "annot" [ expr e; scheme s ]
-  | ERecordAccess (e, field) ->
-      node "recordaccess" [ expr e; string field ]
-  | ERecord fs ->
-      node "record" (fields fs)
-  | EArray fs ->
-      node "array" (exprs fs)
-  | EArrayAccess (e1, e2) ->
-      node "arrayaccess" [ expr e1; expr e2 ]
-
-and exprs es =
-  List.map expr es
-
-and stretch stretch =
-  string stretch.Stretch.stretch_content
-
-and branches brs =
-  List.map branch brs
-
-and branch br =
-  node "branch" [ pat br.branchpat; expr br.branchbody ]
-
-and fields fs =
-  List.map field fs
-
-and field (label, e) =
-  node "field" [ string label; expr e ]
-
-and pats ps =
-  List.map pat ps
-
-and pat = function
-  | PUnit ->
-      node "punit" []
-  | PWildcard ->
-      node "pwildcard" []
-  | PVar x ->
-      node "pvar" [ string x ]
-  | PTuple ps ->
-      node "ptuple" (pats ps)
-  | PAnnot (p, t) ->
-      node "pannot" [ pat p; typ t ]
-  | PData (d, args) ->
-      node "pdata" (string d :: pats args)
-  | PRecord fps ->
-      node "precord" (fpats fps)
-  | POr ps ->
-      node "por" (pats ps)
-
-and fpats fps =
-  List.map fpat fps
-
-and fpat (_, p) =
-  pat p
-
-and patexprs pes =
-  List.map patexpr pes
-
-and patexpr (p, e) =
-  node "patexpr" [ pat p; expr e ]
-
-and string s =
-  node s []
-
-and int k =
-  node (string_of_int k) []
-
-and bool b =
-  node (if b then "true" else "false") []
-
-and scheme s =
-  string "omitted" (* TEMPORARY to be completed, someday *)
-
-and typ t =
-  string "omitted" (* TEMPORARY to be completed, someday *)
-
-(* ------------------------------------------------------------------------- *)
-(* Convert to a tree, then print the tree. *)
-
-let expr e = 
-  print_tree X.f (expr e)
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/rawPrinter.mli b/bundles/menhirLib/menhir-20120123/src/rawPrinter.mli
deleted file mode 100644 (file)
index 155addb..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* A debugging pretty-printer for [IL]. Newlines are used liberally, so as to
-   facilitate diffs. *)
-
-module Make (X : sig
-
-  (* This is the channel that is being written to. *)
-
-  val f: out_channel
-
-end) : sig
-
-  val expr: IL.expr -> unit
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/reachability.ml b/bundles/menhirLib/menhir-20120123/src/reachability.ml
deleted file mode 100644 (file)
index 0e98be2..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open UnparameterizedSyntax
-open Syntax
-
-let rec visit grammar visited symbol =
-  try
-    let rule = StringMap.find symbol grammar.rules in
-    if not (StringSet.mem symbol visited) then
-      let visited = StringSet.add symbol visited in
-      List.fold_left (visitb grammar) visited rule.branches
-    else
-      visited
-  with Not_found ->
-    (* This is a terminal symbol. *)
-    assert (symbol = "error" || StringMap.mem symbol grammar.tokens);
-    visited
-
-and visitb grammar visited { producers = symbols } =
-  List.fold_left (visits grammar) visited symbols
-
-and visits grammar visited (symbol, _) =
-  visit grammar visited symbol
-
-let trim grammar =
-  if StringSet.cardinal grammar.start_symbols = 0 then
-    Error.error [] "no start symbol has been declared."
-  else
-    let reachable =
-      StringSet.fold (fun symbol visited ->
-       visit grammar visited symbol
-      ) grammar.start_symbols StringSet.empty 
-    in
-    StringMap.iter (fun symbol rule ->
-      if not (StringSet.mem symbol reachable) then
-       Error.grammar_warning
-         rule.positions
-         (Printf.sprintf
-            "symbol %s is unreachable from any of the start symbol(s)."
-              symbol)
-    ) grammar.rules;
-    { grammar with rules = StringMap.restrict reachable grammar.rules }
-
diff --git a/bundles/menhirLib/menhir-20120123/src/reachability.mli b/bundles/menhirLib/menhir-20120123/src/reachability.mli
deleted file mode 100644 (file)
index 66c2860..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This extremely simple analysis restricts a grammar to the set
-   of nonterminals that are reachable, via productions, from the
-   start nonterminals. *)
-
-val trim: UnparameterizedSyntax.grammar -> UnparameterizedSyntax.grammar
-
diff --git a/bundles/menhirLib/menhir-20120123/src/reductionGraphs.ml b/bundles/menhirLib/menhir-20120123/src/reductionGraphs.ml
deleted file mode 100644 (file)
index e9d1ab6..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This file contains experimental code that has been used in an attempt to
-   explore the validation of the termination property for LR(1) automata. *)
-
-(* This code is currently unused. It could be plugged in again (at the end of
-   the module [Invariant]. *)
-
-(* ------------------------------------------------------------------------ *)
-(* Build a graph of all reductions. The vertices are the states of the automaton;
-   there is an edge from [s1] to [s2] if a reduction (including the goto step)
-   can take us from [s1] to [s2]. Every edge is labeled with its effect on the
-   size of the stack. *)
-
-(* This graph is built with respect to a fixed lookahead token [tok]. We 
-   consider only the reductions that are permitted with [tok] is the next
-   token on the stream. *)
-
-exception NoDanger
-
-let clique_count =
-  ref 0
-
-let make_reduction_graph tok =
-
-  (* Build the reduction graph for this token. The main part of the work
-     is to define the edges; the rest is immediate. *)
-
-  let module ReductionGraph = struct
-
-    type node =
-       Lr1.node
-
-    let n =
-      Lr1.n
-
-    let index =
-      Lr1.number
-
-    (* This auxiliary function pops [n] cells off an abstract stack. The
-       parameter [states] is a set of states that we might be in before
-       popping. The function returns a set of states that we might be in
-       after popping. *)
-
-    let rec pop_word n states w =
-      if n = 0 then
-       states
-      else
-       match w with
-       | [] ->
-           (* the invariant is too weak to ensure that reduction is possible! *)
-           assert false
-       | (_, states) :: w ->
-           pop_word (n-1) states w
-
-    let pop_stack n states (w, _) =
-      pop_word n states w
-
-    (* The following function allows listing the successors of a node. Each
-       edge is labeled with an integer value that represents the decrease in
-       the size of the stack. *)
-
-    let successors (action : int -> node -> unit) node : unit =
-      (* Find which reductions are permitted at this node. *)
-      let prods =
-       match has_default_reduction node with
-       | Some (prod, _) ->
-           [ prod ]
-       | None ->
-           try
-             TerminalMap.find tok (Lr1.reductions node)
-           with Not_found ->
-             []
-      in
-      (* Get a description of the stack at this node. *)
-      let stack = lfp node in
-      (* For each production [prod], ... *)
-      List.iter (fun prod ->
-       (* If this is a start production, ignore it. We are not interested in
-          accept actions, only in true reduce actions. *)
-       match Production.classify prod with
-       | Some _ ->
-           ()
-       | None ->
-           (* Find out how many cells are popped. *)
-           let decrease = Production.length prod in
-           (* Find out what states we might be in after popping. *)
-           let states = pop_stack decrease (Lr1.NodeSet.singleton node) stack in
-           (* Now, the goto step pushes one cell... *)
-           let increase = 1 in
-           let net = decrease - increase in
-           (* Find out which states we might be in after the goto step. *)
-           let symbol = Symbol.N (Production.nt prod) in
-           let goto (state : Lr1.node) : Lr1.node =
-             try
-               SymbolMap.find symbol (Lr1.transitions state)
-             with Not_found ->
-               (* the invariant is too weak to ensure that goto is possible! *)
-               assert false
-           in
-           (* There is a transition, labelled [decrease - increase], from [node]
-              to every state in the image through [goto] of the set [states]. *)
-           Lr1.NodeSet.iter (fun state ->
-             action net (goto state)
-           ) states
-      ) prods
-
-    let iter =
-      Lr1.iter
-
-    (* The [successors] function describes a multi-graph: there might be multiple
-       edges with the same source and target nodes. In that case, we would like
-       to keep only one, the one with minimum weight, as this is the most dangerous
-       one. Do so (naively). *)
-
-    let adjacency : (int * node) list Lr1.NodeMap.t ref =
-      ref Lr1.NodeMap.empty
-
-    let () =
-      iter (fun source ->
-       (* Compute a list of outgoing edges. *)
-       let edges = ref [] in
-       successors (fun weight target ->
-         edges := (weight, target) :: !edges;
-       ) source;
-       let edges =
-         List.sort (fun (weight1, _) (weight2, _) -> weight1 - weight2) !edges
-       in
-       (* Define a predicate that accepts an edge only the first time
-          its target node is seen. *)
-       let seen =
-         ref Lr1.NodeSet.empty
-       in
-       let acceptable (_, node) =
-         if Lr1.NodeSet.mem node !seen then
-           false
-         else begin
-           seen := Lr1.NodeSet.add node !seen;
-           true
-         end
-       in
-       (* Filter the list of edges. This relies on [filter] evaluating the
-          predicate left-to-right. *)
-       let edges = List.filter acceptable edges in
-       (* Augment the table. *)
-       adjacency := Lr1.NodeMap.add source edges !adjacency
-      ) 
-
-    let successors (action : int -> node -> unit) source : unit =
-      let edges =
-       try
-         Lr1.NodeMap.find source !adjacency
-       with Not_found ->
-         assert false
-      in
-      List.iter (fun (weight, target) ->
-       action weight target
-      ) edges
-
-  end in
-
-  (* We are interested in determining whether the reduction graph contains
-     simple cycles of nonpositive weight. In order to answer this question,
-     it is sufficient (and more tractable) to consider each strongly connected
-     component separately. *)
-
-  (* Compute the strongly connected components. *)
-
-  let module SCC =
-    Tarjan.Run (struct
-      include ReductionGraph
-      (* Forget the edge labels. *)
-      let successors action node =
-       successors (fun _ target -> action target) node
-    end)
-  in
-
-  (* Examine the components, one at a time. *)
-
-  SCC.iter (fun representative elements ->
-    match elements with
-    | [] ->
-       assert false
-    | [ _ ] ->
-       ()
-    | _ ->
-
-       try
-
-         (* We have a non-trivial component. [representative] is its
-            representative, and [elements] is the list of its elements. *)
-
-         (* This auxiliary function tests whether a node is a member of
-            this component. *)
-
-         let member node =
-           Lr1.number (SCC.representative node) = Lr1.number representative
-         in
-
-         (* Build a description of this component. *)
-
-         let module Clique = struct
-
-           type node =
-               Lr1.node
-
-           (* Re-index the nodes. *)
-
-           let n, node_to_new_index =
-             List.fold_left (fun (n, map) node ->
-               n + 1, Lr1.NodeMap.add node n map
-             ) (0, Lr1.NodeMap.empty) elements
-
-           let index node =
-             try
-               Lr1.NodeMap.find node node_to_new_index
-             with Not_found ->
-               assert false
-
-           (* Restrict the edges to only those that remain within this component. *)
-
-           let successors (action : int -> node -> unit) node : unit =
-             ReductionGraph.successors (fun label successor ->
-               if member successor then
-                 action label successor
-             ) node
-
-           (* Restrict the vertices to only the elements of this component. *)
-
-           let iter (action : node -> unit) : unit =
-             List.iter action elements
-
-         end in
-
-         (* In the following, we perform several tests, of increasing strength and
-            cost, to determine whether there is a dangerous cycle in the clique. *)
-
-         (* Check whether at least one edge has nonpositive weight. If that is not
-            the case, then there is clearly no dangerous cycle. *)
-
-         let danger =
-           ref false
-         in
-
-         Clique.iter (fun node ->
-           Clique.successors (fun weight _ ->
-             if weight <= 0 then
-               danger := true
-           ) node
-         );
-
-         if not !danger then
-           raise NoDanger;
-
-         (* Check whether there is at least one edge of negative weight. If not,
-            look for a non-trivial strongly connected component among the edges
-            of zero weight. *)
-
-         let negative =
-           ref false
-         in
-
-         Clique.iter (fun node ->
-           Clique.successors (fun weight _ ->
-             if weight < 0 then
-               negative := true
-           ) node
-         );
-
-         if not !negative then begin
-           let module ZeroWeight = struct
-             include Clique
-             let successors action source =
-               successors (fun weight target ->
-                 if weight = 0 then
-                   action target
-               ) source
-           end in
-           let module ZeroWeightSCC =
-             Tarjan.Run (ZeroWeight)
-           in
-           danger := false;
-           ZeroWeightSCC.iter (fun _ elements ->
-             if List.length elements > 1 then
-               danger := true
-           )
-         end;
-
-         if not !danger then
-           raise NoDanger;
-
-         (* Use Floyd and Warshall's algorithm to determine if there is a dangerous
-            cycle. *)
-
-         let module NC =
-           NonpositiveCycles.Run(Clique)
-         in
-
-         if not NC.graph_has_nonpositive_simple_cycle then
-           raise NoDanger;
-
-         (* If there might be danger, then print this clique for manual examination. *)
-
-         let module PrintableClique = struct
-
-           include Clique
-
-           type vertex =
-               node
-
-           let name node =
-             Printf.sprintf "s%d" (Lr1.number node)
-
-           let successors (action: ?style:Dot.style -> label:string -> vertex -> unit) node : unit =
-             successors (fun label successor ->
-               action ~label:(string_of_int label) successor
-             ) node
-
-           let iter (action: ?style:Dot.style -> label:string -> vertex -> unit) : unit =
-             iter (fun node ->
-               action ~label:(name node) node
-             )
-
-         end in
-
-         let filename =
-           Printf.sprintf "%s.%d.dot"
-             (Terminal.print tok)
-             (Misc.postincrement clique_count)
-         in
-         let c = open_out filename in
-         let module P = Dot.Print(PrintableClique) in
-         P.print ~orientation:Dot.Portrait ~size:(8.,5.) c;
-         close_out c
-
-       with NoDanger ->
-         ()
-
-  )
-
-let () =
-  (* The graphs are built, and printed to .dot files, only if requested by
-     the user via [--make-reduction-graphs]. The reduction graphs are not
-     used by Menhir itself. *)
-  if Settings.make_reduction_graphs then begin
-    Terminal.iter make_reduction_graph;
-    Printf.fprintf stderr "Constructed %d potentially interesting reduction cliques.\n" !clique_count
-  end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/referenceInterpreter.ml b/bundles/menhirLib/menhir-20120123/src/referenceInterpreter.ml
deleted file mode 100644 (file)
index a56100d..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-open Cst
-
-(* Set up all of the information required by the LR engine. Everything is
-   read directly from [Grammar] and [Lr1]. *)
-
-module T = struct
-
-  type state =
-      Lr1.node
-   
-  type token =
-      Terminal.t
-
-  type terminal =
-      Terminal.t
-
-  type semantic_value =
-      cst
-
-  let token2terminal (token : token) : terminal =
-    token
-
-  let token2value (token : token) : semantic_value =
-    CstTerminal token
-
-  let error_terminal =
-    Terminal.error
-
-  let error_value =
-    CstError
-
-  type production =
-      Production.index
-
-  let default_reduction (s : state) defred nodefred env =
-    match Invariant.has_default_reduction s with
-    | Some (prod, _) ->
-       defred env prod
-    | None ->
-       nodefred env
-
-  let action (s : state) (tok : terminal) value shift reduce fail env =
-
-    (* Check whether [s] has an outgoing shift transition along [tok]. *)
-
-    try
-
-      let s' : state = SymbolMap.find (Symbol.T tok) (Lr1.transitions s) in
-
-      (* There is such a transition. Return either [ShiftDiscard] or
-        [ShiftNoDiscard], depending on the existence of a default
-        reduction on [#] at [s']. *)
-
-      match Invariant.has_default_reduction s' with
-      | Some (_, toks) when TerminalSet.mem Terminal.sharp toks ->
-         shift env false tok value s'
-      | _ ->
-         shift env true tok value s'
-         
-    (* There is no such transition. Look for a reduction. *)
-
-    with Not_found ->
-      try
-
-       let prod = Misc.single (TerminalMap.find tok (Lr1.reductions s)) in
-       reduce env prod
-
-      (* There is no reduction either. Fail. *)
-
-      with Not_found ->
-       fail env
-
-  let goto (s : state) (prod : production) : state =
-    try
-      SymbolMap.find (Symbol.N (Production.nt prod)) (Lr1.transitions s)
-    with Not_found ->
-      assert false
-
-  open MenhirLib.EngineTypes
-
-  exception Accept of semantic_value
-  exception Error
-
-  type semantic_action =
-      (state, semantic_value, token) env -> unit
-
-  let semantic_action (prod : production) : semantic_action =
-    fun env ->
-      
-      (* Check whether [prod] is a start production. *)
-
-      match Production.classify prod with
-
-      (* If it is one, accept. Start productions are of the form S' ->
-        S, where S is a non-terminal symbol, so the desired semantic
-        value is found within the top cell of the stack. *)
-
-      | Some _ ->
-         raise (Accept env.stack.semv)
-
-      (* If it is not, reduce. Pop a suffix of the stack, and use it
-        to construct a new concrete syntax tree node. *)
-
-      | None ->
-
-         let n = Production.length prod in
-         let values : semantic_value array =
-           Array.make n CstError (* dummy *)
-         and startp : Lexing.position ref =
-           ref Lexing.dummy_pos
-         and endp : Lexing.position ref =
-           ref Lexing.dummy_pos
-         in
-
-         (* The auxiliary function [pop k stack] pops [k] stack cells
-            and returns a truncated stack. It also updates the automaton's
-            current state, and fills in [values], [startp], and [endp]. *)
-
-         let rec pop k stack =
-
-           if k = 0 then
-
-             (* There are no more stack cells to pop. *)
-
-             stack
-
-           else begin
-
-             (* Fetch a semantic value. *)
-
-             values.(k - 1) <- stack.semv;
-
-             (* Pop one cell. The stack must be non-empty. As we pop a cell,
-                change the automaton's current state to the one stored within
-                the cell. (It is sufficient to do this only when [k] is 1.)
-                If this is the first (last) cell that we pop, update [endp]
-                ([startp]). *)
-
-             let next = stack.next in
-             assert (stack != next);
-             if k = n then begin
-               endp := stack.endp
-             end;
-             if k = 1 then begin
-               env.current <- stack.state;
-               startp := stack.startp
-             end;
-             pop (k - 1) next
-
-           end
-
-         in
-         let stack = pop n env.stack in
-
-         (* Construct and push a new stack cell. The associated semantic
-            value is a new concrete syntax tree. *)
-
-         env.stack <- {
-           state = env.current;
-           semv = CstNonTerminal (prod, values);
-           startp = !startp;
-           endp = !endp;
-           next = stack
-         }
-
-  (* The reference interpreter performs error recovery if and only if this
-     is requested via [--recovery]. *)
-
-  let recovery =
-    Settings.recovery
-
-  module Log = struct
-
-    open Printf
-
-    (* I use a reference as a quick and dirty form of parameter passing. *)
-
-    let log =
-      ref false
-
-    let maybe action =
-      if !log then begin
-       action();
-       prerr_newline()
-      end
-
-    let state s =
-      maybe (fun () ->
-       fprintf stderr "State %d:" (Lr1.number s)
-      )
-
-    let shift tok s' =
-      maybe (fun () ->
-       fprintf stderr "Shifting (%s) to state %d" (Terminal.print tok) (Lr1.number s')
-      )
-
-    let reduce_or_accept prod =
-      maybe (fun () ->
-       match Production.classify prod with
-       | Some _ ->
-           fprintf stderr "Accepting"
-       | None ->
-           fprintf stderr "Reducing production %s" (Production.print prod)
-      )
-
-    let lookahead_token lexbuf tok =
-      maybe (fun () ->
-       fprintf stderr "Lookahead token is now %s (%d-%d)"
-         (Terminal.print tok)
-         lexbuf.Lexing.lex_start_p.Lexing.pos_cnum
-         lexbuf.Lexing.lex_curr_p.Lexing.pos_cnum
-      )
-
-    let initiating_error_handling () =
-      maybe (fun () ->
-       fprintf stderr "Initiating error handling"
-      )
-
-    let resuming_error_handling () =
-      maybe (fun () ->
-       fprintf stderr "Resuming error handling"
-      )
-
-    let handling_error s =
-      maybe (fun () ->
-       fprintf stderr "Handling error in state %d" (Lr1.number s)
-      )
-
-    let discarding_last_token tok =
-      maybe (fun () ->
-       fprintf stderr "Discarding last token read (%s)" (Terminal.print tok)
-      )
-
-  end
-
-end
-
-(* Instantiate the LR engine with this information. *)
-
-module E =
-  MenhirLib.Engine.Make (T)
-
-(* Define a palatable user entry point. *)
-
-let interpret log nt lexer lexbuf =
-
-  (* Find the start state that corresponds to [nt] in the automaton. *)
-
-  let s : Lr1.node =
-    try
-      ProductionMap.find (Production.startsymbol2startprod nt) Lr1.entry
-    with Not_found ->
-      assert false
-  in
-
-  (* Run the engine. *)
-  
-  try
-    T.Log.log := log;
-    Some (E.entry s lexer lexbuf)
-  with T.Error ->
-    None
-
diff --git a/bundles/menhirLib/menhir-20120123/src/referenceInterpreter.mli b/bundles/menhirLib/menhir-20120123/src/referenceInterpreter.mli
deleted file mode 100644 (file)
index c3c8e33..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Grammar
-open Cst
-
-(* This reference interpreter animates the LR automaton. It uses the
-   grammar and automaton descriptions, as provided by [Grammar] and
-   [Lr1], as well as the generic LR engine in [MenhirLib.Engine]. *)
-
-(* The first parameter to the interpreter is a Boolean flag that tells
-   whether a trace should be produced on the standard error channel. *)
-
-(* The interpreter requires a start symbol, a lexer, and a lexing
-   buffer. It either succeeds and produces a concrete syntax tree, or
-   fails. *)
-
-val interpret:
-  bool ->
-  Nonterminal.t ->
-  (Lexing.lexbuf -> Terminal.t) ->
-  Lexing.lexbuf ->
-  cst option
-
diff --git a/bundles/menhirLib/menhir-20120123/src/rowDisplacement.ml b/bundles/menhirLib/menhir-20120123/src/rowDisplacement.ml
deleted file mode 100644 (file)
index 640c1ac..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module compresses a two-dimensional table, where some values
-   are considered insignificant, via row displacement. *)
-
-(* This idea reportedly appears in Aho and Ullman's ``Principles
-   of Compiler Design'' (1977). It is evaluated in Tarjan and Yao's
-   ``Storing a Sparse Table'' (1979) and in Dencker, Dürre, and Heuft's
-   ``Optimization of Parser Tables for Portable Compilers'' (1984). *)
-
-(* A compressed table is represented as a pair of arrays. The
-   displacement array is an array of offsets into the data array. *)
-
-type 'a table =
-    int array * (* displacement *)
-     'a array   (* data *)
-
-(* In a natural version of this algorithm, displacements would be greater
-   than (or equal to) [-n]. However, in the particular setting of Menhir,
-   both arrays are intended to be compressed with [PackedIntArray], which
-   does not efficiently support negative numbers. For this reason, we are
-   careful not to produce negative displacements. *)
-
-(* In order to avoid producing negative displacements, we simply use the
-   least significant bit as the sign bit. This is implemented by [encode]
-   and [decode] below. *)
-
-(* One could also think, say, of adding [n] to every displacement, so as
-   to ensure that all displacements are nonnegative. This would work, but
-   would require [n] to be published, for use by the decoder. *)
-
-let encode (displacement : int) : int =
-  if displacement >= 0 then
-    displacement lsl 1
-  else
-    (-displacement) lsl 1 + 1
-
-let decode (displacement : int) : int =
-  if displacement land 1 = 0 then
-    displacement lsr 1
-  else
-    -(displacement lsr 1)
-
-(* It is reasonable to assume that, as matrices grow large, their
-   density becomes low, i.e., they have many insignificant entries.
-   As a result, it is important to work with a sparse data structure
-   for rows. We internally represent a row as a list of its
-   significant entries, where each entry is a pair of a [j] index and
-   an element. *)
-
-type 'a row =
-    (int * 'a) list
-
-(* [compress equal insignificant dummy m n t] turns the two-dimensional table
-   [t] into a compressed table. The parameter [equal] is equality of data
-   values. The parameter [wildcard] tells which data values are insignificant,
-   and can thus be overwritten with other values. The parameter [dummy] is
-   used to fill holes in the data array. [m] and [n] are the integer
-   dimensions of the table [t]. *)
-
-let compress
-    (equal : 'a -> 'a -> bool)
-    (insignificant : 'a -> bool)
-    (dummy : 'a)
-    (m : int) (n : int)
-    (t : 'a array array) 
-    : 'a table =
-
-  (* Be defensive. *)
-
-  assert (Array.length t = m);
-  assert begin
-    for i = 0 to m - 1 do
-      assert (Array.length t.(i) = n)
-    done;
-    true
-  end;
-
-  (* This turns a row-as-array into a row-as-sparse-list. *)
-
-  let sparse (line : 'a array) : 'a row =
-
-    let rec loop (j : int) (row : 'a row) =
-      if j < 0 then
-       row
-      else
-       let x = line.(j) in
-       loop
-         (j - 1) 
-         (if insignificant x then row else (j, x) :: row)
-    in
-
-    loop (n - 1) []
-
-  in
-
-  (* Define the rank of a row as its number of significant entries. *)
-
-  let rank (row : 'a row) : int =
-    List.length row
-  in
-
-  (* Construct a list of all rows, together with their index and rank. *)
-
-  let rows : (int * int * 'a row) list = (* index, rank, row *)
-    Array.to_list (
-      Array.mapi (fun i line ->
-       let row = sparse line in
-       i, rank row, row
-      ) t
-    )
-  in
-
-  (* Sort this list by decreasing rank. This does not have any impact
-     on correctness, but reportedly improves compression. The
-     intuitive idea is that rows with few significant elements are
-     easy to fit, so they should be inserted last, after the problem
-     has become quite constrained by fitting the heavier rows. This
-     heuristic is attributed to Ziegler. *)
-
-  let rows =
-    List.sort (fun (_, rank1, _) (_, rank2, _) ->
-      compare rank2 rank1
-    ) rows
-  in
-
-  (* Allocate a one-dimensional array of displacements. *)
-
-  let displacement : int array =
-    Array.make m 0
-  in
-
-  (* Allocate a one-dimensional, infinite array of values. Indices
-     into this array are written [k]. *)
-
-  let data : 'a InfiniteArray.t =
-    InfiniteArray.make dummy
-  in
-
-  (* Determine whether [row] fits at offset [k] within the current [data]
-     array, up to extension of this array. *)
-
-  (* Note that this check always succeeds when [k] equals the length of
-     the [data] array. Indeed, the loop is then skipped. This property
-     guarantees the termination of the recursive function [fit] below. *)
-
-  let fits k (row : 'a row) : bool =
-
-    let d = InfiniteArray.extent data in
-
-    let rec loop = function
-      | [] ->
-         true
-      | (j, x) :: row ->
-
-         (* [x] is a significant element. *)
-
-         (* By hypothesis, [k + j] is nonnegative. If it is greater than or
-            equal to the current length of the data array, stop -- the row
-            fits. *)
-
-         assert (k + j >= 0);
-
-         if k + j >= d then
-           true
-
-         (* We now know that [k + j] is within bounds of the data
-            array. Check whether it is compatible with the element [y] found
-            there. If it is, continue. If it isn't, stop -- the row does not
-            fit. *)
-
-         else
-           let y = InfiniteArray.get data (k + j) in
-           if insignificant y || equal x y then
-             loop row
-           else
-             false
-
-    in
-    loop row
-
-  in
-
-  (* Find the leftmost position where a row fits. *)
-
-  (* If the leftmost significant element in this row is at offset [j],
-     then we can hope to fit as far left as [-j] -- so this element
-     lands at offset [0] in the data array. *)
-
-  (* Note that displacements may be negative. This means that, for
-     insignificant elements, accesses to the data array could fail: they could
-     be out of bounds, either towards the left or towards the right. This is
-     not a problem, as long as [get] is invoked only at significant
-     elements. *)
-
-  let rec fit k row : int =
-    if fits k row then
-      k
-    else
-      fit (k + 1) row
-  in
-  let fit row =
-    match row with
-    | [] ->
-       0 (* irrelevant *)
-    | (j, _) :: _ ->
-       fit (-j) row
-  in
-
-  (* Write [row] at (compatible) offset [k]. *)
-
-  let rec write k = function
-    | [] ->
-       ()
-    | (j, x) :: row ->
-       InfiniteArray.set data (k + j) x;
-       write k row
-  in
-
-  (* Iterate over the sorted list of rows. Fit and write each row at
-     the leftmost compatible offset. Update the displacement table. *)
-
-  let () =
-    List.iter (fun (i, _, row) ->
-      let k = fit row in (* if [row] has leading insignificant elements, then [k] can be negative *)
-      write k row;
-      displacement.(i) <- encode k
-    ) rows
-  in
-
-  (* Return the compressed tables. *)
-
-  displacement, InfiniteArray.domain data
-
-(* [get ct i j] returns the value found at indices [i] and [j] in the
-   compressed table [ct]. This function call is permitted only if the
-   value found at indices [i] and [j] in the original table is
-   significant -- otherwise, it could fail abruptly. *)
-
-(* Together, [compress] and [get] have the property that, if the value
-   found at indices [i] and [j] in an uncompressed table [t] is
-   significant, then [get (compress t) i j] is equal to that value. *)
-
-let get (displacement, data) i j =
-  assert (0 <= i && i < Array.length displacement);
-  let k = decode displacement.(i) in
-  assert (0 <= k + j && k + j < Array.length data);
-    (* failure of this assertion indicates an attempt to access an
-       insignificant element that happens to be mapped out of the bounds
-       of the [data] array. *)
-  data.(k + j)
-
-(* [getget] is a variant of [get] which only requires read access,
-   via accessors, to the two components of the table. *)
-
-let getget get_displacement get_data (displacement, data) i j =
-  let k = decode (get_displacement displacement i) in
-  get_data data (k + j)
-
diff --git a/bundles/menhirLib/menhir-20120123/src/rowDisplacement.mli b/bundles/menhirLib/menhir-20120123/src/rowDisplacement.mli
deleted file mode 100644 (file)
index 21efbaa..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module compresses a two-dimensional table, where some values
-   are considered insignificant, via row displacement. *)
-
-(* A compressed table is represented as a pair of arrays. The
-   displacement array is an array of offsets into the data array. *)
-
-type 'a table =
-    int array * (* displacement *)
-     'a array   (* data *)
-
-(* [compress equal insignificant dummy m n t] turns the two-dimensional table
-   [t] into a compressed table. The parameter [equal] is equality of data
-   values. The parameter [wildcard] tells which data values are insignificant,
-   and can thus be overwritten with other values. The parameter [dummy] is
-   used to fill holes in the data array. [m] and [n] are the integer
-   dimensions of the table [t]. *)
-
-val compress:
-  ('a -> 'a -> bool) ->
-  ('a -> bool) ->
-  'a ->
-  int -> int ->
-  'a array array ->
-  'a table
-
-(* [get ct i j] returns the value found at indices [i] and [j] in the
-   compressed table [ct]. This function call is permitted only if the
-   value found at indices [i] and [j] in the original table is
-   significant -- otherwise, it could fail abruptly. *)
-
-(* Together, [compress] and [get] have the property that, if the value
-   found at indices [i] and [j] in an uncompressed table [t] is
-   significant, then [get (compress t) i j] is equal to that value. *)
-
-val get:
-  'a table ->
-  int -> int ->
-  'a
-
-(* [getget] is a variant of [get] which only requires read access,
-   via accessors, to the two components of the table. *)
-
-val getget:
-  ('displacement -> int -> int) ->
-  ('data -> int -> 'a) ->
-  'displacement * 'data ->
-  int -> int ->
-  'a
-
diff --git a/bundles/menhirLib/menhir-20120123/src/sentenceLexer.mll b/bundles/menhirLib/menhir-20120123/src/sentenceLexer.mll
deleted file mode 100644 (file)
index 6c4541f..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This lexer is used to read the sentences provided on the standard input
-   channel when [--interpret] is enabled. *)
-
-{
-
-  open Lexing
-  open SentenceParser
-  open Grammar
-
-  (* Updates the line counter, which is used in some error messages. *)
-
-  let update_loc lexbuf =
-    let pos = lexbuf.lex_curr_p in
-    lexbuf.lex_curr_p <- { pos with
-      pos_lnum = pos.pos_lnum + 1;
-      pos_bol = pos.pos_cnum;
-    }
-
-  (* A short-hand. *)
-
-  let error1 lexbuf msg =
-    Error.error (Positions.one (lexeme_start_p lexbuf)) msg
-
-}
-
-let newline   = ('\010' | '\013' | "\013\010")
-
-let whitespace = [ ' ' '\t' ';' ]
-
-let lowercase = ['a'-'z' '\223'-'\246' '\248'-'\255' '_']
-
-let uppercase = ['A'-'Z' '\192'-'\214' '\216'-'\222']
-
-let identchar = ['A'-'Z' 'a'-'z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255' '0'-'9'] (* '\'' forbidden *)
-
-rule lex = parse
-  | (lowercase identchar *) as lid
-      { try
-         let nt = Nonterminal.lookup lid in
-         if StringSet.mem lid Front.grammar.UnparameterizedSyntax.start_symbols then
-           NONTERMINAL nt
-         else
-           error1 lexbuf (Printf.sprintf "\"%s\" is not a start symbol." lid)
-       with Not_found ->
-         error1 lexbuf (Printf.sprintf "\"%s\" is not a known non-terminal symbol." lid)
-      }
-  | (uppercase identchar *) as uid
-      { try
-         TERMINAL (Terminal.lookup uid)
-       with Not_found ->
-         error1 lexbuf (Printf.sprintf "\"%s\" is not a known terminal symbol." uid)
-      }
-  | whitespace
-      { lex lexbuf }
-  | newline
-      { update_loc lexbuf; EOL }
-  | eof
-      { EOF }
-  | ':'
-      { COLON }
-  | _
-      { error1 lexbuf "unexpected character(s)." }
-
diff --git a/bundles/menhirLib/menhir-20120123/src/sentenceParser.mly b/bundles/menhirLib/menhir-20120123/src/sentenceParser.mly
deleted file mode 100644 (file)
index 000642a..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/**************************************************************************/
-/*                                                                        */
-/*  Menhir                                                                */
-/*                                                                        */
-/*  François Pottier, INRIA Rocquencourt                                  */
-/*  Yann Régis-Gianas, PPS, Université Paris Diderot                      */
-/*                                                                        */
-/*  Copyright 2005-2008 Institut National de Recherche en Informatique    */
-/*  et en Automatique. All rights reserved. This file is distributed      */
-/*  under the terms of the Q Public License version 1.0, with the change  */
-/*  described in file LICENSE.                                            */
-/*                                                                        */
-/**************************************************************************/
-
-/* This parser is used to read the sentences provided on the standard input
-   channel when [--interpret] is enabled. */
-
-/* A sentence is a pair of an optional non-terminal start symbol and a list
-   of terminal symbols. */
-
-%{
-
- open Grammar
-   
-%}
-
-%token COLON EOF EOL
-%token<Grammar.Terminal.t> TERMINAL
-%token<Grammar.Nonterminal.t> NONTERMINAL
-
-%type <(Grammar.Nonterminal.t option * Grammar.Terminal.t list) option> sentence
-%start sentence
-
-%%
-
-sentence:
-| EOF
-    { None } 
-| NONTERMINAL COLON terminals EOL
-    { Some (Some $1, $3) }
-| terminals EOL
-    { Some (None, $1) }
-
-terminals:
-| 
-    { [] } 
-| TERMINAL terminals
-    { $1 :: $2 }
-
diff --git a/bundles/menhirLib/menhir-20120123/src/settings.ml b/bundles/menhirLib/menhir-20120123/src/settings.ml
deleted file mode 100644 (file)
index 56bef69..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Printf
-
-(* ------------------------------------------------------------------------- *)
-(* Prepare for parsing the command line. *)
-
-type token_type_mode =
-  | TokenTypeAndCode   (* produce the definition of the [token] type and code for the parser *)
-  | TokenTypeOnly      (* produce the type definition only *)
-  | CodeOnly of string (* produce the code only; import token type from specified module *)
-
-let token_type_mode =
-  ref TokenTypeAndCode
-
-let tokentypeonly () =
-  token_type_mode := TokenTypeOnly
-
-let codeonly m =
-  if String.capitalize m <> m then begin
-    (* Not using module [Error] to avoid a circular dependency. *)
-    fprintf stderr "Error: %s is not a valid Objective Caml module name.\n" m;
-    exit 1
-  end;
-  token_type_mode := CodeOnly m
-
-let version =
-  ref false
-
-let pager =
-  ref true
-
-let explain =
-  ref false
-
-let base =
-  ref ""
-
-let dump =
-  ref false
-
-let follow =
-  ref false
-
-let graph =
-  ref false
-
-let trace =
-  ref false
-
-let noprefix =
-  ref false
-
-type print_mode =
-    | PrintNormal
-    | PrintUnitActions
-    | PrintUnitActionsUnitTokens
-
-type preprocess_mode =
-    | PMNormal                       (* preprocess and continue *)
-    | PMOnlyPreprocess of print_mode (* preprocess, print grammar, stop *)
-
-let preprocess_mode =
-  ref PMNormal
-
-let recovery =
-  ref false
-
-let v () =
-  dump := true;
-  explain := true
-
-let infer =
-  ref false
-
-let inline =
-  ref true
-
-type ocamldep_mode =
-  | OMNone        (* do not invoke ocamldep *)
-  | OMRaw         (* invoke ocamldep and echo its raw output *)
-  | OMPostprocess (* invoke ocamldep and postprocess its output *)
-
-let depend =
-  ref OMNone
-
-let code_inlining =
-  ref true
-
-let comment =
-  ref false
-
-let ocamlc =
-  ref "ocamlc"
-
-let ocamldep =
-  ref "ocamldep"
-
-let logG, logA, logC =
-  ref 0, ref 0, ref 0
-
-let timings =
-  ref false
-
-let filenames = 
-  ref StringSet.empty
-
-let no_stdlib = 
-  ref false
-
-let stdlib_path =
-  ref Installation.libdir
-
-let insert name = 
-  filenames := StringSet.add name !filenames
-
-let interpret =
-  ref false
-
-let interpret_show_cst =
-  ref false
-
-let table = 
-  ref false
-
-let coq = 
-  ref false
-
-let coq_no_complete =
-  ref false
-
-let coq_no_actions =
-  ref false
-
-let strict =
-  ref false
-
-type suggestion =
-  | SuggestNothing
-  | SuggestCompFlags
-  | SuggestLinkFlags of string (* "cmo" or "cmx" *)
-
-let suggestion =
-  ref SuggestNothing
-
-let options = Arg.align [
-  "--base", Arg.Set_string base, "<basename> Specifies a base name for the output file(s)";
-  "--comment", Arg.Set comment, " Include comments in the generated code";
-  "--coq", Arg.Set coq, " (undocumented)";
-  "--coq-no-complete", Arg.Set coq_no_complete, " (undocumented)";
-  "--coq-no-actions", Arg.Set coq_no_actions, " (undocumented)";
-  "--depend", Arg.Unit (fun () -> depend := OMPostprocess), " Invoke ocamldep and display dependencies";
-  "--dump", Arg.Set dump, " Describe the automaton in <basename>.automaton";
-  "--error-recovery", Arg.Set recovery, " Attempt recovery by discarding tokens after errors";
-  "--explain", Arg.Set explain, " Explain conflicts in <basename>.conflicts";
-  "--external-tokens", Arg.String codeonly, "<module> Import token type definition from <module>";
-  "--follow-construction", Arg.Set follow, " (undocumented)";
-  "--graph", Arg.Set graph, " Write grammar's dependency graph to <basename>.dot";
-  "--infer", Arg.Set infer, " Invoke ocamlc for ahead of time type inference";
-  "--interpret", Arg.Set interpret, " Interpret the sentences provided on stdin";
-  "--interpret-show-cst", Arg.Set interpret_show_cst, " Show a concrete syntax tree upon acceptance";
-  "--log-automaton", Arg.Set_int logA, "<level> Log information about the automaton";
-  "--log-code", Arg.Set_int logC, "<level> Log information about the generated code";
-  "--log-grammar", Arg.Set_int logG, "<level> Log information about the grammar";
-  "--no-code-inlining", Arg.Clear code_inlining, " (undocumented)";
-  "--no-inline", Arg.Clear inline, " Ignore the %inline keyword.";
-  "--no-pager", Arg.Clear pager, " (undocumented)";
-  "--no-prefix", Arg.Set noprefix, " (undocumented)";
-  "--no-stdlib", Arg.Set no_stdlib, " Do not load the standard library";
-  "--ocamlc", Arg.Set_string ocamlc, "<command> Specifies how ocamlc should be invoked";
-  "--ocamldep", Arg.Set_string ocamldep, "<command> Specifies how ocamldep should be invoked";
-  "--only-preprocess", Arg.Unit (fun () -> preprocess_mode := PMOnlyPreprocess PrintNormal),
-                       " Print grammar and exit";
-  "--only-preprocess-u", Arg.Unit (fun () -> preprocess_mode := PMOnlyPreprocess PrintUnitActions),
-                         " Print grammar with unit actions and exit";
-  "--only-preprocess-uu", Arg.Unit (fun () -> preprocess_mode := PMOnlyPreprocess PrintUnitActionsUnitTokens),
-                          " Print grammar with unit actions & tokens and exit";
-  "--only-tokens", Arg.Unit tokentypeonly, " Generate token type definition only, no code";
-  "--raw-depend", Arg.Unit (fun () -> depend := OMRaw), " Invoke ocamldep and echo its raw output";
-  "--stdlib", Arg.Set_string stdlib_path, "<directory> Specify where the standard library lies";
-  "--strict", Arg.Set strict, " Warnings about the grammar are errors";
-  "--suggest-comp-flags", Arg.Unit (fun () -> suggestion := SuggestCompFlags),
-                          " Suggest compilation flags for ocaml{c,opt}";
-  "--suggest-link-flags-byte", Arg.Unit (fun () -> suggestion := SuggestLinkFlags "cmo"),
-                               " Suggest link flags for ocamlc";
-  "--suggest-link-flags-opt", Arg.Unit (fun () -> suggestion := SuggestLinkFlags "cmx"),
-                              " Suggest link flags for ocamlopt";
-  "--table", Arg.Set table, " Use the table-based back-end";
-  "--timings", Arg.Set timings, " Display internal timings";
-  "--trace", Arg.Set trace, " Include tracing instructions in the generated code";
-  "--version", Arg.Set version, " Show version number and exit";
-  "-b", Arg.Set_string base, "<basename> Synonymous with --base <basename>";
-  "-lg", Arg.Set_int logG, " Synonymous with --log-grammar";
-  "-la", Arg.Set_int logA, " Synonymous with --log-automaton";
-  "-lc", Arg.Set_int logC, " Synonymous with --log-code";
-  "-t", Arg.Set table, " Synonymous with --table";
-  "-v", Arg.Unit v, " Synonymous with --dump --explain";
-]
-
-let usage =
-  sprintf "Usage: %s <options> <filenames>" Sys.argv.(0)
-
-(* ------------------------------------------------------------------------- *)
-(* Parse the command line. *)
-
-let () =
-  Arg.parse options insert usage
-
-(* ------------------------------------------------------------------------- *)
-(* If required, print a version number and stop. *)
-
-let () =
-  if !version then begin
-    printf "menhir, version %s\n" Version.version;
-    exit 0
-  end
-
-(* ------------------------------------------------------------------------- *)
-
-(* Menhir is able to suggest compile and link flags to be passed to the
-   Objective Caml compilers. If required, do so and stop. *)
-
-(* If [--table] is not passed, no flags are necessary. If [--table] is
-   passed, then [MenhirLib] needs to be visible (at compile time) and
-   linked in (at link time). This is done either via [ocamlfind], if
-   it was available at installation time, or manually. *)
-
-(* The compilation flags are in fact meant to be used both at compile-
-   and link-time. *)
-
-let () =
-  match !suggestion with
-  | SuggestNothing ->
-      ()
-  | SuggestCompFlags ->
-      if !table then
-       if Installation.ocamlfind then
-         printf "-package menhirLib\n%!"
-       else
-         printf "-I %s\n%!" Installation.libdir;
-      exit 0
-  | SuggestLinkFlags extension ->
-      if !table then
-       if Installation.ocamlfind then
-         printf "-linkpkg\n%!"
-       else
-         printf "menhirLib.%s\n%!" extension;
-      exit 0
-
-(* ------------------------------------------------------------------------- *)
-(* Export the settings. *)
-
-let stdlib_filename = 
-  !stdlib_path ^ "/standard.mly"
-
-let filenames =
-  StringSet.elements !filenames
-
-let base =
-  if !base = "" then
-    match filenames with
-    | [] ->
-       fprintf stderr "%s\n" usage;
-       exit 1
-    | [ filename ] ->
-       Filename.chop_suffix filename (if !coq then ".vy" else ".mly")
-    | _ ->
-       fprintf stderr "Error: you must specify --base when providing multiple input files.\n";
-       exit 1
-  else
-    !base
-
-let filenames = 
-  if !no_stdlib || !coq then
-    filenames
-  else 
-    stdlib_filename :: filenames
-
-let token_type_mode =
-  !token_type_mode
-
-let pager =
-  !pager
-
-let explain =
-  !explain
-
-let dump =
-  !dump
-
-let follow =
-  !follow
-
-let graph =
-  !graph
-
-let trace =
-  !trace
-
-let recovery =
-  !recovery
-
-let noprefix =
-  !noprefix
-
-let infer =
-  !infer
-
-let code_inlining =
-  !code_inlining
-
-let depend =
-  !depend
-
-let inline =
-  !inline
-
-let comment =
-  !comment
-
-let preprocess_mode =
-  !preprocess_mode
-
-let ocamlc =
-  !ocamlc
-
-let ocamldep =
-  !ocamldep
-
-let logG, logA, logC =
-  !logG, !logA, !logC
-
-let timings =
-  !timings
-
-let interpret =
-  !interpret
-
-let interpret_show_cst =
-  !interpret_show_cst
-
-let table = 
-  !table
-
-let coq = 
-  !coq
-
-let coq_no_complete =
-  !coq_no_complete
-
-let coq_no_actions =
-  !coq_no_actions
-
-let strict =
-  !strict
-
diff --git a/bundles/menhirLib/menhir-20120123/src/settings.mli b/bundles/menhirLib/menhir-20120123/src/settings.mli
deleted file mode 100644 (file)
index 5a18eac..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module parses the command line. *)
-
-(* The list of file names that appear on the command line. *)
-
-val filenames: string list
-
-(* How to deal with the type of tokens. *)
-
-type token_type_mode =
-  | TokenTypeAndCode   (* produce the definition of the [token] type and code for the parser *)
-  | TokenTypeOnly      (* produce the type definition only *)
-  | CodeOnly of string (* produce the code only, by relying on an external token type *)
-
-val token_type_mode: token_type_mode
-
-(* Whether Pager's algorithm should be used. *)
-
-val pager: bool
-
-(* Whether conflicts should be explained. *)
-
-val explain: bool
-
-(* Whether the automaton should be dumped. *)
-
-val dump: bool
-
-(* Whether the automaton's construction should be explained (very verbose). *)
-
-val follow: bool
-
-(* Whether the grammar's dependence graph should be dumped. *)
-
-val graph: bool
-
-(* Whether tracing instructions should be generated. *)
-
-val trace: bool
-
-(* Whether error recovery should be attempted. This consists
-   in discarding tokens, after the [error] token has been
-   shifted, until a token that can be accepted is found. *)
-
-val recovery: bool
-
-(* Whether one should stop and print the grammar after joining and
-   expanding the grammar. *)
-
-type print_mode =
-    | PrintNormal
-    | PrintUnitActions
-    | PrintUnitActionsUnitTokens
-
-type preprocess_mode =
-    | PMNormal                       (* preprocess and continue *)
-    | PMOnlyPreprocess of print_mode (* preprocess, print grammar, stop *)
-
-val preprocess_mode: preprocess_mode
-
-(* Whether one should invoke ocamlc in order to infer types for all
-   nonterminals. *)
-
-val infer: bool
-
-(* Whether one should inline the non terminal definitions marked
-   with the %inline keyword. *)
-
-val inline: bool
-
-(* Whether and how one should invoke ocamldep in order to compute and
-   display dependencies. *)
-
-type ocamldep_mode =
-  | OMNone        (* do not invoke ocamldep *)
-  | OMRaw         (* invoke ocamldep and echo its raw output *)
-  | OMPostprocess (* invoke ocamldep and postprocess its output *)
-
-val depend: ocamldep_mode
-
-(* Whether comments should be printed or discarded. *)
-
-val comment: bool
-
-(* This undocumented flag suppresses prefixing of identifiers with an
-   unlikely prefix in the generated code. This increases the code's
-   readability, but can cause identifiers in semantic actions to be
-   captured. *)
-
-val noprefix: bool
-
-(* This undocumented flag causes the code to be transformed by
-   [Inline]. It is on by default. *)
-
-val code_inlining: bool
-
-(* How [ocamlc] and [ocamldep] should be invoked. *)
-
-val ocamlc: string
-val ocamldep: string
-
-(* How verbose we should be. *)
-
-val logG: int (* diagnostics on the grammar *)
-val logA: int (* diagnostics on the automaton *)
-val logC: int (* diagnostics on the generated code *)
-
-(* Whether tasks should be timed. *)
-
-val timings: bool
-
-(* The base name that should be used for the files that we create.
-   This name can contain a path. *)
-
-val base: string
-
-(* The filename of the standard library. *)
-
-val stdlib_filename : string
-
-(* Whether Menhir should behave as an interpreter. *)
-
-val interpret : bool
-
-(* Whether the interpreter should build and display concrete syntax trees. *)
-
-val interpret_show_cst : bool
-
-(* Whether to use the table-based back-end ([true]) or the code-based
-   back-end ([false]). *)
-
-val table : bool
-
-(* Whether to generate a coq description of the grammar and automaton. *)
-
-val coq : bool
-
-(* Whether the coq description must contain completeness proofs. *)
-
-val coq_no_complete : bool
-
-(* Whether the coq backend should ignore types and semantic actions. *)
-
-val coq_no_actions : bool
-
-(* Whether unresolved LR(1) conflicts, useless precedence declarations,
-   productions that are never reduced, etc. should be treated as errors. *)
-
-val strict: bool
-
diff --git a/bundles/menhirLib/menhir-20120123/src/slr.ml b/bundles/menhirLib/menhir-20120123/src/slr.ml
deleted file mode 100644 (file)
index 0eff002..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module extends the LR(0) automaton with lookahead information in order
-   to construct an SLR(1) automaton. The lookahead information is obtained by
-   considering the FOLLOW sets. *)
-
-(* This construction is not used by Menhir, but can be used to check whether
-   the grammar is in the class SLR(1). This check is performed when the log
-   level [lg] is at least 1. *)
-
-open Grammar
-
-(* This flag, which is reserved for internal use, causes more information
-   about SLR(1) conflict states to be printed. *)
-
-let tell_me_everything =
-  false
-
-(* The following function turns an LR(0) state into an SLR(1) state. *)
-
-let make_slr_state (s : Lr0.node) : Lr0.concretelr1state =
-
-  (* Obtain the set of LR(0) items associated with the state [s]. *)
-
-  let items = Lr0.items s in
-
-  (* Unfortunately, this set is not closed. We do not have a function that
-     computes the closure of a set of LR(0) items -- we could build one using
-     [Item.Closure], but that would be overkill.  So, we first convert this
-     set to a set of LR(1) items, then compute the closure at this level, and
-     finally we turn this LR(1) state into an SLR(1) state by letting the
-     lookahead sets be the FOLLOW sets. This is somewhat ugly and naïve, but
-     seems to work. *)
-
-  (* Convert this set to a set of LR(1) items. Here, we can use any set of
-     tokens as the lookahead set. We use the empty set. *)
-
-  let s = Item.Map.lift (fun item -> TerminalSet.empty) items in
-
-  (* Compute the LR(1) closure. *)
-
-  let s = Lr0.closure s in
-
-  (* We now have an LR(1) state that has the correct set of LR(0) items but
-     phony lookahead information. We convert it into an SLR(1) state by
-     deciding that, for each item, the lookahead set is the FOLLOW set of the
-     symbol that appears on the left-hand side of the item. *)
-
-  Item.Map.fold (fun item toks accu ->
-    let _, nt, _, _, _ = Item.def item in
-    let follow_nt = Analysis.follow nt in
-    assert (TerminalSet.subset toks follow_nt); (* sanity check *)
-    Item.Map.add item follow_nt accu
-  ) s Item.Map.empty
-
-(* Insertion of a new reduce action into the table of reductions. Copied
-   from [Lr1] (boo, hiss). *)
-
-let addl prod tok reductions =
-  let prods =
-    try
-      TerminalMap.lookup tok reductions
-    with Not_found ->
-      []
-  in
-  TerminalMap.add tok (prod :: prods) reductions
-
-(* Same thing, for a set of tokens. *)
-
-let addl prod toks reductions =
-  TerminalSet.fold (addl prod) toks reductions
-
-(* The following function turns a closed LR(1) state into a map of terminal
-   symbols to reduction actions. Copied from a related function in [Lr0]. *)
-
-let reductions (s : Lr0.concretelr1state) : Production.index list TerminalMap.t =
-  Item.Map.fold (fun item toks reductions ->
-    match Item.classify item with
-    | Item.Reduce prod ->
-       addl prod toks reductions
-    | Item.Shift _ ->
-       reductions
-  ) s TerminalMap.empty
-
-(* The following function turns a closed LR(1) state into a set of shift
-   actions. *)
-
-let transitions (s : Lr0.concretelr1state) : TerminalSet.t =
-  Item.Map.fold (fun item _ transitions ->
-    match Item.classify item with
-    | Item.Shift (Symbol.T tok, _) ->
-        TerminalSet.add tok transitions
-    | Item.Shift (Symbol.N _, _)
-    | Item.Reduce _ ->
-        transitions
-  ) s TerminalSet.empty
-
-(* This function computes the domain of a terminal map, producing a terminal
-   set. *)
-
-let domain (m : 'a TerminalMap.t) : TerminalSet.t =
-  TerminalMap.fold (fun tok _ accu ->
-    TerminalSet.add tok accu
-  ) m TerminalSet.empty
-
-(* The following function checks whether a closed LR(1) state is free of
-   conflicts. *)
-
-let state_is_ok (s : Lr0.concretelr1state) : bool =
-
-  let reductions = reductions s
-  and transitions = transitions s in
-
-  (* Check for shift/reduce conflicts. *)
-
-  TerminalSet.disjoint transitions (domain reductions) &&
-
-  (* Check for reduce/reduce conflicts. *)
-
-  TerminalMap.fold (fun _ prods ok ->
-    ok && match prods with
-    | []
-    | [ _ ] ->
-        true
-    | _ :: _ :: _ ->
-        false
-  ) reductions true
-
-(* The following function counts the number of states in the SLR(1) automaton
-   that have a conflict. *)
-
-let count_slr_violations () : int =
-
-  let count = ref 0 in
-
-  for s = 0 to Lr0.n - 1 do
-    let s = make_slr_state s in
-    if not (state_is_ok s) then begin
-      incr count;
-      if tell_me_everything then
-       Printf.fprintf
-         stderr
-         "The following SLR(1) state has a conflict:\n%s"
-         (Lr0.print_concrete s)
-    end
-  done;
-
-  !count
-
-(* At log level 1, indicate whether the grammar is SLR(1). *)
-
-let () =
-  Error.logG 1 (fun f ->
-    let count = count_slr_violations() in
-    if count = 0 then
-      Printf.fprintf f "The grammar is SLR(1).\n"
-    else
-      Printf.fprintf f "The grammar is not SLR(1) -- %d states have a conflict.\n" count
-  )
-
diff --git a/bundles/menhirLib/menhir-20120123/src/slr.mli b/bundles/menhirLib/menhir-20120123/src/slr.mli
deleted file mode 100644 (file)
index 7ed1b18..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module extends the LR(0) automaton with lookahead information in order
-   to construct an SLR(1) automaton. The lookahead information is obtained by
-   considering the FOLLOW sets. *)
-
-(* This construction is not used by Menhir, but can be used to check whether
-   the grammar is in the class SLR(1). This check is performed when the log
-   level [lg] is at least 1. *)
-
diff --git a/bundles/menhirLib/menhir-20120123/src/standard.mly b/bundles/menhirLib/menhir-20120123/src/standard.mly
deleted file mode 100644 (file)
index 514bb79..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/**************************************************************************/
-/*                                                                        */
-/*  Menhir                                                                */
-/*                                                                        */
-/*  François Pottier, INRIA Rocquencourt                                  */
-/*  Yann Régis-Gianas, PPS, Université Paris Diderot                      */
-/*                                                                        */
-/*  Copyright 2005-2008 Institut National de Recherche en Informatique    */
-/*  et en Automatique. All rights reserved. This file is distributed      */
-/*  under the terms of the GNU Library General Public License, with the   */
-/*  special exception on linking described in file LICENSE.               */
-/*                                                                        */
-/**************************************************************************/
-
-(* This is menhir's standard library. It offers a number of
-   parameterized nonterminal definitions, such as options and lists,
-   that should be useful in a number of circumstances. *)
-
-%%
-
-(* ------------------------------------------------------------------------- *)
-(* Options. *)
-
-(* [option(X)] recognizes either nothing or [X]. It produces a value
-   of type ['a option] if [X] produces a value of type ['a]. *)
-
-%public option(X):
-  /* nothing */
-    { None }
-| x = X
-    { Some x }
-
-(* [ioption(X)] is identical to [option(X)], except its definition is
-   inlined. This has the effect of duplicating the production that
-   refers to it, possibly eliminating an LR(1) conflict. *)
-
-%public %inline ioption(X):
-  /* nothing */
-    { None }
-| x = X
-    { Some x }
-
-(* [boption(X)] recognizes either nothing or [X]. It produces a value
-   of type [bool]. *)
-
-%public boption(X):
-  /* nothing */
-    { false }
-| X
-    { true }
-
-(* [loption(X)] recognizes either nothing or [X]. It produces a value
-   of type ['a list] if [X] produces a value of type ['a list]. *)
-
-%public loption(X):
-  /* nothing */
-    { [] }
-| x = X
-    { x }
-
-(* ------------------------------------------------------------------------- *)
-(* Sequences. *)
-
-(* [pair(X, Y)] recognizes the sequence [X Y]. It produces a value of
-   type ['a * 'b] if [X] and [Y] produce values of type ['a] and ['b],
-   respectively. *)
-
-%public %inline pair(X, Y):
-  x = X; y = Y
-    { (x, y) }
-
-(* [separated_pair(X, sep, Y)] recognizes the sequence [X sep Y]. It
-   produces a value of type ['a * 'b] if [X] and [Y] produce values of
-   type ['a] and ['b], respectively. *)
-
-%public %inline separated_pair(X, sep, Y):
-  x = X; sep; y = Y
-    { (x, y) }
-
-(* [preceded(opening, X)] recognizes the sequence [opening X]. It
-   passes on the value produced by [X], so that it produces a value of
-   type ['a] if [X] produces a value of type ['a]. *)
-
-%public %inline preceded(opening, X):
-  opening; x = X
-    { x }
-
-(* [terminated(X, closing)] recognizes the sequence [X closing]. It
-   passes on the value produced by [X], so that it produces a value of
-   type ['a] if [X] produces a value of type ['a]. *)
-
-%public %inline terminated(X, closing):
-  x = X; closing
-    { x }
-
-(* [delimited(opening, X, closing)] recognizes the sequence [opening X
-   closing]. It passes on the value produced by [X], so that it
-   produces a value of type ['a] if [X] produces a value of type
-   ['a]. *)
-
-%public %inline delimited(opening, X, closing):
-  opening; x = X; closing
-    { x }
-
-(* ------------------------------------------------------------------------- *)
-(* Lists. *)
-
-(* [list(X)] recognizes a possibly empty list of [X]'s. It produces a
-   value of type ['a list] if [X] produces a value of type ['a]. The
-   front element of the list is the first element that was parsed. *)
-
-%public list(X):
-  /* nothing */
-    { [] }
-| x = X; xs = list(X)
-    { x :: xs }
-
-(* [nonempty_list(X)] recognizes a nonempty list of [X]'s. It produces
-   a value of type ['a list] if [X] produces a value of type ['a]. The
-   front element of the list is the first element that was parsed. *)
-
-%public nonempty_list(X):
-  x = X
-    { [ x ] }
-| x = X; xs = nonempty_list(X)
-    { x :: xs }
-
-(* [separated_list(separator, X)] recognizes a possibly empty list of
-   [X]'s, separated with [separator]'s. It produces a value of type
-   ['a list] if [X] produces a value of type ['a]. The front element
-   of the list is the first element that was parsed. *)
-
-%public %inline separated_list(separator, X):
-  xs = loption(separated_nonempty_list(separator, X))
-    { xs }
-
-(* [separated_nonempty_list(separator, X)] recognizes a nonempty list
-   of [X]'s, separated with [separator]'s. It produces a value of type
-   ['a list] if [X] produces a value of type ['a]. The front element
-   of the list is the first element that was parsed. *)
-
-%public separated_nonempty_list(separator, X):
-  x = X
-    { [ x ] }
-| x = X; separator; xs = separated_nonempty_list(separator, X)
-    { x :: xs }
-
-%%
-
diff --git a/bundles/menhirLib/menhir-20120123/src/stretch.mli b/bundles/menhirLib/menhir-20120123/src/stretch.mli
deleted file mode 100644 (file)
index ebe1e92..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: stretch.mli,v 1.4 2005/12/01 16:20:07 regisgia Exp $ *)
-
-(* A stretch is a fragment of a source file. It holds the file name,
-   the line number, and the line count (that is, the length) of the
-   fragment. These are used for generating #line directives when the
-   fragment is copied to an output file. It also holds the textual
-   content of the fragment, as a string. The [raw_content] field holds
-   the text that was found in the source file, while the [content]
-   field holds the same text after transformation by the lexer (which
-   substitutes keywords, inserts padding, etc.). *)
-
-type t = {
-    stretch_filename   : string;
-    stretch_linenum    : int;
-    stretch_linecount  : int;
-    stretch_raw_content        : string;
-    stretch_content    : string;
-    stretch_keywords   : Keyword.keyword Positions.located list
-  } 
-
-(* An Objective Caml type is either a stretch (if it was found in some
-   source file) or a string (if it was inferred via [Infer]). *)
-
-type ocamltype =
-  | Declared of t
-  | Inferred of string
-
diff --git a/bundles/menhirLib/menhir-20120123/src/stringMap.ml b/bundles/menhirLib/menhir-20120123/src/stringMap.ml
deleted file mode 100644 (file)
index b500c87..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-include Map.Make (String)
-
-let cardinal s =
-  fold (fun _ _ x -> x + 1) s 0 
-
-let filter pred map =
-  fold (fun key value map ->
-         if pred key value then 
-           add key value map
-         else 
-           map) map empty
-
-let restrict domain map =
-  filter (fun k _ -> StringSet.mem k domain) map
-
-let domain map = 
-  fold (fun key _ acu -> StringSet.add key acu) map StringSet.empty
diff --git a/bundles/menhirLib/menhir-20120123/src/stringMap.mli b/bundles/menhirLib/menhir-20120123/src/stringMap.mli
deleted file mode 100644 (file)
index 08f039e..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-include Map.S with type key = string
-
-val cardinal : 'a t -> int 
-
-(* [restrict s m] restricts the domain of the map [m] to (its
-   intersection with) the set [s]. *)
-
-val restrict: StringSet.t -> 'a t -> 'a t 
-
-(* [filter pred m] restricts the domain of the map [m] to 
-   (key, value) couples that verify [pred]. *)
-
-val filter: (string -> 'a -> bool) -> 'a t -> 'a t
-
-(* [domain m] returns the domain of the map [m]. *)
-val domain: 'a t -> StringSet.t
diff --git a/bundles/menhirLib/menhir-20120123/src/stringSet.ml b/bundles/menhirLib/menhir-20120123/src/stringSet.ml
deleted file mode 100644 (file)
index 5fc523e..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-include Set.Make (String)
-
-let of_list xs =
-  List.fold_right add xs empty
-
diff --git a/bundles/menhirLib/menhir-20120123/src/stringSet.mli b/bundles/menhirLib/menhir-20120123/src/stringSet.mli
deleted file mode 100644 (file)
index 962d5d2..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-include Set.S with type elt = string
-
-val of_list: elt list -> t
-
diff --git a/bundles/menhirLib/menhir-20120123/src/syntax.mli b/bundles/menhirLib/menhir-20120123/src/syntax.mli
deleted file mode 100644 (file)
index d756530..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* Terminals and nonterminal symbols are strings. Identifiers
-   (which are used to refer to a symbol's semantic value) are
-   strings. A file name is a string. *)
-
-type terminal =
-    string
-
-type nonterminal =
-    string 
-
-type symbol =
-    string 
-
-type identifier = 
-    string 
-
-type filename = 
-    string
-
-(* A trailer is also a source file fragment. It is represented
-   simply as a string. *)
-
-type trailer =
-    string
-
-(* Objective Caml semantic actions are represented as stretches. *)
-
-type action =
-    Action.t
-
-type token_associativity = 
-    LeftAssoc 
-  | RightAssoc
-  | NonAssoc
-  | UndefinedAssoc
-
-type precedence_level = 
-    UndefinedPrecedence 
-
-  (* Items are incomparable when they originate in different files. A
-     brand of type [Mark.t] is used to record an item's origin. The
-     positions allow locating certain warnings. *)
-
-  | PrecedenceLevel of Mark.t * int * Lexing.position * Lexing.position
-                                    
-type token_properties =
-    {
-              tk_filename      : filename;
-              tk_ocamltype     : Stretch.ocamltype option;
-              tk_position      : Positions.t;
-      mutable  tk_associativity : token_associativity;
-      mutable  tk_priority      : precedence_level; (* TEMPORARY terminologie toujours pas coherente *)
-      mutable  tk_is_declared   : bool; 
-    }
-
-type parameter = 
-  | ParameterVar of symbol Positions.located
-  | ParameterApp of symbol Positions.located * parameters
-
-and parameters = 
-    parameter list
-
-type declaration =
-
-    (* Raw Objective Caml code. *)
-
-  | DCode of Stretch.t
-
-    (* Raw Objective Caml functor parameter. *)
-
-  | DParameter of Stretch.ocamltype (* really a stretch *)
-
-    (* Terminal symbol (token) declaration. *)
-
-  | DToken of Stretch.ocamltype option * terminal
-
-    (* Start symbol declaration. *)
-
-  | DStart of nonterminal 
-
-    (* Priority and associativity declaration. *)
-
-  | DTokenProperties of terminal * token_associativity * precedence_level
-
-    (* Type declaration. *)
-
-  | DType of Stretch.ocamltype * parameter
-
-type branch_shift_precedence =
-    symbol Positions.located option
-
-type branch_reduce_precedence =
-    precedence_level
-
-type producer =
-    identifier Positions.located option * parameter
-
-type parameterized_branch =
-    { 
-      pr_branch_position          : Positions.t;
-      pr_producers                : producer list;
-      pr_action                           : action; 
-      pr_branch_shift_precedence   : branch_shift_precedence;
-      pr_branch_reduce_precedence  : branch_reduce_precedence
-    }
-
-type parameterized_rule =
-    {
-      pr_public_flag      : bool;
-      pr_inline_flag      : bool;
-      pr_nt               : nonterminal;
-      pr_positions        : Positions.t list;
-      pr_parameters       : symbol list;
-      pr_branches         : parameterized_branch list;
-    }
-
diff --git a/bundles/menhirLib/menhir-20120123/src/tableBackend.ml b/bundles/menhirLib/menhir-20120123/src/tableBackend.ml
deleted file mode 100644 (file)
index 6065e34..0000000
+++ /dev/null
@@ -1,795 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open CodeBits
-open Grammar
-open IL
-open Interface
-open PreFront
-open Printf
-open TokenType
-open CodePieces
-
-module Run (T : sig end) = struct
-
-(* ------------------------------------------------------------------------ *)
-
-(* Conventional names for modules, exceptions, record fields, functions. *)
-
-let menhirlib =
-  "MenhirLib"
-
-let tableInterpreter =
-  menhirlib ^ ".TableInterpreter"
-
-let make =
-  tableInterpreter ^ ".Make"
-
-let accept =
-  tableInterpreter ^ ".Accept"
-
-let engineTypes =
-  menhirlib ^ ".EngineTypes"
-
-let field x =
-  engineTypes ^ "." ^ x
-
-let fstate =
-  field "state"
-
-let fsemv =
-  field "semv"
-
-let fstartp =
-  field "startp"
-
-let fendp =
-  field "endp"
-
-let fnext =
-  field "next"
-
-let fstack =
-  field "stack"
-
-let fcurrent =
-  field "current"
-
-let flexbuf =
-  field "lexbuf"
-
-let fpreviouserror =
-  field "previouserror"
-
-let flex_start_p =
-  "Lexing.lex_start_p"
-
-let interpreter =
-  "MenhirInterpreter"
-
-let entry =
-  interpreter ^ ".entry"
-
-(* ------------------------------------------------------------------------ *)
-
-(* Code generation for semantic actions. *)
-
-(* The functions [reducecellparams] and [reducebody] are adpated from
-   [CodeBackend]. *)
-
-(* Things are slightly more regular here than in the code-based
-   back-end, since there is no optimization: every stack cell has the
-   same structure and holds a state, a semantic value, and a pair of
-   positions. Because every semantic value is represented, we do not
-   have a separate [unitbindings]. *)
-
-(* [reducecellparams] constructs a pattern that describes the contents
-   of a stack cell. If this is the bottom cell, the variable [state]
-   is bound to the state found in the cell. If [ids.(i)] is used in
-   the semantic action, then it is bound to the semantic value. The
-   position variables are always bound. *)
-
-let reducecellparams prod i symbol (next : pattern) : pattern =
-
-  let ids = Production.identifiers prod
-  and used = Production.used prod in
-
-  PRecord [
-    fstate, (if i = 0 then PVar state else PWildcard);
-    fsemv, (if used.(i) then PVar ids.(i) else PWildcard);
-    fstartp, PVar (Printf.sprintf "_startpos_%s_" ids.(i));
-    fendp, PVar (Printf.sprintf "_endpos_%s_" ids.(i));
-    fnext, next;
-  ]
-
-(* The semantic values bound in [reducecellparams] have type [Obj.t].
-   They should now be cast to their real type. If we had [PMagic] in
-   the syntax of patterns, we could do that in one swoop; since we don't,
-   we have to issue a series of casts a posteriori. *)
-
-let reducecellcasts prod i symbol casts =
-
-  let ids = Production.identifiers prod
-  and used = Production.used prod in
-
-  if used.(i) then
-    let id = ids.(i) in
-    let t : typ =
-      match semvtype symbol with
-      | [] ->
-         tunit
-      | [ t ] ->
-         t
-      | _ ->
-         assert false
-    in
-    (* Cast: [let id = ((Obj.magic id) : t) in ...]. *)
-    (
-      PVar id,
-      EAnnot (EMagic (EVar id), type2scheme t)
-    ) :: casts
-  else
-    casts
-
-(* This is the body of the [reduce] function associated with
-   production [prod]. It assumes that the variables [env] and [stack]
-   have been bound. *)
-
-let reducebody prod =
-
-  let nt, rhs = Production.def prod
-  and ids = Production.identifiers prod
-  and length = Production.length prod in
-
-  (* Build a pattern that represents the shape of the stack. Out of
-     the stack, we extract a state (except when the production is an
-     epsilon production) and a number of semantic values. *)
-
-  (* At the same time, build a series of casts. *)
-
-  let (_ : int), pat, casts =
-    Invariant.fold (fun (i, pat, casts) (_ : bool) symbol _ ->
-      i + 1,
-      reducecellparams prod i symbol pat,
-      reducecellcasts prod i symbol casts
-    ) (0, PVar stack, []) (Invariant.prodstack prod)
-  in
-
-  (* Determine start and end positions for the left-hand side of the
-     production. *)
-
-  let posbindings =
-    ( PVar startp,
-      if length > 0 then
-       EVar (Printf.sprintf "_startpos_%s_" ids.(0))
-      else
-       ERecordAccess(ERecordAccess (EVar env, flexbuf), flex_start_p)
-    ) ::
-    ( PVar endp,
-      if length > 0 then
-       EVar (Printf.sprintf "_endpos_%s_" ids.(length - 1))
-      else
-       EVar startp
-    ) :: []
-  in
-
-  (* Is this is one of the start productions? *)
-
-  match Production.classify prod with
-  | Some nt ->
-
-      (* This is a start production. Raise [Accept]. *)
-
-      EComment (
-        sprintf "Accepting %s" (Nonterminal.print false nt),
-        blet (
-         [ pat, EVar stack ],
-         ERaise (EData (accept, [ EVar ids.(0) ]))
-       )
-      )
-
-  | None ->
-
-      (* This is a regular production. Perform a reduction. *)
-
-      let action =
-       Production.action prod
-      in
-      let act =
-       EAnnot (Action.to_il_expr action, type2scheme (semvtypent nt))
-      in
-
-      EComment (
-        Production.print prod,
-        blet (
-         (pat, EVar stack) ::                  (* destructure the stack *)
-         casts @                               (* perform type casts *)
-         posbindings @                         (* bind [startp] and [endp] *)
-         extrabindings fpreviouserror action @ (* add bindings for the weird keywords *)
-         [ PVar semv, act ],                   (* run the user's code and bind [semv] *)
-
-         ERecordWrite (
-           EVar env, fstack,                   (* update the stack with ... *)
-           ERecord [                           (* ... a new stack cell *)
-             fstate, EVar state;               (* the current state after popping; it will be updated by [goto] *)
-             fsemv, ERepr (EVar semv);         (* the newly computed semantic value *)
-             fstartp, EVar startp;             (* the newly computed start and end positions *)
-             fendp, EVar endp;
-             fnext, EVar stack;                (* this is the stack after popping *)
-           ]
-         )
-
-       )
-      )
-
-let semantic_action prod =
-  EFun (
-    [ PVar env ],
-
-    if Invariant.ever_reduced prod then
-
-      (* Access the stack and current state via the environment. *)
-
-      (* In fact, the current state needs be bound here only if this is
-        an epsilon production. Otherwise, the variable [state] will be
-        bound by the pattern produced by [reducecellparams] above. *)
-
-      ELet (
-
-       [ PVar stack, ERecordAccess (EVar env, fstack) ] @
-         (if Production.length prod = 0 then [ PVar state, ERecordAccess (EVar env, fcurrent) ] else []),
-
-       (* Then, *)
-
-       reducebody prod
-
-      )
-
-    else
-
-      (* For productions that are never reduced, generate no code. *)
-
-      (* We do this mainly because [Invariant.prodstack] does not
-        support productions that are never reduced. *)
-      
-      EComment (
-       "a production never reduced",
-       EApp (EVar "assert", [ EData ("false", []) ])
-      )
-
-  )
-
-(* ------------------------------------------------------------------------ *)
-
-(* Table encodings. *)
-
-(* Encodings of entries in the default reduction table. *)
-
-let encode_DefRed prod =            (* 1 + prod *)
-  1 + Production.p2i prod
-
-let encode_NoDefRed =               (* 0 *)
-  0
-
-(* Encodings of entries in the action table. *)
-
-let encode_Reduce prod =            (* prod | 01 *)
-  (Production.p2i prod lsl 2) lor 1
-
-let encode_ShiftDiscard s =         (*    s | 10 *)
-  ((Lr1.number s) lsl 2) lor 0b10
-
-let encode_ShiftNoDiscard s =       (*    s | 11 *)
-  ((Lr1.number s) lsl 2) lor 0b11
-
-let encode_Fail =                   (*        00 *)
-  0
-
-(* Encodings of entries in the goto table. *)
-
-let encode_Goto node =              (* 1 + node *)
-  1 + Lr1.number node
-
-let encode_NoGoto =                 (* 0 *)
-  0
-
-(* Encodings of the hole in the action and goto tables. *)
-
-let hole =
-  assert (encode_Fail = 0);
-  assert (encode_NoGoto = 0);
-  0
-
-(* Encodings of entries in the error bitmap. *)
-
-let encode_Error =                  (* 0 *)
-  0
-
-let encode_NoError =                (* 1 *)
-  1
-
-(* ------------------------------------------------------------------------ *)
-
-(* Statistics. *)
-
-(* Integer division, rounded up. *)
-
-let div a b =
-  if a mod b = 0 then a / b else a / b + 1
-
-(* [size] provides a rough measure of the size of its argument, in words.
-   The [unboxed] parameter is true if we have already counted 1 for the
-   pointer to the object. *)
-
-let rec size unboxed = function
-  | EIntConst _
-  | ETuple []
-  | EData (_, []) ->
-      if unboxed then 0 else 1
-  | EStringConst s ->
-      1 + div (String.length s * 8) Sys.word_size
-  | ETuple es
-  | EData (_, es)
-  | EArray es ->
-      1 + List.length es + List.fold_left (fun s e -> s + size true e) 0 es
-  | _ ->
-      assert false (* not implemented *)
-
-let size =
-  size false
-
-(* Optionally, print a measure of each of the tables that we are defining. *)
-
-let define (name, expr) = {
-  valpublic = true;
-  valpat = PVar name;
-  valval = expr
-}
-
-let define_and_measure (x, e) =
-  Error.logC 1 (fun f ->
-    fprintf f
-      "The %s table occupies roughly %d bytes.\n"
-      x
-      (size e * (Sys.word_size / 8))
-  );
-  define (x, e)
-
-
-(* ------------------------------------------------------------------------ *)
-
-(* Table compression. *)
-
-(* Our sparse, two-dimensional tables are turned into one-dimensional tables
-   via [RowDisplacement]. *)
-
-(* The error bitmap, which is two-dimensional but not sparse, is made
-   one-dimensional by simple flattening. *)
-
-(* Every one-dimensional table is then packed via [PackedIntArray]. *)
-
-(* Optionally, we print some information about the compression ratio. *)
-
-(* [population] counts the number of significant entries in a
-   two-dimensional matrix. *)
-
-let population (matrix : int array array) =
-  Array.fold_left (fun population row ->
-    Array.fold_left (fun population entry ->
-      if entry = hole then population else population + 1
-    ) population row
-  ) 0 matrix
-
-(* [marshal1] marshals a one-dimensional array. *)
-
-let marshal1 (table : int array) =
-  let (bits : int), (text : string) = MenhirLib.PackedIntArray.pack table in
-  ETuple [ EIntConst bits; EStringConst text ]
-
-(* [marshal11] marshals a one-dimensional array whose bit width is
-   statically known to be [1]. *)
-
-let marshal11 (table : int array) =
-  let (bits : int), (text : string) = MenhirLib.PackedIntArray.pack table in
-  assert (bits = 1);
-  EStringConst text
-
-(* [marshal2] marshals a two-dimensional table. *)
-
-let marshal2 name m n (matrix : int list list) =
-  let matrix : int array array =
-    Array.of_list (List.map Array.of_list matrix)
-  in
-  let (displacement : int array), (data : int array) =
-    MenhirLib.RowDisplacement.compress
-      (=)
-      (fun x -> x = hole)
-      hole
-      m
-      n
-      matrix
-  in
-  Error.logC 1 (fun f ->
-    fprintf f
-      "The %s table is %d entries; %d non-zero; %d compressed.\n"
-      name
-      (m * n)
-      (population matrix)
-      (Array.length displacement + Array.length data)
-  );
-  ETuple [
-    marshal1 displacement;
-    marshal1 data;
-  ]
-
-let marshal1 (table : int list) =
-  marshal1 (Array.of_list table)
-
-let marshal11 (table : int list) =
-  marshal11 (Array.of_list table)
-
-(* ------------------------------------------------------------------------ *)
-
-(* Table generation. *)
-
-(* The action table. *)
-
-let action node t =
-  match Invariant.has_default_reduction node with
-  | Some _ ->
-
-      (* [node] has a default reduction; in that case, the action
-        table is never looked up. *)
-
-      hole
-
-  | None ->
-
-      try
-       let target = SymbolMap.find (Symbol.T t) (Lr1.transitions node) in
-
-       (* [node] has a transition to [target]. If [target] has a default
-          reduction on [#], use [ShiftNoDiscard], otherwise [ShiftDiscard]. *)
-
-       match Invariant.has_default_reduction target with
-       | Some (_, toks) when TerminalSet.mem Terminal.sharp toks ->
-           assert (TerminalSet.cardinal toks = 1);
-           encode_ShiftNoDiscard target
-       | _ ->
-           encode_ShiftDiscard target
-
-      with Not_found ->
-       try
-
-         (* [node] has a reduction. *)
-
-         let prod = Misc.single (TerminalMap.find t (Lr1.reductions node)) in
-         encode_Reduce prod
-
-       with Not_found ->
-
-         (* [node] has no action. *)
-
-         encode_Fail
-
-(* In the error bitmap and in the action table, the row that corresponds to the
-   [#] pseudo-terminal is never accessed. Thus, we do not create this row. This
-   does not create a gap in the table, because this is the right-most row. For
-   sanity, we check this fact here. *)
-
-let () =
-  assert (Terminal.t2i Terminal.sharp = Terminal.n - 1)
-
-(* The goto table. *)
-
-let goto node nt =
-  try
-    let target = SymbolMap.find (Symbol.N nt) (Lr1.transitions node) in
-    encode_Goto target
-  with Not_found ->
-    encode_NoGoto
-
-(* The error bitmap reflects which entries in the action table are
-   [Fail]. Like the action table, it is not accessed when [node] has a
-   default reduction. *)
-
-let error node t =
-  if action node t = encode_Fail then
-    encode_Error
-  else
-    encode_NoError
-
-(* The default reductions table. *)
-
-let default_reduction node =
-  match Invariant.has_default_reduction node with
-  | Some (prod, _) ->
-      encode_DefRed prod
-  | None ->
-      encode_NoDefRed
-
-(* Generate the table definitions. *)
-
-let action =
-  define_and_measure (
-    "action",
-    marshal2 "action" Lr1.n (Terminal.n - 1) (
-      Lr1.map (fun node ->
-       Terminal.mapx (fun t ->
-         action node t
-       )
-      )
-    )
-  )
-
-let goto =
-  define_and_measure (
-    "goto",
-    marshal2 "goto" Lr1.n Nonterminal.n (
-      Lr1.map (fun node ->
-       Nonterminal.map (fun nt ->
-         goto node nt
-       )
-      )
-    )
-  )
-
-let error =
-  define_and_measure (
-    "error",
-    ETuple [
-      EIntConst (Terminal.n - 1);
-      marshal11 (
-       List.flatten (
-         Lr1.map (fun node ->
-           Terminal.mapx (fun t ->
-             error node t
-           )
-         )
-       )
-      )
-    ]
-  )
-
-let default_reduction =
-  define_and_measure (
-    "default_reduction",
-    marshal1 (
-      Lr1.map (fun node ->
-       default_reduction node
-      )
-    )
-  )
-
-let lhs =
-  define_and_measure (
-    "lhs",
-    marshal1 (
-      Production.map (fun prod ->
-       Nonterminal.n2i (Production.nt prod)
-      )
-    )
-  )
-
-let semantic_action =
-  define (
-    "semantic_action",
-    EArray (Production.map semantic_action)
-  )
-
-(* ------------------------------------------------------------------------ *)
-
-(* When [--trace] is enabled, we need tables that map terminals and
-   productions to strings. *)
-
-let stringwrap f x =
-  EStringConst (f x)
-
-let reduce_or_accept prod =
-  match Production.classify prod with
-  | Some _ ->
-      "Accepting"
-  | None ->
-      "Reducing production " ^ (Production.print prod)
-
-let trace =
-  define_and_measure (
-    "trace",
-    if Settings.trace then
-      EData ("Some", [
-       ETuple [
-         EArray (Terminal.map (stringwrap Terminal.print));
-         EArray (Production.map (stringwrap reduce_or_accept));
-       ]
-      ])
-    else
-      EData ("None", [])
-  )
-
-(* ------------------------------------------------------------------------ *)
-
-(* Generate the two functions that map a token to its integer code and to
-   its semantic value, respectively. *)
-
-let token2terminal =
-  destructuretokendef
-    "token2terminal"
-    tint
-    false
-    (fun tok -> EIntConst (Terminal.t2i tok))
-
-let token2value =
-  destructuretokendef
-    "token2value"
-    tobj
-    true
-    (fun tok ->
-      ERepr (
-       match Terminal.ocamltype tok with
-       | None ->
-           EUnit
-       | Some _ ->
-           EVar semv
-      )
-    )
-
-(* ------------------------------------------------------------------------ *)
-
-(* We are now ready to apply the functor [TableInterpreter.Make]. *)
-
-(* The type [token], which was defined at toplevel, must be defined again
-   in the functor argument. We would like to write [type token = token], but
-   that is not valid ocaml. The usual workaround involves a dummy type. *)
-
-let jeton =
-  prefix "jeton"
-
-let tokendef1 = {
-  typename = jeton;
-  typeparams = [];
-  typerhs = TAbbrev ttoken;
-  typeconstraint = None;
-}
-
-let tokendef2 = {
-  typename = "token"; (* not [TokenType.tctoken], as it might carry an undesired prefix *)
-  typeparams = [];
-  typerhs = TAbbrev (TypApp (jeton, []));
-  typeconstraint = None;
-}
-
-(* Here is the application of [TableInterpreter.Make]. Note that the
-   exception [Error], which is defined at toplevel, is re-defined
-   within the functor argument: [exception Error = Error]. *)
-
-let application = {
-
-  modulename =
-    interpreter;
-
-  modulerhs =
-    MApp (
-      MVar make,
-      MStruct {
-       struct_excdefs = [
-         excredef;
-       ];
-       struct_typedefs = [
-         tokendef2;
-       ];
-       struct_nonrecvaldefs = [
-         token2terminal;
-         define ("error_terminal", EIntConst (Terminal.t2i Terminal.error));
-         token2value;
-         default_reduction;
-         error;
-         action;
-         lhs;
-         goto;
-         semantic_action;
-         define ("recovery", eboolconst Settings.recovery);
-         trace;
-       ];
-      }
-    );
-
-}
-
-(* ------------------------------------------------------------------------ *)
-
-(* The client API invokes the interpreter with an appropriate start state. *)
-
-let api : IL.valdef list =
-
-  let lexer = "lexer"
-  and lexbuf = "lexbuf" in
-
-  ProductionMap.fold (fun prod state api ->
-
-    let nt : Nonterminal.t =
-      match Production.classify prod with
-      | Some nt ->
-         nt
-      | None ->
-         assert false (* this is a start production *)
-    in
-
-    let t : typ =
-      match Nonterminal.ocamltype nt with
-      | Some t ->
-         TypTextual t
-      | None ->
-         assert false (* every start symbol should carry a type *)
-    in
-    
-    define (
-      Nonterminal.print true nt,
-      EFun (
-       [ PVar lexer; PVar lexbuf ],
-       EAnnot (
-         EMagic (
-           EApp (
-             EVar entry, [
-               EIntConst (Lr1.number state);
-               EVar lexer;
-               EVar lexbuf
-             ]
-           )
-         ),
-         type2scheme t
-       )
-      )
-    ) ::
-    api
-
-  ) Lr1.entry []
-
-(* ------------------------------------------------------------------------ *)
-
-(* Let's put everything together. *)
-
-let program = {
-
-  paramdefs =
-    Front.grammar.UnparameterizedSyntax.parameters;
-
-  prologue =
-    Front.grammar.UnparameterizedSyntax.preludes;
-
-  excdefs =
-    [ excdef ];
-
-  typedefs =
-    tokentypedef @
-    [ tokendef1 ];
-
-  nonrecvaldefs =
-    [ excvaldef ];
-
-  moduledefs =
-    [ application ];
-
-  valdefs =
-    api;
-
-  postlogue =
-    Front.grammar.UnparameterizedSyntax.postludes
-
-}
-
-let () =
-  Time.tick "Producing abstract syntax"
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/tableBackend.mli b/bundles/menhirLib/menhir-20120123/src/tableBackend.mli
deleted file mode 100644 (file)
index 1d218cb..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* The (table-based) code generator. *)
-
-module Run (T : sig end) : sig
-
-  val program: IL.program
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/tableFormat.ml b/bundles/menhirLib/menhir-20120123/src/tableFormat.ml
deleted file mode 100644 (file)
index 8e94d5b..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This signature defines the format of the parse tables. It is used as
-   an argument to [TableInterpreter]. *)
-
-module type TABLES = sig
-
-  (* This is the parser's type of tokens. *)
-    
-  type token
-
-  (* This maps a token to its internal (generation-time) integer code. *)
-
-  val token2terminal: token -> int
-
-  (* This is the integer code for the error pseudo-token. *)
-
-  val error_terminal: int
-
-  (* This maps a token to its semantic value. *)
-
-  val token2value: token -> Obj.t
-
-  (* Traditionally, an LR automaton is described by two tables, namely, an
-     action table and a goto table. See, for instance, the Dragon book.
-
-     The action table is a two-dimensional matrix that maps a state and a
-     lookahead token to an action. An action is one of: shift to a certain
-     state, reduce a certain production, accept, or fail.
-
-     The goto table is a two-dimensional matrix that maps a state and a
-     non-terminal symbol to either a state or undefined. By construction, this
-     table is sparse: its undefined entries are never looked up. A compression
-     technique is free to overlap them with other entries.
-
-     In Menhir, things are slightly different. If a state has a default
-     reduction on token [#], then that reduction must be performed without
-     consulting the lookahead token. As a result, we must first determine
-     whether that is the case, before we can obtain a lookahead token and use it
-     as an index in the action table.
-
-     Thus, Menhir's tables are as follows.
-
-     A one-dimensional default reduction table maps a state to either ``no
-     default reduction'' (encoded as: 0) or ``by default, reduce prod''
-     (encoded as: 1 + prod). The action table is looked up only when there
-     is no default reduction. *)
-
-  val default_reduction: PackedIntArray.t
-
-  (* Menhir follows Dencker, Dürre and Heuft, who point out that, although the
-     action table is not sparse by nature (i.e., the error entries are
-     significant), it can be made sparse by first factoring out a binary error
-     matrix, then replacing the error entries in the action table with undefined
-     entries. Thus:
-
-     A two-dimensional error bitmap maps a state and a terminal to either
-     ``fail'' (encoded as: 0) or ``do not fail'' (encoded as: 1). The action
-     table, which is now sparse, is looked up only in the latter case. *)
-
-  (* The error bitmap is flattened into a one-dimensional table; its width is
-     recorded so as to allow indexing. The table is then compressed via
-     [PackedIntArray]. The bit width of the resulting packed array must be
-     [1], so it is not explicitly recorded. *)
-
-  (* The error bitmap does not contain a column for the [#] pseudo-terminal.
-     Thus, its width is [Terminal.n - 1]. We exploit the fact that the integer
-     code assigned to [#] is greatest: the fact that the right-most column
-     in the bitmap is missing does not affect the code for accessing it. *)
-
-  val error: int (* width of the bitmap *) * string (* second component of [PackedIntArray.t] *)
-
-  (* A two-dimensional action table maps a state and a terminal to one of
-     ``shift to state s and discard the current token'' (encoded as: s | 10),
-     ``shift to state s without discarding the current token'' (encoded as: s |
-     11), or ``reduce prod'' (encoded as: prod | 01). *)
-
-  (* The action table is first compressed via [RowDisplacement], then packed
-     via [PackedIntArray]. *)
-
-  (* Like the error bitmap, the action table does not contain a column for the
-     [#] pseudo-terminal. *)
-
-  val action: PackedIntArray.t * PackedIntArray.t
-
-  (* A one-dimensional lhs table maps a production to its left-hand side (a
-     non-terminal symbol). *)
-
-  val lhs: PackedIntArray.t
-
-  (* A two-dimensional goto table maps a state and a non-terminal symbol to
-     either undefined (encoded as: 0) or a new state s (encoded as: 1 + s). *)
-
-  (* The goto table is first compressed via [RowDisplacement], then packed
-     via [PackedIntArray]. *)
-
-  val goto: PackedIntArray.t * PackedIntArray.t
-
-  (* A one-dimensional semantic action table maps productions to semantic
-     actions. The calling convention for semantic actions is described in
-     [EngineTypes]. *)
-    
-  val semantic_action: ((int, Obj.t, token) EngineTypes.env -> unit) array
-
-  (* The parser defines its own [Error] exception. This exception can be
-     raised by semantic actions and caught by the engine, and raised by the
-     engine towards the final user. *)
-
-  exception Error
-
-  (* The parser indicates whether to perform error recovery. *)
-
-  val recovery: bool
-
-  (* The parser indicates whether to generate a trace. Generating a
-     trace requires two extra tables, which respectively map a
-     terminal symbol and a production to a string. *)
-
-  val trace: (string array * string array) option
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/tableInterpreter.ml b/bundles/menhirLib/menhir-20120123/src/tableInterpreter.ml
deleted file mode 100644 (file)
index 3dae3aa..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module instantiates the generic [Engine] with a thin decoding layer
-   for the generated tables. Like [Engine], it is part of [MenhirLib]. *)
-
-(* The exception [Accept] is pre-declared here: this obviates the need
-   for generating its definition. The exception [Error] is declared
-   within the generated parser. This is preferable to pre-declaring it
-   here, as it ensures that each parser gets its own, distinct [Error]
-   exception. This is consistent with the code-based back-end. *)
-
-exception Accept of Obj.t
-
-(* This functor is invoked by the generated parser. *)
-
-module Make (T : TableFormat.TABLES)
-
-= Engine.Make (struct
-
-  type state =
-      int
-
-  type token =
-      T.token
-
-  type terminal =
-      int
-
-  type semantic_value =
-      Obj.t
-         
-  let token2terminal =
-    T.token2terminal
-       
-  let token2value =
-    T.token2value
-       
-  let error_terminal =
-    T.error_terminal
-
-  let error_value =
-    Obj.repr ()
-  
-  type production =
-      int
-  
-  let default_reduction state defred nodefred env =
-    let code = PackedIntArray.get T.default_reduction state in
-    if code = 0 then
-      nodefred env
-    else
-      defred env (code - 1)
-  
-  (* This auxiliary function helps access a compressed, two-dimensional
-     matrix, like the action and goto tables. *)
-
-  let unmarshal2 table i j =
-    RowDisplacement.getget
-      PackedIntArray.get
-      PackedIntArray.get
-      table
-      i j
-
-  (* This auxiliary function helps access a flattened, two-dimensional
-     matrix, like the error bitmap. *)
-
-  let unflatten (n, data) i j =
-    PackedIntArray.get1 data (n * i + j)
-
-  let action state terminal value shift reduce fail env =
-    match unflatten T.error state terminal with
-    | 1 ->
-       let action = unmarshal2 T.action state terminal in
-       let opcode = action land 0b11
-       and param = action lsr 2 in
-       if opcode >= 0b10 then
-         (* 0b10 : shift/discard *)
-         (* 0b11 : shift/nodiscard *)
-         let please_discard = (opcode = 0b10) in
-         shift env please_discard terminal value param
-       else
-         (* 0b01 : reduce *)
-         (* 0b00 : cannot happen *)
-         reduce env param
-    | c ->
-       assert (c = 0);
-       fail env
-  
-  let goto state prod =
-    let code = unmarshal2 T.goto state (PackedIntArray.get T.lhs prod) in
-    (* code = 1 + state *)
-    code - 1
-
-  exception Accept =
-       Accept
-
-  exception Error =
-       T.Error
-
-  type semantic_action =
-      (state, semantic_value, token) EngineTypes.env -> unit
-       
-  let semantic_action prod =
-    T.semantic_action.(prod)
-  
-  let recovery =
-    T.recovery
-  
-  module Log = struct
-    
-    open Printf
-    
-    let state state =
-      match T.trace with
-      | Some _ ->
-          fprintf stderr "State %d:\n%!" state
-      | None ->
-         ()
-    
-    let shift terminal state =
-      match T.trace with
-      | Some (terminals, _) ->
-          fprintf stderr "Shifting (%s) to state %d\n%!" terminals.(terminal) state
-      | None ->
-         ()
-    
-    let reduce_or_accept prod =
-      match T.trace with
-      | Some (_, productions) ->
-          fprintf stderr "%s\n%!" productions.(prod)
-      | None ->
-         ()
-    
-    let lookahead_token lexbuf token =
-      match T.trace with
-      | Some (terminals, _) ->
-          fprintf stderr "Lookahead token is now %s (%d-%d)\n%!"
-            terminals.(token)
-            lexbuf.Lexing.lex_start_p.Lexing.pos_cnum
-            lexbuf.Lexing.lex_curr_p.Lexing.pos_cnum
-      | None ->
-         ()
-    
-    let initiating_error_handling () =
-      match T.trace with
-      | Some _ ->
-          fprintf stderr "Initiating error handling\n%!"
-      | None ->
-         ()
-    
-    let resuming_error_handling () =
-      match T.trace with
-      | Some _ ->
-          fprintf stderr "Resuming error handling\n%!"
-      | None ->
-         ()
-    
-    let handling_error state =
-      match T.trace with
-      | Some _ ->
-          fprintf stderr "Handling error in state %d\n%!" state
-      | None ->
-         ()
-    
-    let discarding_last_token token =
-      match T.trace with
-      | Some (terminals, _) ->
-          fprintf stderr "Discarding last token read (%s)\n%!" terminals.(token)
-      | None ->
-         ()
-
-  end
-  
-end)
diff --git a/bundles/menhirLib/menhir-20120123/src/tableInterpreter.mli b/bundles/menhirLib/menhir-20120123/src/tableInterpreter.mli
deleted file mode 100644 (file)
index 0571656..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the GNU Library General Public License, with the   *)
-(*  special exception on linking described in file LICENSE.               *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module instantiates the generic [Engine] with a thin decoding layer
-   for the generated tables. Like [Engine], it is part of [MenhirLib]. *)
-
-(* The exception [Accept] is pre-declared here: this obviates the need
-   for generating its definition. The exception [Error] is declared
-   within the generated parser. This is preferable to pre-declaring it
-   here, as it ensures that each parser gets its own, distinct [Error]
-   exception. This is consistent with the code-based back-end. *)
-
-exception Accept of Obj.t
-
-(* This functor is invoked by the generated parser. *)
-
-module Make (T : TableFormat.TABLES)
-
-: EngineTypes.ENGINE with type state = int
-                           and type token = T.token
-                          and type semantic_value = Obj.t
-
diff --git a/bundles/menhirLib/menhir-20120123/src/tarjan.ml b/bundles/menhirLib/menhir-20120123/src/tarjan.ml
deleted file mode 100644 (file)
index db0cb65..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module provides an implementation of Tarjan's algorithm for
-   finding the strongly connected components of a graph.
-
-   The algorithm runs when the functor is applied. Its complexity is
-   $O(V+E)$, where $V$ is the number of vertices in the graph $G$, and
-   $E$ is the number of edges. *)
-
-module Run (G : sig
-
-  type node
-
-  (* We assume each node has a unique index. Indices must range from
-     $0$ to $n-1$, where $n$ is the number of nodes in the graph. *)
-
-  val n: int
-  val index: node -> int
-
-  (* Iterating over a node's immediate successors. *)
-
-  val successors: (node -> unit) -> node -> unit
-
-  (* Iterating over all nodes. *)
-
-  val iter: (node -> unit) -> unit
-
-end) = struct
-
-  (* Define the internal data structure associated with each node. *)
-
-  type data = {
-
-      (* Each node carries a flag which tells whether it appears
-        within the SCC stack (which is defined below). *)
-
-      mutable stacked: bool;
-
-      (* Each node carries a number. Numbers represent the order in
-        which nodes were discovered. *)
-
-      mutable number: int;
-
-      (* Each node [x] records the lowest number associated to a node
-        already detected within [x]'s SCC. *)
-
-      mutable low: int;
-
-      (* Each node carries a pointer to a representative element of
-        its SCC. This field is used by the algorithm to store its
-        results. *)
-
-      mutable representative: G.node;
-
-      (* Each representative node carries a list of the nodes in
-        its SCC. This field is used by the algorithm to store its
-        results. *)
-
-      mutable scc: G.node list
-
-    } 
-
-  (* Define a mapping from external nodes to internal ones. Here, we
-     simply use each node's index as an entry into a global array. *)
-
-  let table =
-
-    (* Create the array. We initially fill it with [None], of type
-       [data option], because we have no meaningful initial value of
-       type [data] at hand. *)
-
-    let table = Array.create G.n None in
-
-    (* Initialize the array. *)
-
-    G.iter (fun x ->
-      table.(G.index x) <- Some {
-       stacked = false;
-       number = 0;
-       low = 0;
-       representative = x;
-        scc = []
-      }
-    );
-
-    (* Define a function which gives easy access to the array. It maps
-       each node to its associated piece of internal data. *)
-
-    function x ->
-      match table.(G.index x) with
-      |        Some dx ->
-         dx
-      |        None ->
-         assert false (* Indices do not cover the range $0\ldots n$, as expected. *)
-
-  (* Create an empty stack, used to record all nodes which belong to
-     the current SCC. *)
-
-  let scc_stack = Stack.create()
-
-  (* Initialize a function which allocates numbers for (internal)
-     nodes. A new number is assigned to each node the first time it is
-     visited. Numbers returned by this function start at 1 and
-     increase. Initially, all nodes have number 0, so they are
-     considered unvisited. *)
-
-  let mark =
-    let counter = ref 0 in
-    fun dx ->
-      incr counter;
-      dx.number <- !counter;
-      dx.low <- !counter
-
-  (* This reference will hold a list of all representative nodes. *)
-
-  let representatives =
-    ref []
-
-  (* Look at all nodes of the graph, one after the other. Any
-     unvisited nodes become roots of the search forest. *)
-
-  let () = G.iter (fun root ->
-    let droot = table root in
-
-    if droot.number = 0 then begin
-
-      (* This node hasn't been visited yet. Start a depth-first walk
-        from it. *)
-
-      mark droot;
-      droot.stacked <- true;
-      Stack.push droot scc_stack;
-
-      let rec walk x =
-       let dx = table x in
-
-       G.successors (fun y ->
-         let dy = table y in
-
-         if dy.number = 0 then begin
-
-           (* $y$ hasn't been visited yet, so $(x,y)$ is a regular
-              edge, part of the search forest. *)
-
-           mark dy;
-           dy.stacked <- true;
-           Stack.push dy scc_stack;
-
-           (* Continue walking, depth-first. *)
-
-           walk y;
-           if dy.low < dx.low then
-             dx.low <- dy.low
-
-         end
-         else if (dy.low < dx.low) & dy.stacked then begin
-
-           (* The first condition above indicates that $y$ has been
-              visited before $x$, so $(x, y)$ is a backwards or
-              transverse edge. The second condition indicates that
-              $y$ is inside the same SCC as $x$; indeed, if it
-              belongs to another SCC, then the latter has already
-              been identified and moved out of [scc_stack]. *)
-
-           if dy.number < dx.low then
-             dx.low <- dy.number
-
-         end
-
-       ) x;
-
-       (* We are done visiting $x$'s neighbors. *)
-
-       if dx.low = dx.number then begin
-
-         (* $x$ is the entry point of a SCC. The whole SCC is now
-            available; move it out of the stack. We pop elements out
-            of the SCC stack until $x$ itself is found. *)
-
-         let rec loop () =
-           let element = Stack.pop scc_stack in
-           element.stacked <- false;
-            dx.scc <- element.representative :: dx.scc;
-           element.representative <- x;
-           if element != dx then
-             loop() in
-
-         loop();
-         representatives := x :: !representatives
-
-       end in
-
-      walk root
-
-    end
-  )
-
-  (* There only remains to make our results accessible to the
-     outside. *)
-
-  let representative x =
-    (table x).representative
-
-  let scc x =
-    (table x).scc
-
-  let iter action =
-    List.iter (fun x ->
-      let data = table x in
-      assert (data.representative == x); (* a sanity check *)
-      assert (data.scc <> []); (* a sanity check *)
-      action x data.scc
-    ) !representatives
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/tarjan.mli b/bundles/menhirLib/menhir-20120123/src/tarjan.mli
deleted file mode 100644 (file)
index 1196f84..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module provides an implementation of Tarjan's algorithm for
-   finding the strongly connected components of a graph.
-
-   The algorithm runs when the functor is applied. Its complexity is
-   $O(V+E)$, where $V$ is the number of vertices in the graph $G$, and
-   $E$ is the number of edges. *)
-
-module Run (G : sig
-
-  type node
-
-  (* We assume each node has a unique index. Indices must range from
-     $0$ to $n-1$, where $n$ is the number of nodes in the graph. *)
-
-  val n: int
-  val index: node -> int
-
-  (* Iterating over a node's immediate successors. *)
-
-  val successors: (node -> unit) -> node -> unit
-
-  (* Iterating over all nodes. *)
-
-  val iter: (node -> unit) -> unit
-
-end) : sig
-
-  open G
-
-  (* This function maps each node to a representative element of its strongly connected component. *)
-
-  val representative: node -> node
-
-  (* This function maps each representative element to a list of all
-     members of its strongly connected component. Non-representative
-     elements are mapped to an empty list. *)
-
-  val scc: node -> node list
-
-  (* [iter action] allows iterating over all strongly connected
-     components. For each component, the [action] function is applied
-     to the representative element and to a (non-empty) list of all
-     elements. *)
-
-  val iter: (node -> node list -> unit) -> unit
-
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/time.ml b/bundles/menhirLib/menhir-20120123/src/time.ml
deleted file mode 100644 (file)
index 2b9a0fb..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-let channel =
-  stderr
-
-open Unix
-open Printf
-
-let clock =
-  ref (times())
-
-let tick msg =
-  if Settings.timings then
-    let times1 = !clock in
-    let times2 = times() in
-    fprintf channel "%s: %.02fs\n"
-      msg
-      (times2.tms_utime -. times1.tms_utime);
-    clock := times()
-
-type chrono =
-    float ref
-
-let fresh () =
-  ref 0.
-
-let chrono (chrono : float ref) (task : unit -> 'a) : 'a =
-  if Settings.timings then begin
-    let times1 = times() in
-    let result = task() in
-    let times2 = times() in
-    chrono := !chrono +. times2.tms_utime -. times1.tms_utime;
-    result
-  end
-  else
-    task()
-
-let display (chrono : float ref) msg =
-  if Settings.timings then
-    fprintf channel "%s: %.02fs\n"
-      msg
-      !chrono
-
diff --git a/bundles/menhirLib/menhir-20120123/src/time.mli b/bundles/menhirLib/menhir-20120123/src/time.mli
deleted file mode 100644 (file)
index 1bd9287..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* Call [tick msg] to stop timing a task and start timing the next
-   task.  A message is displayed. The message includes [msg] as well
-   as timing information.  The very first task is deemed to begin when
-   this module is initialized. *)
-
-val tick: string -> unit
-
-(* Another timing method, with separate chronometers; useful for more
-   precise profiling. *)
-
-type chrono
-
-val fresh: unit -> chrono
-
-val chrono: chrono -> (unit -> 'a) -> 'a
-
-val display: chrono -> string -> unit
-
diff --git a/bundles/menhirLib/menhir-20120123/src/tokenType.ml b/bundles/menhirLib/menhir-20120123/src/tokenType.ml
deleted file mode 100644 (file)
index 893e3e0..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module deals with a few details regarding the definition of
-   the [token] type. In particular, if [--only-tokens] was specified,
-   it emits the type definition and exits. *)
-
-open Syntax
-open UnparameterizedSyntax
-open IL
-open CodeBits
-
-(* This is the conventional name of the [token] type, with no
-   prefix. A prefix is possibly appended to it below, where
-   [tctoken] is redefined before being exported. *)
-
-let tctoken =
-  "token"
-
-(* This is the definition of the type of tokens. *)
-
-let tokentypedef =
-  let datadefs =
-    StringMap.fold (fun token properties defs ->
-
-      (* Pseudo-tokens (used in %prec declarations, but never
-        declared using %token) are filtered out. *)
-
-      if properties.tk_is_declared then
-       let params =
-         match properties.tk_ocamltype with
-         | None ->
-             []
-         | Some t ->
-             [ TypTextual t ]
-       in
-       {
-         dataname = token;
-         datavalparams = params;
-         datatypeparams = None
-       } :: defs
-      else
-       defs
-    ) PreFront.grammar.tokens []
-  in
-  {
-    typename = tctoken;
-    typeparams = [];
-    typerhs = TDefSum datadefs;
-    typeconstraint = None
-  }
-
-(* Consult the command line options to determine what to do.
-   If we were asked to only produce a type definition, then
-   do so and stop. Otherwise, tell the code generator whether
-   it should produce a type definition as part of the code. *)
-
-let tokentypedef, tokenprefix =
-  match Settings.token_type_mode with
-  | Settings.TokenTypeOnly ->
-
-      (* Create both an .mli file and an .ml file. This is made
-        necessary by the fact that the two can be different
-        when there are functor parameters. *)
-
-      let module P = 
-       Printer.Make (struct 
-                       let f = open_out (Settings.base ^ ".mli")
-                       let raw_stretch_action = false
-                       let locate_stretches = None 
-                       let parenthesize_let_lhs = false
-                     end) 
-      in
-      P.interface {
-        paramdecls = PreFront.grammar.parameters;
-        excdecls = [];
-       typedecls = [ tokentypedef ];
-       valdecls = []
-      };
-      let module P = 
-       Printer.Make (struct 
-                       let f = open_out (Settings.base ^ ".ml")
-                       let raw_stretch_action = false
-                       let locate_stretches = None 
-                     end) 
-      in
-      P.program {
-        paramdefs = PreFront.grammar.parameters;
-        prologue = [];
-        excdefs = [];
-       typedefs = [ tokentypedef ];
-        nonrecvaldefs = [];
-       valdefs = [];
-       moduledefs = [];
-        postlogue = [];
-      };
-      exit 0
-  | Settings.CodeOnly m ->
-      [],
-      (fun id -> m ^ "." ^ id)
-  | Settings.TokenTypeAndCode ->
-      [ tokentypedef ],
-      (fun id -> id)
-
-(* Redefine the name of the [token] type to take a possible
-   prefix into account. *)
-
-let tctoken =
-  tokenprefix tctoken
-
-let ttoken =
-  TypApp (tctoken, [])
-
-(* The type of lexers. *)
-
-let tlexer =
-  TypArrow (tlexbuf, ttoken)
-
diff --git a/bundles/menhirLib/menhir-20120123/src/tokenType.mli b/bundles/menhirLib/menhir-20120123/src/tokenType.mli
deleted file mode 100644 (file)
index 59a15de..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This module deals with a few details regarding the definition of
-   the [token] type. In particular, if [--only-tokens] was specified,
-   it emits the type definition and exits. *)
-
-open Grammar
-
-(* This is the conventional name of the [token] type, for use by
-   the code generator. *)
-
-val tctoken: string
-val ttoken: IL.typ
-
-(* This is the type of lexers. It refers to the [token] type,
-   which is why it is defined here. *)
-
-val tlexer: IL.typ
-
-(* This is the definition of the type of tokens, for use by the
-   code generator. *)
-
-val tokentypedef: IL.typedef list
-
-(* This function prefixes the name of a token with an appropriate
-   Objective Caml module name, if necessary. *)
-
-val tokenprefix: string -> string
-
diff --git a/bundles/menhirLib/menhir-20120123/src/traverse.ml b/bundles/menhirLib/menhir-20120123/src/traverse.ml
deleted file mode 100644 (file)
index a117e82..0000000
+++ /dev/null
@@ -1,550 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* Code for traversing or transforming [IL] terms. *)
-
-open IL
-open CodeBits
-
-(* This turns a list of value definitions into a hash table. It also
-counts and numbers the definitions. We assume that the left-hand
-side of every definition is a variable. *)
-
-let tabulate_defs (defs : valdef list) : int * (string, int * valdef) Hashtbl.t =
-  let count = ref 0 in
-  let table = Hashtbl.create 1023 in
-  List.iter (fun def ->
-          let k = !count in
-          count := k + 1;
-          Hashtbl.add table (pat2var def.valpat) (k, def)
-    ) defs;
-  !count, table
-
-(* This mixin class, used by [map] and [fold] below, helps maintain
-   environments, which can be used to keep track of local variable
-   bindings. *)
-
-class virtual ['env] env = object(self)
-
-  (* The virtual method [pvar] records a local variable binding in
-     the environment. *)
-
-  method virtual pvar: 'env -> string -> 'env
-
-  method pat env = function
-    | PWildcard
-    | PUnit ->
-       env
-    | PVar id ->
-       self#pvar env id
-    | PTuple ps
-    | POr ps
-    | PData (_, ps) ->
-       self#pats env ps
-    | PAnnot (p, _) ->
-        self#pat env p
-    | PRecord fps ->
-       self#fpats env fps
-
-  method pats env ps =
-    List.fold_left self#pat env ps
-
-  method fpats env fps =
-    List.fold_left self#fpat env fps
-
-  method fpat env (_, p) =
-    self#pat env p
-
-end
-
-(* A class that helps transform expressions. The environment [env] can be
-   used to keep track of local variable bindings. *)
-
-exception NoChange
-
-class virtual ['env] map = object (self)
-
-  inherit ['env] env
-  
-  method expr (env : 'env) e =
-    try
-      match e with
-      | EVar x ->
-          self#evar env x
-      | EFun (ps, e) ->
-          self#efun env ps e
-      | EApp (e, es) ->
-          self#eapp env e es
-      | ELet (bs, e) ->
-          self#elet env bs e
-      | EMatch (e, bs) ->
-          self#ematch env e bs
-      | EIfThen (e, e1) ->
-          self#eifthen env e e1
-      | EIfThenElse (e, e1, e2) ->
-          self#eifthenelse env e e1 e2
-      | ERaise e ->
-          self#eraise env e
-      | ETry (e, bs) ->
-          self#etry env e bs
-      | EUnit ->
-          self#eunit env
-      | EIntConst k ->
-          self#eintconst env k
-      | EStringConst s ->
-          self#estringconst env s
-      | EData (d, es) ->
-          self#edata env d es
-      | ETuple es ->
-          self#etuple env es
-      | EAnnot (e, t) ->
-          self#eannot env e t
-      | EMagic e ->
-          self#emagic env e
-      | ERepr _ ->
-          self#erepr env e
-      | ERecord fs ->
-          self#erecord env fs
-      | ERecordAccess (e, f) ->
-          self#erecordaccess env e f
-      | ERecordWrite (e, f, e1) ->
-          self#erecordwrite env e f e1
-      | ETextual action ->
-          self#etextual env action
-      | EComment (s, e) ->
-          self#ecomment env s e
-      | EPatComment (s, p, e) ->
-          self#epatcomment env s p e
-      | EArray es ->
-         self#earray env es
-      | EArrayAccess (e, i) ->
-         self#earrayaccess env e i
-    with NoChange ->
-      e
-  
-  method evar env x =
-    raise NoChange
-  
-  method efun env ps e =
-    let e' = self#expr (self#pats env ps) e in
-    if e == e' then
-      raise NoChange
-    else
-      EFun (ps, e')
-  
-  method eapp env e es =
-    let e' = self#expr env e
-    and es' = self#exprs env es in
-    if e == e' && es == es' then
-      raise NoChange
-    else
-      EApp (e', es')
-  
-  method elet env bs e =
-    let env, bs' = self#bindings env bs in
-    let e' = self#expr env e in
-    if bs == bs' && e == e' then
-      raise NoChange
-    else
-      ELet (bs', e')
-  
-  method ematch env e bs =
-    let e' = self#expr env e
-    and bs' = self#branches env bs in
-    if e == e' && bs == bs' then
-      raise NoChange
-    else
-      EMatch (e', bs')
-  
-  method eifthen env e e1 =
-    let e' = self#expr env e
-    and e1' = self#expr env e1 in
-    if e == e' && e1 == e1' then
-      raise NoChange
-    else
-      EIfThen (e', e1')
-  
-  method eifthenelse env e e1 e2 =
-    let e' = self#expr env e
-    and e1' = self#expr env e1
-    and e2' = self#expr env e2 in
-    if e == e' && e1 == e1' && e2 == e2' then
-      raise NoChange
-    else
-      EIfThenElse (e', e1', e2')
-  
-  method eraise env e =
-    let e' = self#expr env e in
-    if e == e' then
-      raise NoChange
-    else
-      ERaise e'
-  
-  method etry env e bs =
-    let e' = self#expr env e
-    and bs' = self#branches env bs in
-    if e == e' && bs == bs' then
-      raise NoChange
-    else
-      ETry (e', bs')
-  
-  method eunit env =
-    raise NoChange
-  
-  method eintconst env k =
-    raise NoChange
-  
-  method estringconst env s =
-    raise NoChange
-  
-  method edata env d es =
-    let es' = self#exprs env es in
-    if es == es' then
-      raise NoChange
-    else
-      EData (d, es')
-  
-  method etuple env es =
-    let es' = self#exprs env es in
-    if es == es' then
-      raise NoChange
-    else
-      ETuple es'
-  
-  method eannot env e t =
-    let e' = self#expr env e in
-    if e == e' then
-      raise NoChange
-    else
-      EAnnot (e', t)
-  
-  method emagic env e =
-    let e' = self#expr env e in
-    if e == e' then
-      raise NoChange
-    else
-      EMagic e'
-  
-  method erepr env e =
-    let e' = self#expr env e in
-    if e == e' then
-      raise NoChange
-    else
-      ERepr e'
-  
-  method erecord env fs =
-    let fs' = self#fields env fs in
-    if fs == fs' then
-      raise NoChange
-    else
-      ERecord fs'
-  
-  method erecordaccess env e f =
-    let e' = self#expr env e in
-    if e == e' then
-      raise NoChange
-    else
-      ERecordAccess (e', f)
-  
-  method erecordwrite env e f e1 =
-    let e' = self#expr env e
-    and e1' = self#expr env e1 in
-    if e == e' && e1 == e1' then
-      raise NoChange
-    else
-      ERecordWrite (e', f, e1')
-  
-  method earray env es =
-    let es' = self#exprs env es in
-    if es == es' then
-      raise NoChange
-    else
-      EArray es'
-  
-  method earrayaccess env e i =
-    let e' = self#expr env e in
-    if e == e' then
-      raise NoChange
-    else
-      EArrayAccess (e', i)
-  
-  method etextual env action =
-    raise NoChange
-  
-  method ecomment env s e =
-    let e' = self#expr env e in
-    if e == e' then
-      raise NoChange
-    else
-      EComment (s, e')
-  
-  method epatcomment env s p e =
-    let e' = self#expr env e in
-    if e == e' then
-      raise NoChange
-    else
-      EPatComment (s, p, e')
-  
-  method exprs env es =
-    Misc.smap (self#expr env) es
-  
-  method fields env fs =
-    Misc.smap (self#field env) fs
-  
-  method field env ((f, e) as field) =
-    let e' = self#expr env e in
-    if e == e' then
-      field
-    else
-      (f, e')
-  
-  method branches env bs =
-    Misc.smap (self#branch env) bs
-  
-  method branch env b =
-    let e = b.branchbody in
-    let e' = self#expr (self#pat env b.branchpat) e in
-    if e == e' then
-      b
-    else
-      { b with branchbody = e' }
-
-  (* The method [binding] produces a pair of an updated environment
-     and a transformed binding. *)
-  
-  method binding env ((p, e) as b) =
-    let e' = self#expr env e in
-    self#pat env p,
-    if e == e' then
-      b
-    else
-      (p, e')
-  
-  (* For nested non-recursive bindings, the environment produced by
-     each binding is used to traverse the following bindings. The
-     method [binding] produces a pair of an updated environment
-     and a transformed list of bindings. *)
-  
-  method bindings env bs =
-    Misc.smapa self#binding env bs
-
-  method valdef env def =
-    let e = def.valval in
-    let e' = self#expr env e in
-    if e == e' then
-      def
-    else
-      { def with valval = e' }
-  
-  method valdefs env defs =
-    Misc.smap (self#valdef env) defs
-
-end
-
-(* A class that helps iterate, or fold, over expressions. *)
-
-class virtual ['env, 'a] fold = object (self)
-
-  inherit ['env] env
-  
-  method expr (env : 'env) (accu : 'a) e =
-    match e with
-    | EVar x ->
-        self#evar env accu x
-    | EFun (ps, e) ->
-        self#efun env accu ps e
-    | EApp (e, es) ->
-        self#eapp env accu e es
-    | ELet (bs, e) ->
-        self#elet env accu bs e
-    | EMatch (e, bs) ->
-        self#ematch env accu e bs
-    | EIfThen (e, e1) ->
-        self#eifthen env accu e e1
-    | EIfThenElse (e, e1, e2) ->
-        self#eifthenelse env accu e e1 e2
-    | ERaise e ->
-        self#eraise env accu e
-    | ETry (e, bs) ->
-        self#etry env accu e bs
-    | EUnit ->
-        self#eunit env accu
-    | EIntConst k ->
-        self#eintconst env accu k
-    | EStringConst s ->
-        self#estringconst env accu s
-    | EData (d, es) ->
-        self#edata env accu d es
-    | ETuple es ->
-        self#etuple env accu es
-    | EAnnot (e, t) ->
-        self#eannot env accu e t
-    | EMagic e ->
-        self#emagic env accu e
-    | ERepr _ ->
-        self#erepr env accu e
-    | ERecord fs ->
-        self#erecord env accu fs
-    | ERecordAccess (e, f) ->
-        self#erecordaccess env accu e f
-    | ERecordWrite (e, f, e1) ->
-        self#erecordwrite env accu e f e1
-    | ETextual action ->
-        self#etextual env accu action
-    | EComment (s, e) ->
-        self#ecomment env accu s e
-    | EPatComment (s, p, e) ->
-        self#epatcomment env accu s p e
-    | EArray es ->
-       self#earray env accu es
-    | EArrayAccess (e, i) ->
-       self#earrayaccess env accu e i
-
-  method evar (env : 'env) (accu : 'a) x =
-    accu
-  
-  method efun (env : 'env) (accu : 'a) ps e =
-    let accu = self#expr (self#pats env ps) accu e in
-    accu
-  
-  method eapp (env : 'env) (accu : 'a) e es =
-    let accu = self#expr env accu e in
-    let accu = self#exprs env accu es in
-    accu
-  
-  method elet (env : 'env) (accu : 'a) bs e =
-    let env, accu = self#bindings env accu bs in
-    let accu = self#expr env accu e in
-    accu
-  
-  method ematch (env : 'env) (accu : 'a) e bs =
-    let accu = self#expr env accu e in
-    let accu = self#branches env accu bs in
-    accu
-  
-  method eifthen (env : 'env) (accu : 'a) e e1 =
-    let accu = self#expr env accu e in
-    let accu = self#expr env accu e1 in
-    accu
-  
-  method eifthenelse (env : 'env) (accu : 'a) e e1 e2 =
-    let accu = self#expr env accu e in
-    let accu = self#expr env accu e1 in
-    let accu = self#expr env accu e2 in
-    accu
-  
-  method eraise (env : 'env) (accu : 'a) e =
-    let accu = self#expr env accu e in
-    accu
-  
-  method etry (env : 'env) (accu : 'a) e bs =
-    let accu = self#expr env accu e in
-    let accu = self#branches env accu bs in
-    accu
-  
-  method eunit (env : 'env) (accu : 'a) =
-    accu
-  
-  method eintconst (env : 'env) (accu : 'a) k =
-    accu
-  
-  method estringconst (env : 'env) (accu : 'a) s =
-    accu
-  
-  method edata (env : 'env) (accu : 'a) d es =
-    let accu = self#exprs env accu es in
-    accu
-  
-  method etuple (env : 'env) (accu : 'a) es =
-    let accu = self#exprs env accu es in
-    accu
-  
-  method eannot (env : 'env) (accu : 'a) e t =
-    let accu = self#expr env accu e in
-    accu
-  
-  method emagic (env : 'env) (accu : 'a) e =
-    let accu = self#expr env accu e in
-    accu
-  
-  method erepr (env : 'env) (accu : 'a) e =
-    let accu = self#expr env accu e in
-    accu
-  
-  method erecord (env : 'env) (accu : 'a) fs =
-    let accu = self#fields env accu fs in
-    accu
-  
-  method erecordaccess (env : 'env) (accu : 'a) e f =
-    let accu = self#expr env accu e in
-    accu
-  
-  method erecordwrite (env : 'env) (accu : 'a) e f e1 =
-    let accu = self#expr env accu e in
-    let accu = self#expr env accu e1 in
-    accu
-  
-  method earray (env : 'env) (accu : 'a) es =
-    let accu = self#exprs env accu es in
-    accu
-  
-  method earrayaccess (env : 'env) (accu : 'a) e i =
-    let accu = self#expr env accu e in
-    accu
-  
-  method etextual (env : 'env) (accu : 'a) action =
-    accu
-  
-  method ecomment (env : 'env) (accu : 'a) s e =
-    let accu = self#expr env accu e in
-    accu
-  
-  method epatcomment (env : 'env) (accu : 'a) s p e =
-    let accu = self#expr env accu e in
-    accu
-  
-  method exprs (env : 'env) (accu : 'a) es =
-    List.fold_left (self#expr env) accu es
-  
-  method fields (env : 'env) (accu : 'a) fs =
-    List.fold_left (self#field env) accu fs
-  
-  method field (env : 'env) (accu : 'a) (f, e) =
-    let accu = self#expr env accu e in
-    accu
-  
-  method branches (env : 'env) (accu : 'a) bs =
-    List.fold_left (self#branch env) accu bs
-  
-  method branch (env : 'env) (accu : 'a) b =
-    let accu = self#expr (self#pat env b.branchpat) accu b.branchbody in
-    accu
-  
-  method binding ((env, accu) : 'env * 'a) (p, e) =
-    let accu = self#expr env accu e in
-    self#pat env p,
-    accu
-  
-  method bindings (env : 'env) (accu : 'a) bs =
-    List.fold_left self#binding (env, accu) bs
-  
-  method valdef (env : 'env) (accu : 'a) def =
-    let accu = self#expr env accu def.valval in
-    accu
-  
-  method valdefs (env : 'env) (accu : 'a) defs =
-    List.fold_left (self#valdef env) accu defs
-  
-end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/unionFind.ml b/bundles/menhirLib/menhir-20120123/src/unionFind.ml
deleted file mode 100644 (file)
index 7d1c1d6..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: unionFind.ml,v 1.5 2005/12/01 16:20:07 regisgia Exp $ *)
-
-(** This module implements a simple and efficient union/find algorithm.
-    See Robert E. Tarjan, ``Efficiency of a Good But Not Linear Set
-    Union Algorithm'', JACM 22(2), 1975. *)
-
-(** The abstraction defined by this module is a set of points,
-    partitioned into equivalence classes. With each equivalence class,
-    a piece of information, of abstract type ['a], is associated; we
-    call it a descriptor.
-
-    A point is implemented as a cell, whose (mutable) contents consist
-    of a single link to either information about the equivalence class,
-    or another point. Thus, points form a graph, which must be acyclic,
-    and whose connected components are the equivalence classes. In
-    every equivalence class, exactly one point has no outgoing edge,
-    and carries information about the class instead. It is the class's
-    representative element.
-
-    Information about a class consists of an integer weight (the number
-    of elements in the class) and of the class's descriptor. *)
-type 'a point = {
-    mutable link: 'a link
-  } 
-
-and 'a link =
-  | Info of 'a info
-  | Link of 'a point
-
-and 'a info = {
-    mutable weight: int;
-    mutable descriptor: 'a
-  } 
-
-(** [fresh desc] creates a fresh point and returns it. It forms an
-    equivalence class of its own, whose descriptor is [desc]. *)
-let fresh desc = {
-  link = Info { weight = 1; descriptor = desc }
-} 
-
-(** [repr point] returns the representative element of [point]'s
-    equivalence class. It is found by starting at [point] and following
-    the links. For efficiency, the function performs path compression
-    at the same time. *)
-let rec repr point =
-  match point.link with
-  | Link point' ->
-      let point'' = repr point' in
-      if point'' != point' then
-
-       (* [point''] is [point']'s representative element. Because we
-          just invoked [repr point'], [point'.link] must be [Link
-          point'']. We write this value into [point.link], thus
-          performing path compression. Note that this function never
-          performs memory allocation. *)
-
-       point.link <- point'.link;
-      point''
-  | Info _ ->
-      point
-
-(** [find point] returns the descriptor associated with [point]'s
-    equivalence class. *)
-let rec find point =
-
-  (* By not calling [repr] immediately, we optimize the common cases
-     where the path starting at [point] has length 0 or 1, at the
-     expense of the general case. *)
-
-  match point.link with
-  | Info info
-  | Link { link = Info info } ->
-      info.descriptor
-  | Link { link = Link _ } ->
-      find (repr point)
-
-let rec change point v = 
-  match point.link with
-  | Info info
-  | Link { link = Info info } ->
-      info.descriptor <- v
-  | Link { link = Link _ } ->
-      change (repr point) v
-
-(** [union point1 point2] merges the equivalence classes associated
-    with [point1] and [point2] (which must be distinct) into a single
-    class whose descriptor is that originally associated with [point2].
-
-    The fact that [point1] and [point2] do not originally belong to the
-    same class guarantees that we do not create a cycle in the graph.
-
-    The weights are used to determine whether [point1] should be made
-    to point to [point2], or vice-versa. By making the representative
-    of the smaller class point to that of the larger class, we
-    guarantee that paths remain of logarithmic length (not accounting
-    for path compression, which makes them yet smaller). *)
-let union point1 point2 =
-  let point1 = repr point1
-  and point2 = repr point2 in
-  assert (point1 != point2);
-  match point1.link, point2.link with
-  | Info info1, Info info2 ->
-      let weight1 = info1.weight
-      and weight2 = info2.weight in
-      if weight1 >= weight2 then begin
-       point2.link <- Link point1;
-       info1.weight <- weight1 + weight2;
-       info1.descriptor <- info2.descriptor
-      end
-      else begin
-       point1.link <- Link point2;
-       info2.weight <- weight1 + weight2
-      end
-  | _, _ ->
-      assert false (* [repr] guarantees that [link] matches [Info _]. *)
-
-(** [equivalent point1 point2] tells whether [point1] and [point2]
-    belong to the same equivalence class. *)
-let equivalent point1 point2 =
-  repr point1 == repr point2
-
-(** [eunion point1 point2] is identical to [union], except it does
-    nothing if [point1] and [point2] are already equivalent. *)
-let eunion point1 point2 =
-  if not (equivalent point1 point2) then
-    union point1 point2
-
-(** [redundant] maps all members of an equivalence class, but one, to
-    [true]. *)
-let redundant = function
-  | { link = Link _ } ->
-      true
-  | { link = Info _ } ->
-      false
-
diff --git a/bundles/menhirLib/menhir-20120123/src/unionFind.mli b/bundles/menhirLib/menhir-20120123/src/unionFind.mli
deleted file mode 100644 (file)
index a6432ff..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* $Id: unionFind.mli,v 1.5 2005/12/01 16:20:07 regisgia Exp $ *)
-
-(** This module implements a simple and efficient union/find algorithm.
-    See Robert E. Tarjan, ``Efficiency of a Good But Not Linear Set
-    Union Algorithm'', JACM 22(2), 1975. *)
-
-(** The abstraction defined by this module is a set of points,
-    partitioned into equivalence classes. With each equivalence class,
-    a piece of information, of abstract type ['a], is associated; we
-    call it a descriptor. *)
-type 'a point
-
-(** [fresh desc] creates a fresh point and returns it. It forms an
-    equivalence class of its own, whose descriptor is [desc]. *)
-val fresh: 'a -> 'a point
-
-(** [find point] returns the descriptor associated with [point]'s
-    equivalence class. *)
-val find: 'a point -> 'a
-
-(** [union point1 point2] merges the equivalence classes associated
-    with [point1] and [point2] (which must be distinct) into a single
-    class whose descriptor is that originally associated with [point2]. *)
-val union: 'a point -> 'a point -> unit
-
-(** [equivalent point1 point2] tells whether [point1] and [point2]
-    belong to the same equivalence class. *)
-val equivalent: 'a point -> 'a point -> bool
-
-(** [eunion point1 point2] is identical to [union], except it does
-    nothing if [point1] and [point2] are already equivalent. *)
-val eunion: 'a point -> 'a point -> unit
-
-(** [redundant] maps all members of an equivalence class, but one, to
-    [true]. *)
-val redundant: 'a point -> bool
-
-(** [change p d] updates the descriptor of [p] to [d]. *)
-val change: 'a point -> 'a -> unit
diff --git a/bundles/menhirLib/menhir-20120123/src/unparameterizedPrinter.ml b/bundles/menhirLib/menhir-20120123/src/unparameterizedPrinter.ml
deleted file mode 100644 (file)
index 330f62f..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Positions
-open Misc
-open Syntax
-open Stretch
-open UnparameterizedSyntax
-open Settings
-
-let print_preludes f g =
-  List.iter (fun prelude ->
-    Printf.fprintf f "%%{%s%%}\n" prelude.stretch_raw_content
-  ) g.preludes
-
-let print_start_symbols b g = 
-  StringSet.iter (fun symbol ->
-    Printf.fprintf b "%%start %s\n" (Misc.normalize symbol)
-  ) g.start_symbols
-    
-let rec insert_in_partitions item m = function
-  | [] -> 
-      [ (m, [ item ]) ]
-       
-  | (m', items) :: partitions when Mark.same m m' -> 
-      (m', item :: items) :: partitions
-       
-  | t :: partitions ->
-      t :: (insert_in_partitions item m partitions)
-     
-let insert (undefined, partitions) = function
-  | (item, UndefinedPrecedence) ->
-      ((item, 0) :: undefined, partitions)
-       
-  | (item, PrecedenceLevel (m, v, _, _)) ->
-      (undefined, insert_in_partitions (item, v) m partitions)
-
-let print_ocamltype ocamltype =
-  Printf.sprintf " <%s>" (
-    match ocamltype with
-    | Declared stretch ->
-       stretch.stretch_raw_content
-    | Inferred t ->
-       t
-    )
-
-let print_assoc = function
-  | LeftAssoc ->
-      Printf.sprintf "%%left"
-  | RightAssoc ->
-      Printf.sprintf "%%right"
-  | NonAssoc ->
-      Printf.sprintf "%%nonassoc"
-  | UndefinedAssoc ->
-      ""
-
-let print_tokens mode b g = 
-  (* Sort tokens wrt precedence. *)
-  let undefined, partition_tokens = 
-    StringMap.fold (fun token prop acu ->
-      insert acu (token, prop.tk_priority)
-    ) g.tokens ([], [])
-  in
-  let ordered_tokens =
-    List.fold_left (fun acu (_, ms) -> 
-      acu @ List.sort (fun (_, v) (_, v') -> compare v v') ms
-    ) undefined partition_tokens
-  in
-  List.iter (fun (token, _) ->
-    let prop = StringMap.find token g.tokens in
-    if prop.tk_is_declared then
-      Printf.fprintf b "%%token%s %s\n"
-       begin match mode with
-       | PrintNormal
-       | PrintUnitActions ->
-           Misc.o2s prop.tk_ocamltype print_ocamltype
-       | PrintUnitActionsUnitTokens ->
-           "" (* omitted ocamltype after %token means <unit> *)
-       end
-       token
-  ) ordered_tokens;
-
-  ignore (List.fold_left 
-           (fun last_prop (token, v) -> 
-              let prop = StringMap.find token g.tokens in 
-                match last_prop with
-
-                  | None ->
-                      if prop.tk_associativity = UndefinedAssoc then
-                        None
-                      else (
-                        Printf.fprintf b "%s %s "
-                          (print_assoc prop.tk_associativity) token;
-                        Some v)
-                        
-                  | Some v' when v <> v' -> 
-                      if prop.tk_associativity = UndefinedAssoc then
-                        None
-                      else (
-                        Printf.fprintf b "\n%s %s "
-                          (print_assoc prop.tk_associativity) token;
-                        Some v)
-                        
-                  | Some v' -> 
-                      Printf.fprintf b "%s " token;
-                      last_prop
-                        
-           ) None ordered_tokens);
-  Printf.fprintf b "\n"
-
-let print_types mode b g = 
-  StringMap.iter (fun symbol ty ->
-    Printf.fprintf b "%%type%s %s\n" 
-      begin match mode with
-      | PrintNormal ->
-         print_ocamltype ty
-      | PrintUnitActions
-      | PrintUnitActionsUnitTokens ->
-         " <unit>"
-      end
-      (Misc.normalize symbol)
-  ) g.types
-
-let binding mode id =
-  match mode with
-  | PrintNormal ->
-      id ^ " = "
-  | PrintUnitActions
-  | PrintUnitActionsUnitTokens ->
-      ""
-
-let string_of_producer mode (symbol, ido) =
-  Misc.o2s ido (binding mode) ^ (Misc.normalize symbol)
-
-let print_branch mode f branch = 
-  Printf.fprintf f "%s%s\n    {"
-    (String.concat " " (List.map (string_of_producer mode) branch.producers))
-    (Misc.o2s branch.branch_shift_precedence (fun x -> " %prec "^x.value));
-  begin match mode with
-  | PrintNormal ->
-      Action.print f branch.action  
-  | PrintUnitActions
-  | PrintUnitActionsUnitTokens ->
-      Printf.fprintf f "()"
-  end;
-  Printf.fprintf f "}\n"
-
-let print_trailers b g =
-  List.iter (Printf.fprintf b "%s\n") g.postludes
-
-let branches_order r r' = 
-  let branch_order b b' = 
-    match b.branch_reduce_precedence, b'.branch_reduce_precedence with
-      | UndefinedPrecedence, _ | _, UndefinedPrecedence ->
-         0
-      | PrecedenceLevel (m, l, _, _), PrecedenceLevel (m', l', _, _) ->
-         if Mark.same m m' then
-           if l < l' then
-             -1
-           else if l > l' then
-             1
-           else 
-             0
-         else 0
-  in
-  let rec lexical_order bs bs' = 
-    match bs, bs' with
-      | [], [] ->
-         0
-      | [], _ ->
-         -1
-      | _, [] ->
-         1
-      | b :: bs, b' :: bs' ->
-         match branch_order b b' with
-           | 0 -> 
-               lexical_order bs bs'
-           | x -> 
-               x
-  in
-    lexical_order r.branches r'.branches
-
-let print_rules mode b g = 
-  let rules_as_list =
-    StringMap.fold (fun nt r acu -> (nt, r) :: acu) g.rules []
-  in
-  let ordered_rules =
-    List.sort (fun (nt, r) (nt', r') -> branches_order r r') rules_as_list
-  in
-  List.iter (fun (nt, r) ->
-    Printf.fprintf b "\n%s:\n" (Misc.normalize nt);
-    List.iter (fun br -> 
-      Printf.fprintf b "| ";
-      print_branch mode b br
-    ) r.branches
-  ) ordered_rules
-
-let print mode f g =
-  begin match mode with
-  | PrintNormal ->
-      print_preludes f g
-  | PrintUnitActions
-  | PrintUnitActionsUnitTokens ->
-      ()
-  end;
-  print_start_symbols f g;
-  print_tokens mode f g;
-  print_types mode f g;
-  Printf.fprintf f "%%%%\n";
-  print_rules mode f g;
-  Printf.fprintf f "\n%%%%\n";
-  begin match mode with
-  | PrintNormal ->
-      print_trailers f g
-  | PrintUnitActions
-  | PrintUnitActionsUnitTokens ->
-      ()
-  end
-
diff --git a/bundles/menhirLib/menhir-20120123/src/unparameterizedPrinter.mli b/bundles/menhirLib/menhir-20120123/src/unparameterizedPrinter.mli
deleted file mode 100644 (file)
index 3a3de2b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* This is a pretty-printer for grammars. *)
-
-(* If the [mode] parameter requests ``unit actions'', then semantic actions
-   are dropped: that is, they are replaced with trivial semantic actions that
-   return unit. Accordingly, all [%type] declarations are changed to unit. The
-   prologue and epilogue are dropped. All bindings for semantic values are
-   suppressed.
-
-   If, furthermore, the [mode] parameter requests ``unit tokens'', then the
-   types carried by tokens are changed to unit. *)
-
-val print: Settings.print_mode -> out_channel -> UnparameterizedSyntax.grammar -> unit
-
diff --git a/bundles/menhirLib/menhir-20120123/src/unparameterizedSyntax.mli b/bundles/menhirLib/menhir-20120123/src/unparameterizedSyntax.mli
deleted file mode 100644 (file)
index 3e125c8..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  Menhir                                                                *)
-(*                                                                        *)
-(*  François Pottier, INRIA Rocquencourt                                  *)
-(*  Yann Régis-Gianas, PPS, Université Paris Diderot                      *)
-(*                                                                        *)
-(*  Copyright 2005-2008 Institut National de Recherche en Informatique    *)
-(*  et en Automatique. All rights reserved. This file is distributed      *)
-(*  under the terms of the Q Public License version 1.0, with the change  *)
-(*  described in file LICENSE.                                            *)
-(*                                                                        *)
-(**************************************************************************)
-
-(* A parameterized branch may instantiate parameterized non terminals. 
-   If the parameterized branch contributes to the definition of a 
-   parameterized terminal, then the instantiation of parameterized 
-   non terminals that are defined simultaneously must only be done with
-   formal parameters.
-   Furthermore, all the parameterized non terminals that are in a common
-   mutual recursive definition must have the same arity.
-   These conditions are sufficient to ensure termination of expansion.
-   For example:
-   C[x] : ...            // This definition does not involve A or B.
-   A[x,y] : B[x,y] C[Y]  // This mutual recursive definition is ok.
-   B[x,y] : A[x,y]
-   D[x] : E[D[x]]        // This one is incorrect.
-   E[y] : D[y]
-*)
-open Syntax
-
-type branch =
-    {
-      branch_position           : Positions.t;
-      producers                        : (symbol * identifier option) list; (* TEMPORARY convention renversée
-                                    par rapport Ã  syntax.mli; faire un type record au lieu d'une paire? *)
-      action                   : action;
-      branch_shift_precedence  : branch_shift_precedence;
-      branch_reduce_precedence  : branch_reduce_precedence
-    }
-
-type rule = 
-    {
-      branches            : branch list;
-      positions            : Positions.t list;
-      (* This flag is not relevant after the NonTerminalInlining.inline pass. *)
-      inline_flag          : bool;
-    }
-
-type grammar = 
-    {
-      preludes            : Stretch.t list;
-      postludes                   : Syntax.trailer list;
-      parameters           : Stretch.t list;
-      start_symbols        : StringSet.t;
-      types                : Stretch.ocamltype StringMap.t;
-      tokens              : Syntax.token_properties StringMap.t;
-      rules               : rule StringMap.t;
-    }
diff --git a/bundles/menhirLib/menhir-20120123/src/version.ml b/bundles/menhirLib/menhir-20120123/src/version.ml
deleted file mode 100644 (file)
index fbb303e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-let version = "20120123"
diff --git a/bundles/menhirLib/menhirLib.mldylib b/bundles/menhirLib/menhirLib.mldylib
new file mode 100644 (file)
index 0000000..6d75ce9
--- /dev/null
@@ -0,0 +1 @@
+MenhirLib
diff --git a/bundles/menhirLib/menhirLib.mllib b/bundles/menhirLib/menhirLib.mllib
new file mode 100644 (file)
index 0000000..6d75ce9
--- /dev/null
@@ -0,0 +1 @@
+MenhirLib
diff --git a/bundles/menhirLib/menhirLib.mlpack b/bundles/menhirLib/menhirLib.mlpack
new file mode 100644 (file)
index 0000000..022df5a
--- /dev/null
@@ -0,0 +1,8 @@
+menhir-20120123/src/InfiniteArray
+menhir-20120123/src/PackedIntArray
+menhir-20120123/src/RowDisplacement
+menhir-20120123/src/EngineTypes
+menhir-20120123/src/Engine
+menhir-20120123/src/TableFormat
+menhir-20120123/src/TableInterpreter
+menhir-20120123/src/Convert
index a991a4a..2dab268 100644 (file)
@@ -29,6 +29,10 @@ all.opt: $(PCRE_MARKER)
        @$(MAKE) all-opt-build
 all-opt-build: $(PCRE_MARKER) pcre.cmxa META
 
+# prepares the source bundle for building.
+.prepare: $(PCRE_MARKER)
+       touch .prepare
+
 clean:
        rm -f dllpcre_stubs.so libpcre_stubs.a pcre_stubs.o \
                pcre.cma pcre.cmi pcre.cmo META \
@@ -36,6 +40,7 @@ clean:
 
 distclean: clean
        rm -rf $(PCRE_DIR)
+       rm -f .prepare
 
 depend: $(PCRE_MARKER)
 
diff --git a/bundles/pcre/_tags b/bundles/pcre/_tags
new file mode 100644 (file)
index 0000000..4b1ab6a
--- /dev/null
@@ -0,0 +1,5 @@
+# Includes the sources of the
+# bundles' source directory if
+# this directory is included.
+
+<pcre-ocaml-release-6.2.5/lib>: include
diff --git a/bundles/pcre/libpcre_stubs.clib b/bundles/pcre/libpcre_stubs.clib
new file mode 100644 (file)
index 0000000..ffc5d61
--- /dev/null
@@ -0,0 +1 @@
+pcre-ocaml-release-6.2.5/lib/pcre_stubs.o
diff --git a/bundles/pcre/pcre.mldylib b/bundles/pcre/pcre.mldylib
new file mode 100644 (file)
index 0000000..151e1fe
--- /dev/null
@@ -0,0 +1 @@
+Pcre
diff --git a/bundles/pcre/pcre.mllib b/bundles/pcre/pcre.mllib
new file mode 100644 (file)
index 0000000..151e1fe
--- /dev/null
@@ -0,0 +1 @@
+Pcre
index e3f75a5..887a959 100644 (file)
@@ -58,6 +58,10 @@ $(PYCAMLDIR)/pycaml.cmx: $(PYCAMLDIR)/pycaml.ml $(PYCAMLDIR)/pycaml.cmi
 pycaml.cmxa: $(PYCAMLDIR)/pycaml.cmx $(PYCAMLDIR)/pycaml.cmi dllpycaml_stubs.so
        $(OCAMLOPT_CMD) -I $(PYCAMLDIR) -a -o pycaml.cmxa $<
 
+# prepares the source bundle for building.
+.prepare: $(PYCAMLMARKER)
+       touch .prepare
+
 clean:
        rm -f $(PYCAMLDIR)/pycaml.mli pycaml.cm[aixo] $(PYCAMLDIR)/pycaml.cm[aixo] \
                pycaml.[ao] libpycaml_stubs.a pycaml_stubs.o dllpycaml_stubs.so libpycaml_stubs.so \
@@ -65,6 +69,7 @@ clean:
 
 distclean: clean
        rm -rf $(PYCAMLDIR)
+       rm -f .prepare
 
 .PHONEY: all all.opt all-build all-opt-build distclean clean depend
 
@@ -76,6 +81,8 @@ $(PYCAMLMARKER): $(PYCAMLFILE)
 #      $(PATCH) -d "${PYCAMLDIR}" -p1 < ./python3-compat-fix.patch
 #      $(PATCH) -d "${PYCAMLDIR}" -p1 < ./pyunicodeapichanges-fix.patch
        $(PATCH) -d "${PYCAMLDIR}" -p2 < ./removeunicode.patch
+       $(PATCH) -d "${PYCAMLDIR}" -p1 < ./ignoreheader.patch
+       $(PATCH) -d "${PYCAMLDIR}" -p1 < ./elim-warnings.patch
        rm -f "${PYCAMLDIR}/pycaml.mli"
        touch $@
 
diff --git a/bundles/pycaml/_tags b/bundles/pycaml/_tags
new file mode 100644 (file)
index 0000000..9bd287b
--- /dev/null
@@ -0,0 +1,5 @@
+# Includes the sources of the
+# bundles' source directory if
+# this directory is included.
+
+<chemoelectric-pycaml-8614105>: include
diff --git a/bundles/pycaml/elim-warnings.patch b/bundles/pycaml/elim-warnings.patch
new file mode 100644 (file)
index 0000000..ae78418
--- /dev/null
@@ -0,0 +1,37 @@
+diff -ru old-pycaml/pycaml_stubs.c chemoelectric-pycaml-8614105/pycaml_stubs.c
+--- old-pycaml/pycaml_stubs.c  2012-08-15 23:03:45.604693537 +0200
++++ chemoelectric-pycaml-8614105/pycaml_stubs.c        2012-08-16 22:03:01.969958132 +0200
+@@ -1886,7 +1886,6 @@
+     CAMLparam1(array);
+     PyObject *tuple = PyTuple_New(Wosize_val(array));
+     int i;
+-    int x;
+     for( i = 0; i < Wosize_val(array); i++ )
+       {
+@@ -1904,7 +1903,7 @@
+          does this of its own! Nice, isn't it?
+       */
+       Py_INCREF(entry);
+-      x = PyTuple_SetItem(tuple,i,entry);
++      PyTuple_SetItem(tuple,i,entry);
+       }
+     CAMLreturn(pywrap_steal(tuple));
+@@ -1973,7 +1972,6 @@
+     CAMLparam1(array);
+     PyObject *list = PyList_New(Wosize_val(array));
+     int i;
+-    int x;
+     for( i = 0; i < Wosize_val(array); i++ )
+       {
+@@ -1981,7 +1979,7 @@
+       entry=pyunwrap(Field(array,i));
+       /* T.F.: See pytuple_fromarray code comments! */
+       Py_INCREF(entry);
+-      x = PyList_SetItem(list,i,entry);
++      PyList_SetItem(list,i,entry);
+       }
+     CAMLreturn(pywrap_steal(list));
+ }
diff --git a/bundles/pycaml/ignoreheader.patch b/bundles/pycaml/ignoreheader.patch
new file mode 100644 (file)
index 0000000..5f1958e
--- /dev/null
@@ -0,0 +1,11 @@
+diff -Naur old-pycaml/pycaml_stubs.c chemoelectric-pycaml-8614105/pycaml_stubs.c
+--- old-pycaml/pycaml_stubs.c  2012-08-15 23:03:45.604693537 +0200
++++ chemoelectric-pycaml-8614105/pycaml_stubs.c        2012-08-15 23:04:06.010917137 +0200
+@@ -40,7 +40,6 @@
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <stdio.h>
+-#include "pycaml_stubs.h"
+ #if 3 <= PY_MAJOR_VERSION
+ #include <wchar.h>
diff --git a/bundles/pycaml/libpycaml_stubs.clib b/bundles/pycaml/libpycaml_stubs.clib
new file mode 100644 (file)
index 0000000..5a68a04
--- /dev/null
@@ -0,0 +1 @@
+chemoelectric-pycaml-8614105/pycaml_stubs.o
diff --git a/bundles/pycaml/pycaml.mldylib b/bundles/pycaml/pycaml.mldylib
new file mode 100644 (file)
index 0000000..3507f28
--- /dev/null
@@ -0,0 +1 @@
+Pycaml
diff --git a/bundles/pycaml/pycaml.mllib b/bundles/pycaml/pycaml.mllib
new file mode 100644 (file)
index 0000000..3507f28
--- /dev/null
@@ -0,0 +1 @@
+Pycaml
index e8ad53a..cd61893 100644 (file)
@@ -34,6 +34,10 @@ all.opt: .depend
        @$(MAKE) all-opt-build
 all-opt-build: .depend $(SEXPMARKER) sexplib.cmxa META
 
+# prepares the source bundle for building.
+.prepare: $(SEXPMARKER)
+       touch .prepare
+
 clean:
        rm -f sexplib.cma sexplib.cmxa META \
                $(SEXPLIB)/*.cm[ioxa] \
@@ -45,6 +49,7 @@ clean:
 
 distclean: clean
        rm -rf $(SEXPDIR)
+       rm -f .prepare
 
 $(SEXPMARKER): $(SEXPDIR).tar.gz sexp-3.10-compat.patch
        $(TAR) xfvz $<
@@ -119,7 +124,9 @@ $(SEXPLIB)/conv_error.mli: $(SEXPLIB)/conv.cmi
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
 ifneq ($(MAKECMDGOALS),depend-build)
-include .depend
+ifneq ($(FEATURE_OCAMLBUILD),yes)
+-include .depend
+endif
 endif
 endif
 endif
index eed58ac..aad2580 100644 (file)
 - Added a crude mechanism for integrating the results of external analyses with
   coccinelle, using positions to connect them together. This is an experimental
   feature. See demos/external_ana.{c,cocci,data}.
-
+- Try to do better pretty printing when array elements are individually
+  replaced
+- Just fail quietly on attempt to remove a multi-variable declaration,
+  allowing the semantic patch to continue.  A warning message is printed.
+- Ignore unknown identifiers around known types.
+- Ignore --use-glimpse if multiple directories given
+- Added support for c++ namespace syntax in cocci files.
 ** Bugfix:
 - Corrected parsing of script strings delimited by a single quote.  Thanks
   to Eugeniy Meshcheryakov for reporting the problem.
 - Ocaml 4.00.0 compatibility fixes
 - Drop inlines, reduce parser code size
 - Bind const_vol in the right order in Ast0 visitor
+- use arg_expression for printing iterator arguments instead of expression,
+  to get the right spacing.  Thanks to Lars-Peter Clausen for the fix.
+- Better spacing for generated argument lists.  Thanks to Lars-Peter Clausen
+  for reporting the problem.
+- Collect all module interfaces for ocaml scripting in a single
+  coccilib.cmi file, with the list of exposed internal modules in
+  ocaml/exposed_modules.ml. This simplifies the installation of the
+  ocaml version of coccilib, and allows us to specify which modules
+  can be accessed by an ocaml script. The coccilib.cmi must either
+  reside in $COCCI_DIR/ocaml/ or $COCCI_DIR/ocaml/coccilib/.
+- Ocamlbuild-based compilation of coccinelle (experimental). In a
+  cleaned repository, use the configure option --enable-ocamlbuild to
+  enable it. The Makefiles will then use ocamlbuild.
+- Ocamlscripts can access more of coccinelle: the file
+  ocaml/exposed_modules.ml specifies which modules are accessible.
+- Use arg_expression to print macro arguments.  Thanks to Lars-Peter
+  Clausen for the fix.
+- Remove some trailing whitespace due to unindent or added if braces.
+  Thanks to Eric LeBlond for reporting one of the problems.
+- Remove undesired newline after if header when body is a metavariable.
+  Thanks to Eric LeBlond for reporting the problem.
+- Improve macro expansion to take into account variable numbers of
+  arguments
+- Don't count macros or ifdefs in counting fields
+- Better counting of indent size when indent contains multiple tabs
+- Get the right annotation on trailing , that is after a nest.  Requires
+  avoiding double processing in transformation_c.ml
+- Fixed an issue where an 'Impossible' exception could be raised.
+- Fixed an issue where some identifiers were incorrectly interpreted as typedef.
 
 * 0.2.5
 ** Language:
index 9929076..a58b89f 100644 (file)
--- a/cocci.ml
+++ b/cocci.ml
@@ -658,7 +658,7 @@ let (includes_to_parse:
         Flag_cocci.include_options -> 'a) = fun xs choose_includes ->
   match choose_includes with
     Flag_cocci.I_UNSPECIFIED -> failwith "not possible"
-  | Flag_cocci.I_NO_INCLUDES -> []
+  | Flag_cocci.I_NO_INCLUDES -> !Flag_cocci.extra_includes
   | x ->
       let all_includes =
        List.mem x
@@ -701,7 +701,10 @@ let (includes_to_parse:
                  )
          | _ -> None))
        +> List.concat
-       +> (fun x -> (List.rev (Common.uniq (List.rev x)))) (*uniq keeps last*)
+       +> (fun x ->
+         (List.rev
+            (Common.uniq
+               (!Flag_cocci.extra_includes@(List.rev x)))))(*uniq keeps last*)
 
 let rec interpret_dependencies local global = function
     Ast_cocci.Dep s      -> List.mem s local
@@ -813,7 +816,7 @@ let rec update_include_rel_pos cs =
       match c with
       | Ast_c.Local x -> Left (x, aref)
       | Ast_c.NonLocal x -> Right (x, aref)
-      | Ast_c.Weird x -> raise Impossible
+      | Ast_c.Weird x -> raise (Impossible 161)
     ) in
 
   update_rel_pos_bis locals;
@@ -2033,7 +2036,7 @@ let check_duplicate_modif2 xs =
   let groups = Common.group_assoc_bykey_eff xs in
   groups +> Common.map_filter (fun (file, xs) ->
     match xs with
-    | [] -> raise Impossible
+    | [] -> raise (Impossible 162)
     | [res] -> Some (file, res)
     | res::xs ->
         match res with
index fd99b75..0ad2077 100644 (file)
@@ -125,6 +125,7 @@ OBJS = $(SRC:.ml=.cmo)
 OPTOBJS = $(SRC:.ml=.cmx)
 
 
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 all: $(LIB)
 all.opt:
        @$(MAKE) $(OPTLIB) BUILD_OPT=yes
@@ -142,6 +143,14 @@ $(TARGET).top: $(OBJS)
 
 clean::
        rm -f $(TARGET).top
+else
+all:
+       cd .. && $(OCAMLBUILD) commons/commons.cma
+all.opt:
+       cd .. && $(OCAMLBUILD) commons/commons.cmxa
+clean::
+       cd .. && $(OCAMLBUILD) -clean
+endif
 
 ##############################################################################
 # Other commons libs target
@@ -321,8 +330,10 @@ distclean: clean
 
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 -include .depend
 endif
 endif
+endif
 
 include ../Makefile.common
index c66b8e7..34d602b 100644 (file)
@@ -309,6 +309,7 @@ let reset_pr_indent () =
  * this file.
  *)
 
+(* don't the code below, use the Dumper module in ocamlextra instead.
 (* start of dumper.ml *)
 
 (* Dump an OCaml value into a printable string.
@@ -397,6 +398,7 @@ let rec dump r =
 let dump v = dump (repr v)
 
 (* end of dumper.ml *)
+*)
 
 (*
 let (dump : 'a -> string) = fun x ->
@@ -405,7 +407,7 @@ let (dump : 'a -> string) = fun x ->
 
 
 (* ---------------------------------------------------------------------- *)
-let pr2_gen x = pr2 (dump x)
+let pr2_gen x = pr2 (Dumper.dump x)
 
 
 
@@ -759,7 +761,7 @@ let _ex1 = example (enum 1 4 = [1;2;3;4])
 let assert_equal a b =
   if not (a = b)
   then failwith ("assert_equal: those 2 values are not equal:\n\t" ^
-                 (dump a) ^ "\n\t" ^ (dump b) ^ "\n")
+                 (Dumper.dump a) ^ "\n\t" ^ (Dumper.dump b) ^ "\n")
 
 let (example2: string -> bool -> unit) = fun s b ->
   try assert b with x -> failwith s
@@ -1386,7 +1388,7 @@ let release_file_lock filename =
 (*****************************************************************************)
 
 exception Todo
-exception Impossible
+exception Impossible of int
 exception Here
 exception ReturnExn
 
@@ -1397,7 +1399,7 @@ exception WrongFormat of string
 (* old: let _TODO () = failwith "TODO",  now via fix_caml with raise Todo *)
 
 let internal_error s = failwith ("internal error: "^s)
-let error_cant_have x = internal_error ("cant have this case: " ^(dump x))
+let error_cant_have x = internal_error ("cant have this case: " ^(Dumper.dump x))
 let myassert cond = if cond then () else failwith "assert error"
 
 
@@ -1414,7 +1416,7 @@ let myassert cond = if cond then () else failwith "assert error"
  * In fact dont have to name it, use +> (fun v -> ...)  so when want
  * erase debug just have to erase one line.
  *)
-let warning s v = (pr2 ("Warning: " ^ s ^ "; value = " ^ (dump v)); v)
+let warning s v = (pr2 ("Warning: " ^ s ^ "; value = " ^ (Dumper.dump v)); v)
 
 
 
@@ -1651,7 +1653,7 @@ let arg_parse2 l msg short_usage_fun =
       short_usage_fun();
       raise (UnixExit (2))
   | Arg.Help msg -> (* printf "%s" msg; exit 0; *)
-      raise Impossible  (* -help is specified in speclist *)
+      raise (Impossible 1)  (* -help is specified in speclist *)
   )
 
 
@@ -2675,7 +2677,7 @@ let int_to_month i =
   | 11 -> "November"
   | 12 -> "December"
 *)
-  | _ -> raise Impossible
+  | _ -> raise (Impossible 2)
 
 
 let month_info = [
@@ -4703,7 +4705,7 @@ let assoc_option  k l =
 let assoc_with_err_msg k l =
   try List.assoc k l
   with Not_found ->
-    pr2 (spf "pb assoc_with_err_msg: %s" (dump k));
+    pr2 (spf "pb assoc_with_err_msg: %s" (Dumper.dump k));
     raise Not_found
 
 (*****************************************************************************)
@@ -5368,7 +5370,7 @@ let (diff: (int -> int -> diff -> unit)-> (string list * string list) -> unit)=
       | ("|" | "/" | "\\" ) ->
           f !a !b BnotinA; f !a !b AnotinB; incr a; incr b;
       | "<" -> f !a !b AnotinB; incr a;
-      | _ -> raise Impossible
+      | _ -> raise (Impossible 3)
     )
 (*
 let _ =
@@ -5396,7 +5398,7 @@ let (diff2: (int -> int -> diff -> unit) -> (string * string) -> unit) =
       | ">" -> f !a !b BnotinA; incr b;
       | "|" -> f !a !b BnotinA; f !a !b AnotinB; incr a; incr b;
       | "<" -> f !a !b AnotinB; incr a;
-      | _ -> raise Impossible
+      | _ -> raise (Impossible 4)
     )
 
 
@@ -5554,7 +5556,7 @@ let full_charpos_to_pos a =
   profile_code "Common.full_charpos_to_pos" (fun () -> full_charpos_to_pos2 a)
 
 let test_charpos file =
-  full_charpos_to_pos file +> dump +> pr2
+  full_charpos_to_pos file +> Dumper.dump +> pr2
 
 
 
@@ -5705,7 +5707,7 @@ let regression_testing_vs newscore bestscore =
         optionise (fun () -> Hashtbl.find newscore res),
         optionise (fun () -> Hashtbl.find bestscore res)
       with
-      | None, None -> raise Impossible
+      | None, None -> raise (Impossible 5)
       | Some x, None ->
           Printf.printf "new test file appeared: %s\n" res;
           Hashtbl.add newbestscore res x;
index 9d697ed..64563bd 100644 (file)
@@ -137,7 +137,7 @@ val pr2_xxxxxxxxxxxxxxxxx : unit -> unit
 
 (* use Dumper.dump *)
 val pr2_gen: 'a -> unit
-val dump: 'a -> string
+(* val dump: 'a -> string *)
 
 (* see flag: val disable_pr2_once : bool ref *)
 val _already_printed : (string, bool) Hashtbl.t
@@ -475,7 +475,7 @@ val release_file_lock : filename -> unit
 (* Error managment *)
 (*****************************************************************************)
 exception Todo
-exception Impossible
+exception Impossible of int
 exception Here
 exception ReturnExn
 
diff --git a/commons/commons.mldylib b/commons/commons.mldylib
new file mode 100644 (file)
index 0000000..222075d
--- /dev/null
@@ -0,0 +1,35 @@
+Dumper
+ANSITerminal
+Setb
+Mapb
+SetPt
+Commands
+Common
+Common_extra
+Interfaces
+Objet
+Ocollection
+Seti
+Oset
+Oassoc
+Osequence
+Ograph
+Oseti
+Oseth
+Osetb
+Osetpt
+Oassocb
+Oassoch
+Oassoc_buffer
+Oassoc_cache
+Oassocid
+Oarray
+Ograph2way
+Ograph_simple
+Ograph_extended
+Glimpse
+Parser_combinators
+Enum
+DynArray
+Suffix_tree
+Suffix_tree_ext
diff --git a/commons/commons.mllib b/commons/commons.mllib
new file mode 100644 (file)
index 0000000..222075d
--- /dev/null
@@ -0,0 +1,35 @@
+Dumper
+ANSITerminal
+Setb
+Mapb
+SetPt
+Commands
+Common
+Common_extra
+Interfaces
+Objet
+Ocollection
+Seti
+Oset
+Oassoc
+Osequence
+Ograph
+Oseti
+Oseth
+Osetb
+Osetpt
+Oassocb
+Oassoch
+Oassoc_buffer
+Oassoc_cache
+Oassocid
+Oarray
+Ograph2way
+Ograph_simple
+Ograph_extended
+Glimpse
+Parser_combinators
+Enum
+DynArray
+Suffix_tree
+Suffix_tree_ext
index e3f24af..958765d 100644 (file)
@@ -7,7 +7,7 @@ class ['key, 'node, 'edge] ograph_mutable :
 object ('o)
   method add_node : 'key -> 'node -> unit
   method del_node : 'key -> unit
-  method replace_node: 'key -> 'node -> unit
+  method replace_node : 'key -> 'node -> unit
 
 
   method add_arc : ('key * 'key) -> 'edge -> unit
@@ -20,7 +20,8 @@ object ('o)
   method allsuccessors : ('key, ('key * 'edge) Oset.oset) Oassoc.oassoc
 
 
-  method del_leaf_node_and_its_edges: 'key -> unit
+  method del_leaf_node_and_its_edges : 'key -> unit
+
   method ancestors : 'key -> 'key Oset.oset
   method leaf_nodes : unit -> 'key Oset.oset
 
index aef78e7..f68e279 100644 (file)
@@ -12,9 +12,9 @@ object(o: 'o)
   method virtual minus: 'o -> 'o
 
   (* allow binary methods tricks, generate exception when not good type *)
-  method  tosetb: 'a Setb.t = raise Impossible
-  method  tosetpt: SetPt.t = raise Impossible
-  method  toseti: Seti.seti    = raise Impossible
+  method  tosetb: 'a Setb.t = raise (Impossible 10)
+  method  tosetpt: SetPt.t = raise (Impossible 11)
+  method  toseti: Seti.seti    = raise (Impossible 12)
   method virtual toset: 'b. 'b (* generic (not safe) tricks *)
 
   (* is_intersect, equal, subset *)
index 19896b2..14b6889 100644 (file)
@@ -73,7 +73,7 @@ let rec (add2: int -> seti -> seti) = fun x -> function
 
       |       (Interv (i,j)::xs) when x =|= i-1 -> pack x j xs
       |       (Interv (i,j)::xs) when x < i-1 -> (Interv (i,j))::add x xs
-      |       _ -> raise Impossible
+      |       _ -> raise (Impossible 6)
       )
 and add x y = let _ = count5 () in add2 x y
 
@@ -200,7 +200,7 @@ let rec inter xs ys =
                   )
             | Sup -> aux (y::ys) (x::xs) (* can cos commutative *)
             )
-        | _ -> raise Impossible (* intervise *)
+        | _ -> raise (Impossible 7) (* intervise *)
         )
   in
   (* TODO avoid the rev rev, but aux good ? need order ?  *)
@@ -245,7 +245,7 @@ let union xs ys =
                   )
             | Sup -> aux (y::ys) (x::xs) (* can cos commutative *)
             )
-        | _ -> raise Impossible (* intervise *)
+        | _ -> raise (Impossible 8) (* intervise *)
         )
   in
 (*     union_set (tolist xs) (tolist ys) +> fromlist *)
@@ -309,7 +309,7 @@ let diff xs ys =
                       (*     [      ]  *)
                   )
             )
-        | _ -> raise Impossible (* intervise *)
+        | _ -> raise (Impossible 9) (* intervise *)
         )
   in
 (*       minus_set (tolist xs) (tolist ys) +> fromlist *)
index 9317b73..2d08043 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for coccinelle 1.0.0-rc14.
+# Generated by GNU Autoconf 2.69 for coccinelle 1.0.0-rc15.
 #
 # Report bugs to <cocci@diku.dk>.
 #
@@ -639,14 +639,17 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='coccinelle'
 PACKAGE_TARNAME='coccinelle'
-PACKAGE_VERSION='1.0.0-rc14'
-PACKAGE_STRING='coccinelle 1.0.0-rc14'
+PACKAGE_VERSION='1.0.0-rc15'
+PACKAGE_STRING='coccinelle 1.0.0-rc15'
 PACKAGE_BUGREPORT='cocci@diku.dk'
 PACKAGE_URL='http://coccinelle.lip6.fr/'
 
 ac_unique_file="cocci.ml"
-ac_subst_vars='LTLIBOBJS
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
 LIBOBJS
+FEATURE_OCAMLBUILD
 MAKETARGET_SPATCH
 SPATCHNAME
 enable_opt
@@ -788,16 +791,30 @@ OCAMLOPT
 OCAMLLIB
 OCAMLVERSION
 OCAMLC
+PKG_CONFIG_ORIG
 SUBSTITUTED_PKG_CONFIG
 OCAMLYACC
 OCAMLLEXDOTOPT
 OCAMLLEX
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
 with_PKG_CONFIG
 PKG_CONFIG
 PATCHELF
+INSTALL
 PATCH
 TAR
 CPP
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
 OBJEXT
 EXEEXT
 ac_ct_CC
@@ -805,13 +822,32 @@ CPPFLAGS
 LDFLAGS
 CFLAGS
 CC
+DATE
+GIT
+CONFVERSION
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
 MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
-DATE
-GIT
-CONFVERSION
 COCCI_SRCDIR
 COCCI_VERSION
 CONFIGURE_FLAGS
@@ -857,6 +893,7 @@ PYVER'
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_dependency_tracking
 with_pkg_config
 with_ocamllex
 with_ocamlyacc
@@ -881,6 +918,7 @@ enable_pcre
 with_pdflatex
 enable_release
 enable_opt
+enable_ocamlbuild
 '
       ac_precious_vars='PYVER
 build_alias
@@ -893,6 +931,8 @@ LIBS
 CPPFLAGS
 CPP
 PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
 OCAMLLEX
 OCAMLYACC
 OCAMLFIND
@@ -1451,7 +1491,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures coccinelle 1.0.0-rc14 to adapt to many kinds of systems.
+\`configure' configures coccinelle 1.0.0-rc15 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1507,12 +1547,17 @@ Fine tuning of the installation directories:
 _ACEOF
 
   cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
 _ACEOF
 fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of coccinelle 1.0.0-rc14:";;
+     short | recursive ) echo "Configuration of coccinelle 1.0.0-rc15:";;
    esac
   cat <<\_ACEOF
 
@@ -1520,6 +1565,10 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
   --enable-dynlink        enable global package dynlink (yes,no) (default:
                           auto)
   --enable-camlp4         enable global package camlp4 (yes,no) (default:
@@ -1536,6 +1585,7 @@ Optional Features:
   --enable-release        build with a release configuration (yes,no,profile
                           default: no)
   --enable-opt            build an optimized spatch (yes,no, default: auto)
+  --enable-ocamlbuild     enable ocamlbuild support (default: no)
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1567,6 +1617,10 @@ Some influential environment variables:
               you have headers in a nonstandard directory <include dir>
   CPP         C preprocessor
   PKG_CONFIG  path to pkg-config
+  PKG_CONFIG_PATH
+              directories to add to pkg-config's search path
+  PKG_CONFIG_LIBDIR
+              path overriding pkg-config's built-in search path
   OCAMLLEX    path to ocamllex
   OCAMLYACC   path to ocamlyacc
   OCAMLFIND   path to ocamlfind
@@ -1661,7 +1715,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-coccinelle configure 1.0.0-rc14
+coccinelle configure 1.0.0-rc15
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1753,7 +1807,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by coccinelle $as_me 1.0.0-rc14, which was
+It was created by coccinelle $as_me 1.0.0-rc15, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2131,7 +2185,6 @@ ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
 ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 
-
 CONFIGURE_FLAGS="$*"
 
 COCCI_VERSION="$PACKAGE_VERSION"
@@ -2140,6 +2193,499 @@ COCCI_SRCDIR="$(pwd)"
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: configuring coccinelle $COCCI_VERSION in $COCCI_SRCDIR" >&5
 $as_echo "$as_me: configuring coccinelle $COCCI_VERSION in $COCCI_SRCDIR" >&6;}
+am__api_version='1.12'
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+         if test $ac_prog = install &&
+           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           rm -rf conftest.one conftest.two conftest.dir
+           echo one > conftest.one
+           echo two > conftest.two
+           mkdir conftest.dir
+           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+             test -s conftest.one && test -s conftest.two &&
+             test -s conftest.dir/conftest.one &&
+             test -s conftest.dir/conftest.two
+           then
+             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             break 3
+           fi
+         fi
+       fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
+    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$*" = "X"; then
+       # -L didn't work.
+       set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$*" != "X $srcdir/configure conftest.file" \
+       && test "$*" != "X conftest.file $srcdir/configure"; then
+
+       # If neither matched, then we have a broken ls.  This can happen
+       # if, for instance, CONFIG_SHELL is bash and it inherits a
+       # broken ls alias from the environment.  This has actually
+       # happened.  Such a system could not be considered "sane".
+       as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment" "$LINENO" 5
+     fi
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+        for ac_exec_ext in '' $ac_executable_extensions; do
+          as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir (GNU coreutils) '* | \
+            'mkdir (coreutils) '* | \
+            'mkdir (fileutils) '4.1*)
+              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              break 3;;
+          esac
+        done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='coccinelle'
+ VERSION='1.0.0-rc15'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: determining version suffix" >&5
 $as_echo "$as_me: version suffix set to $CONFVERSION" >&6;}
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: this configure program uses pkg-config m4 macros" >&5
-$as_echo "$as_me: this configure program uses pkg-config m4 macros" >&6;}
-{ $as_echo "$as_me:${as_lineno-$LINENO}: this configure program uses ocaml m4 macros (see setup/ocaml.m4)" >&5
-$as_echo "$as_me: this configure program uses ocaml m4 macros (see setup/ocaml.m4)" >&6;}
-{ $as_echo "$as_me:${as_lineno-$LINENO}: this configure program uses custom m4 macros (see setup/cocci.m4)" >&5
-$as_echo "$as_me: this configure program uses custom m4 macros (see setup/cocci.m4)" >&6;}
-{ $as_echo "$as_me:${as_lineno-$LINENO}: some fake substitutions for required but unavailable programs may be used (see setup/fake*)" >&5
-$as_echo "$as_me: some fake substitutions for required but unavailable programs may be used (see setup/fake*)" >&6;}
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: verifying basic tools" >&5
-$as_echo "$as_me: verifying basic tools" >&6;}
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-         if test $ac_prog = install &&
-           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-           # AIX install.  It has an incompatible calling convention.
-           :
-         elif test $ac_prog = install &&
-           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-           # program-specific install script used by HP pwplus--don't use.
-           :
-         else
-           rm -rf conftest.one conftest.two conftest.dir
-           echo one > conftest.one
-           echo two > conftest.two
-           mkdir conftest.dir
-           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-             test -s conftest.one && test -s conftest.two &&
-             test -s conftest.dir/conftest.one &&
-             test -s conftest.dir/conftest.two
-           then
-             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-             break 3
-           fi
-         fi
-       fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
-if test -z "$MKDIR_P"; then
-  if ${ac_cv_path_mkdir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in mkdir gmkdir; do
-        for ac_exec_ext in '' $ac_executable_extensions; do
-          as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
-          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
-            'mkdir (GNU coreutils) '* | \
-            'mkdir (coreutils) '* | \
-            'mkdir (fileutils) '4.1*)
-              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
-              break 3;;
-          esac
-        done
-       done
-  done
-IFS=$as_save_IFS
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: this configure program uses pkg-config m4 macros" >&5
+$as_echo "$as_me: this configure program uses pkg-config m4 macros" >&6;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: this configure program uses ocaml m4 macros (see setup/ocaml.m4)" >&5
+$as_echo "$as_me: this configure program uses ocaml m4 macros (see setup/ocaml.m4)" >&6;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: this configure program uses custom m4 macros (see setup/cocci.m4)" >&5
+$as_echo "$as_me: this configure program uses custom m4 macros (see setup/cocci.m4)" >&6;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: some fake substitutions for required but unavailable programs may be used (see setup/fake*)" >&5
+$as_echo "$as_me: some fake substitutions for required but unavailable programs may be used (see setup/fake*)" >&6;}
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: verifying basic tools" >&5
+$as_echo "$as_me: verifying basic tools" >&6;}
+
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
 fi
 
-  test -d ./--version && rmdir ./--version
-  if test "${ac_cv_path_mkdir+set}" = set; then
-    MKDIR_P="$ac_cv_path_mkdir -p"
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for MKDIR_P within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    MKDIR_P="$ac_install_sh -d"
-  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
+
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3308,6 +3784,134 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3525,6 +4129,19 @@ $as_echo "no" >&6; }
 fi
 
 
+
+if test "$INSTALL" = "setup/install-sh -c" -o "$INSTALL" = "./setup-install-sh -c"; then :
+    INSTALL="$COCCI_SRCDIR/$INSTALL"
+
+
+fi
+
+if test "$MKDIR_P" = "setup/install-sh -c -d" -o "$INSTALL" = "./setup-install-sh -c -d"; then :
+    MKDIR_P="$COCCI_SRCDIR/$MKDIR_P"
+
+
+fi
+
 # Extract the first word of "patchelf", so it can be a program name with args.
 set dummy patchelf; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -3595,6 +4212,11 @@ else
         if test "x$PKG_CONFIG" = xpkg-config -a "xPKG_CONFIG" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -3707,7 +4329,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "x$PKG_CONFIG" = xocamllex -a "xPKG_CONFIG" = xOCAMLLEX; then :
@@ -4129,14 +4750,19 @@ fi
 
 fi
 
-    if test -n "$COCCI_SRCDIR/setup/fake-subst.sh pkg-config"; then :
-        { $as_echo "$as_me:${as_lineno-$LINENO}: pkg-config not found. Trying substitute $COCCI_SRCDIR/setup/fake-subst.sh pkg-config." >&5
-$as_echo "$as_me: pkg-config not found. Trying substitute $COCCI_SRCDIR/setup/fake-subst.sh pkg-config." >&6;}
-      PKG_CONFIG="$COCCI_SRCDIR/setup/fake-subst.sh pkg-config"
+    if test -n ""; then :
+        { $as_echo "$as_me:${as_lineno-$LINENO}: pkg-config not found. Trying substitute ." >&5
+$as_echo "$as_me: pkg-config not found. Trying substitute ." >&6;}
+      PKG_CONFIG=""
 
         if test "xpkg-config" = xpkg-config -a "xPKG_CONFIG" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -4249,7 +4875,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "xpkg-config" = xocamllex -a "xPKG_CONFIG" = xOCAMLLEX; then :
@@ -4675,10 +5300,19 @@ fi
 fi
 
 if test "x$PKG_CONFIG" = xno; then :
-    as_fn_error $? "A suitable pkg-config could not be found." "$LINENO" 5
+    PKG_CONFIG_ORIG=pkg-config
+
+
+else
+    PKG_CONFIG_ORIG=$PKG_CONFIG
+
 
 fi
 
+PKG_CONFIG="$COCCI_SRCDIR/setup/fake-subst.sh $PKG_CONFIG_ORIG"
+
+
+
   # checking for ocamlc
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ocamlc", so it can be a program name with args.
@@ -6724,6 +7358,11 @@ else
         if test "x$OCAMLLEX" = xpkg-config -a "xOCAMLLEX" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -6836,7 +7475,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "x$OCAMLLEX" = xocamllex -a "xOCAMLLEX" = xOCAMLLEX; then :
@@ -7266,6 +7904,11 @@ $as_echo "$as_me: ocamllex not found. Trying substitute ." >&6;}
         if test "xocamllex" = xpkg-config -a "xOCAMLLEX" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -7378,7 +8021,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "xocamllex" = xocamllex -a "xOCAMLLEX" = xOCAMLLEX; then :
@@ -7832,6 +8474,11 @@ else
         if test "x$OCAMLYACC" = xpkg-config -a "xOCAMLYACC" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -7944,7 +8591,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "x$OCAMLYACC" = xocamllex -a "xOCAMLYACC" = xOCAMLLEX; then :
@@ -8374,6 +9020,11 @@ $as_echo "$as_me: ocamlyacc not found. Trying substitute ." >&6;}
         if test "xocamlyacc" = xpkg-config -a "xOCAMLYACC" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -8486,7 +9137,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "xocamlyacc" = xocamllex -a "xOCAMLYACC" = xOCAMLLEX; then :
@@ -8940,6 +9590,11 @@ else
         if test "x$OCAMLFIND" = xpkg-config -a "xOCAMLFIND" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -9052,7 +9707,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "x$OCAMLFIND" = xocamllex -a "xOCAMLFIND" = xOCAMLLEX; then :
@@ -9482,6 +10136,11 @@ $as_echo "$as_me: ocamlfind not found. Trying substitute $COCCI_SRCDIR/setup/fak
         if test "xocamlfind" = xpkg-config -a "xOCAMLFIND" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -9594,7 +10253,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "xocamlfind" = xocamllex -a "xOCAMLFIND" = xOCAMLLEX; then :
@@ -10048,6 +10706,11 @@ else
         if test "x$OCAMLPROF" = xpkg-config -a "xOCAMLPROF" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -10160,7 +10823,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "x$OCAMLPROF" = xocamllex -a "xOCAMLPROF" = xOCAMLLEX; then :
@@ -10590,6 +11252,11 @@ $as_echo "$as_me: ocamlprof not found. Trying substitute ." >&6;}
         if test "xocamlprof" = xpkg-config -a "xOCAMLPROF" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -10702,7 +11369,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "xocamlprof" = xocamllex -a "xOCAMLPROF" = xOCAMLLEX; then :
@@ -11933,6 +12599,11 @@ else
         if test "x$MENHIR" = xpkg-config -a "xMENHIR" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -12045,7 +12716,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "x$MENHIR" = xocamllex -a "xMENHIR" = xOCAMLLEX; then :
@@ -12475,6 +13145,11 @@ $as_echo "$as_me: menhir not found. Trying substitute $COCCI_SRCDIR/setup/fake-m
         if test "xmenhir" = xpkg-config -a "xMENHIR" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -12587,7 +13262,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "xmenhir" = xocamllex -a "xMENHIR" = xOCAMLLEX; then :
@@ -13173,6 +13847,11 @@ else
         if test "x$PYTHON" = xpkg-config -a "xPYTHON" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -13285,7 +13964,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "x$PYTHON" = xocamllex -a "xPYTHON" = xOCAMLLEX; then :
@@ -13715,6 +14393,11 @@ $as_echo "$as_me: python not found. Trying substitute ." >&6;}
         if test "xpython" = xpkg-config -a "xPYTHON" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -13827,7 +14510,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "xpython" = xocamllex -a "xPYTHON" = xOCAMLLEX; then :
@@ -14365,6 +15047,7 @@ if test -n "$PYTHON_CFLAGS"; then
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_PYTHON_CFLAGS=`$PKG_CONFIG --cflags "python-$PYVER" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
 fi
@@ -14381,6 +15064,7 @@ if test -n "$PYTHON_LIBS"; then
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_PYTHON_LIBS=`$PKG_CONFIG --libs "python-$PYVER" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
 fi
@@ -14391,6 +15075,8 @@ fi
 
 
 if test $pkg_failed = yes; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
@@ -14398,18 +15084,18 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               PYTHON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "python-$PYVER" 2>&1`
+               PYTHON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "python-$PYVER" 2>&1`
         else
-               PYTHON_PKG_ERRORS=`$PKG_CONFIG --print-errors "python-$PYVER" 2>&1`
+               PYTHON_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "python-$PYVER" 2>&1`
         fi
        # Put the nasty error message in config.log where it belongs
        echo "$PYTHON_PKG_ERRORS" >&5
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                HAVE_PYTHON=no
+       HAVE_PYTHON=no
 
 elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
        HAVE_PYTHON=no
 
 else
@@ -14439,6 +15125,7 @@ if test -n "$PYTHON_CFLAGS"; then
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_PYTHON_CFLAGS=`$PKG_CONFIG --cflags "python" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
 fi
@@ -14455,6 +15142,7 @@ if test -n "$PYTHON_LIBS"; then
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_PYTHON_LIBS=`$PKG_CONFIG --libs "python" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
 fi
@@ -14465,6 +15153,8 @@ fi
 
 
 if test $pkg_failed = yes; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
@@ -14472,18 +15162,18 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               PYTHON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "python" 2>&1`
+               PYTHON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "python" 2>&1`
         else
-               PYTHON_PKG_ERRORS=`$PKG_CONFIG --print-errors "python" 2>&1`
+               PYTHON_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "python" 2>&1`
         fi
        # Put the nasty error message in config.log where it belongs
        echo "$PYTHON_PKG_ERRORS" >&5
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                HAVE_PYTHON=no
+       HAVE_PYTHON=no
 
 elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
        HAVE_PYTHON=no
 
 else
@@ -14695,6 +15385,7 @@ if test -n "$PCRE_CFLAGS"; then
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_PCRE_CFLAGS=`$PKG_CONFIG --cflags "libpcre" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
 fi
@@ -14711,6 +15402,7 @@ if test -n "$PCRE_LIBS"; then
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_PCRE_LIBS=`$PKG_CONFIG --libs "libpcre" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
 fi
@@ -14721,6 +15413,8 @@ fi
 
 
 if test $pkg_failed = yes; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
@@ -14728,18 +15422,18 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               PCRE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libpcre" 2>&1`
+               PCRE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpcre" 2>&1`
         else
-               PCRE_PKG_ERRORS=`$PKG_CONFIG --print-errors "libpcre" 2>&1`
+               PCRE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpcre" 2>&1`
         fi
        # Put the nasty error message in config.log where it belongs
        echo "$PCRE_PKG_ERRORS" >&5
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                HAVE_PCRE=no
+       HAVE_PCRE=no
 
 elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
        HAVE_PCRE=no
 
 else
@@ -14985,6 +15679,11 @@ else
         if test "x$PDFLATEX" = xpkg-config -a "xPDFLATEX" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -15097,7 +15796,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "x$PDFLATEX" = xocamllex -a "xPDFLATEX" = xOCAMLLEX; then :
@@ -15527,6 +16225,11 @@ $as_echo "$as_me: pdflatex not found. Trying substitute $COCCI_SRCDIR/setup/fake
         if test "xpdflatex" = xpkg-config -a "xPDFLATEX" = xPKG_CONFIG; then :
 
 
+
+
+
+
+
 if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -15639,7 +16342,6 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
                PKG_CONFIG=""
        fi
-
 fi
 
 elif test "xpdflatex" = xocamllex -a "xPDFLATEX" = xOCAMLLEX; then :
@@ -16096,7 +16798,7 @@ fi
 
     MAKETARGET_ALL=all-dev
 
-  OCAMLC="$COCCI_SRCDIR/setup/wrapper-ocamlcp.sh \"$OCAMLCORIG\" \"$OCAMLPROF\""
+  OCAMLC="$COCCI_SRCDIR/setup/wrapper-ocamlcp.sh $OCAMLCORIG $OCAMLPROF"
 
   MODULES_profiling=profiling.cmo
 
@@ -16154,7 +16856,6 @@ fi
 
 fi
 
-# set the default enable-opt setting
 if test -z "$enable_opt"; then :
     if test "x$enable_release" = xyes -o "x$enable_release" = xno; then :
       enable_opt="$enable_release"
@@ -16179,8 +16880,29 @@ else
 fi
 
 
+# Check whether --enable-ocamlbuild was given.
+if test "${enable_ocamlbuild+set}" = set; then :
+  enableval=$enable_ocamlbuild;
+fi
+
+if test "x$enable_ocamlbuild" = xyes; then :
+    if test -z "$OCAMLBUILD" -o "x$OCAMLBUILD" = xno; then :
+      as_fn_error $? "Ocamlbuild is required but is not installed." "$LINENO" 5
+
+fi
+
+  FEATURE_OCAMLBUILD=yes
+
+
+else
+    FEATURE_OCAMLBUILD=
+
+
+fi
+
+
 
-ac_config_files="$ac_config_files Makefile.config version.ml commons/commands.ml globals/config.ml globals/regexp.ml python/pycocci.ml ocaml/prepare_ocamlcocci.ml scripts/spatch.sh docs/spatch.1"
+ac_config_files="$ac_config_files Makefile.config version.ml commons/commands.ml globals/config.ml globals/regexp.ml python/pycocci.ml ocaml/prepare_ocamlcocci.ml scripts/spatch.sh docs/spatch.1 myocamlbuild.ml setup/Makefile"
 
 
 cat >confcache <<\_ACEOF
@@ -16328,6 +17050,30 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
@@ -16725,7 +17471,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by coccinelle $as_me 1.0.0-rc14, which was
+This file was extended by coccinelle $as_me 1.0.0-rc15, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -16748,6 +17494,7 @@ esac
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 # Files that config.status was made for.
 config_files="$ac_config_files"
+config_commands="$ac_config_commands"
 
 _ACEOF
 
@@ -16772,6 +17519,9 @@ Usage: $0 [OPTION]... [TAG]...
 Configuration files:
 $config_files
 
+Configuration commands:
+$config_commands
+
 Report bugs to <cocci@diku.dk>.
 coccinelle home page: <http://coccinelle.lip6.fr/>."
 
@@ -16779,7 +17529,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-coccinelle config.status 1.0.0-rc14
+coccinelle config.status 1.0.0-rc15
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -16791,6 +17541,7 @@ ac_pwd='$ac_pwd'
 srcdir='$srcdir'
 INSTALL='$INSTALL'
 MKDIR_P='$MKDIR_P'
+AWK='$AWK'
 test -n "\$AWK" || AWK=awk
 _ACEOF
 
@@ -16883,6 +17634,11 @@ _ASBOX
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
 _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -16891,6 +17647,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 for ac_config_target in $ac_config_targets
 do
   case $ac_config_target in
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "Makefile.config") CONFIG_FILES="$CONFIG_FILES Makefile.config" ;;
     "version.ml") CONFIG_FILES="$CONFIG_FILES version.ml" ;;
     "commons/commands.ml") CONFIG_FILES="$CONFIG_FILES commons/commands.ml" ;;
@@ -16900,6 +17657,8 @@ do
     "ocaml/prepare_ocamlcocci.ml") CONFIG_FILES="$CONFIG_FILES ocaml/prepare_ocamlcocci.ml" ;;
     "scripts/spatch.sh") CONFIG_FILES="$CONFIG_FILES scripts/spatch.sh" ;;
     "docs/spatch.1") CONFIG_FILES="$CONFIG_FILES docs/spatch.1" ;;
+    "myocamlbuild.ml") CONFIG_FILES="$CONFIG_FILES myocamlbuild.ml" ;;
+    "setup/Makefile") CONFIG_FILES="$CONFIG_FILES setup/Makefile" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
@@ -16912,6 +17671,7 @@ done
 # bizarre bug on SunOS 4.1.3.
 if $ac_need_defaults; then
   test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
 fi
 
 # Have a temporary directory for convenience.  Make it in the build tree
@@ -17100,7 +17860,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 fi # test -n "$CONFIG_FILES"
 
 
-eval set X "  :F $CONFIG_FILES      "
+eval set X "  :F $CONFIG_FILES      :C $CONFIG_COMMANDS"
 shift
 for ac_tag
 do
@@ -17321,9 +18081,108 @@ which seems to be undefined.  Please make sure it is defined" >&2;}
  ;;
 
 
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
 
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
   esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named 'Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$mf" : 'X\(//\)[^/]' \| \
+        X"$mf" : 'X\(//\)$' \| \
+        X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running 'make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$file" : 'X\(//\)[^/]' \| \
+        X"$file" : 'X\(//\)$' \| \
+        X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
 
+  esac
 done # for ac_tag
 
 
index 7c221e2..2f0f682 100644 (file)
@@ -1,13 +1,16 @@
+dnl  run 'autoreconf' to obtain aclocal.m4, and update configure and setup/pkg.m4
+dnl  run 'automake -acf' to update setup/{install-sh,missing}
+
 dnl  standard initialization (we only use autoconf not automake)
 AC_PREREQ([2.68])
 AC_INIT([coccinelle], m4_esyscmd([cat ./version | tr -d '\n']), [cocci@diku.dk], [], [http://coccinelle.lip6.fr/])
 AC_CONFIG_MACRO_DIR([setup])
 AC_CONFIG_AUX_DIR([setup])
-
 AC_SUBST([CONFIGURE_FLAGS], ["$*"])
 AC_SUBST([COCCI_VERSION], ["$PACKAGE_VERSION"])
 AC_SUBST([COCCI_SRCDIR], ["$(pwd)"])
 AC_MSG_NOTICE([configuring coccinelle $COCCI_VERSION in $COCCI_SRCDIR])
+AM_INIT_AUTOMAKE
 
 AC_CONFIG_SRCDIR([cocci.ml])    dnl  this file must be present in our src directory
 AC_COCCI_CONFVERSION
@@ -38,16 +41,37 @@ AC_PROG_MKDIR_P
 AC_PROG_CPP
 AC_PATH_PROG([TAR],[tar])
 AC_PATH_PROG([PATCH],[patch])
+
+dnl  ensures that INSTALL points to an absolute install-sh when that one is configured.
+AS_IF([test "$INSTALL" = "setup/install-sh -c" -o "$INSTALL" = "./setup-install-sh -c"],
+[dnl
+  AC_SUBST([INSTALL], ["$COCCI_SRCDIR/$INSTALL"])
+])
+
+dnl  the same for MKDIR_P
+AS_IF([test "$MKDIR_P" = "setup/install-sh -c -d" -o "$INSTALL" = "./setup-install-sh -c -d"],
+[dnl
+  AC_SUBST([MKDIR_P], ["$COCCI_SRCDIR/$MKDIR_P"])
+])
+
+dnl  patchelf is an optional dependency and in principle not used for building coccinelle
 AC_PATH_PROG([PATCHELF],[patchelf])
 
-dnl  pkg config is required
-AC_COCCI_TOOL([PKG_CONFIG],[pkg-config],[$COCCI_SRCDIR/setup/fake-subst.sh pkg-config])
+dnl  pkg config is required, but we have an alternative script for it
+AC_COCCI_TOOL([PKG_CONFIG],[pkg-config])
 AS_IF([test "x$PKG_CONFIG" = xno],
-[dnl
-  AC_MSG_ERROR([A suitable pkg-config could not be found.])
+[dnl  no specific pkg-config configured
+  AC_SUBST([PKG_CONFIG_ORIG],[pkg-config])
+],
+[dnl  a specific pkg-config configured
+  AC_SUBST([PKG_CONFIG_ORIG],[$PKG_CONFIG])
 ])
 
-dnl  ocaml compile
+dnl  always use the wrapper around pkg-config
+AC_SUBST([PKG_CONFIG],["$COCCI_SRCDIR/setup/fake-subst.sh $PKG_CONFIG_ORIG"])
+
+
+dnl  ocaml compiler configuration
 AC_PROG_OCAML
 AC_CHECK_OCAMLVERSION([OCAMLATLEAST310],[3.10])
 AC_CHECK_OCAMLVERSION([OCAMLATLEAST311],[3.11])
@@ -411,7 +435,7 @@ AS_IF([test "x$enable_release" = xyes],
 
   dnl  configuration-time overrides for profiling
   AC_SUBST([MAKETARGET_ALL], [all-dev])
-  AC_SUBST([OCAMLC], ["$COCCI_SRCDIR/setup/wrapper-ocamlcp.sh \"$OCAMLCORIG\" \"$OCAMLPROF\""])
+  AC_SUBST([OCAMLC], ["$COCCI_SRCDIR/setup/wrapper-ocamlcp.sh $OCAMLCORIG $OCAMLPROF"])
   AC_SUBST([MODULES_profiling], [profiling.cmo])
   AC_MSG_NOTICE([configured coccinelle for profiling])
 ],
@@ -455,7 +479,7 @@ AS_IF([test "x$OPTIMIZED_dynlink" = xno -a "x$enable_ocaml" = xyes],
   ])
 ])
 
-# set the default enable-opt setting
+dnl  set the default enable-opt setting
 AS_IF([test -z "$enable_opt"],
 [dnl
   AS_IF([test "x$enable_release" = xyes -o "x$enable_release" = xno],
@@ -476,6 +500,22 @@ AS_IF([test "x$enable_opt" = xyes],
 ])
 
 
+dnl  ocamlbuild handling
+AC_ARG_ENABLE([ocamlbuild], AS_HELP_STRING([--enable-ocamlbuild], [enable ocamlbuild support (default: no)]))
+AS_IF([test "x$enable_ocamlbuild" = xyes],
+[dnl  ocamlbuild support requested
+  AS_IF([test -z "$OCAMLBUILD" -o "x$OCAMLBUILD" = xno],
+  [dnl
+    AC_MSG_ERROR([Ocamlbuild is required but is not installed.])
+  ])
+
+  AC_SUBST([FEATURE_OCAMLBUILD], [yes])
+],
+[dnl  default: disable ocamlbuild support
+  AC_SUBST([FEATURE_OCAMLBUILD], [ ])
+])
+
+
 dnl
 dnl  generating configuration
 dnl
@@ -488,6 +528,9 @@ AC_CONFIG_FILES([
   ocaml/prepare_ocamlcocci.ml
   scripts/spatch.sh
   docs/spatch.1
+  myocamlbuild.ml
+
+  setup/Makefile
 ])
 
 AC_OUTPUT
index c67d3ab..418dffd 100644 (file)
@@ -52,6 +52,8 @@ OPTLIB=$(LIB:.cma=.cmxa)
 OBJS = $(SRC:.ml=.cmo)
 OPTOBJS = $(SRC:.ml=.cmx)
 
+
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 all: $(LIB)
 all.opt:
        @$(MAKE) $(OPTLIB) BUILD_OPT=yes
@@ -67,6 +69,21 @@ $(OPTLIB): $(OPTOBJS)
 
 clean::
        rm -f $(LIB)  $(OPTLIB) $(LIB:.cma=.a) $(TARGET).top
+else
+all:
+       cd .. && $(OCAMLBUILD) ctl/ctl.cma
+
+all.opt:
+       cd .. && $(OCAMLBUILD) ctl/ctl.cmxa
+
+clean::
+       cd .. && $(OCAMLBUILD) -clean
+       rm -f test_ctl
+
+test_ctl:
+       cd .. && $(OCAMLBUILD) ctl/test_ctl.byte
+       cp ../_build/ctl/test_ctl.byte test_ctl
+endif
 
 
 .SUFFIXES:
@@ -96,8 +113,10 @@ distclean: clean
 
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 -include .depend
 endif
 endif
+endif
 
 include ../Makefile.common
diff --git a/ctl/ctl.mldylib b/ctl/ctl.mldylib
new file mode 100644 (file)
index 0000000..87515b0
--- /dev/null
@@ -0,0 +1,5 @@
+Ast_ctl
+Ctl_engine
+Flag_ctl
+Pretty_print_ctl
+Wrapper_ctl
diff --git a/ctl/ctl.mllib b/ctl/ctl.mllib
new file mode 100644 (file)
index 0000000..87515b0
--- /dev/null
@@ -0,0 +1,5 @@
+Ast_ctl
+Ctl_engine
+Flag_ctl
+Pretty_print_ctl
+Wrapper_ctl
index 6f329b5..62c6b52 100644 (file)
@@ -2189,9 +2189,9 @@ let simpleanno l phi res =
   match phi with
     | A.False              -> pp "False"
     | A.True               -> pp "True"
-    | A.Pred(p)            -> pp ("Pred" ^ (Common.dump p))
+    | A.Pred(p)            -> pp ("Pred" ^ (Dumper.dump p))
     | A.Not(phi)           -> pp "Not"
-    | A.Exists(_,v,phi)    -> pp ("Exists " ^ (Common.dump(v)))
+    | A.Exists(_,v,phi)    -> pp ("Exists " ^ (Dumper.dump(v)))
     | A.And(_,phi1,phi2)   -> pp "And"
     | A.AndAny(dir,_,phi1,phi2) -> pp "AndAny"
     | A.HackForStmt(dir,_,phi1,phi2) -> pp "HackForStmt"
index 79c68f1..ca6c496 100644 (file)
@@ -33,7 +33,7 @@ expression *E;
 
 
 @@
-identifier *X;
+idexpression *X;
 statement S;
 @@
 
@@ -42,7 +42,7 @@ statement S;
   S
 
 @@
-identifier *X;
+idexpression *X;
 statement S;
 @@
 
index 3f25182..1399130 100644 (file)
@@ -5,5 +5,4 @@ expression X, Y;
 @@
 
 - kcalloc(1, X, Y)
-
-//=> kmalloc(x, y)
++ kmalloc(X, Y)
index 46e73d0..553fc03 100644 (file)
@@ -37,7 +37,7 @@ statement S;
 - memset((T2)x,0,E1);
 
 @@
-type T, T2;
+type T2;
 type T1;
 T1 *x;
 identifier f,fld;
@@ -55,7 +55,7 @@ statement S;
 - memset((T2)x,0,sizeof(*x));
 
 @@
-type T, T2;
+type T2;
 type T1;
 T1 *x;
 identifier f,fld;
@@ -75,7 +75,7 @@ statement S;
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 @@
-type T, T2;
+type T2;
 expression x;
 identifier f,fld;
 expression E;
@@ -96,7 +96,7 @@ statement S, S1;
   } else S1
 
 @@
-type T, T2;
+type T2;
 type T1;
 T1 *x;
 identifier f,fld;
@@ -118,7 +118,7 @@ statement S, S1;
   } else S1
 
 @@
-type T, T2;
+type T2;
 type T1;
 T1 *x;
 identifier f,fld;
@@ -142,7 +142,7 @@ statement S, S1;
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 @@
-type T, T2;
+type T2;
 type T1;
 identifier x;
 identifier f,fld;
@@ -160,7 +160,7 @@ T1 x =
 - memset((T2)x,0,E1);
 
 @@
-type T, T2;
+type T2;
 type T1;
 identifier x;
 identifier f,fld;
@@ -178,7 +178,7 @@ T1 x =
 - memset((T2)x,0,sizeof(*x));
 
 @@
-type T, T2;
+type T2;
 type T1;
 identifier x;
 identifier f,fld;
@@ -198,7 +198,7 @@ T1 x =
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 @@
-type T, T2;
+type T2;
 type T1;
 identifier x;
 identifier f,fld;
@@ -220,7 +220,7 @@ T1 x =
   } else S1
 
 @@
-type T, T2;
+type T2;
 type T1;
 identifier x;
 identifier f,fld;
@@ -242,7 +242,7 @@ T1 x =
   } else S1
 
 @@
-type T, T2;
+type T2;
 type T1;
 identifier x;
 identifier f,fld;
index a850fa3..36a0a20 100644 (file)
@@ -1,12 +1,13 @@
 @@
-iterator list_for_each;
+iterator name list_for_each;
 statement S;
 expression head;
 struct list_head *pos;
 @@
 - for (pos = head.next; pos != &head; pos = pos->next) 
--  S
-//+ list_for_each(pos, &head) 
++ list_for_each(pos, &head) 
+  S
+
 
 
 @@
@@ -16,8 +17,8 @@ expression head;
 struct list_head *pos;
 @@
 - for (pos = head->next; pos != head; pos = pos->next) 
--  S
-//+ list_for_each(pos, head) 
++ list_for_each(pos, head) 
+  S
 
 
 
index 8bc7dff..fcb4307 100644 (file)
@@ -42,6 +42,7 @@
 
 @ rule1 @
 identifier initfunc;
+declarer name module_init;
 @@
  module_init(initfunc);
  
index 753e55e..857dae4 100644 (file)
@@ -38,7 +38,8 @@ options.pdf: main_options.tex spatch_options.tex   macros_options.tex
        $(PDFLATEX_CMD) options.tex
 
 distclean:: clean
-       rm -f manual.pdf cocci_syntax.pdf options.pdf
+       @if test -z "${KEEP_GENERATED}"; then \
+               rm -f manual.pdf cocci_syntax.pdf options.pdf; fi
 
 
 # lindig trick
@@ -71,7 +72,8 @@ clean::
        rm -f *.aux *.dvi *.haux *.htoc *.log *.out *~
 
 distclean:: clean
-       rm -f *.pdf *.html *.gif *.css
+       @if test -z "${KEEP_GENERATED}"; then \
+               rm -f *.pdf *.html *.gif *.css; fi
 
 check: $(HTML)
        checklink $<
index 157be13..894ddd6 100644 (file)
Binary files a/docs/manual/main_grammar.pdf and b/docs/manual/main_grammar.pdf differ
index 18e9a2d..af10c12 100644 (file)
Binary files a/docs/manual/manual.pdf and b/docs/manual/manual.pdf differ
index bdb4d8d..e9bbef9 100644 (file)
Binary files a/docs/manual/options.pdf and b/docs/manual/options.pdf differ
index 1458739..feca3f1 100644 (file)
@@ -354,7 +354,14 @@ other \#ifdef.}
 
 \normal{-I $\langle$path$\rangle$}{ This option specifies a directory
   in which to find non-local include files.  This option can be used
-  several times.}
+  several times to specify multipls include paths.}
+
+\rare{--include $\langle$file$\rangle$}{ This option give the name of a
+  file to consider as being included in each processed file.  The file is
+  added to the end of the file's list of included files.  The complete path
+  name should be given; the {\bf -I} options are not taken into account to
+  find the file.  This option can be used
+  several times to include multiple files.}
 
 \rare{--relax-include-path}{This option when combined with --all-includes
   causes the search for local
index cb34870..6b1b5b9 100644 (file)
@@ -1,6 +1,6 @@
 .\"  -*- nroff -*-
 .\" Please adjust this date whenever revising the manpage.
-.TH SPATCH 1 "may 17, 2011"
+.TH SPATCH 1 "aug 02, 2012"
 
 .\" see http://www.fnal.gov/docs/products/ups/ReferenceManual/html/manpages.html
 .\" see http://www.linuxjournal.com/article/1158
index 87f6a09..ffe595b 100644 (file)
@@ -75,6 +75,7 @@ OPTOBJS = $(SRC:.ml=.cmx)
 ##############################################################################
 # Top rules
 ##############################################################################
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 all: $(TARGET).cma
 all.opt:
        @$(MAKE) $(TARGET).cmxa BUILD_OPT=yes
@@ -90,7 +91,16 @@ $(TARGET).top: $(OBJS) $(LIBS)
 
 clean::
        rm -f $(TARGET).top
+else
+all:
+       cd .. && $(OCAMLBUILD) engine/engine.cma
 
+all.opt:
+       cd .. && $(OCAMLBUILD) engine/engine.cmxa
+
+clean::
+       cd .. && $(OCAMLBUILD) -clean
+endif
 
 
 ##############################################################################
@@ -126,8 +136,10 @@ distclean: clean
 
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 -include .depend
 endif
 endif
+endif
 
 include ../Makefile.common
index 0de4df3..d770f19 100644 (file)
@@ -116,6 +116,11 @@ let strip x =
     Ast.make_inherited_term (Ast.unwrap (k e)) inh in
   let do_absolutely_nothing r k e = k e in
   let mcode m = Ast.make_mcode(Ast.unwrap_mcode m) in
+  let decl r k d =
+    let res = do_nothing r k d in
+    if Ast.get_safe_decl d
+    then {res with Ast.safe_for_multi_decls = true}
+    else res in
   let rule_elem r k re =
     let res = do_nothing r k re in
     let no_mcode = Ast.CONTEXT(Ast.NoPos,Ast.NOTHING) in
@@ -130,7 +135,7 @@ let strip x =
       mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode mcode
       do_nothing do_nothing do_nothing do_nothing do_nothing
       do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing
-      do_nothing rule_elem do_nothing do_nothing
+      decl rule_elem do_nothing do_nothing
       do_nothing do_absolutely_nothing in
   recursor.V.rebuilder_rule_elem x
 
index 9d70ab1..8476729 100644 (file)
@@ -32,12 +32,12 @@ module B = Ast_c
 
 module F = Control_flow_c
 
-module Flag = Flag_matcher
+module FlagM = Flag_matcher
 
 (*****************************************************************************)
 (* Wrappers *)
 (*****************************************************************************)
-let pr2, pr2_once = Common.mk_pr2_wrappers Flag_matcher.verbose_matcher
+let pr2, pr2_once = Common.mk_pr2_wrappers FlagM.verbose_matcher
 
 let (+++) a b = match a with Some x -> Some x | None -> b
 
@@ -110,7 +110,7 @@ let mcode_contain_plus = function
   | A.CONTEXT _ -> true
   | A.MINUS (_,_,_,A.NOREPLACEMENT) -> false
   | A.MINUS (_,_,_,A.REPLACEMENT _) -> true (* repl is nonempty *)
-  | A.PLUS _ -> raise Impossible
+  | A.PLUS _ -> raise (Impossible 13)
 
 let mcode_simple_minus = function
   | A.MINUS (_,_,_,A.NOREPLACEMENT) -> true
@@ -135,7 +135,7 @@ let generalize_mcode ia =
   let (s1, i, mck, pos) = ia in
   let new_mck =
     match mck with
-    | A.PLUS _ -> raise Impossible
+    | A.PLUS _ -> raise (Impossible 14)
     | A.CONTEXT (A.NoPos,x) ->
        A.CONTEXT (A.DontCarePos,x)
     | A.MINUS   (A.NoPos,inst,adj,x) ->
@@ -144,7 +144,7 @@ let generalize_mcode ia =
     | A.CONTEXT ((A.FixPos _|A.DontCarePos), _)
     | A.MINUS ((A.FixPos _|A.DontCarePos), _, _, _)
         ->
-        raise Impossible
+        raise (Impossible 15)
   in
   (s1, i, new_mck, pos)
 
@@ -316,7 +316,7 @@ let equal_metavarval valu valu' =
       |B.MetaParamListVal _|B.MetaParamVal _|B.MetaExprListVal _
       |B.MetaExprVal _|B.MetaLocalFuncVal _|B.MetaFuncVal _|B.MetaIdVal _
     ), _
-      -> raise Impossible
+      -> raise (Impossible 16)
 
 (* probably only one argument needs to be stripped, because inherited
 metavariables containing expressions are stripped in advance. But don't
@@ -382,7 +382,7 @@ let equal_inh_metavarval valu valu'=
       |B.MetaParamListVal _|B.MetaParamVal _|B.MetaExprListVal _
       |B.MetaExprVal _|B.MetaLocalFuncVal _|B.MetaFuncVal _|B.MetaIdVal _
     ), _
-      -> raise Impossible
+      -> raise (Impossible 17)
 
 
 (*---------------------------------------------------------------------------*)
@@ -477,7 +477,7 @@ let resplit_initialiser ibs iicomma =
       let commas = List.map snd (x::xs) +> List.flatten in
       let commas = commas @ [iicomma] in
       zip elems commas
-  | _ -> raise Impossible
+  | _ -> raise (Impossible 18)
 
 
 
@@ -513,9 +513,9 @@ let structdef_to_struct_name ty =
       | None, _ ->
           ty
 
-      | x -> raise Impossible
+      | x -> raise (Impossible 19)
       )
-  | _ -> raise Impossible
+  | _ -> raise (Impossible 20)
 
 (*---------------------------------------------------------------------------*)
 let one_initialisation_to_affectation x =
@@ -543,7 +543,7 @@ let one_initialisation_to_affectation x =
                     *)
             match !tybis with
             | Some ty_with_typename_completed -> ty_with_typename_completed
-            | None -> raise Impossible
+            | None -> raise (Impossible 21)
           in
 
           let typ = ref (Some (typexp,local), Ast_c.NotTest) in
@@ -670,6 +670,7 @@ module type PARAM =
       (A.expression, B.expression) matcher -> (A.expression, F.node) matcher
 
     val cocciExpExp :
+      A.mcodekind ->
       (A.expression, B.expression) matcher ->
        (A.expression, B.expression) matcher
 
@@ -727,7 +728,7 @@ let tokenf = X.tokenf
 let fail2 () =
   match X.mode with
   | PatternMode -> fail
-  | TransformMode -> raise Impossible
+  | TransformMode -> raise (Impossible 22)
 
 
 let (option: ('a,'b) matcher -> ('a option,'b option) matcher)= fun f t1 t2 ->
@@ -788,7 +789,7 @@ let satisfies_econstraint c exp : bool =
 
 let list_matcher match_dots rebuild_dots match_comma rebuild_comma
     match_metalist rebuild_metalist mktermval special_cases
-    element distrf get_iis = fun eas ebs ->
+    element distrf get_iis lenfilter = fun eas ebs ->
   let rec loop = function
       [], [] -> return ([], [])
     | [], eb::ebs -> fail
@@ -892,7 +893,7 @@ let list_matcher match_dots rebuild_dots match_comma rebuild_comma
                    then fail
                    else
                      let startxs' = Ast_c.unsplit_comma startxs in
-                     let len = List.length  startxs' in
+                     let len = List.length (lenfilter startxs') in
 
                      (match leninfo with
                      | A.MetaListLen (lenname,lenkeep,leninherited) ->
@@ -934,7 +935,7 @@ let list_matcher match_dots rebuild_dots match_comma rebuild_comma
                element ea eb >>= (fun ea eb ->
                  loop (eas, ebs) >>= (fun eas ebs ->
                    return (ea::eas, Left eb::ebs)))
-           | (Right y)::ys -> raise Impossible
+           | (Right y)::ys -> raise (Impossible 23)
            | [] -> fail) in
   loop (eas,ebs)
 
@@ -1375,7 +1376,10 @@ let rec (expression: (A.expression, Ast_c.expression) matcher) =
   | A.NestExpr(starter,exps,ender,None,true), eb ->
       (match A.unwrap exps with
        A.DOTS [exp] ->
-         X.cocciExpExp expression exp eb >>= (fun exp eb ->
+         (* if minus and trafo do nothing *)
+         X.cocciExpExp (A.get_mcodekind starter)
+           expression exp eb >>= (fun exp eb ->
+         (* minus and trafo will do something here *)
           X.distrf_e (dots2metavar starter) eb >>= (fun mcode eb ->
             return (
             (A.NestExpr
@@ -1411,7 +1415,7 @@ let rec (expression: (A.expression, Ast_c.expression) matcher) =
   | A.Ecircles _,    _
   | A.Estars _,    _
       ->
-       raise Impossible
+       raise (Impossible 24)
 
   | A.DisjExpr eas, eb ->
       eas +> List.fold_left (fun acc ea -> acc >|+|> (expression ea eb)) fail
@@ -1604,7 +1608,7 @@ and arguments_bis = fun eas ebs ->
   list_matcher match_dots build_dots match_comma build_comma
     match_metalist build_metalist mktermval
     special_cases argument X.distrf_args
-    Lib_parsing_c.ii_of_args eas ebs
+    Lib_parsing_c.ii_of_args (function x -> x) eas ebs
 
 and argument arga argb =
   X.all_bound (A.get_inherited arga) >&&>
@@ -1696,7 +1700,7 @@ and parameters_bis eas ebs =
   list_matcher match_dots build_dots match_comma build_comma
     match_metalist build_metalist mktermval
     special_cases parameter X.distrf_params
-    Lib_parsing_c.ii_of_params eas ebs
+    Lib_parsing_c.ii_of_params (function x -> x) eas ebs
 
 (*
    let split_register_param = fun (hasreg, idb, ii_b_s) ->
@@ -1758,7 +1762,7 @@ and parameter = fun parama paramb ->
        | None, Some _ -> fail)
   | (A.OptParam _ | A.UniqueParam _), _ ->
       failwith "not handling Opt/Unique for Param"
-  | A.Pcircles (_), ys -> raise Impossible (* in Ordered mode *)
+  | A.Pcircles (_), ys -> raise (Impossible 25) (* in Ordered mode *)
   | _ -> fail
 
 (* ------------------------------------------------------------------------- *)
@@ -1807,7 +1811,7 @@ and (declaration: (A.mcodekind * bool * A.declaration,B.declaration) matcher) =
             (B.DeclList ([var], iiptvirgb::iifakestart::iisto))
           )))
 
-  | _, (B.DeclList (xs, ((iiptvirgb::iifakestart::iisto) as ii))) ->
+  | _, (B.DeclList (xs, (iiptvirgb::iifakestart::iisto))) ->
       let indexify l =
        let rec loop n = function
            [] -> []
@@ -1817,7 +1821,7 @@ and (declaration: (A.mcodekind * bool * A.declaration,B.declaration) matcher) =
          [] -> []
        | x::xs ->
            if n = cur then vl :: xs else x :: (repln n vl (cur+1) xs) in
-      if X.mode =*= PatternMode || A.get_safe_decl decla
+      if !Flag.sgrep_mode2(*X.mode =*= PatternMode *) || A.get_safe_decl decla
       then
         (indexify xs) +> List.fold_left (fun acc (n,var) ->
          (* consider all possible matches *)
@@ -1833,15 +1837,21 @@ and (declaration: (A.mcodekind * bool * A.declaration,B.declaration) matcher) =
                   )))) tin))
           fail
       else
-        error ii
-         "More than one variable in the declaration, and so it cannot be transformed.  Check that there is no transformation on the type or the ;"
+       begin
+         let firstii = iiptvirgb in
+         pr2_once
+           (Printf.sprintf "%s: %d: %s"
+              (Ast_c.file_of_info firstii) (Ast_c.line_of_info firstii)
+              "More than one variable in the declaration, and so it cannot be transformed.  Check that there is no transformation on the type or the ;");
+         fail
+       end
 
   | A.MacroDecl (sa,lpa,eas,rpa,enda), B.MacroDecl ((sb,ebs,true),ii) ->
       let (iisb, lpb, rpb, iiendb, iifakestart, iistob) =
         (match ii with
         | iisb::lpb::rpb::iiendb::iifakestart::iisto ->
             (iisb,lpb,rpb,iiendb, iifakestart,iisto)
-        | _ -> raise Impossible
+        | _ -> raise (Impossible 26)
         ) in
       (if allminus
       then minusize_list iistob
@@ -1871,7 +1881,7 @@ and (declaration: (A.mcodekind * bool * A.declaration,B.declaration) matcher) =
             (match ii with
             | iisb::lpb::rpb::iifakestart::iisto ->
                (iisb,lpb,rpb,iifakestart,iisto)
-            | _ -> raise Impossible) in
+            | _ -> raise (Impossible 27)) in
          (if allminus
          then minusize_list iistob
          else return ((), iistob)) >>=
@@ -1900,7 +1910,7 @@ and (declaration: (A.mcodekind * bool * A.declaration,B.declaration) matcher) =
         (match ii with
         |  iisb::lpb::rpb::weqb::iiendb::iifakestart::iisto ->
             (iisb,lpb,rpb,weqb,iiendb, iifakestart,iisto)
-        |  _ -> raise Impossible
+        |  _ -> raise (Impossible 28)
         ) in
       (if allminus
       then minusize_list iistob
@@ -2013,7 +2023,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
                      },
                        iivirg),iiptvirgb,iistob)
                      )
-                | _ -> raise Impossible
+                | _ -> raise (Impossible 29)
              )
 
           (* do we need EnumName here too? *)
@@ -2042,9 +2052,9 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
                      },
                       iivirg),iiptvirgb,iistob)
                    )
-               | _ -> raise Impossible
+               | _ -> raise (Impossible 30)
              )
-           | _ -> raise Impossible
+           | _ -> raise (Impossible 31)
            )
          | _ -> fail
        )))))
@@ -2181,7 +2191,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
              match fake_typeb with
              | _nQ, ((B.TypeName (nameidb, _typ)), []) ->
                  return (ida, nameidb)
-             | _ -> raise Impossible
+             | _ -> raise (Impossible 32)
            )
 
        | A.TypeName sa ->
@@ -2202,7 +2212,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
                -> raise Todo
            )
 
-       | _ -> raise Impossible
+       | _ -> raise (Impossible 33)
 
        ) >>= (fun ida nameidb ->
          return (
@@ -2237,7 +2247,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) ->
 
    (* only in struct type decls *)
    | A.Ddots(dots,whencode), _ ->
-       raise Impossible
+       raise (Impossible 34)
 
    | A.OptDecl _,    _ | A.UniqueDecl _,     _ ->
        failwith "not handling Opt/Unique Decl"
@@ -2308,7 +2318,7 @@ and (initialiser: (A.initialiser, Ast_c.initialiser) matcher) =  fun ia ib ->
                 (B.InitList ibs, ib1::ib2::iicommaopt)
               ))))
 
-        | _ -> raise Impossible
+        | _ -> raise (Impossible 35)
         )
 
     | (A.StrInitList (allminus, ia1, ias, ia2, []), (B.InitList ibs, ii)) ->
@@ -2323,7 +2333,7 @@ and (initialiser: (A.initialiser, Ast_c.initialiser) matcher) =  fun ia ib ->
                 (B.InitList ibs, ib1::ib2::iicommaopt)
               ))))
 
-        | _ -> raise Impossible
+        | _ -> raise (Impossible 36)
         )
 
     | (A.StrInitList (allminus, i1, ias, i2, whencode),
@@ -2364,7 +2374,7 @@ and (initialiser: (A.initialiser, Ast_c.initialiser) matcher) =  fun ia ib ->
 
 
     | A.IComma(comma), _ ->
-        raise Impossible
+        raise (Impossible 37)
 
     | A.UniqueIni _,_ | A.OptIni _,_ ->
       failwith "not handling Opt/Unique on initialisers"
@@ -2445,7 +2455,6 @@ and ar_initialisers = fun ias (ibs, iicomma) ->
       (List.map (function (elem,comma) -> [Left elem; Right [comma]]) ibs) in
   initialisers_ordered2 ias ibs >>=
   (fun ias ibs_split ->
-
     let ibs,iicomma =
       match List.rev ibs_split with
        (Right comma)::rest -> (Ast_c.unsplit_comma (List.rev rest),comma)
@@ -2476,7 +2485,8 @@ and initialisers_ordered2 = fun ias ibs ->
   let no_ii x = failwith "not possible" in
   list_matcher match_dots build_dots match_comma build_comma
     match_metalist build_metalist mktermval
-    special_cases initialiser X.distrf_inis no_ii ias ibs
+    special_cases initialiser X.distrf_inis no_ii
+    (function x -> x) ias ibs
 
 and initialisers_unordered2 = fun allminus ias ibs ->
   match ias, ibs with
@@ -2514,7 +2524,7 @@ and initialiser_comma (x,xcomma) (y, commay) =
           return (
           (x, (A.IComma commax) +> A.rewrap xcomma),
           (y, commay))))
-  | _ -> raise Impossible (* unsplit_iicomma wrong *)
+  | _ -> raise (Impossible 38) (* unsplit_iicomma wrong *)
 
 (* ------------------------------------------------------------------------- *)
 and (struct_fields: (A.declaration list, B.field list) matcher) =
@@ -2546,9 +2556,20 @@ and (struct_fields: (A.declaration list, B.field list) matcher) =
     let startxs = unmake_ebs startxs in
     X.distrf_struct_fields mcode startxs >>=
     (fun mcode startxs -> return (mcode,make_ebs startxs)) in
+  let filter_fields l =
+    List.filter
+      (function x ->
+       match Ast_c.unwrap x with
+         Ast_c.DeclarationField fld -> true
+       | Ast_c.EmptyField info -> true
+       | Ast_c.MacroDeclField decl -> true
+       | Ast_c.CppDirectiveStruct cpp -> false
+       | Ast_c.IfdefStruct ifdef -> false)
+      l in
   list_matcher match_dots build_dots match_comma build_comma
     match_metalist build_metalist mktermval
-    special_cases struct_field distrf no_ii eas (make_ebs ebs) >>=
+    special_cases struct_field distrf no_ii
+    filter_fields eas (make_ebs ebs) >>=
   (fun eas ebs -> return (eas,unmake_ebs ebs))
 
 and (struct_field: (A.declaration, B.field) matcher) = fun fa fb ->
@@ -2567,7 +2588,7 @@ and (struct_field: (A.declaration, B.field) matcher) = fun fa fb ->
     let iiptvirgb = tuple_of_list1 iiptvirg in
 
     (match onefield_multivars with
-    | [] -> raise Impossible
+    | [] -> raise (Impossible 39)
     | [onevar,iivirg] ->
       assert (null iivirg);
       (match onevar with
@@ -2612,7 +2633,7 @@ and (struct_field: (A.declaration, B.field) matcher) = fun fa fb ->
                         (B.FieldDeclList ([onevar, iivirg], [iiptvirgb])))
                     )
                   )
-              | _ -> raise Impossible
+              | _ -> raise (Impossible 40)
             )
       )
 
@@ -2649,7 +2670,7 @@ and enum_fields = fun eas ebs ->
   list_matcher match_dots build_dots match_comma build_comma
     match_metalist build_metalist mktermval
     special_cases enum_field X.distrf_enum_fields
-    Lib_parsing_c.ii_of_enum_fields eas ebs
+    Lib_parsing_c.ii_of_enum_fields (function x -> x) eas ebs
 
 and enum_field ida idb =
   X.all_bound (A.get_inherited ida) >&&>
@@ -2712,7 +2733,7 @@ and (fullType: (A.fullType, Ast_c.fullType) matcher) =
            | false, true -> fail
            | true, false -> do_stuff ()
            | true, true ->
-               if !Flag.show_misc
+               if !FlagM.show_misc
                then pr2_once "USING optional_qualifier builtin isomorphism";
                do_stuff()
            )
@@ -2867,7 +2888,7 @@ and simulate_signed ta basea stringsa signaopt tb baseb ii rebuilda =
                (rebuilda ([stringa], signaopt)) +> A.rewrap ta,
                (B.BaseType (baseb), iisignbopt ++ [ibaseb])
                )))
-          | _ -> raise Impossible
+          | _ -> raise (Impossible 41)
 
           )
 
@@ -2885,7 +2906,7 @@ and simulate_signed ta basea stringsa signaopt tb baseb ii rebuilda =
               )))))
          | [ibase1b;ibase2b] -> fail (* int omitted *)
          | [] -> fail (* should something be done in this case? *)
-         | _ -> raise Impossible)
+         | _ -> raise (Impossible 42))
 
 
       | A.LongLongType, B.IntType (B.Si (_, B.CLongLong))
@@ -2905,7 +2926,7 @@ and simulate_signed ta basea stringsa signaopt tb baseb ii rebuilda =
          | [ibase1b] -> fail (* short or long *)
          | [ibase1b;ibase2b;ibase3b] -> fail (* long long case *)
          | [] -> fail (* should something be done in this case? *)
-         | _ -> raise Impossible)
+         | _ -> raise (Impossible 43))
 
       | _, (B.Void|B.FloatType _|B.IntType _
            |B.SizeType|B.SSizeType|B.PtrDiffType) -> fail
@@ -2977,7 +2998,7 @@ and (typeC: (A.typeC, Ast_c.typeC) matcher) =
         | [], B.IntType (B.Si (_sign, B.CInt)) ->
             sign (Some signa) signbopt >>= (fun signaopt iisignbopt ->
               match signaopt with
-              | None -> raise Impossible
+              | None -> raise (Impossible 45)
               | Some signa ->
                   return (
                     (A.SignedT (signa,None)) +> A.rewrap ta,
@@ -3156,7 +3177,7 @@ and (typeC: (A.typeC, Ast_c.typeC) matcher) =
                match fake_su with
                | _nQ, (B.StructUnionName (sub, sb), [iisub;iisb]) ->
                    return (ty,  [iisub; iisb])
-               | _ -> raise Impossible)
+               | _ -> raise (Impossible 46))
         | _ -> fail in
 
        process_type
@@ -3255,7 +3276,7 @@ and (typeC: (A.typeC, Ast_c.typeC) matcher) =
                match fake_su with
                | _nQ, (B.EnumName sb, [iisub;iisb]) ->
                    return (ty,  [iisub; iisb])
-               | _ -> raise Impossible)
+               | _ -> raise (Impossible 47))
         | _ -> fail in
 
        process_type
@@ -3340,7 +3361,7 @@ and storage_optional_allminus allminus stoa (stob, iistob) =
       | false, _ -> fail
       | true, B.NoSto -> do_minus ()
       | true, _ ->
-          if !Flag.show_misc
+          if !FlagM.show_misc
           then pr2_once "USING optional_storage builtin isomorphism";
           do_minus()
       )
@@ -3383,7 +3404,7 @@ and inline_optional_allminus allminus inla (stob, iistob) =
        if optional_storage
        then
          begin
-           if !Flag.show_misc
+           if !FlagM.show_misc
             then pr2_once "USING optional_storage builtin isomorphism";
             do_minus()
          end
@@ -3677,7 +3698,8 @@ and define_paramsbis = fun eas ebs ->
   let no_ii x = failwith "not possible" in
   list_matcher match_dots build_dots match_comma build_comma
     match_metalist build_metalist mktermval
-    special_cases define_parameter X.distrf_define_params no_ii eas ebs
+    special_cases define_parameter X.distrf_define_params no_ii
+    (function x -> x) eas ebs
 
 and define_parameter = fun parama paramb ->
   match A.unwrap parama, paramb with
@@ -3687,7 +3709,7 @@ and define_parameter = fun parama paramb ->
         return ((A.DParam ida)+> A.rewrap parama,(idb, [ib1])))
   | (A.OptDParam _ | A.UniqueDParam _), _ ->
       failwith "handling Opt/Unique for define parameters"
-  | A.DPcircles (_), ys -> raise Impossible (* in Ordered mode *)
+  | A.DPcircles (_), ys -> raise (Impossible 48) (* in Ordered mode *)
   | _ -> fail
 
 (*****************************************************************************)
@@ -3981,7 +4003,7 @@ let rec (rule_elem_node: (A.rule_elem, Control_flow_c.node) matcher) =
                            ioparenb::icparenb::iifakestart::iistob)
                 )
               )))))))))
-      | _ -> raise Impossible
+      | _ -> raise (Impossible 49)
       )
 
   | A.Decl (mckstart,allminus,decla), F.Decl declb ->
index c63c50c..49aa95f 100644 (file)
@@ -168,6 +168,7 @@ module type PARAM =
       (Ast_cocci.expression, Control_flow_c.node) matcher
 
     val cocciExpExp :
+      Ast_cocci.mcodekind ->
       (Ast_cocci.expression, Ast_c.expression) matcher ->
       (Ast_cocci.expression, Ast_c.expression) matcher
 
index 558eb10..3758d0a 100644 (file)
@@ -445,7 +445,7 @@ let (satbis_to_trans_info:
          ::prev
             (* see BindGood in asttotctl2 *)
       | Lib_engine.BindGood (_) -> prev
-      | _ -> raise Impossible
+      | _ -> raise (Impossible 50)
     ) []
 
 (*****************************************************************************)
diff --git a/engine/engine.mldylib b/engine/engine.mldylib
new file mode 100644 (file)
index 0000000..6f4411f
--- /dev/null
@@ -0,0 +1,18 @@
+Asttoctl2
+Asttomember
+C_vs_c
+Check_exhaustive_pattern
+Check_reachability
+Cocci_vs_c
+Ctlcocci_integration
+Ctltotex
+Externalanalysis
+Flag_engine
+Flag_matcher
+Isomorphisms_c_c
+Lib_engine
+Lib_matcher_c
+Pattern_c
+Postprocess_transinfo
+Pretty_print_engine
+Transformation_c
diff --git a/engine/engine.mllib b/engine/engine.mllib
new file mode 100644 (file)
index 0000000..6f4411f
--- /dev/null
@@ -0,0 +1,18 @@
+Asttoctl2
+Asttomember
+C_vs_c
+Check_exhaustive_pattern
+Check_reachability
+Cocci_vs_c
+Ctlcocci_integration
+Ctltotex
+Externalanalysis
+Flag_engine
+Flag_matcher
+Isomorphisms_c_c
+Lib_engine
+Lib_matcher_c
+Pattern_c
+Postprocess_transinfo
+Pretty_print_engine
+Transformation_c
similarity index 97%
rename from engine/asttoctl.ml
rename to engine/obsolete/asttoctl.ml
index d9431e3..b96942d 100644 (file)
@@ -1,30 +1,3 @@
-(*
- * Copyright 2012, INRIA
- * Julia Lawall, Gilles Muller
- * Copyright 2010-2011, INRIA, University of Copenhagen
- * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix
- * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen
- * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
- * This file is part of Coccinelle.
- *
- * Coccinelle is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, according to version 2 of the License.
- *
- * Coccinelle is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Coccinelle.  If not, see <http://www.gnu.org/licenses/>.
- *
- * The authors reserve the right to distribute this or future versions of
- * Coccinelle under other licenses.
- *)
-
-
-# 0 "./asttoctl.ml"
 (* true = don't see all matched nodes, only modified ones *)
 let onlyModif = ref true(*false*)
 (* set to true for line numbers in the output of ctl_engine *)
similarity index 81%
rename from engine/sgrep.ml
rename to engine/obsolete/sgrep.ml
index 0b6d50c..3d26379 100644 (file)
@@ -1,30 +1,3 @@
-(*
- * Copyright 2012, INRIA
- * Julia Lawall, Gilles Muller
- * Copyright 2010-2011, INRIA, University of Copenhagen
- * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix
- * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen
- * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
- * This file is part of Coccinelle.
- *
- * Coccinelle is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, according to version 2 of the License.
- *
- * Coccinelle is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Coccinelle.  If not, see <http://www.gnu.org/licenses/>.
- *
- * The authors reserve the right to distribute this or future versions of
- * Coccinelle under other licenses.
- *)
-
-
-# 0 "./sgrep.ml"
 (* no longer used *)
 
 type marker =
index 1bd8773..b46c0a2 100644 (file)
@@ -189,7 +189,7 @@ module XMATCH = struct
 
   (* same as cocciExp, but for expressions in an expression, not expressions
      in a node *)
-  let cocciExpExp = fun expf expa expb -> fun tin ->
+  let cocciExpExp = fun expf expa expb -> fun tin ->
 
     let globals = ref [] in
     let bigf = {
index bdce849..23e8fe0 100644 (file)
@@ -159,7 +159,10 @@ module XTRANS = struct
 
   (* same as cocciExp, but for expressions in an expression, not expressions
      in a node *)
-  let cocciExpExp = fun expf expa expb -> fun tin ->
+  let cocciExpExp = fun mc expf expa expb -> fun tin ->
+    match mc with
+      Ast_cocci.MINUS _ -> Some (expa,expb) (* do nothing *)
+    | _ ->
 
     let bigf = {
       Visitor_c.default_visitor_c_s with
@@ -202,7 +205,7 @@ module XTRANS = struct
   (* ------------------------------------------------------------------------*)
    let check_pos info mck pos =
      match mck with
-     | Ast_cocci.PLUS _ -> raise Impossible
+     | Ast_cocci.PLUS _ -> raise (Impossible 51)
      | Ast_cocci.CONTEXT (Ast_cocci.FixPos (i1,i2),_)
      | Ast_cocci.MINUS   (Ast_cocci.FixPos (i1,i2),_,_,_) ->
          pos <= i2 && pos >= i1
@@ -288,7 +291,7 @@ module XTRANS = struct
         mck
     in
     (match mck, Ast_c.pinfo_of_info ib with
-    | _,                  Ast_c.AbstractLineTok _ -> raise Impossible
+    | _,                  Ast_c.AbstractLineTok _ -> raise (Impossible 52)
     | Ast_cocci.MINUS(_), Ast_c.ExpandedTok _ ->
         failwith
          (Printf.sprintf
@@ -496,7 +499,7 @@ module XTRANS = struct
             ) expr
 
         )
-    | Ast_cocci.PLUS _ -> raise Impossible
+    | Ast_cocci.PLUS _ -> raise (Impossible 53)
 
 
   (* use new strategy, collect ii, sort, recollect and tag *)
@@ -573,7 +576,7 @@ module XTRANS = struct
 
    let get_pos mck =
      match mck with
-     | Ast_cocci.PLUS _ -> raise Impossible
+     | Ast_cocci.PLUS _ -> raise (Impossible 54)
      | Ast_cocci.CONTEXT (Ast_cocci.FixPos (i1,i2),_)
      | Ast_cocci.MINUS   (Ast_cocci.FixPos (i1,i2),_,_,_) ->
          Ast_cocci.FixPos (i1,i2)
@@ -599,7 +602,7 @@ module XTRANS = struct
       | Ast_cocci.DontCarePos -> true
       | Ast_cocci.FixPos (i1, i2) ->
           i1 =*= min && i2 =*= max
-      | _ -> raise Impossible
+      | _ -> raise (Impossible 55)
       )
 
     then
@@ -694,7 +697,7 @@ module TRANS  = Cocci_vs_c.COCCI_VS_C (XTRANS)
 
 let transform_re_node a b tin =
   match TRANS.rule_elem_node a b tin with
-  | None -> raise Impossible
+  | None -> raise (Impossible 56)
   | Some (_sp, b') -> b'
 
 let (transform2: string (* rule name *) -> string list (* dropped_isos *) ->
index b0cf223..b7a2c7f 100644 (file)
@@ -24,6 +24,7 @@ OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDES)
 OBJS = $(SOURCES:.ml=.cmo)
 OPTOBJS = $(SOURCES:.ml=.cmx)
 
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 all: $(TARGET).cma
 
 all.opt:
@@ -46,6 +47,17 @@ $(TARGET).top: $(OBJS) $(LIBS)
 
 clean::
        rm -f $(TARGET).byte $(TARGET).opt rm -f $(TARGET).top
+else
+all:
+       cd .. && $(OCAMLBUILD) extra/extra.cma
+
+all.opt:
+       cd .. && $(OCAMLBUILD) extra/extra.cmxa
+
+clean::
+       cd .. && $(OCAMLBUILD) -clean
+endif
+
 
 .SUFFIXES: .ml .mli .cmo .cmi .cmx
 
@@ -72,8 +84,10 @@ distclean: clean
 
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 -include .depend
 endif
 endif
+endif
 
 include ../Makefile.common
diff --git a/extra/extra.mldylib b/extra/extra.mldylib
new file mode 100644 (file)
index 0000000..aff25e9
--- /dev/null
@@ -0,0 +1,3 @@
+Classic_patch
+Kbuild
+Maintainers
diff --git a/extra/extra.mllib b/extra/extra.mllib
new file mode 100644 (file)
index 0000000..aff25e9
--- /dev/null
@@ -0,0 +1,3 @@
+Classic_patch
+Kbuild
+Maintainers
index 6f3ce54..c504d4b 100644 (file)
@@ -177,7 +177,7 @@ let check_up_to_date a b  =
       optionise (fun () -> List.assoc dir das),
       optionise (fun () -> List.assoc dir dbs)
     with
-    | None, None -> raise Impossible
+    | None, None -> raise (Impossible 57)
     | None, Some gbs -> pr2 ("new directory appeared:" ^ dir)
     | Some gas, None -> pr2 ("old directory disappeared:" ^ dir)
     | Some gas, Some gbs ->
@@ -186,7 +186,7 @@ let check_up_to_date a b  =
         let all_files = afiles $+$ bfiles in
         all_files +> List.iter (fun file ->
           match List.mem file afiles, List.mem file bfiles with
-          | false, false -> raise Impossible
+          | false, false -> raise (Impossible 58)
           | false, true -> pr2 ("new file appeared:" ^ file ^ " in " ^ dir)
           | true, false -> pr2 ("old file disappeared:" ^ file  ^ " in " ^ dir)
           | true, true -> ()
index bc70d53..f8878f7 100644 (file)
@@ -67,6 +67,8 @@ let include_path = ref ([] : string list)
 
 let relax_include_path = ref false
 
+let extra_includes = ref ([] : string list)
+
 let timeout = ref (None : int option)
 
 let worth_trying_opt = ref true
index e0d2d9d..42e8a6a 100644 (file)
@@ -55,6 +55,7 @@ OPTOBJS= $(SRC:.ml=.cmx)
 ##############################################################################
 # Top rules
 ##############################################################################
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 all: $(TARGET).cma
 
 all.opt:
@@ -65,6 +66,16 @@ $(TARGET).cma: $(LIBS) $(OBJS)
 
 $(TARGET).cmxa: $(LIBS:.cma=.cmxa) $(OPTOBJS)
        $(OCAMLOPT_CMD) -a -o $(TARGET).cmxa $(OPTOBJS)
+else
+all:
+       cd .. && $(OCAMLBUILD) globals/globals.cma
+
+all.opt:
+       cd .. && $(OCAMLBUILD) globals/globals.cmxa
+
+clean:
+       cd .. && $(OCAMLBUILD) -clean
+endif
 
 ##############################################################################
 # Developer rules
@@ -94,8 +105,10 @@ distclean: clean
 
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 -include .depend
 endif
 endif
+endif
 
 include ../Makefile.common
diff --git a/globals/globals.mldylib b/globals/globals.mldylib
new file mode 100644 (file)
index 0000000..635abfc
--- /dev/null
@@ -0,0 +1,4 @@
+Config
+Flag
+Iteration
+Regexp
diff --git a/globals/globals.mllib b/globals/globals.mllib
new file mode 100644 (file)
index 0000000..635abfc
--- /dev/null
@@ -0,0 +1,4 @@
+Config
+Flag
+Iteration
+Regexp
index 34c0c3c..9d4412f 100644 (file)
@@ -96,8 +96,9 @@ Note: The test target is intended for developers. In particular, you
       should not expect that every test will pass.
 
 In order to use the OCaml scripting feature in SmPL, you must compile
-Coccinelle with at least OCaml version 3.11.
-
+Coccinelle with at least OCaml version 3.11. An extra file, coccilib.cmi,
+is produced and installed in /usr/share/cocci/ocaml, which is needed for
+the compilation of ocaml scripts.
 
 
  ** Bash integration **
diff --git a/main.ml b/main.ml
index 6ff9dac..0e0f999 100644 (file)
--- a/main.ml
+++ b/main.ml
@@ -313,10 +313,10 @@ let short_options = [
   "    For integration in a toolchain (must be set before the first unknown option)";
   "--include-headers", Arg.Set include_headers,
   "    process header files independently";
-  "-I",   Arg.String (fun x ->
-                       FC.include_path:= x::!FC.include_path
-                    ),
-  "  <dir> containing the header files (optional)";
+  "-I",   Arg.String (fun x -> FC.include_path:= x::!FC.include_path),
+  "  <dir> containing the header files";
+  "--include", Arg.String (fun x -> FC.extra_includes:=x::!FC.extra_includes),
+  "  file to consider as being included";
 
   "--preprocess", Arg.Set preprocess,
   " run the C preprocessor before applying the semantic match";
@@ -719,7 +719,7 @@ let rec arg_parse_no_fail l f msg =
     | Arg.Bad emsg ->
        arg_parse_no_fail l f msg
     | Arg.Help msg -> (* printf "%s" msg; exit 0; *)
-       raise Impossible  (* -help is specified in speclist *)
+       raise (Impossible 165)  (* -help is specified in speclist *)
 
 (* copy paste of Arg.parse. Don't want the default -help msg *)
 let arg_parse2 l f msg argv =
@@ -738,7 +738,7 @@ let arg_parse2 l f msg argv =
       else
        arg_parse_no_fail l f msg;
   | Arg.Help msg -> (* printf "%s" msg; exit 0; *)
-      raise Impossible  (* -help is specified in speclist *)
+      raise (Impossible 166)  (* -help is specified in speclist *)
   )
 
 
@@ -871,24 +871,24 @@ let rec main_action xs =
          
           let infiles =
             Common.profile_code "Main.infiles computation" (fun () ->
-             match !dir, !kbuild_info, !Flag.scanner with
+             match !dir, !kbuild_info, !Flag.scanner, xs with
             (* glimpse *)
-              | false, _, (Flag.Glimpse|Flag.IdUtils) -> [x::xs]
-              | true, s, (Flag.Glimpse|Flag.IdUtils) when s <> "" ->
+              | false, _, (Flag.Glimpse|Flag.IdUtils), _ -> [x::xs]
+              | true, s, (Flag.Glimpse|Flag.IdUtils), _ when s <> "" ->
                   failwith
-                   "-use_glimpse or -id_utils does not work with -kbuild"
-              | true, "", Flag.Glimpse ->
-                  (if not (null xs)
-                  then failwith "-use_glimpse can accept only one dir");
+                   "--use-glimpse or --id-utils does not work with --kbuild"
+              | true, "", Flag.Glimpse, [] ->
+                  (*if not (null xs)
+                  then failwith "--use-glimpse can accept only one dir"*)
                  
                   let files =
                    match glimpse_filter (!cocci_file, !Config.std_iso) x with
                      None -> get_files x
                    | Some files -> files in
                   files +> List.map (fun x -> [x])
-              | true, "", Flag.IdUtils ->
-                  (if not (null xs)
-                  then failwith "-id_utils can accept only one dir");
+              | true, "", Flag.IdUtils, [] ->
+                  (*if not (null xs)
+                  then failwith "--id-utils can accept only one dir"*)
                  
                   let files =
                    match idutils_filter (!cocci_file, !Config.std_iso) x with
@@ -896,12 +896,12 @@ let rec main_action xs =
                    | Some files -> files in
                   files +> List.map (fun x -> [x])
                   (* normal *)
-             | false, _, _ -> [x::xs]
-             | true, "", _ ->
+             | false, _, _, _ -> [x::xs]
+             | true, "", _, _ ->
                  get_files (join " " (x::xs)) +> List.map (fun x -> [x])
                    
             (* kbuild *)
-             | true, kbuild_info_file,_ ->
+             | true, kbuild_info_file,_,_ ->
                  let dirs =
                     Common.cmd_to_list ("find "^(join " " (x::xs))^" -type d")
                   in
diff --git a/myocamlbuild.ml b/myocamlbuild.ml
new file mode 100644 (file)
index 0000000..22760af
--- /dev/null
@@ -0,0 +1,297 @@
+# 2 "myocamlbuild.ml.in"
+
+(*
+ * This file is a plugin that provides the needed customization of
+ * calls to the ocaml compiler needed for components of coccinelle.
+ * The classification of particular components is done by tags, which
+ * are specified in the _tags file.
+ *
+ * This file is also a compromise: some aspects of coccocinelle's
+ * build process are somehwat complicated due to packaging some
+ * bundled software, having no requirement on ocamlfind, etc.
+ * We therefore let 'configure' find out the configuration and
+ * paths to tools and libraries, and this plugin is transformed
+ * by that configuration to customize ocamlbuild accordingly.
+ *)
+
+(* Some useful commandline arguments to ocamlbuild are:
+ *   -yaccflag -v      verbose ocamlyacc and menhir output
+ *   -classic-display  see the individual build steps
+ *   -j 0              parallel building
+ *   -tag "-custom"    pure bytecode building
+ *   -tag "-dtypes"    no type annotation generation
+ *)
+
+
+(* Configuration of this build plugin
+ *)
+
+let ocamlc_path     = "/usr/bin/ocamlc.opt"
+let ocamlopt_path   = "/usr/bin/ocamlopt.opt"
+let ocamldep_path   = "/usr/bin/ocamldep"
+let ocamldoc_path   = "/usr/bin/ocamldoc"
+let ocamlyacc_path  = "/usr/bin/ocamlyacc"
+let ocamllex_path   = "/usr/bin/ocamllex.opt"
+let ocamlmklib_path = "/usr/bin/ocamlmklib"
+let ocamlmktop_path = "/usr/bin/ocamlmktop"
+let camlp4o_path    = "/usr/bin/camlp4o"
+let menhir_path     = "/usr/bin/menhir"
+
+let pycaml_path     = ""
+let pcre_path       = ""
+let menhirLib_path  = "/home/jll/coccinelle-release/bundles/menhirLib/"
+let dynlink_path    = "/usr/lib/ocaml"
+
+let pcre_cflags     = ""
+let pcre_ldflags    = ""
+let python_cflags   = ""
+let python_ldflags  = ""
+let python_major_version = ""
+
+let profiling_modules = ""
+
+
+(* The plugin code starts here. *)
+open Ocamlbuild_plugin
+open Command
+
+(* Removes double separators and single dots from
+ * a path. It does not resolve symlinks or turn
+ * relative paths in absolute paths.
+ *)
+let rec normalize_path path =
+  let parent = Pathname.dirname path in
+  if Pathname.equal path "/" || Pathname.equal parent "/" || Pathname.equal parent path
+  then path
+  else let name = Pathname.basename path in
+       if Pathname.equal name "."
+       then normalize_path parent
+       else normalize_path parent / name
+
+(* Makes path relative and implicit, if it is a child of the
+ * current directory. Relative paths are a must when dealing
+ * with the build directory.
+ * Todo: find out if there is a library function for
+ * exactly this purpose.
+ *)
+let relative_path path =
+  let current = normalize_path Pathname.pwd in
+  let target = normalize_path path in
+  if Pathname.is_prefix current target
+  then let len_current = String.length current in
+       let len_target = String.length target in
+       if len_current == len_target
+       then "."
+       else let len_tail = len_target - len_current - 1 in
+            let ind_tail = len_current + 1 in
+           String.sub target ind_tail len_tail
+  else target
+
+let add_flags flag_ref flags =
+  flag_ref := List.append flags !flag_ref
+
+
+let mk_use_tag name = "use_" ^ name
+
+
+(* Sets up a tag for compiling c and library files against
+ * an external c library.
+ *)
+let setup_clib name compile_flags link_flags =
+  let tag = mk_use_tag name in
+  flag [tag; "c"; "compile"] (S[A "-ccopt"; A compile_flags]);
+  flag [tag; "c"; "ocamlmklib"] (S[A "-ldopt"; A link_flags]);
+  flag [tag; "ocaml"; "link"] (S[A "-ccopt"; A compile_flags]);
+  flag [tag; "ocaml"; "link"] (S[A "-ccopt"; A link_flags])
+
+(* Sets up a tag for declaring a dependency on a stubs library,
+ * and linking it in. The dependency includes both a .a archive
+ * and a .so dll.
+ *)
+let setup_stubs name stubs_dir =
+  let tag     = mk_use_tag name in
+  let path_a  = Printf.sprintf "%s/lib%s_stubs.a" stubs_dir name in
+  if not (Pathname.exists path_a) then
+    dep [tag; "link"; "ocaml"] [path_a];
+  let stubs_arg = Printf.sprintf "-l%s_stubs" name in
+  flag [tag; "ocaml"; "link"; "byte"]
+    (S[A "-I"; P stubs_dir; A "-dllib"; A stubs_arg; A "-cclib"; A stubs_arg]);
+  flag [tag; "ocaml"; "link"; "native"]
+    (S[A "-I"; P stubs_dir; A "-cclib"; A stubs_arg]);
+  flag [tag; "ocaml"; "doc"]
+    (S[A "-I"; P stubs_dir])
+
+(* The use of bundled software is simply the
+ * inclusion of the appropriate source directory.
+ * The build system can find automatically how to
+ * deal with the bundled sources.
+ *)
+let setup_bundle rootdir =
+  tag_file rootdir ["include"; "traverse"]
+
+(* Sets up a tag that adds the given module directory and module
+ * as additional argument to ocaml when it processes a
+ * file with that tag.
+ * Todo: it may be beneficial to add a dependency on the target
+ * module.
+ *)
+let setup_module name modname rootdir =
+  let tag = mk_use_tag name in
+  let link_args isNative = S [A "-I"; P rootdir; A (modname isNative) ] in
+  let compile_args = S [A "-I"; P rootdir] in
+  flag [tag; "ocaml"; "compile"] compile_args;
+  flag [tag; "ocaml"; "byte"; "link"; "program"]   (link_args false);
+  flag [tag; "ocaml"; "native"; "link"; "program"] (link_args true);
+  flag [tag; "ocaml"; "doc"] (S[A "-I"; P rootdir])
+
+(* Sets up the use of either a bundled source package or precompiled module. *)
+let setup_package name modname rootdir =
+  let exists_path isNative = Pathname.exists (rootdir / modname isNative) in
+  let is_binary = exists_path false || exists_path true in
+  if is_binary
+  then setup_module name modname rootdir
+  else setup_bundle rootdir
+
+
+(* Most files depend on these standard modules, hence we setup a
+ * single tag for them.
+ * This setup routine should be called before the others to ensure
+ * that these modules appear first on the ocaml commandlines.
+ *)
+let setup_basic_libs use_dynlink =
+  ocaml_lib ~extern:true ~tag_name:"use_base" "unix";
+  ocaml_lib ~extern:true ~tag_name:"use_base" "str";
+  ocaml_lib ~extern:true ~tag_name:"use_base" "nums";
+  ocaml_lib ~extern:true ~tag_name:"use_base" "bigarray";
+  if use_dynlink then
+    ocaml_lib ~extern:true ~tag_name:"use_base" "dynlink";
+  ()
+
+(* The menhir package provides individual object files
+ * instead of an archive.
+ *)
+let setup_menhirLib () =
+  let menhirLib_dir = relative_path menhirLib_path in
+  let modname isNative = match isNative with
+        true  -> "menhirLib.cmx"
+      | false -> "menhirLib.cmo" in
+
+  setup_package "menhirLib" modname menhirLib_dir
+
+(* Pycaml is a stubs library with some conditional
+ * code that depends on the python version. We
+ * additionally introduce a tag pp_pycaml which
+ * runs the appropriate preprocessors.
+ *)
+let setup_pycaml () =
+  let pycaml_dir = relative_path pycaml_path in
+  let modname isNative = match isNative with
+        true  -> "pycaml.cmxa"
+      | false -> "pycaml.cma" in
+
+  setup_package "pycaml" modname pycaml_dir;
+  setup_stubs "pycaml" pycaml_dir;
+  setup_clib "pycaml" python_cflags python_ldflags;
+
+  let macrodef = Printf.sprintf "-D PYMAJOR%s" python_major_version in
+  flag ["pp_pycaml"; "c"; "compile"] (S[A "-ccopt"; A macrodef]);
+  let camlp4cmd = Printf.sprintf "%s -parser Camlp4MacroParser -D PYMAJOR%s"
+    camlp4o_path python_major_version in
+  flag ["pp_pycaml"; "ocaml"; "pp"] (Sh camlp4cmd)
+
+(* Pcre is a standard stub library. *)
+let setup_pcre () =
+  let pcre_dir = relative_path pcre_path in
+  let modname isNative = match isNative with
+        true  -> "pcre.cmxa"
+      | false -> "pcre.cma" in
+
+  setup_package "pcre" modname pcre_dir;
+  setup_stubs "pcre" pcre_dir;
+  setup_clib "pcre" pcre_cflags pcre_ldflags
+
+(* Some utility code on strings and paths. *)
+let any_non_space str =
+  let have_non_space = ref false in
+  String.iter begin
+    fun c -> match c with
+        ' '  -> ()
+      | '\t' -> ()
+      | _    -> have_non_space := true
+    end str;
+  !have_non_space
+
+let not_empty str =
+  String.length str > 0 && any_non_space str
+
+let is_path_configured path =
+  not_empty path && Pathname.exists path
+
+(* Note: the setup of the modules is done before the hygiene phase
+ * in order to benefit from additional "include" tags that may be
+ * given to directories.
+ *)
+let _ = dispatch begin
+  function
+    | Before_options ->
+        Options.hygiene      := true;
+        Options.sanitize     := true;
+        Options.make_links   := false;
+        Options.catch_errors := true;
+       Options.use_menhir   := true;
+
+       let menhir_wrapper = Printf.sprintf
+          "%s/setup/wrapper-menhir.sh" Pathname.pwd in
+        Options.ocamlc       := Sh ocamlc_path;
+       Options.ocamlopt     := Sh ocamlopt_path;
+       Options.ocamldep     := Sh ocamldep_path;
+       Options.ocamldoc     := Sh ocamldoc_path;
+       Options.ocamlyacc    := S[P menhir_wrapper; P ocamlyacc_path; P menhir_path];
+       Options.ocamllex     := Sh ocamllex_path;
+       Options.ocamlmklib   := Sh ocamlmklib_path;
+       Options.ocamlmktop   := Sh ocamlmktop_path;
+        ()
+
+    | Before_hygiene ->
+       let use_dynlink = is_path_configured dynlink_path in
+       setup_basic_libs use_dynlink;
+
+       if is_path_configured menhirLib_path then
+          setup_menhirLib ();
+
+       if is_path_configured pcre_path then
+          setup_pcre ();
+
+        if is_path_configured pycaml_path then
+          setup_pycaml ();
+        ()
+
+    | After_rules ->
+       (* produces a slightly faster native version *)
+       (* flag ["ocaml"; "compile"; "native"] (A "-unsafe"); *)
+
+       (* adds debugging info (including exception backtraces) *)
+       flag ["ocaml"; "compile"] (A "-g");
+
+       (* flags to parameterize ocamldoc to produce web pages *)
+       flag ["gen_html"; "ocaml"; "doc"]
+         (S [A "-colorize-code"; A "-short-functors"; A "-all-params"]);
+        flag ["gen_man"; "ocaml"; "doc"]
+         (S [A "-man"; A "-man-mini"]);
+
+       (* when profiling, link with profiling.cmo *)
+       if not_empty profiling_modules then
+          flag ["ocaml"; "link"; "byte"]
+           (S [A profiling_modules]);
+
+       (* the warning about unused function arguments are disabled
+         * for files with this tag. *)
+       flag ["nowarn20"; "ocaml"; "compile"] (S [A "-w"; A "-20"]);
+
+       (* adds the custom option, unless 'nocustom' is given as a tag *)
+       if not (Tags.mem "nocustom" (tags_of_pathname "myocamlbuild.ml"))
+       then flag ["ocaml"; "link"; "byte"] (A "-custom");
+       ()
+
+    | _ -> ()
+end
diff --git a/myocamlbuild.ml.in b/myocamlbuild.ml.in
new file mode 100644 (file)
index 0000000..02a3dc3
--- /dev/null
@@ -0,0 +1,297 @@
+# 2 "myocamlbuild.ml.in"
+
+(*
+ * This file is a plugin that provides the needed customization of
+ * calls to the ocaml compiler needed for components of coccinelle.
+ * The classification of particular components is done by tags, which
+ * are specified in the _tags file.
+ *
+ * This file is also a compromise: some aspects of coccocinelle's
+ * build process are somehwat complicated due to packaging some
+ * bundled software, having no requirement on ocamlfind, etc.
+ * We therefore let 'configure' find out the configuration and
+ * paths to tools and libraries, and this plugin is transformed
+ * by that configuration to customize ocamlbuild accordingly.
+ *)
+
+(* Some useful commandline arguments to ocamlbuild are:
+ *   -yaccflag -v      verbose ocamlyacc and menhir output
+ *   -classic-display  see the individual build steps
+ *   -j 0              parallel building
+ *   -tag "-custom"    pure bytecode building
+ *   -tag "-dtypes"    no type annotation generation
+ *)
+
+
+(* Configuration of this build plugin
+ *)
+
+let ocamlc_path     = "@OCAMLC@"
+let ocamlopt_path   = "@OCAMLOPT@"
+let ocamldep_path   = "@OCAMLDEP@"
+let ocamldoc_path   = "@OCAMLDOC@"
+let ocamlyacc_path  = "@OCAMLYACC@"
+let ocamllex_path   = "@OCAMLLEX@"
+let ocamlmklib_path = "@OCAMLMKLIB@"
+let ocamlmktop_path = "@OCAMLMKTOP@"
+let camlp4o_path    = "@CAMLP4O@"
+let menhir_path     = "@MENHIR@"
+
+let pycaml_path     = "@PATH_pycaml@"
+let pcre_path       = "@PATH_pcre@"
+let menhirLib_path  = "@PATH_menhirLib@"
+let dynlink_path    = "@PATH_dynlink@"
+
+let pcre_cflags     = "@PCRE_CFLAGS@"
+let pcre_ldflags    = "@PCRE_LIBS@"
+let python_cflags   = "@PYTHON_CFLAGS@"
+let python_ldflags  = "@PYTHON_LIBS@"
+let python_major_version = "@PYVER_MAJOR@"
+
+let profiling_modules = "@MODULES_profiling@"
+
+
+(* The plugin code starts here. *)
+open Ocamlbuild_plugin
+open Command
+
+(* Removes double separators and single dots from
+ * a path. It does not resolve symlinks or turn
+ * relative paths in absolute paths.
+ *)
+let rec normalize_path path =
+  let parent = Pathname.dirname path in
+  if Pathname.equal path "/" || Pathname.equal parent "/" || Pathname.equal parent path
+  then path
+  else let name = Pathname.basename path in
+       if Pathname.equal name "."
+       then normalize_path parent
+       else normalize_path parent / name
+
+(* Makes path relative and implicit, if it is a child of the
+ * current directory. Relative paths are a must when dealing
+ * with the build directory.
+ * Todo: find out if there is a library function for
+ * exactly this purpose.
+ *)
+let relative_path path =
+  let current = normalize_path Pathname.pwd in
+  let target = normalize_path path in
+  if Pathname.is_prefix current target
+  then let len_current = String.length current in
+       let len_target = String.length target in
+       if len_current == len_target
+       then "."
+       else let len_tail = len_target - len_current - 1 in
+            let ind_tail = len_current + 1 in
+           String.sub target ind_tail len_tail
+  else target
+
+let add_flags flag_ref flags =
+  flag_ref := List.append flags !flag_ref
+
+
+let mk_use_tag name = "use_" ^ name
+
+
+(* Sets up a tag for compiling c and library files against
+ * an external c library.
+ *)
+let setup_clib name compile_flags link_flags =
+  let tag = mk_use_tag name in
+  flag [tag; "c"; "compile"] (S[A "-ccopt"; A compile_flags]);
+  flag [tag; "c"; "ocamlmklib"] (S[A "-ldopt"; A link_flags]);
+  flag [tag; "ocaml"; "link"] (S[A "-ccopt"; A compile_flags]);
+  flag [tag; "ocaml"; "link"] (S[A "-ccopt"; A link_flags])
+
+(* Sets up a tag for declaring a dependency on a stubs library,
+ * and linking it in. The dependency includes both a .a archive
+ * and a .so dll.
+ *)
+let setup_stubs name stubs_dir =
+  let tag     = mk_use_tag name in
+  let path_a  = Printf.sprintf "%s/lib%s_stubs.a" stubs_dir name in
+  if not (Pathname.exists path_a) then
+    dep [tag; "link"; "ocaml"] [path_a];
+  let stubs_arg = Printf.sprintf "-l%s_stubs" name in
+  flag [tag; "ocaml"; "link"; "byte"]
+    (S[A "-I"; P stubs_dir; A "-dllib"; A stubs_arg; A "-cclib"; A stubs_arg]);
+  flag [tag; "ocaml"; "link"; "native"]
+    (S[A "-I"; P stubs_dir; A "-cclib"; A stubs_arg]);
+  flag [tag; "ocaml"; "doc"]
+    (S[A "-I"; P stubs_dir])
+
+(* The use of bundled software is simply the
+ * inclusion of the appropriate source directory.
+ * The build system can find automatically how to
+ * deal with the bundled sources.
+ *)
+let setup_bundle rootdir =
+  tag_file rootdir ["include"; "traverse"]
+
+(* Sets up a tag that adds the given module directory and module
+ * as additional argument to ocaml when it processes a
+ * file with that tag.
+ * Todo: it may be beneficial to add a dependency on the target
+ * module.
+ *)
+let setup_module name modname rootdir =
+  let tag = mk_use_tag name in
+  let link_args isNative = S [A "-I"; P rootdir; A (modname isNative) ] in
+  let compile_args = S [A "-I"; P rootdir] in
+  flag [tag; "ocaml"; "compile"] compile_args;
+  flag [tag; "ocaml"; "byte"; "link"; "program"]   (link_args false);
+  flag [tag; "ocaml"; "native"; "link"; "program"] (link_args true);
+  flag [tag; "ocaml"; "doc"] (S[A "-I"; P rootdir])
+
+(* Sets up the use of either a bundled source package or precompiled module. *)
+let setup_package name modname rootdir =
+  let exists_path isNative = Pathname.exists (rootdir / modname isNative) in
+  let is_binary = exists_path false || exists_path true in
+  if is_binary
+  then setup_module name modname rootdir
+  else setup_bundle rootdir
+
+
+(* Most files depend on these standard modules, hence we setup a
+ * single tag for them.
+ * This setup routine should be called before the others to ensure
+ * that these modules appear first on the ocaml commandlines.
+ *)
+let setup_basic_libs use_dynlink =
+  ocaml_lib ~extern:true ~tag_name:"use_base" "unix";
+  ocaml_lib ~extern:true ~tag_name:"use_base" "str";
+  ocaml_lib ~extern:true ~tag_name:"use_base" "nums";
+  ocaml_lib ~extern:true ~tag_name:"use_base" "bigarray";
+  if use_dynlink then
+    ocaml_lib ~extern:true ~tag_name:"use_base" "dynlink";
+  ()
+
+(* The menhir package provides individual object files
+ * instead of an archive.
+ *)
+let setup_menhirLib () =
+  let menhirLib_dir = relative_path menhirLib_path in
+  let modname isNative = match isNative with
+        true  -> "menhirLib.cmx"
+      | false -> "menhirLib.cmo" in
+
+  setup_package "menhirLib" modname menhirLib_dir
+
+(* Pycaml is a stubs library with some conditional
+ * code that depends on the python version. We
+ * additionally introduce a tag pp_pycaml which
+ * runs the appropriate preprocessors.
+ *)
+let setup_pycaml () =
+  let pycaml_dir = relative_path pycaml_path in
+  let modname isNative = match isNative with
+        true  -> "pycaml.cmxa"
+      | false -> "pycaml.cma" in
+
+  setup_package "pycaml" modname pycaml_dir;
+  setup_stubs "pycaml" pycaml_dir;
+  setup_clib "pycaml" python_cflags python_ldflags;
+
+  let macrodef = Printf.sprintf "-D PYMAJOR%s" python_major_version in
+  flag ["pp_pycaml"; "c"; "compile"] (S[A "-ccopt"; A macrodef]);
+  let camlp4cmd = Printf.sprintf "%s -parser Camlp4MacroParser -D PYMAJOR%s"
+    camlp4o_path python_major_version in
+  flag ["pp_pycaml"; "ocaml"; "pp"] (Sh camlp4cmd)
+
+(* Pcre is a standard stub library. *)
+let setup_pcre () =
+  let pcre_dir = relative_path pcre_path in
+  let modname isNative = match isNative with
+        true  -> "pcre.cmxa"
+      | false -> "pcre.cma" in
+
+  setup_package "pcre" modname pcre_dir;
+  setup_stubs "pcre" pcre_dir;
+  setup_clib "pcre" pcre_cflags pcre_ldflags
+
+(* Some utility code on strings and paths. *)
+let any_non_space str =
+  let have_non_space = ref false in
+  String.iter begin
+    fun c -> match c with
+        ' '  -> ()
+      | '\t' -> ()
+      | _    -> have_non_space := true
+    end str;
+  !have_non_space
+
+let not_empty str =
+  String.length str > 0 && any_non_space str
+
+let is_path_configured path =
+  not_empty path && Pathname.exists path
+
+(* Note: the setup of the modules is done before the hygiene phase
+ * in order to benefit from additional "include" tags that may be
+ * given to directories.
+ *)
+let _ = dispatch begin
+  function
+    | Before_options ->
+        Options.hygiene      := true;
+        Options.sanitize     := true;
+        Options.make_links   := false;
+        Options.catch_errors := true;
+       Options.use_menhir   := true;
+
+       let menhir_wrapper = Printf.sprintf
+          "%s/setup/wrapper-menhir.sh" Pathname.pwd in
+        Options.ocamlc       := Sh ocamlc_path;
+       Options.ocamlopt     := Sh ocamlopt_path;
+       Options.ocamldep     := Sh ocamldep_path;
+       Options.ocamldoc     := Sh ocamldoc_path;
+       Options.ocamlyacc    := S[P menhir_wrapper; P ocamlyacc_path; P menhir_path];
+       Options.ocamllex     := Sh ocamllex_path;
+       Options.ocamlmklib   := Sh ocamlmklib_path;
+       Options.ocamlmktop   := Sh ocamlmktop_path;
+        ()
+
+    | Before_hygiene ->
+       let use_dynlink = is_path_configured dynlink_path in
+       setup_basic_libs use_dynlink;
+
+       if is_path_configured menhirLib_path then
+          setup_menhirLib ();
+
+       if is_path_configured pcre_path then
+          setup_pcre ();
+
+        if is_path_configured pycaml_path then
+          setup_pycaml ();
+        ()
+
+    | After_rules ->
+       (* produces a slightly faster native version *)
+       (* flag ["ocaml"; "compile"; "native"] (A "-unsafe"); *)
+
+       (* adds debugging info (including exception backtraces) *)
+       flag ["ocaml"; "compile"] (A "-g");
+
+       (* flags to parameterize ocamldoc to produce web pages *)
+       flag ["gen_html"; "ocaml"; "doc"]
+         (S [A "-colorize-code"; A "-short-functors"; A "-all-params"]);
+        flag ["gen_man"; "ocaml"; "doc"]
+         (S [A "-man"; A "-man-mini"]);
+
+       (* when profiling, link with profiling.cmo *)
+       if not_empty profiling_modules then
+          flag ["ocaml"; "link"; "byte"]
+           (S [A profiling_modules]);
+
+       (* the warning about unused function arguments are disabled
+         * for files with this tag. *)
+       flag ["nowarn20"; "ocaml"; "compile"] (S [A "-w"; A "-20"]);
+
+       (* adds the custom option, unless 'nocustom' is given as a tag *)
+       if not (Tags.mem "nocustom" (tags_of_pathname "myocamlbuild.ml"))
+       then flag ["ocaml"; "link"; "byte"] (A "-custom");
+       ()
+
+    | _ -> ()
+end
index 95c0598..f8752a3 100644 (file)
@@ -6,11 +6,9 @@ ifneq ($(MAKECMDGOALS),distclean)
 include ../Makefile.config
 endif
 
-include Makefile.doc
-
 TARGET=cocciocaml
 
-SRC=coccilib.ml ocamlcocci_aux.ml $(OCAMLCOCCI_FILE) prepare_ocamlcocci.ml run_ocamlcocci.ml
+SRC=exposed_modules.ml coccilib.ml ocamlcocci_aux.ml $(OCAMLCOCCI_FILE) prepare_ocamlcocci.ml run_ocamlcocci.ml
 
 #LIBS=../commons/commons.cma ../parsing_c/parsing_c.cma
 #INCLUDES= -I ../commons -I ../parsing_c
@@ -42,6 +40,7 @@ OPTOBJS = $(SRC:.ml=.cmx)
 ##############################################################################
 # Top rules
 ##############################################################################
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 all: $(TARGET).cma
 all.opt:
        @$(MAKE) $(TARGET).cmxa BUILD_OPT=yes
@@ -57,7 +56,18 @@ $(TARGET).top: $(OBJS) $(LIBS)
 
 clean::
        rm -f $(TARGET).top
+else
+all:
+       cd .. && $(OCAMLBUILD) ocaml/ocaml.cma
 
+all.opt:
+       cd .. && $(OCAMLBUILD) ocaml/ocaml.cmxa
+
+clean::
+       cd .. && $(OCAMLBUILD) -clean
+endif
+
+include Makefile.doc
 
 
 ##############################################################################
@@ -86,6 +96,7 @@ clean::
        rm -f .depend
 
 distclean: clean
+       rm -f coccilib/coccilib.cmi
 
 .depend depend:
        $(OCAMLDEP_CMD) *.mli *.ml    > .depend
@@ -93,9 +104,11 @@ distclean: clean
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
 ifneq ($(MAKECMDGOALS),cleandoc)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 -include .depend
 endif
 endif
 endif
+endif
 
 include ../Makefile.common
index 62b0b9f..343da78 100644 (file)
@@ -2,7 +2,6 @@ ifneq ($(MAKECMDGOALS),distclean)
 include ../Makefile.config
 endif
 
-API=coccilib.mli
 DEST=../docs
 FLAGS=$(INCLUDES) -hide Pervasives
 HTMLFLAGS=-all-params -colorize-code
@@ -13,14 +12,36 @@ MANFLAGS=-man-mini
 doc: html man
 
 html: $(DEST)/html/index.html
-$(DEST)/html/index.html: $(API) ../parsing_c/ast_c.cmi
+man: $(DEST)/man/Coccilib.3o
+
+ifneq ($(FEATURE_OCAMLBUILD),yes)
+$(DEST)/man/Coccilib.3o: coccilib.cmi ../parsing_c/ast_c.cmi
+       $(MKDIR_P) $(DEST)/man
+       $(OCAMLDOC) $(FLAGS) -hide Exposed_modules \
+                   -man $(MANFLAGS) -d $(DEST)/man ../parsing_c/ast_c.ml coccilib.ml
+
+$(DEST)/html/index.html: coccilib.cmi ../parsing_c/ast_c.cmi
        $(MKDIR_P) $(DEST)/html
-       $(OCAMLDOC) $(FLAGS) -html $(HTMLFLAGS) -d $(DEST)/html $(API)
+       $(OCAMLDOC) $(FLAGS) -hide Exposed_modules \
+                   -html $(HTMLFLAGS) -d $(DEST)/html ../parsing_c/ast_c.ml coccilib.ml
+else
 
-man: $(DEST)/man/Coccilib.3o
-$(DEST)/man/Coccilib.3o: $(API) ../parsing_c/ast_c.cmi
+$(DEST)/man/Coccilib.3o: ../_build/ocaml/coccilib.cmi coccilib.ml exposed_modules.ml man.odocl
        $(MKDIR_P) $(DEST)/man
-       $(OCAMLDOC) $(FLAGS) -man $(MANFLAGS) -d $(DEST)/man $(API)
+       cd .. && $(OCAMLBUILD) ocaml/man.docdir/index.html
+       cp -r ../_build/ocaml/man.docdir/* $(DEST)/man/
+
+$(DEST)/html/index.html: ../_build/ocaml/coccilib.cmi coccilib.ml exposed_modules.ml html.odocl
+       $(MKDIR_P) $(DEST)/html
+       cd .. && $(OCAMLBUILD) ocaml/html.docdir/index.html
+       cp -r ../_build/ocaml/html.docdir/* $(DEST)/html/
+
+# build coccilib.cmi if needed
+../_build/ocaml/coccilib.cmi:
+       cd .. && $(OCAMLBUILD) ocaml/coccilib.cmi
+
+endif
 
 cleandoc:
-       rm -rf $(DEST)/html $(DEST)/man
+       @if test -z "${KEEP_GENERATED}"; then \
+               rm -rf $(DEST)/html $(DEST)/man; fi
index f2759fc..8a39ae4 100644 (file)
@@ -1,12 +1,39 @@
-(* Function table management *)
+(** A library of functions for use with Coccinelle OCaml script code.
+*)
 
-type pos = { current_element : string;
-            file :string ;
-            line : int;
-            col : int;
-            line_end : int;
-            col_end : int; }
 
+(**/**)
+(** Coccinelle modules accessible from an ocaml script.
+*)
+include Exposed_modules
+(**/**)
+
+(** A value of type {b pos} describes a position in a source file.
+*)
+type pos = {
+  current_element : string;
+  (** {b current_element} is the name of the function containing the
+      matched position *)
+  file :string ;
+  (** {b file} is the name of the file containing the matched
+      position *)
+  line : int;
+  (** {b line} is the number of the line containing the first
+      character of the matched position *)
+  col : int;
+  (** {b col} is the column containing the first character of the
+      matched position *)
+  line_end : int;
+  (** {b line_end} is the number of the line containing the last
+      character of the matched position *)
+  col_end : int;
+  (** {b col_end} is the column containing the last character of the
+       matched position. *)
+}
+
+(**
+   Types describing the metavariables.
+*)
 type param_type =
     Pos of pos list
   | Str of string
@@ -23,17 +50,41 @@ type param_type =
   | FieldList of Ast_c.field list
   | Stmt of Ast_c.statement
 
+
+(* Function table management *)
+
+(**/**)
+(**
+   For internal use only.
+*)
 let fcts : (string, param_type list -> string ref list -> unit) Hashtbl.t =
   Hashtbl.create 11 (* Use prime number *)
+(**/**)
 
 (* ---------------------------------------------------------------------- *)
 (* Match management *)
 
+(**
+   See include_match.
+*)
 let inc_match = ref true
+
+(** If the argument is true, retain the environment with respect to
+    which the ocaml script code is being executed for use in subsequent
+    rules.  If the argument is false, discard this environment.  By
+    default, the environment is retained.
+*)
 let include_match x = inc_match := x
 
+(**
+   See exit
+*)
 let exited = ref false
-let exit _ = exited := true
+
+(** If called, aborts the treatment of the current file.  All previous
+    changes take effect.
+*)
+let exit () = exited := true
 
 let dir () = !Flag.dir
 
@@ -90,6 +141,7 @@ let print_secs ?color:(color="ovl-face2") msg ps =
 pos transformations
 *)
 
+(** convert the filename of a pos to its basename *)
 let basename_pos pos = { pos with file = Filename.basename (pos.file) }
 
 
@@ -98,49 +150,69 @@ external analysis results interface
 (in a separate module to not pollute the namespace)
 *)
 
+(** external analysis integration. Note: do not use after transformations. *)
 module Ana = struct
+  (** the type of analysis results: currently only integer ranges. *)
   type result = Externalanalysis.result
   type bound  = Externalanalysis.bound
 
+  (** convert a bound to a string for showing. *)
   let show_bound = Externalanalysis.show_bound
+
+  (** convert a result value to a string for showing. *)
   let show_result = Externalanalysis.show_result
 
+  (** loads some analysis results from the given file. *)
   let load_results =
     Externalanalysis.load_external_results
 
+  (** finds the analysis results for a given position. *)
   let find pos = 
     Externalanalysis.find_results pos.file (pos.line, pos.col) (pos.line_end, pos.col_end)
 
+  (** computes the intersection of analysis results, if possible. *)
   let inter = Externalanalysis.intersect_results
 
+  (** predicate over a list of analysis results of a given position. *)
   let satisfy f pos =
     Externalanalysis.satisfy f pos.file (pos.line, pos.col) (pos.line_end, pos.col_end)
 
+  (** predicate over the intersection of analysis results. *)
   let satisfy1 f pos = 
     Externalanalysis.satisfy1 f pos.file (pos.line, pos.col) (pos.line_end, pos.col_end)
 
+  (** true if an analysis result exists for the given position. *)
   let has_any pos =
     Externalanalysis.has_any_result pos.file (pos.line, pos.col) (pos.line_end, pos.col_end)
 
+  (** predicate over all analysis results of a given position. *)
   let for_all p pos =
     Externalanalysis.for_all p pos.file (pos.line, pos.col) (pos.line_end, pos.col_end)
 
+  (** predicate over all analysis results (at least one) of a given position. *)
   let for_all1 p pos =
     Externalanalysis.for_all1 p pos.file (pos.line, pos.col) (pos.line_end, pos.col_end)
 
+  (** true if the predicate is satisfied for at least one result
+        of a given position. *)
   let exists p pos =
     Externalanalysis.exists p pos.file (pos.line, pos.col) (pos.line_end, pos.col_end)
 
+  (** true if the result contains only a single integer as range *)
   let single_int = Externalanalysis.single_int
+
+  (** true if the result range contains the given integer. *)
   let contains_int = Externalanalysis.contains_int
 
+  (** analysis result of the position has only the zero value. *)
   let has_only_nul pos =
     Externalanalysis.has_only_nul pos.file (pos.line, pos.col) (pos.line_end, pos.col_end)
 
+  (** analysis result of the position contains also the zero value. *)
   let has_also_nul pos =
     Externalanalysis.has_also_nul pos.file (pos.line, pos.col) (pos.line_end, pos.col_end)
 
+  (** analysis result of the position contains also the given integer. *)
   let has_also_int c pos =
     Externalanalysis.has_also_int c pos.file (pos.line, pos.col) (pos.line_end, pos.col_end)
-
 end
diff --git a/ocaml/coccilib.mli b/ocaml/coccilib.mli
deleted file mode 100644 (file)
index 5f71790..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-(** Library of functions for use with Coccinelle OCaml script code
-*)
-
-(** A value of type {b pos} describes a position in a source file.
-*)
-type pos = {
-  current_element : string;
-  (** {b current_element} is the name of the function containing the
-      matched position *)
-  file :string ;
-  (** {b file} is the name of the file containing the matched
-      position *)
-  line : int;
-  (** {b line} is the number of the line containing the first
-      character of the matched position *)
-  col : int;
-  (** {b col} is the column containing the first character of the
-      matched position *)
-  line_end : int;
-  (** {b line_end} is the number of the line containing the last
-      character of the matched position *)
-  col_end : int;
-  (** {b col_end} is the column containing the last character of the
-       matched position. *)
-}
-
-(**
-   Types describing the metavariables
-*)
-type param_type =
-    Pos of pos list
-  | Str of string
-  | Type of Ast_c.fullType
-  | Init of Ast_c.initialiser
-  | InitList of Ast_c.initialiser Ast_c.wrap2 list
-  | Int of int
-  | Param of Ast_c.parameterType
-  | ParamList of Ast_c.parameterType Ast_c.wrap2 list
-  | Expr of Ast_c.expression
-  | ExprList of Ast_c.argument Ast_c.wrap2 list
-  | Decl of Ast_c.declaration
-  | Field of Ast_c.field
-  | FieldList of Ast_c.field list
-  | Stmt of Ast_c.statement
-
-(* ---------------------------------------------------------------------- *)
-(* Match management *)
-
-(** If the argument is true, retain the environment with respect to
-    which the ocaml script code is being executed for use in subsequent
-    rules.  If the argument is false, discard this environment.  By
-    default, the environment is retained.
-*)
-val include_match : bool -> unit
-
-(**
-   See include_match
-*)
-val inc_match : bool ref
-
-(** If called, aborts the treatment of the current file.  All previous
-    changes take effect.
-*)
-val exit : unit -> unit
-
-(**
-   See exit
-*)
-val exited : bool ref
-
-(** Returns the directory on which spatch was launched.*)
-val dir : unit -> string
-
-(**/**)
-
-(**
-   For internal use only
-*)
-val fcts : (string, param_type list -> string ref list -> unit) Hashtbl.t
-
-(* org mode *)
-
-val print_main : ?color:string -> string -> pos list -> unit
-val print_sec  : ?color:string -> string -> pos list -> unit
-val print_secs : ?color:string -> string -> pos list -> unit
-
-
-(* ---------------------------------------------------------------------- *)
-(* Pos transformations *)
-
-(** convert the filename of a pos to its basename *)
-val basename_pos : pos -> pos
-
-
-(* ---------------------------------------------------------------------- *)
-(* External analysis *)
-
-(** external analysis integration. Note: do not use after transformations. *)
-module Ana :
-  sig
-    (** the type of analysis results: currently only integer ranges. *)
-    type result = Externalanalysis.result
-    type bound  = Externalanalysis.bound
-
-    (** convert a result value to a string for showing. *)
-    val show_result : result -> string
-
-    (** convert a bound to a string for showing. *)
-    val show_bound : bound -> string
-
-    (** loads some analysis results from the given file. *)
-    val load_results : string -> unit
-
-    (** finds the analysis results for a given position. *)
-    val find : pos -> result list
-
-    (** computes the intersection of analysis results, if possible. *)
-    val inter :
-      result -> result -> result option
-
-    (** predicate over a list of analysis results of a given position. *)
-    val satisfy : (result list -> bool) -> pos -> bool
-
-    (** predicate over the intersection of analysis results. *)
-    val satisfy1 : (result -> bool) -> pos -> bool
-
-    (** true if an analysis result exists for the given position. *)
-    val has_any : pos -> bool
-
-    (** predicate over all analysis results of a given position. *)
-    val for_all : (result -> bool) -> pos -> bool
-
-    (** predicate over all analysis results (at least one) of a given position. *)
-    val for_all1 : (result -> bool) -> pos -> bool
-
-    (** true if the predicate is satisfied for at least one result
-        of a given position. *)
-    val exists : (result -> bool) -> pos -> bool
-
-    (** true if the result contains only a single integer as range *)
-    val single_int : int64 -> result -> bool
-
-    (** true if the result range contains the given integer. *)
-    val contains_int : int64 -> result -> bool
-
-    (** analysis result of the position has only the zero value. *)
-    val has_only_nul : pos -> bool
-
-    (** analysis result of the position contains also the zero value. *)
-    val has_also_nul : pos -> bool
-
-    (** analysis result of the position contains also the given integer. *)
-    val has_also_int : int64 -> pos -> bool
-  end
diff --git a/ocaml/exposed_modules.ml b/ocaml/exposed_modules.ml
new file mode 100644 (file)
index 0000000..29935ab
--- /dev/null
@@ -0,0 +1,19 @@
+(* Modules accessible by the ocaml scripts.
+ *)
+
+module Ast_c    = Ast_c      (* parsing_c/ast_c.ml *)
+module Parser_c = Parser_c   (* parsing_c/parser_c.mly *)
+module Lexer_c  = Lexer_c    (* parsing_c/lexer_c.mll *)
+module Pretty_print_c = Pretty_print_c (* parsing_c/pretty_print_c.ml *)
+module Lib_parsing_c  = Lib_parsing_c  (* parsing_c/lib_parsing_c.ml *)
+module Visitor_c      = Visitor_c      (* parsing_c/visitor_c.ml *)
+
+module Regexp     = Regexp     (* globals/regexp.ml *)
+module Config     = Config     (* globals/config.ml *)
+module Flag       = Flag       (* globals/flag.ml *)
+module Iteration  = Iteration  (* globals/iteration.ml *)
+module Common     = Common     (* commons/common.ml *)
+
+module Ast_cocci  = Ast_cocci  (* parsing_cocci/ast_cocci.ml *)
+module Ast0_cocci = Ast0_cocci (* parsing_cocci/ast0_cocci.ml *)
+module Type_cocci = Type_cocci (* parsing_cocci/type_cocci.ml *)
diff --git a/ocaml/html.odocl b/ocaml/html.odocl
new file mode 100644 (file)
index 0000000..ddf4572
--- /dev/null
@@ -0,0 +1,7 @@
+Common
+Ast_c
+Visitor_c
+Lib_parsing_c
+Iteration
+Flag
+Coccilib
\ No newline at end of file
diff --git a/ocaml/man.odocl b/ocaml/man.odocl
new file mode 100644 (file)
index 0000000..ddf4572
--- /dev/null
@@ -0,0 +1,7 @@
+Common
+Ast_c
+Visitor_c
+Lib_parsing_c
+Iteration
+Flag
+Coccilib
\ No newline at end of file
diff --git a/ocaml/ocaml.mldylib b/ocaml/ocaml.mldylib
new file mode 100644 (file)
index 0000000..1723a5c
--- /dev/null
@@ -0,0 +1,4 @@
+Coccilib
+Ocamlcocci_aux
+Run_ocamlcocci
+Prepare_ocamlcocci
\ No newline at end of file
diff --git a/ocaml/ocaml.mllib b/ocaml/ocaml.mllib
new file mode 100644 (file)
index 0000000..1723a5c
--- /dev/null
@@ -0,0 +1,4 @@
+Coccilib
+Ocamlcocci_aux
+Run_ocamlcocci
+Prepare_ocamlcocci
\ No newline at end of file
index a37e01a..abad0e8 100644 (file)
@@ -1,3 +1,8 @@
+(* Note: this module passes paths to other commands, but does not take
+ * quoting into account. Thus, if these paths contain spaces, it's likely
+ * that things go wrong.
+ *)
+
 module Ast = Ast_cocci
 
 exception CompileFailure of string
@@ -238,8 +243,65 @@ let prepare coccifile code =
       Some file
     end
 
-let filter_dep (accld, accinc) dep =
-  match dep with
+(* give a path to the coccilib cmi file *)
+let find_cmifile name =
+  let path1 = Printf.sprintf "%s/ocaml/%s.cmi" Config.path name in
+  if Sys.file_exists path1 then path1 else
+  let path2 = Printf.sprintf "%s/ocaml/coccilib/%s.cmi" Config.path name in
+  if Sys.file_exists path2 then path2 else
+  raise (CompileFailure ("No coccilib.cmi in " ^ path1 ^ " or " ^ path2))
+
+(* extract upper case identifiers from the cmi file. This will be an
+ * approximation of the modules referenced by the coccilib, which are
+ * thus present in the application and do not need to be loaded by
+ * the dynamic linker.
+ *)
+
+module ModuleSet = Set.Make(String)
+
+let approx_coccilib_deps cmi =
+  let chan = open_in_bin cmi in
+  let tbl = Hashtbl.create 1024 in
+  let buf = Buffer.create 140 in
+  begin
+  try
+    while true do
+      let c = input_char chan in
+      let has_ident = Buffer.length buf > 0 in
+      if has_ident
+      then begin
+        if (c >= 'a' && c <= 'z') ||
+           (c >= 'A' && c <= 'Z') ||
+           (c >= '0' && c <= '9') ||
+           c == '_' || c == '\''
+        then Buffer.add_char buf c
+        else begin
+          if Buffer.length buf >= 3
+          then begin
+            let key = Buffer.contents buf in
+            if Hashtbl.mem tbl key
+            then ()
+            else Hashtbl.add tbl (Buffer.contents buf) ()
+          end;
+          Buffer.clear buf
+        end
+      end
+      else begin
+        if c >= 'A' && c <= 'Z'
+        then (* perhaps the begin of a captialized identifier *)
+          Buffer.add_char buf c
+        else ()
+      end
+    done
+  with End_of_file -> ()
+  end;
+  close_in chan;
+  tbl
+
+let filter_dep existing_deps (accld, accinc) dep =
+  if Hashtbl.mem existing_deps dep
+  then (accld, accinc)  (* skip an existing dep *)
+  else match dep with
       (* Built-in and OCaml defaults are filtered out *)
       "Arg" | "Arith_status" | "Array" | "ArrayLabels" | "Big_int" | "Bigarray"
     | "Buffer" | "Callback" | "CamlinternalLazy" | "CamlinternalMod"
@@ -255,13 +317,7 @@ let filter_dep (accld, accinc) dep =
     | "Queue" | "Random" | "Scanf" | "Set" | "Sort" | "Stack" | "StdLabels"
     | "Str" | "Stream"
     | "String" | "StringLabels" | "Sys" | "ThreadUnix" | "Unix" | "UnixLabels"
-    | "Weak"
-
-    (* Coccilib is filtered out too *)
-    | "Coccilib" | "Common" | "Ast_c" | "Visitor_c" | "Lib_parsing_c"
-    | "Iteration" | "Flag" ->
-       (accld, accinc)
-
+    | "Weak"     -> (accld, accinc)
     | "Dbm"      -> ("dbm"::accld, accinc)
     | "Graphics" -> ("graphics"::accld, accinc)
     | "Thread"   -> ("thread"::accld, accinc)
@@ -277,12 +333,14 @@ let get_dir p =
   let dir = List.hd (Common.cmd_to_list inclcmd) in
     (dir, p)
 
-let parse_dep mlfile depout =
+let parse_dep cmifile mlfile depout =
+  let empty_deps = ([], "") in
+  let existing_deps = approx_coccilib_deps cmifile in
   let re_colon = Str.regexp_string ":" in
   match Str.split re_colon depout with
     _::[dep] ->
       let deplist = Str.split (Str.regexp_string " ") dep in
-      let (libs, orderdep) = List.fold_left filter_dep ([],[]) deplist in
+      let (libs, orderdep) = List.fold_left (filter_dep existing_deps) ([],[]) deplist in
       if libs <> [] || orderdep <> [] then
        begin
          if check_cmd (!Flag.ocamlfind ^ " printconf 2>&1 > /dev/null")
@@ -296,33 +354,33 @@ let parse_dep mlfile depout =
            let flags =
              String.concat " " (List.map (fun (d,_) -> "-I "^d) inclflags) in
            if flags <> "" || libs <> []
-           then
-             begin
-               Common.pr2
-                 ("Extra OCaml packages used in the semantic patch:"^ plist);
-               (alllibs (* , inclflags *), flags)
-             end
-           else
-             raise
-               (CompileFailure
-                  ("ocamlfind did not find "^
+           then begin
+             Common.pr2
+               ("Extra OCaml packages used in the semantic patch:"^ plist);
+               (alllibs, flags)
+           end
+            else begin
+             Common.pr2 ("Warning: ocamlfind did not find "^
                       (if (List.length libs + List.length orderdep) = 1
                        then "this package:"
-                       else "one of these packages:")^ plist))
-         else
-           raise
-             (CompileFailure ("ocamlfind not found but "^mlfile^" uses "^dep))
+                       else "one of these packages:")^ plist);
+              empty_deps
+            end
+         else begin
+           Common.pr2 ("Warning: ocamlfind not found but "^mlfile^" uses "^dep);
+            empty_deps
+          end
        end
       else
-       ([] (* , [] *), "")
+       empty_deps
   | _ ->
       raise
        (CompileFailure ("Wrong dependencies for "^mlfile^" (Got "^depout^")"))
 
-let dep_flag mlfile =
+let dep_flag cmifile mlfile =
   let depcmd  = !Flag.ocamldep ^" -modules "^mlfile in
   match Common.cmd_to_list depcmd with
-    [dep] -> parse_dep mlfile dep
+    [dep] -> parse_dep cmifile mlfile dep
   | err ->
       List.iter (function x -> Common.pr2 (x^"\n")) err;
       raise (CompileFailure ("Failed ocamldep for "^mlfile))
@@ -342,24 +400,12 @@ let compile mlfile cmd =
       0 -> ()
     | _ -> raise (CompileFailure mlfile)
 
-let rec load_obj obj =
-  try
-    Dynlink.loadfile obj
+let load_obj obj =
+  Dynlink.allow_unsafe_modules true;
+  try Dynlink.loadfile obj
   with Dynlink.Error e ->
-    match e with
-       Dynlink.Unsafe_file ->
-         Dynlink.allow_unsafe_modules true;
-         load_obj obj
-      | _ ->
-         Common.pr2 (Dynlink.error_message e);
-         raise (LinkFailure obj)
-
-(*
-let link_lib (dir, name) = name ^ ext
-
-let link_libs libs =
-    String.concat " " (List.map link_lib libs)
-*)
+    Common.pr2 (Dynlink.error_message e);
+    raise (LinkFailure obj)
 
 let load_lib (dir, name) =
   let obj = dir ^ "/" ^name ^ ext in
@@ -370,12 +416,13 @@ let load_libs libs =
   List.iter load_lib libs
 
 let load_file mlfile =
-  let (ldlibs (* , lklibs *), inc) = dep_flag mlfile in
-(*   let linklibs = link_libs lklibs in *)
+  let cmifile = find_cmifile "coccilib" in
+  let (ldlibs, inc) = dep_flag cmifile mlfile in
+  (* add ocaml and ocaml/coccilib as search directories for the ocaml scripting *)
   let flags =
     Printf.sprintf
-    "-g -I %s %s -I %s/globals -I %s/ocaml -I %s/parsing_c -I %s/commons "
-      (sysdir ()) inc Config.path Config.path Config.path Config.path in
+      "-g -I %s %s -I %s"
+      (sysdir ()) inc (Filename.dirname cmifile) in
   let (obj, cmd) =
     if Config.dynlink_is_native
     then compile_native_cmd flags mlfile
@@ -384,10 +431,7 @@ let load_file mlfile =
   Common.pr2 "Compilation OK!";
   load_libs ldlibs;
   Common.pr2 "Loading ML code of the SP...";
-  try Dynlink.loadfile obj
-  with Dynlink.Error e ->
-    Common.pr2 (Dynlink.error_message e);
-    raise (LinkFailure obj)
+  load_obj obj
 
 let clean_file mlfile =
   let basefile = Filename.chop_extension mlfile in
index fa9945b..9f9e794 100644 (file)
@@ -8,7 +8,7 @@ endif
 TARGET=parsing_c
 
 # - type_cocci.ml ast_cocci.ml  # + unparse_hrule
-SRC= flag_parsing_c.ml parsing_stat.ml \
+SRC= token_annot.ml flag_parsing_c.ml parsing_stat.ml \
  token_c.ml ast_c.ml control_flow_c.ml \
  visitor_c.ml lib_parsing_c.ml \
  control_flow_c_build.ml \
@@ -65,6 +65,7 @@ OPTOBJS = $(SRC:.ml=.cmx)
 ##############################################################################
 # Top rules
 ##############################################################################
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 all: $(TARGET).cma
 all.opt:
        @$(MAKE) $(TARGET).cmxa BUILD_OPT=yes
@@ -90,6 +91,16 @@ parser_c.ml parser_c.mli: parser_c.mly
        $(OCAMLYACC) -v $<
 clean::
        rm -f parser_c.ml parser_c.mli parser_c.output
+else
+all:
+       cd .. && $(OCAMLBUILD) parsing_c/parsing_c.cma
+
+all.opt:
+       cd .. && $(OCAMLBUILD) parsing_c/parsing_c.cmxa
+
+clean::
+       cd .. && $(OCAMLBUILD) -clean
+endif
 
 
 ##############################################################################
@@ -148,8 +159,10 @@ distclean: clean
 
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 -include .depend
 endif
 endif
+endif
 
 include ../Makefile.common
index 9b8f429..11df911 100644 (file)
@@ -100,6 +100,9 @@ type info = {
   (* set in comment_annotater_c.ml *)
   comments_tag: comments_around ref;
 
+  (* annotations on the token (mutable) *)
+  mutable annots_tag: Token_annot.annots
+
   (* todo? token_info : sometimes useful to know what token it was *)
   }
 and il = info list
@@ -610,7 +613,7 @@ and define = string wrap (* #define s eol *) * (define_kind * define_val)
      | DefineFunction of definition
      | DefineInit of initialiser (* in practice only { } with possible ',' *)
 
-     (* TODO DefineMulti of define_val list *)
+     | DefineMulti of statement list 
 
      | DefineText of string wrap
      | DefineEmpty
@@ -827,6 +830,7 @@ let no_virt_pos = ({str="";charpos=0;line=0;column=0;file=""},-1)
 let fakeInfo pi  =
   { pinfo = FakeTok ("",no_virt_pos);
     cocci_tag = ref emptyAnnot;
+    annots_tag = Token_annot.empty;
     comments_tag = ref emptyComments;
   }
 
@@ -1032,6 +1036,7 @@ let al_info tokenindex x =
         file = "";
         str = str_of_info x});
     cocci_tag = ref emptyAnnot;
+    annots_tag = Token_annot.empty;
     comments_tag = ref emptyComments;
   }
 
@@ -1052,6 +1057,7 @@ let real_al_info x =
         file = "";
         str = str_of_info x});
     cocci_tag = ref emptyAnnot;
+    annots_tag = Token_annot.empty;
     comments_tag = ref emptyComments;
   }
 
@@ -1077,12 +1083,14 @@ let al_info_cpp tokenindex x =
         file = "";
         str = str_of_info x});
     cocci_tag = ref emptyAnnot;
+    annots_tag = Token_annot.empty;
     comments_tag = ref (al_comments !(x.comments_tag));
   }
 
 let semi_al_info_cpp x =
   { x with
     cocci_tag = ref emptyAnnot;
+    annots_tag = Token_annot.empty;
     comments_tag = ref (al_comments !(x.comments_tag));
   }
 
@@ -1095,6 +1103,7 @@ let real_al_info_cpp x =
         file = "";
         str = str_of_info x});
     cocci_tag = ref emptyAnnot;
+    annots_tag = Token_annot.empty;
     comments_tag =  ref (al_comments !(x.comments_tag));
   }
 
@@ -1128,7 +1137,7 @@ let rec (unsplit_comma: ('a, il) either list -> 'a wrap2 list) =
       let empty_ii = [] in
       (e, empty_ii)::unsplit_comma xs
   | Right ii::_ ->
-      raise Impossible
+      raise (Impossible 59)
 
 
 
@@ -1184,7 +1193,7 @@ let get_s_and_ii_of_name name =
       s, [iis]
   | CppConcatenatedName xs ->
       (match xs with
-      | [] -> raise Impossible
+      | [] -> raise (Impossible 60)
       | ((s,iis),noiiop)::xs ->
           s, iis
       )
@@ -1243,3 +1252,15 @@ let get_local_ii_of_st_inlining_ii_of_name st =
 let name_of_parameter param =
   param.p_namei +> Common.map_option (str_of_name)
 
+
+(* ------------------------------------------------------------------------- *)
+(* Annotations on tokens *)
+(* ------------------------------------------------------------------------- *)
+
+(* to put a given annotation on a token *)
+let put_annot_info info key value =
+  info.annots_tag <- Token_annot.put_annot key value info.annots_tag
+
+(* to check if an annotation has such a token *)
+let get_annot_info info key =
+  Token_annot.get_annot info.annots_tag key
index 75e91c1..c414351 100644 (file)
@@ -53,7 +53,7 @@ let convert_relevant_tokens x =
   | Parser_c.TCommentCpp(cppcommentkind, info) ->
       Token_c.TCommentCpp cppcommentkind, (Ast_c.parse_info_of_info info)
 
-  | _ -> raise Impossible
+  | _ -> raise (Impossible 61)
 
 
 (*****************************************************************************)
index a706003..e28272a 100644 (file)
@@ -489,7 +489,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
       let (iiheader, iielse, iifakeend) =
         match ii with
         | [i1;i2;i3;i4;i5] -> [i1;i2;i3], i4, i5
-        | _ -> raise Impossible
+        | _ -> raise (Impossible 62)
       in
       let newi = !g +> add_node (IfHeader (stmt, (e, iiheader))) lbl "if" in
       !g +> add_arc_opt (starti, newi);
@@ -648,7 +648,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
             (Case (stmt, (e, ii))),  st
         | Labeled (Ast_c.CaseRange  (e, e2, st)), ii ->
             (CaseRange (stmt, ((e, e2), ii))), st
-        | _ -> raise Impossible
+        | _ -> raise (Impossible 63)
       in
 
       let newi = !g +> add_node node  lbl "case:" in
@@ -749,7 +749,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
       let (iido, iiwhiletail, iifakeend) =
         match ii with
         | [i1;i2;i3;i4;i5;i6] -> i1, [i2;i3;i4;i5], i6
-        | _ -> raise Impossible
+        | _ -> raise (Impossible 64)
       in
       let doi = !g +> add_node (DoHeader (stmt, iido))  lbl "do" in
       !g +> add_arc_opt (starti, doi);
@@ -884,7 +884,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
        match context_info with
          LoopInfo (loopstarti, loopendi, braces, parent_lbl) -> parent_lbl
        | SwitchInfo (startbrace, loopendi, braces, parent_lbl) -> parent_lbl
-       | NoInfo -> raise Impossible in
+       | NoInfo -> raise (Impossible 65) in
 
       (* flow_to_ast: *)
       let (node_info, string) =
@@ -897,7 +897,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
           | Ast_c.Break    ->
              (Break    (stmt, ((), ii)),
               Printf.sprintf "break; [%s]" parent_string)
-          | _ -> raise Impossible
+          | _ -> raise (Impossible 66)
           ) in
 
       (* idea: break or continue records the label of its parent loop or
@@ -916,7 +916,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
                (* if no loops, then continue behaves like break - just
                   one iteration *)
                if !Flag_parsing_c.no_loops then loopendi else loopstarti
-            | x -> raise Impossible
+            | x -> raise (Impossible 67)
             ) in
           let difference = List.length xi.braces - List.length braces in
           assert (difference >= 0);
@@ -933,7 +933,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
           let newi = insert_all_braces toend newi in
           !g#add_arc ((newi, loopendi), Direct);
           None
-      | NoInfo -> raise Impossible
+      | NoInfo -> raise (Impossible 68)
       )
 
   | Jump ((Ast_c.Return | Ast_c.ReturnExpr _) as kind) ->
@@ -946,14 +946,14 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
         match kind with
         | Ast_c.Return -> "return"
         | Ast_c.ReturnExpr _ -> "return ..."
-        | _ -> raise Impossible
+        | _ -> raise (Impossible 69)
       in
       let newi =
         !g +> add_node
           (match kind with
           | Ast_c.Return ->       Return (stmt, ((),ii))
           | Ast_c.ReturnExpr e -> ReturnExpr (stmt, (e, ii))
-          | _ -> raise Impossible
+          | _ -> raise (Impossible 70)
           )
           lbl s
       in
@@ -965,7 +965,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) =
       else !g#add_arc ((newi, exiti), Direct)
       ;
       None
-     | _ -> raise Impossible
+     | _ -> raise (Impossible 71)
      )
 
 
@@ -1097,7 +1097,7 @@ let (aux_definition: nodei -> definition -> unit) = fun topi funcdef ->
     | ioparen::icparen::iobrace::icbrace::iifake::isto ->
         ioparen::icparen::iifake::isto,
         [iobrace;icbrace]
-    | _ -> raise Impossible
+    | _ -> raise (Impossible 72)
     )
   in
 
@@ -1190,7 +1190,7 @@ let ast_to_control_flow e =
             let (st, (e, ii)) = specialdeclmacro_to_stmt (s, args, ii) in
             (Control_flow_c.ExprStatement (st, (Some e, ii))), "macrotoplevel"
           (*(Control_flow_c.MacroTop (s, args,ii), "macrotoplevel") *)
-        | _ -> raise Impossible
+        | _ -> raise (Impossible 73)
       in
       let ei =   !g +> add_node elem    lbl_0 str in
       let endi = !g +> add_node EndNode lbl_0 "[end]" in
@@ -1265,6 +1265,8 @@ let ast_to_control_flow e =
           !g#add_arc ((headeri, endi),Direct);
       | Ast_c.DefineInit _ ->
           raise (Error(Define(pinfo_of_ii ii)))
+      | Ast_c.DefineMulti sts -> (* christia: todo *)
+          raise (Error(Define(pinfo_of_ii ii)))
       | Ast_c.DefineTodo ->
           raise (Error(Define(pinfo_of_ii ii)))
 
index e7523fd..5340868 100644 (file)
@@ -1,18 +1,3 @@
-(* Yoann Padioleau
- *
- * Copyright (C) 2010, University of Copenhagen DIKU and INRIA.
- * Copyright (C) 2009 University of Urbana Champaign
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License (GPL)
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * file license.txt for more details.
- *)
-
 open Common
 
 open Oset
@@ -137,7 +122,7 @@ let check_no_loop_graph g =
       let file =
         match !node with
         | (file, _)::xs -> file
-        | [] -> raise Impossible
+        | [] -> raise (Impossible 74)
       in
       (* in apache/srclib/apr/include/arch/win32/apr_dbg_win32_handles.h
        * we get some __ROOT__ -> CreateMutexA -> CreateMutexA because
@@ -200,7 +185,7 @@ let slice_of_callgraph_macros (g: callgraph_macros) goodnodes =
 (* get the longuest one ? or the one that contains the dangerous macro ? *)
 let get_single_file_and_def_of_node k v =
   match !v with
-  | [] -> raise Impossible
+  | [] -> raise (Impossible 75)
   | [file, def] -> file, def
   | (file, def)::y::ys ->
       pr2 (spf "multiple def for %s but I kept only one" k);
@@ -274,12 +259,15 @@ let rec (recurse_expand_macro_topological_order:
   else
     let remaining = g#nodes#tolist in
     (match remaining with
-    | [] -> raise Impossible
+    | [] -> () (* christia: commented this out: raise (Impossible 76)
+               * This seems to be the case when there are no 
+               * problematic macros. Which is possible. 
+               *)
     | [(k,n)] ->
         assert (k = rootname);
         (* end recursion *)
         ()
-    | x::y::xs ->
+    | (k, v)::y::xs ->
         let leafs = (g#leaf_nodes ())#tolist in
         pr2 (spf "step: %d, %s" depth (leafs +> Common.join " "));
 
@@ -289,7 +277,7 @@ let rec (recurse_expand_macro_topological_order:
           (spf "/tmp/graph-%d.dot" depth)
           g;
 
-        assert(not (null leafs));
+        assert(not (null leafs)); 
 
 
         (* little specialisation to avoid useless work *)
@@ -334,8 +322,11 @@ let is_dangerous_macro def =
       else true
 
   (* ex: AP_DECLARE(x) x  *)
-  | Cpp_token_c.Params([s1]), Cpp_token_c.DefineBody [TIdent (s2,i1)] ->
-      s1 =$= s2
+  | Cpp_token_c.Params([s1]),
+       Cpp_token_c.DefineBody [TIdent (s2,i1)] ->
+         (match s1 with
+           Cpp_token_c.FixedArg s1 -> s1 =$= s2
+         | Cpp_token_c.VariadicArg _ -> false)
 
   (* keyword aliases. eg: APR_inline __inline__ *)
   | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [x] ->
@@ -485,3 +476,4 @@ let extract_dangerous_macros xs =
 
   let grouped = Common.group_assoc_bykey_eff final_macros in
   grouped
+
index d2e4698..cdb135f 100644 (file)
@@ -324,7 +324,7 @@ let is_ifdef_and_same_tag tag x =
   | IfdefStmt (IfdefDirective ((_, tag2),_)) ->
       tag =*= tag2
   | StmtElem _ | CppDirectiveStmt _ -> false
-  | IfdefStmt2 _ -> raise Impossible
+  | IfdefStmt2 _ -> raise (Impossible 77)
 
 
 
@@ -364,7 +364,7 @@ let group_ifdef tag xs =
   xxs +> List.map snd +> List.map (fun x ->
     match x with
     | IfdefStmt y -> y
-    | StmtElem _ | CppDirectiveStmt _ | IfdefStmt2 _ -> raise Impossible
+    | StmtElem _ | CppDirectiveStmt _ | IfdefStmt2 _ -> raise (Impossible 78)
   ),
   xxs +> List.map fst,
   xs
index 4849ae2..39dce63 100644 (file)
@@ -1,18 +1,3 @@
-(* Yoann Padioleau
- *
- * Copyright (C) 2010, University of Copenhagen DIKU and INRIA.
- * Copyright (C) 2007, 2008 Ecole des Mines de Nantes
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License (GPL)
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * file license.txt for more details.
- *)
-
 open Common
 
 module TH = Token_helpers
@@ -66,7 +51,8 @@ let pr2, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_parsing
 type define_def = string * define_param * define_body
  and define_param =
    | NoParam
-   | Params of string list
+   | Params of define_arg list
+ and define_arg = FixedArg of string | VariadicArg of string
  and define_body =
    | DefineBody of Parser_c.token list
    | DefineHint of parsinghack_hint
@@ -134,6 +120,7 @@ let string_of_define_def (s, params, body) =
     | NoParam ->
         spf "#define %s " s
     | Params xs ->
+       let xs = List.map (function FixedArg s -> s | VariadicArg s -> s) xs in
         spf "#define %s(%s) " s (Common.join "," xs)
   in
   let s2 =
@@ -287,7 +274,8 @@ let rec (cpp_engine:
      * the job right and already replaced the macro parameter with a TIdent.
      *)
     match tok with
-    | TIdent (s,i1) when List.mem_assoc s env -> Common.assoc s env
+    | TIdent (s,i1) when List.mem_assoc s env -> 
+       Common.assoc s env
     | x -> [x]
   )
   +> List.flatten
@@ -366,44 +354,56 @@ let rec apply_macro_defs
           | DefineBody bodymacro ->
 
               (* bugfix: better to put this that before the match body,
-               * cos our macrostatement hint can have variable number of
-               * arguments and so it's ok if it does not match exactly
-               * the number of arguments. *)
-              if List.length params != List.length xxs
-              then begin
-                pr2_once ("WEIRD: macro with wrong number of arguments: " ^ s);
-                (* old: id.new_tokens_before <- bodymacro; *)
-
-                (* update: if wrong number, then I just pass this macro *)
-                [Parenthised (xxs, info_parens)] +>
+                * cos our macrostatement hint can have variable number of
+                * arguments and so it's ok if it does not match exactly
+                * the number of arguments. *)
+             let build_binder params xxs =
+               let rec loop = function
+                   ([],[]) -> Some (function [] -> [] | _ -> failwith "bad")
+                 | ([],l) -> None
+                 | ([(VariadicArg s)],l) ->
+                     Some (function l -> List.map (function a -> (s,a)) l)
+                 | ((VariadicArg _)::_,l) -> None
+                 | ((FixedArg _)::_,[]) -> None
+                 | ((FixedArg s)::rest,x::xs) ->
+                     (match loop (rest,xs) with
+                       Some k ->
+                         Some (function l -> (s,(List.hd l)) :: k (List.tl l))
+                     | None -> None) in
+               loop (params, xxs) in
+             (match build_binder params xxs with
+               None ->
+                  pr2_once
+                   ("WEIRD: macro with wrong number of arguments: " ^ s);
+                  (* old: id.new_tokens_before <- bodymacro; *)
+                 
+                  (* update: if wrong number, then I just pass this macro *)
+                  [Parenthised (xxs, info_parens)] +>
                   iter_token_paren (set_as_comment Token_c.CppMacro);
-                set_as_comment Token_c.CppMacro id;
-
-                ()
-              end
-              else
-
-                let xxs' = xxs +> List.map (fun x ->
-                  (tokens_of_paren_ordered x) +> List.map (fun x ->
-                    TH.visitor_info_of_tok Ast_c.make_expanded x.tok
-                  )
-                ) in
-                id.new_tokens_before <-
-                  (* !!! cpp expansion job here  !!! *)
-                  cpp_engine ?evaluate_concatop
-                    (Common.zip params xxs') bodymacro;
-
-                (* important to do that after have apply the macro, otherwise
-                 * will pass as argument to the macro some tokens that
-                 * are all TCommentCpp
-                 *)
-                [Parenthised (xxs, info_parens)] +>
+                  set_as_comment Token_c.CppMacro id
+             | Some bind ->
+
+                  let xxs' = xxs +> List.map (fun x ->
+                   (tokens_of_paren_ordered x) +> List.map (fun x ->
+                     TH.visitor_info_of_tok Ast_c.make_expanded x.tok
+                       )
+                     ) in
+                  id.new_tokens_before <-
+                      (* !!! cpp expansion job here  !!! *)
+                   cpp_engine ?evaluate_concatop
+                     (bind xxs') bodymacro;
+
+                      (* important to do that after have apply the macro,
+                        otherwise will pass as argument to the macro some
+                        tokens that are all TCommentCpp
+                      *)
+                  [Parenthised (xxs, info_parens)] +>
                   iter_token_paren (set_as_comment Token_c.CppMacro);
-                set_as_comment Token_c.CppMacro id;
-
-            | DefineHint (HintMacroStatement as hint) ->
+                  set_as_comment Token_c.CppMacro id)
+               
+          | DefineHint (HintMacroStatement as hint) ->
                 (* important to do that after have apply the macro, otherwise
-                 * will pass as argument to the macro some tokens that
+                   * will pass as argument to the macro some tokens that
                  * are all TCommentCpp
                  *
                  * note: such macrostatement can have a variable number of
@@ -448,7 +448,7 @@ let rec apply_macro_defs
       let (_s, params, body) = Hashtbl.find defs s in
 
       (match params with
-      | Params params ->
+      | Params _ ->
           pr2 ("WEIRD: macro with params but no parens found: " ^ s);
           (* dont apply the macro, perhaps a redefinition *)
           ()
@@ -517,36 +517,40 @@ let rec (define_parse: Parser_c.token list -> (string * define_def) list) =
             xs +> Common.split_when (function TDefEOL _ -> true | _ -> false) in
          let params =
             tokparams +> Common.map_filter (function
-              | TComma _ -> None
-              | TIdent (s, _) -> Some s
+              |         TComma _ -> None
+              |         TIdent (s, _) -> Some (FixedArg s)
 
               (* TODO *)
-              | TDefParamVariadic (s, _) -> Some s
+              |         TDefParamVariadic (s, _) -> Some (VariadicArg s)
               (* TODO *)
-              | TEllipsis _ -> Some "..."
+              |         TEllipsis _ -> Some (VariadicArg "...")
 
-              | x ->
+              |         x ->
               (* bugfix: param of macros can be tricky *)
-                 let s = TH.str_of_tok x in
-                 if s ==~ Common.regexp_alpha
-                 then begin
-                   pr2 (spf "remapping: %s to a macro parameter" s);
-                   Some s
-                 end
-                 else
-                   begin
-                     pr2 (spf "bad character %s in macro parameter list" s);
-                     raise Bad_param
-                   end)  in
+                  let s = TH.str_of_tok x in
+                  if s ==~ Common.regexp_alpha
+                  then begin
+                    pr2 (spf "remapping: %s to a macro parameter" s);
+                    Some (FixedArg s)
+                  end
+                  else
+                    begin
+                      pr2 (spf "bad character %s in macro parameter list" s);
+                      raise Bad_param
+                    end) in
           (* bugfix: also substitute to ident in body so cpp_engine will
-           * have an easy job.
-           *)
+             * have an easy job.
+          *)
          let body = body +> List.map (fun tok ->
             match tok with
             | TIdent _ -> tok
             | _ ->
                let s = TH.str_of_tok tok in
                let ii = TH.info_of_tok tok in
+               let params =
+                 List.map
+                   (function FixedArg s -> s | VariadicArg s -> s)
+                   params in
                if s ==~ Common.regexp_alpha && List.mem s params
                then begin
                  pr2 (spf "remapping: %s to an ident in macro body" s);
index 0cbae1d..58fe807 100644 (file)
@@ -4,7 +4,8 @@
 type define_def = string * define_param * define_body
  and define_param =
    | NoParam
-   | Params of string list
+   | Params of define_arg list
+ and define_arg = FixedArg of string | VariadicArg of string
  and define_body =
    | DefineBody of Parser_c.token list
    | DefineHint of parsinghack_hint
index 80e609e..a8e00f2 100644 (file)
@@ -66,6 +66,7 @@ let tokinfo lexbuf  =
     };
    (* must generate a new ref each time, otherwise share *)
     cocci_tag = ref Ast_c.emptyAnnot;
+    annots_tag = Token_annot.empty;
     comments_tag = ref Ast_c.emptyComments;
   }
 
@@ -238,8 +239,8 @@ let extended_letter = ['A'-'Z' 'a'-'z' '_' ':' '<' '>' '~'](*for c++, not used*)
 let digit  = ['0'-'9']
 
 (* not used for the moment *)
-let punctuation = ['!' '"' '#' '%' '&' '\'' '(' ')' '*' '+' ',' '-' '.' '/' ':'
-                  ';' '<' '=' '>' '?' '[' '\\' ']' '^' '{' '|' '}' '~']
+let punctuation = ['!' '\"' '#' '%' '&' '\'' '(' ')' '*' '+' ',' '-' '.' '/' ':'
+                  ';' '<' '=' '>' '?' '[' '\\' ']' '^' '{' '|' '}' '~']  
 let space = [' ' '\t' '\n' '\r' '\011' '\012' ]
 let additionnal = [ ' ' '\b' '\t' '\011' '\n' '\r' '\007' ]
 (* 7 = \a = bell in C. this is not the only char allowed !!
@@ -360,7 +361,7 @@ rule token = parse
       { TCppDirectiveOther (tokinfo lexbuf) }
 
   (* only after cpp, ex: # 1 "include/linux/module.h" 1 *)
-  | "#" sp pent sp  '"' [^ '"']* '"' (spopt pent)*  spopt ('\n' | "\r\n")
+  | "#" sp pent sp  '\"' [^ '\"']* '\"' (spopt pent)*  spopt ('\n' | "\r\n")
       { TCppDirectiveOther (tokinfo lexbuf) }
 
 
@@ -387,7 +388,7 @@ rule token = parse
    * later in parser_c.mly. So redo a little bit of lexing there; ugly but
    * simpler to generate a single token here.  *)
   | (("#" [' ''\t']* "include" [' ' '\t']*) as includes)
-    (('"' ([^ '"']+) '"' |
+    (('\"' ([^ '\"']+) '\"' | 
      '<' [^ '>']+ '>' |
       ['A'-'Z''_']+
     ) as filename)
@@ -396,7 +397,7 @@ rule token = parse
       }
   (* gccext: found in glibc *)
   | (("#" [' ''\t']* "include_next" [' ' '\t']*) as includes)
-    (('"' ([^ '"']+) '"' |
+    (('\"' ([^ '\"']+) '\"' | 
      '<' [^ '>']+ '>' |
       ['A'-'Z''_']+
     ) as filename)
@@ -776,7 +777,7 @@ rule token = parse
         let s = char lexbuf   in
         TChar     ((s,   IsChar),  (info +> tok_add_s (s ^ "'")))
       }
-  | '"'
+  | '\"' 
       { let info = tokinfo lexbuf in
         let s = string lexbuf in
         TString   ((s,   IsChar),  (info +> tok_add_s (s ^ "\"")))
@@ -787,7 +788,7 @@ rule token = parse
         let s = char lexbuf   in
         TChar     ((s,   IsWchar),  (info +> tok_add_s (s ^ "'")))
       }
-  | 'L' '"'
+  | 'L' '\"' 
       { let info = tokinfo lexbuf in
         let s = string lexbuf in
         TString   ((s,   IsWchar),  (info +> tok_add_s (s ^ "\"")))
@@ -880,7 +881,7 @@ and char = parse
           (match v with (* Machine specific ? *)
           | 'n' -> ()  | 't' -> ()   | 'v' -> ()  | 'b' -> () | 'r' -> ()
           | 'f' -> () | 'a' -> ()
-         | '\\' -> () | '?'  -> () | '\'' -> ()  | '"' -> ()
+         | '\\' -> () | '?'  -> () | '\'' -> ()  | '\"' -> () 
           | 'e' -> () (* linuxext: ? *)
          | _ ->
               pr2 ("LEXER: unrecognised symbol in char:"^tok lexbuf);
@@ -906,7 +907,7 @@ and restchars = parse
           (match v with (* Machine specific ? *)
           | 'n' -> ()  | 't' -> ()   | 'v' -> ()  | 'b' -> () | 'r' -> ()
           | 'f' -> () | 'a' -> ()
-         | '\\' -> () | '?'  -> () | '\'' -> ()  | '"' -> ()
+         | '\\' -> () | '?'  -> () | '\'' -> ()  | '\"' -> () 
           | 'e' -> () (* linuxext: ? *)
          | _ ->
               pr2 ("LEXER: unrecognised symbol in char:"^tok lexbuf);
@@ -923,7 +924,7 @@ and restchars = parse
 
 (* todo? factorise code with char ? but not same ending token so hard. *)
 and string  = parse
-  | '"'                                       { "" }
+  | '\"'                                       { "" } 
   | (_ as x)                                  { string_of_char x^string lexbuf}
   | ("\\" (oct | oct oct | oct oct oct)) as x { x ^ string lexbuf }
   | ("\\x" (hex | hex hex)) as x              { x ^ string lexbuf }
@@ -932,7 +933,7 @@ and string  = parse
          (match v with (* Machine specific ? *)
          | 'n' -> ()  | 't' -> ()   | 'v' -> ()  | 'b' -> () | 'r' -> ()
          | 'f' -> () | 'a' -> ()
-        | '\\' -> () | '?'  -> () | '\'' -> ()  | '"' -> ()
+        | '\\' -> () | '?'  -> () | '\'' -> ()  | '\"' -> () 
          | 'e' -> () (* linuxext: ? *)
 
          (* old: "x" -> 10 gccext ? todo ugly, I put a fake value *)
index 38b9261..b4ba545 100644 (file)
@@ -46,7 +46,7 @@ let mk_info_item2 filename toks =
         | Ast_c.OriginTok _ ->
             Buffer.add_string buf (TH.str_of_tok tok)
         | Ast_c.AbstractLineTok _ ->
-            raise Impossible
+            raise (Impossible 79)
         | _ -> ()
       );
       Buffer.contents buf
@@ -358,7 +358,7 @@ let parse_gen parsefunc s =
         !cur_tok
     )
   in
-  let lexbuf_fake = Lexing.from_function (fun buf n -> raise Impossible) in
+  let lexbuf_fake = Lexing.from_function (fun buf n -> raise (Impossible 80)) in
   let result = parsefunc lexer_function lexbuf_fake in
   result
 
@@ -635,7 +635,7 @@ let get_one_elem ~pass tr (file, filelines) =
 
   tr.passed <- [];
 
-  let lexbuf_fake = Lexing.from_function (fun buf n -> raise Impossible) in
+  let lexbuf_fake = Lexing.from_function (fun buf n -> raise (Impossible 81)) in
 
   (try
       (* -------------------------------------------------- *)
@@ -1006,7 +1006,7 @@ let parse_print_error_heuristic2 saved_typedefs saved_macros file =
                   pr2 ("parse error \n = " ^ error_msg_tok cur)
               | Semantic_c.Semantic (s, i) ->
                   pr2 ("semantic error " ^s^ "\n ="^ error_msg_tok cur)
-              | e -> raise Impossible
+              | e -> raise (Impossible 82)
               );
               (* bugfix: *)
               if (checkpoint_file =$= checkpoint2_file) &&
index b1ca186..0318137 100644 (file)
@@ -69,7 +69,7 @@ let addStorageD  = function
 let addInlineD  = function
   | ((true,ii), ({inlineD = (false,[])} as v)) -> { v with inlineD=(true,[ii])}
   | ((true,ii), ({inlineD = (true, ii2)} as v)) -> warning "duplicate inline" v
-  | _ -> raise Impossible
+  | _ -> raise (Impossible 86)
 
 
 let addTypeD     = function
@@ -664,7 +664,7 @@ ident_extra_cpp:
      {
        CppConcatenatedName (
          match $3 with
-         | [] -> raise Impossible
+         | [] -> raise (Impossible 87)
          | (x,concatnull)::xs ->
              assert(null concatnull);
              (mk_string_wrap $1, [])::(x,[$2])::xs
@@ -769,7 +769,7 @@ new_argument:
           let fty = mk_ty (Array (Some $3, ty.Ast_c.p_type)) [$2;$4] in
           let pty = { ty with p_type = fty } in
           Right(ArgType pty)
-       | _ -> raise Impossible
+       | _ -> raise (Impossible 88)
      } 
 
 unary_op:
@@ -1572,7 +1572,7 @@ field_declaration:
           *)
      }
 
- |  spec_qualif_list TPtVirg
+ | spec_qualif_list TPtVirg
      {
        (* gccext: allow empty elements if it is a structdef or enumdef *)
        let (returnType,storage) = fixDeclSpecForDecl $1 in
@@ -1789,18 +1789,23 @@ define_val:
        DefineType typ
      }
 
-/* can be in conflict with decl_spec, maybe change fixDeclSpecForMacro
+/*(* can be in conflict with decl_spec, maybe change fixDeclSpecForMacro
  * to also allow storage ?
  | storage_class_spec { DefineTodo }
  | Tinline { DefineTodo }
-*/
+*)*/
 
- /*(* a few special cases *)*/
- | stat_or_decl stat_or_decl_list { DefineTodo }
-/*
+ | stat_or_decl stat_or_decl_list 
+     { DefineMulti
+        (List.map
+           (function
+               StmtElem e -> e
+             | _ -> failwith "unexpected statement for DefineMulti")
+           ($1 :: $2)) }
+/*(*
  | statement statement { DefineTodo }
  | decl function_definition { DefineTodo }
-*/
+*)*/
 
 
 
@@ -2100,7 +2105,3 @@ opt_ptvirg:
 *)*/
 
 
-expr_opt:
- | expr            { Some $1 }
- | /*(* empty *)*/ { None }
-
diff --git a/parsing_c/parsing_c.mldylib b/parsing_c/parsing_c.mldylib
new file mode 100644 (file)
index 0000000..6599b88
--- /dev/null
@@ -0,0 +1,31 @@
+Token_annot
+Flag_parsing_c
+Parsing_stat
+Token_c
+Ast_c
+Control_flow_c
+Visitor_c
+Lib_parsing_c
+Control_flow_c_build
+Pretty_print_c
+Semantic_c
+Lexer_parser
+Parser_c
+Lexer_c
+Token_helpers
+Token_views_c
+Cpp_token_c
+Parsing_hacks
+Cpp_analysis_c
+Unparse_cocci
+Unparse_c
+Unparse_hrule
+Parsing_recovery_c
+Parsing_consistency_c
+Parse_c
+Type_c
+Cpp_ast_c
+Type_annoter_c
+Comment_annotater_c
+Compare_c
+Test_parsing_c
diff --git a/parsing_c/parsing_c.mllib b/parsing_c/parsing_c.mllib
new file mode 100644 (file)
index 0000000..6599b88
--- /dev/null
@@ -0,0 +1,31 @@
+Token_annot
+Flag_parsing_c
+Parsing_stat
+Token_c
+Ast_c
+Control_flow_c
+Visitor_c
+Lib_parsing_c
+Control_flow_c_build
+Pretty_print_c
+Semantic_c
+Lexer_parser
+Parser_c
+Lexer_c
+Token_helpers
+Token_views_c
+Cpp_token_c
+Parsing_hacks
+Cpp_analysis_c
+Unparse_cocci
+Unparse_c
+Unparse_hrule
+Parsing_recovery_c
+Parsing_consistency_c
+Parse_c
+Type_c
+Cpp_ast_c
+Type_annoter_c
+Comment_annotater_c
+Compare_c
+Test_parsing_c
index 9d05efe..c3ac6b7 100644 (file)
@@ -62,7 +62,7 @@ let is_known_typdef =
       | "u8" | "u16" | "u32" | "u64"
       | "s8"  | "s16" | "s32" | "s64"
       | "__u8" | "__u16" | "__u32"  | "__u64"
-          -> true
+        -> true
 
       | "acpi_handle"
       | "acpi_status"
@@ -182,7 +182,7 @@ let msg_stringification s =
       | "UTS_RELEASE"
       | "SIZE_STR"
       | "DMA_STR"
-          -> true
+        -> true
       (* s when s =~ ".*STR.*" -> true  *)
       | _ -> false
       )
@@ -239,15 +239,15 @@ let msg_attribute s =
 
 (* opti: better to built then once and for all, especially regexp_foreach *)
 
-let regexp_macro =  Str.regexp
+let regexp_macro = Str.regexp
   "^[A-Z_][A-Z_0-9]*$"
 
 (* linuxext: *)
-let regexp_annot =  Str.regexp
+let regexp_annot = Str.regexp
   "^__.*$"
 
 (* linuxext: *)
-let regexp_declare =  Str.regexp
+let regexp_declare = Str.regexp
   ".*DECLARE.*"
 
 (* linuxext: *)
@@ -266,6 +266,10 @@ let ok_typedef s = not (List.mem s false_typedef)
 
 let not_annot s =
   not (s ==~ regexp_annot)
+let is_macro s =
+  s ==~ regexp_macro
+let not_macro s =
+  not (is_macro s)
 
 
 
@@ -313,7 +317,7 @@ let rec is_really_foreach xs =
         single statement in the body of the loop.  undoubtedly more
         cases are needed.
          todo: premier(statement) - suivant(funcall)
-      *)
+       *)
     | TCPar _::TIdent _::xs -> true, xs
     | TCPar _::Tif _::xs -> true, xs
     | TCPar _::Twhile _::xs -> true, xs
@@ -341,11 +345,10 @@ let set_ifdef_token_parenthize_info cnt x =
 
     | TIfdefBool (_, tag, _)
     | TIfdefMisc (_, tag, _)
-    | TIfdefVersion (_, tag, _)
-        ->
-        tag := Some cnt;
+    | TIfdefVersion (_, tag, _) ->
+       tag := Some cnt;
 
-    | _ -> raise Impossible
+    | _ -> raise (Impossible 89)
 
 
 
@@ -410,6 +413,7 @@ let mark_end_define ii =
         Common.charpos = Ast_c.pos_of_info ii + 1
       };
       cocci_tag = ref Ast_c.emptyAnnot;
+      annots_tag = Token_annot.empty;
       comments_tag = ref Ast_c.emptyComments;
     }
   in
@@ -509,23 +513,18 @@ let rec define_ident acc xs =
        * body (it would be a recursive macro, which is forbidden).
        *)
 
-      | TCommentSpace i1::t::xs ->
-
+      | TCommentSpace i1::t::xs
+       when TH.str_of_tok t ==~ Common.regexp_alpha
+       ->
           let s = TH.str_of_tok t in
           let ii = TH.info_of_tok t in
-          if s ==~ Common.regexp_alpha
-          then begin
-            pr2 (spf "remapping: %s to an ident in macro name" s);
-           let acc = (TCommentSpace i1) :: acc in
-           let acc = (TIdentDefine (s,ii)) :: acc in
-            define_ident acc xs
-          end
-          else begin
-            pr2 "WEIRD: weird #define body";
-            define_ident acc xs
-          end
-
-      | _ ->
+         pr2 (spf "remapping: %s to an ident in macro name" s);
+          let acc = (TCommentSpace i1) :: acc in
+         let acc = (TIdentDefine (s,ii)) :: acc in
+          define_ident acc xs
+          
+      | TCommentSpace _::_::xs
+      | xs ->
           pr2 "WEIRD: weird #define body";
           define_ident acc xs
       )
@@ -575,6 +574,7 @@ let new_info posadd str ii =
       };
     (* must generate a new ref each time, otherwise share *)
     cocci_tag = ref Ast_c.emptyAnnot;
+    annots_tag = Token_annot.empty;
     comments_tag = ref Ast_c.emptyComments;
    }
 
@@ -672,7 +672,7 @@ let rec find_ifdef_bool xs =
       msg_ifdef_bool_passing is_ifdef_positif;
 
       (match xxs with
-      | [] -> raise Impossible
+      | [] -> raise (Impossible 90)
       | firstclause::xxs ->
           info_ifdef_stmt +>
          List.iter (TV.save_as_comment (fun x -> Token_c.CppIfDirective x));
@@ -706,7 +706,7 @@ let rec find_ifdef_mid xs =
   | NotIfdefLine _ -> ()
   | Ifdef (xxs, info_ifdef_stmt) ->
       (match xxs with
-      | [] -> raise Impossible
+      | [] -> raise (Impossible 91)
       | [first] -> ()
       | first::second::rest ->
           (* don't analyse big ifdef *)
@@ -852,7 +852,7 @@ let rec find_ifdef_cparen_else xs =
   | NotIfdefLine _ -> ()
   | Ifdef (xxs, info_ifdef_stmt) ->
       (match xxs with
-      | [] -> raise Impossible
+      | [] -> raise (Impossible 92)
       | [first] -> ()
       | first::second::rest ->
 
@@ -1652,6 +1652,20 @@ let fix_tokens_cpp ~macro_defs a =
 
 
 
+let can_be_on_top_level tl =
+  match tl with
+  | Tstruct _
+  | Ttypedef _
+  | TDefine _ 
+  | TIfdef _
+  | TIfdefelse _
+  | TIfdefelif _
+  | TIfdefBool _
+  | TIfdefMisc _
+  | TIfdefVersion _
+  | TEndif _ -> true
+  | _ -> false
+
 
 (*****************************************************************************)
 (* Lexing with lookahead *)
@@ -1695,12 +1709,42 @@ let ident = function
     TIdent _ -> true
   | _ -> false
 
+let is_type = function
+  | TypedefIdent _ 
+  | Tvoid _
+  | Tchar _
+  | Tfloat _
+  | Tdouble _
+      (* christia: not sure what these are? *)
+  | Tsize_t _
+  | Tssize_t _
+  | Tptrdiff_t _
+      
+  | Tint _
+  | Tlong _
+  | Tshort _ -> true
+  | _ -> false
+
+let is_cparen = function (TCPar _) -> true | _ -> false
+let is_oparen = function (TOPar _) -> true | _ -> false
+
+let rec not_has_type_before f xs =
+  match xs with
+  | [] -> raise (Impossible 666)
+  | x :: xs ->
+      if f x then
+       true
+      else if is_type x then
+       false
+      else
+       not_has_type_before f xs
+
 (* This function is inefficient, because it will look over a K&R header,
 or function prototype multiple times.  At least when we see a , and are in a
 parameter list, we know we will eventually see a close paren, and it
 should come fairly soon. *)
 let k_and_r l =
-  let l1 = drop_until (function (TCPar _) -> true | _ -> false) l in
+  let l1 = drop_until is_cparen l in
   match l1 with
     (TCPar _) :: (TOCro _) :: _ -> false
   | (TCPar _) :: _ -> true
@@ -1722,7 +1766,7 @@ let paren_before_comma l =
 
 let lookahead2 ~pass next before =
   match (next, before) with
-
+    
   (* c++ hacks *)
   (* yy xx(   and in function *)
   | TOPar i1::_,              TIdent(s,i2)::TypedefIdent _::_
@@ -1751,17 +1795,95 @@ let lookahead2 ~pass next before =
       if !Flag_parsing_c.debug_typedef
       then pr2 ("TYPEDEF: disable typedef cos special case: " ^ s);
 
-      LP.disable_typedef();
 
+      LP.disable_typedef();
       msg_typedef s i1 1; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
+       (* christia *)
+       (* xx const tt *)
+  | (TIdent (s, i1)::(Tconst _|Tvolatile _|Trestrict _)::type_::_  , _) when not_struct_enum before
+      && is_type type_
+        ->
+
+         TCommentCpp (Token_c.CppDirective, i1)
+
+       (* xx struct *)
+  | (TIdent (s, i1)::Tstruct _::_  , _) when not_struct_enum before
+        ->
+         TCommentCpp (Token_c.CppDirective, i1)
+
+       (* xx tt *)
+  | (TIdent (s, i1)::type_::_  , _) when not_struct_enum before
+      && is_type type_
+        ->
+         TCommentCpp (Token_c.CppDirective, i1)
+
+       (* tt xx yy *)
+  | (TIdent (s, i1)::TIdent (s2, i2)::_  , seen::_) when not_struct_enum before
+      && is_type seen
+        ->
+         if is_macro s2 then
+           TIdent (s, i1)
+         else
+           TCommentCpp (Token_c.CppDirective, i1)
+
+  | (TIdent (s2, i2)::_  , TIdent (s, i1)::seen::_) when not_struct_enum before
+      && is_macro s2 && is_type seen
+        ->
+         TCommentCpp (Token_c.CppDirective, i2)
+
+       (* tt xx * *)
+  | (TIdent (s, i1)::ptr::_  , seen::_) when not_struct_enum before
+      && pointer ptr && is_type seen
+        ->
+         TCommentCpp (Token_c.CppDirective, i1)
+
+       (* tt * xx yy *)
+  | (TIdent (s, i1)::TIdent(s2, i2)::_  , ptr::_) when not_struct_enum before
+      && pointer ptr
+        ->
+         if is_macro s2 then
+           TIdent (s, i1)
+         else
+           TCommentCpp (Token_c.CppDirective, i1)
+
+       (* tt * xx yy *)
+  | (TIdent(s2, i2)::_  , TIdent (s, i1)::ptr::_) when not_struct_enum before
+      && is_macro s2 && pointer ptr
+        ->
+         TCommentCpp (Token_c.CppDirective, i2)
+
+        (* exception to next rule *)
+  | (TIdent(s2, i2)::TOPar _ :: _ , TIdent(s, i1)::seen::_) when not_struct_enum before
+      && is_macro s2 && is_type seen
+        ->
+         TIdent(s2, i2)
+       (* tt xx yy *)
+  | (TIdent(s2, i2)::_  , TIdent(s, i1)::seen::_) when not_struct_enum before
+      && is_macro s2 && is_type seen
+        ->
+         TCommentCpp (Token_c.CppDirective, i2)
+
+  (*  xx * yy      AND  in paramdecl *)
+  | (TIdent (s, i1)::ptr::TIdent (s2, i2)::_ , _)
+    when not_struct_enum before && (LP.current_context() =*= LP.InParameter)
+      && pointer ptr && ok_typedef s
+      ->
+
+      msg_typedef s i1 14; LP.add_typedef_root s;
+      TypedefIdent (s, i1)
+
+  (* xx yy ( *)
+  | (TIdent (s, i1)::TIdent (s2, i2)::TOPar _::_  , _) when not_struct_enum before
+      && ok_typedef s && is_macro s2
+        ->
+         TIdent (s, i1)
   (* xx yy *)
   | (TIdent (s, i1)::TIdent (s2, i2)::_  , _) when not_struct_enum before
       && ok_typedef s
         ->
          (* && not_annot s2 BUT lead to false positive*)
-
       msg_typedef s i1 2; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1770,22 +1892,27 @@ let lookahead2 ~pass next before =
   | (TIdent (s, i1)::Tinline i2::_  , _) when not_struct_enum before
       && ok_typedef s
       ->
+
       msg_typedef s i1 3; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
 
   (* [,(] xx [,)] AND param decl *)
   | (TIdent (s, i1)::(((TComma _|TCPar _)::_) as rest) ,
-     (TComma _ |TOPar _)::_ )
+     ((TComma _ |TOPar _)::_ as bef))
     when not_struct_enum before && (LP.current_context() =*= LP.InParameter)
-      && k_and_r rest
+      && k_and_r rest 
+      && not_has_type_before is_cparen rest 
+      && not_has_type_before is_oparen bef
       ->
+
        TKRParam(s,i1)
 
   | (TIdent (s, i1)::((TComma _|TCPar _)::_) , (TComma _ |TOPar _)::_ )
     when not_struct_enum before && (LP.current_context() =*= LP.InParameter)
       && ok_typedef s
       ->
+
        msg_typedef s i1 4; LP.add_typedef_root s;
        TypedefIdent (s, i1)
 
@@ -1796,6 +1923,7 @@ let lookahead2 ~pass next before =
         (* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
       && ok_typedef s
     ->
+
       msg_typedef s i1 5; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1807,6 +1935,7 @@ let lookahead2 ~pass next before =
       (* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
       && ok_typedef s
     ->
+
       msg_typedef s i1 6; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1838,6 +1967,7 @@ let lookahead2 ~pass next before =
       when pointer ptr && not_struct_enum before
       && ok_typedef s
       ->
+
       (* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
 
       msg_typedef s i1 9; LP.add_typedef_root s;
@@ -1847,6 +1977,7 @@ let lookahead2 ~pass next before =
   (* ( const xx)  *)
   | (TIdent (s, i1)::TCPar _::_,  (Tconst _ | Tvolatile _|Trestrict _)::TOPar _::_) when
       ok_typedef s ->
+
       msg_typedef s i1 10; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1857,6 +1988,7 @@ let lookahead2 ~pass next before =
     when not_struct_enum before
       && ok_typedef s
     ->
+
       msg_typedef s i1 11; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1865,6 +1997,7 @@ let lookahead2 ~pass next before =
       when (LP.current_context() =*= LP.InParameter)
       && ok_typedef s
      ->
+
       msg_typedef s i1 12; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1878,6 +2011,7 @@ let lookahead2 ~pass next before =
      (Tregister _|Tstatic _  |Tvolatile _|Tconst _|Trestrict _)::_) when
       pointer ptr && ok_typedef s
         ->
+
       msg_typedef s i1 13; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1901,6 +2035,7 @@ let lookahead2 ~pass next before =
     when not_struct_enum before && pointer ptr &&
       (LP.is_top_or_struct (LP.current_context ()))
       ->
+
       msg_typedef s i1 15; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1919,6 +2054,7 @@ let lookahead2 ~pass next before =
       && (LP.is_top_or_struct (LP.current_context ()))
       && ok_typedef s && pointer ptr
       ->
+
       msg_typedef s i1 17; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1929,6 +2065,7 @@ let lookahead2 ~pass next before =
       (LP.is_top_or_struct (LP.current_context ()))
       && ok_typedef s && pointer ptr
       ->
+
       msg_typedef s i1 18;  LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1937,6 +2074,7 @@ let lookahead2 ~pass next before =
     when       (LP.is_top_or_struct (LP.current_context ()))
       && ok_typedef s
       ->
+
       msg_typedef s i1 19;  LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1959,6 +2097,7 @@ let lookahead2 ~pass next before =
     when not_struct_enum before
       && ok_typedef s && pointer ptr
       ->
+
       msg_typedef s i1 21; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1968,6 +2107,7 @@ let lookahead2 ~pass next before =
       when not_struct_enum before && (LP.current_context () =*= LP.InParameter)
       && ok_typedef s && pointer ptr
         ->
+
       msg_typedef s i1 22; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1977,6 +2117,7 @@ let lookahead2 ~pass next before =
      (TOBrace _| TPtVirg _)::_)  when not_struct_enum before
       && ok_typedef s & pointer ptr
         ->
+
       msg_typedef s i1 23;  LP.add_typedef_root s;
       msg_maybe_dangereous_typedef s;
       TypedefIdent (s, i1)
@@ -1987,6 +2128,7 @@ let lookahead2 ~pass next before =
      (TOBrace _| TPtVirg _)::_) when
       ok_typedef s && pointer ptr
     ->
+
       msg_typedef s i1 24; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -1997,6 +2139,7 @@ let lookahead2 ~pass next before =
         (* struct user_info_t sometimes *)
       && ok_typedef s && pointer ptr
         ->
+
       msg_typedef s i1 25; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -2004,8 +2147,12 @@ let lookahead2 ~pass next before =
   | (TIdent (s, i1)::TMul _::TMul _::TIdent (s2, i2)::_ , _)
     when not_struct_enum before
         (* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
-      && ok_typedef s
-      ->
+       && ok_typedef s
+       (* christia : this code catches 'a * *b' which is wrong 
+        *)
+       && true
+    ->
+
       msg_typedef s i1 26; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -2015,6 +2162,7 @@ let lookahead2 ~pass next before =
       && ok_typedef s
         (* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
       ->
+
       msg_typedef s i1 27; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -2024,6 +2172,7 @@ let lookahead2 ~pass next before =
         (* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
       && ok_typedef s
       ->
+
       msg_typedef s i1 28; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -2045,6 +2194,7 @@ let lookahead2 ~pass next before =
       && ok_typedef s
       && not (ident x) (* possible K&R declaration *)
       ->
+
       msg_typedef s i1 29; LP.add_typedef_root s;
       (*TOPar info*)
       TypedefIdent (s, i1)
@@ -2067,6 +2217,7 @@ let lookahead2 ~pass next before =
     (TOPar info)::(TEq _ |TEqEq _)::_)
     when ok_typedef s && paren_before_comma rest
         ->
+
       msg_typedef s i1 31; LP.add_typedef_root s;
       (* TOPar info *)
       TypedefIdent (s, i1)
@@ -2076,6 +2227,7 @@ let lookahead2 ~pass next before =
   | (TIdent (s, i1)::ptr::TCPar _::TIdent (s2, i2)::_ , (TOPar info)::_)
     when ok_typedef s && pointer ptr
         ->
+
       msg_typedef s i1 32; LP.add_typedef_root s;
       (*TOPar info*)
       TypedefIdent (s,i1)
@@ -2086,6 +2238,7 @@ let lookahead2 ~pass next before =
       when (*s ==~ regexp_typedef && *) not (TH.is_stuff_taking_parenthized x)
       && ok_typedef s
         ->
+
       msg_typedef s i1 33; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -2103,6 +2256,7 @@ let lookahead2 ~pass next before =
       when not_struct_enum before
       && ok_typedef s
         ->
+
       msg_typedef s i1 34; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -2111,6 +2265,7 @@ let lookahead2 ~pass next before =
       when not_struct_enum before
       && ok_typedef s
         ->
+
       msg_typedef s i1 35; LP.add_typedef_root s;
       TypedefIdent (s, i1)
 
@@ -2123,6 +2278,7 @@ let lookahead2 ~pass next before =
         as x)
     ::_, _
       ->
+
       (*
       if not !Flag_parsing_c.ifdef_to_if
       then TCommentCpp (Ast_c.CppIfDirective, ii)
@@ -2191,9 +2347,16 @@ let lookahead2 ~pass next before =
       end
       else TIdent (s, i1)
 
- (*-------------------------------------------------------------*)
+(*  (* christia: here insert support for macros on top level *)
+  | TIdent (s, ii) :: tl :: _, _ when
+    can_be_on_top_level tl && LP.current_context () = InTopLevel ->
+      pr2_cpp ("'" ^ s ^ "' looks like a macro, I treat it as comment");
+      TCommentCpp (Token_c.CppDirective, ii)
+*)      
+    
+(*-------------------------------------------------------------*)
  | v::xs, _ -> v
- | _ -> raise Impossible
+ | _ -> raise (Impossible 93)
 
 let lookahead ~pass a b =
   Common.profile_code "C parsing.lookahead" (fun () -> lookahead2 ~pass a b)
index a7c9bd8..c1abe48 100644 (file)
@@ -101,7 +101,7 @@ and find_next_synchro_orig next already_passed =
       pr2_err ("ERROR-RECOV: found sync '}' at line "^i_to_s (TH.line_of_tok v));
 
       (match xs with
-      | [] -> raise Impossible (* there is a EOF token normally *)
+      | [] -> raise (Impossible 94) (* there is a EOF token normally *)
 
       (* still useful: now parser.mly allow empty ';' so normally no pb *)
       | Parser_c.TPtVirg iptvirg::xs ->
index 7079ba5..21d7700 100644 (file)
@@ -72,7 +72,11 @@ let mk_pretty_printers
  =
   let start_block () = pr_nl(); pr_indent() in
   let end_block   () = pr_unindent(); pr_nl() in
-
+(*
+  let pr_nl_slash _ = (* multiline macro *)
+    let slash = (Ast_c.fakeInfo() +> Ast_c.rewrap_str " \\") in
+    pr_elem slash; pr_nl() in
+*)
   let indent_if_needed st f =
     match Ast_c.unwrap_st st with
       Compound _ -> pr_space(); f()
@@ -155,7 +159,7 @@ let mk_pretty_printers
     | ArrayAccess (_,_) | RecordAccess (_,_) | RecordPtAccess (_,_)
     | SizeOfExpr (_) | SizeOfType (_) | Cast (_,_)
     | StatementExpr (_) | Constructor _
-    | ParenExpr (_) | New (_) | Delete (_)),_ -> raise Impossible
+    | ParenExpr (_) | New (_) | Delete (_)),_ -> raise (Impossible 95)
     );
 
     if !Flag_parsing_c.pretty_print_type_info
@@ -243,7 +247,7 @@ let mk_pretty_printers
         | _st2, [i4;iifakend] -> pr_elem i4;
            indent_if_needed st2 (function _ -> pp_statement st2);
            pr_elem iifakend
-        | x -> raise Impossible
+        | x -> raise (Impossible 96)
         )
     | Selection  (Switch (e, st)), [i1;i2;i3;iifakend] ->
         pr_elem i1; pr_space(); pr_elem i2; pp_expression e; pr_elem i3;
@@ -309,7 +313,7 @@ let mk_pretty_printers
             pr_elem iasm; pr_elem ivolatile; pr_elem iopar;
             pp_asmbody asmbody;
             pr_elem icpar; pr_elem iptvirg
-        | _ -> raise Impossible
+        | _ -> raise (Impossible 97)
         )
 
     | NestedFunc def, ii ->
@@ -328,7 +332,7 @@ let mk_pretty_printers
     | Jump ((Continue|Break|Return)) | Jump (ReturnExpr _)
     | Jump (GotoComputed _)
     | Decl _
-       ), _ -> raise Impossible
+       ), _ -> raise (Impossible 98)
 
   and pp_statement_seq = function
     | StmtElem st -> pp_statement st
@@ -342,7 +346,7 @@ let mk_pretty_printers
     | if1::ifxs ->
        pp_ifdef if1;
        pp_ifdef_tree_sequence_aux  ifxs xxs
-    | _ -> raise Impossible
+    | _ -> raise (Impossible 99)
 
 (* XXX elsif YYY elsif ZZZ endif *)
   and pp_ifdef_tree_sequence_aux ifdefs xxs =
@@ -382,7 +386,7 @@ let mk_pretty_printers
                pr_elem iopar;
                pp_expression e;
                pr_elem icpar
-           | _ -> raise Impossible))
+           | _ -> raise (Impossible 100)))
         ))
 
 
@@ -455,7 +459,7 @@ let mk_pretty_printers
               pr_elem i1; pr_elem i2; pr_elem i3;
           | None, [i1;i2;i3] ->
               pr_elem i1; pr_elem i2;
-          | x -> raise Impossible
+          | x -> raise (Impossible 101)
          );
 
           fields +> List.iter pp_field;
@@ -463,7 +467,7 @@ let mk_pretty_printers
           (match sopt,iis with
           | Some s , [i1;i2;i3;i4] -> pr_elem i4
           | None, [i1;i2;i3] ->       pr_elem i3;
-          | x -> raise Impossible
+          | x -> raise (Impossible 102)
          );
 
 
@@ -476,7 +480,7 @@ let mk_pretty_printers
               pr_elem i1; pr_elem i2; pr_elem i3;
           | (None, ([i1;i2;i3]|[i1;i2;i3;_])) ->
               pr_elem i1; pr_elem i2
-          | x -> raise Impossible
+          | x -> raise (Impossible 103)
          );
 
           enumt +> List.iter (fun ((name, eopt), iicomma) ->
@@ -497,7 +501,7 @@ let mk_pretty_printers
               pr_elem i4; pr_elem i3 (* trailing comma *)
 
 
-          | x -> raise Impossible
+          | x -> raise (Impossible 104)
          );
 
 
@@ -533,7 +537,7 @@ let mk_pretty_printers
               pr_elem itypeof; pr_elem iopar;
               pp_expression e;
               pr_elem icpar;
-          | _ -> raise Impossible
+          | _ -> raise (Impossible 105)
           )
 
       | (TypeOfType (t), iis) ->
@@ -543,14 +547,14 @@ let mk_pretty_printers
               pr_elem itypeof; pr_elem iopar;
               pp_type t;
               pr_elem icpar;
-          | _ -> raise Impossible
+          | _ -> raise (Impossible 106)
          )
 
       | (Pointer _ | (*ParenType _ |*) Array _ | FunctionType _
             (* | StructUnion _ | Enum _ | BaseType _ *)
             (* | StructUnionName _ | EnumName _ | TypeName _  *)
             (* | TypeOfExpr _ | TypeOfType _ *)
-         ), _ -> raise Impossible
+         ), _ -> raise (Impossible 107)
 
   and pp_field_list fields = fields +>  Common.print_between pr_nl pp_field
   and pp_field = function
@@ -615,7 +619,7 @@ let mk_pretty_printers
                      pp_expression expr
                        )); (* iter other vars *)
 
-       | [] -> raise Impossible
+       | [] -> raise (Impossible 108)
              ); (* onefield_multivars *)
        assert (List.length iiptvirg =|= 1);
        iiptvirg +> List.iter pr_elem;
@@ -750,7 +754,7 @@ let mk_pretty_printers
 
 
       | (FunctionType _ | Array _ | ParenType _ | Pointer _), _ ->
-         raise Impossible
+         raise (Impossible 109)
 
 
   and (pp_type_left: fullType -> unit) =
@@ -778,7 +782,7 @@ let mk_pretty_printers
       | TypeOfType _, _ -> ()
       | TypeOfExpr _, _ -> ()
 
-      | (FunctionType _ | Array _ | Pointer _), _ -> raise Impossible
+      | (FunctionType _ | Array _ | Pointer _), _ -> raise (Impossible 110)
 
 
   and pp_param param =
@@ -835,7 +839,7 @@ let mk_pretty_printers
     | TypeOfType _, _ -> ()
     | TypeOfExpr _, _ -> ()
 
-    | (FunctionType _ | Array _ | Pointer _), _ -> raise Impossible
+    | (FunctionType _ | Array _ | Pointer _), _ -> raise (Impossible 111)
 
   and pp_type t =
     pp_type_with_ident None None t Ast_c.noattr
@@ -866,7 +870,7 @@ let mk_pretty_printers
            | Ast_c.ValInit(iini,init) -> pr_elem iini; pp_init init
            | Ast_c.ConstrInit((init,[lp;rp])) ->
                pr_elem lp; pp_arg_list init; pr_elem rp
-           | Ast_c.ConstrInit _ -> raise Impossible)
+           | Ast_c.ConstrInit _ -> raise (Impossible 112))
        | None -> pp_type returnType
        );
 
@@ -888,10 +892,10 @@ let mk_pretty_printers
            | Ast_c.ValInit(iini,init) -> pr_elem iini; pp_init init
            | Ast_c.ConstrInit((init,[lp;rp])) ->
                pr_elem lp; pp_arg_list init; pr_elem rp
-           | Ast_c.ConstrInit _ -> raise Impossible);
+           | Ast_c.ConstrInit _ -> raise (Impossible 113));
 
 
-       | x -> raise Impossible
+       | x -> raise (Impossible 114)
        );
 
        pr_elem iivirg;
@@ -941,7 +945,7 @@ let mk_pretty_printers
        pr_elem iiend;
 
     | (DeclList (_, _) | (MacroDecl _) | (MacroDeclInit _)) ->
-       raise Impossible
+       raise (Impossible 115)
 
 (* ---------------------- *)
 and pp_init (init, iinit) =
@@ -972,7 +976,7 @@ and pp_init (init, iinit) =
 
       | (InitIndexOld _ | InitFieldOld _ | InitDesignators _
       | InitList _ | InitExpr _
-         ), _ -> raise Impossible
+         ), _ -> raise (Impossible 116)
 
   and pp_init_list ini = pp_list pp_init ini
 
@@ -987,7 +991,7 @@ and pp_init (init, iinit) =
        pp_expression e2; pr_elem iccro;
 
     | (DesignatorField _ | DesignatorIndex _ | DesignatorRange _
-       ), _ -> raise Impossible
+       ), _ -> raise (Impossible 117)
 
 
 (* ---------------------- *)
@@ -1064,7 +1068,7 @@ and pp_init (init, iinit) =
         pr_elem i1;
         statxs +> List.iter pp_statement_seq;
         pr_elem i2;
-    | _ -> raise Impossible
+    | _ -> raise (Impossible 118)
 
   and pp_param_list paramst = pp_list pp_param paramst
 
@@ -1096,7 +1100,7 @@ and pp_init (init, iinit) =
                   pr_elem iwhile; pr_elem iopar;
                   pp_expression e;
                   pr_elem icpar
-              | _ -> raise Impossible
+              | _ -> raise (Impossible 119)
              )
           | DefineFunction def -> pp_def def
 
@@ -1104,7 +1108,8 @@ and pp_init (init, iinit) =
           | DefineText (s, ii) -> List.iter pr_elem ii
           | DefineEmpty -> ()
           | DefineInit ini -> pp_init ini
-
+         | DefineMulti ss ->
+             ss +> List.iter pp_statement
           | DefineTodo -> pr2 "DefineTodo"
        in
        (match defkind with
@@ -1155,7 +1160,7 @@ and pp_init (init, iinit) =
 
     | IfdefTop ifdefdir -> pp_ifdef ifdefdir
 
-    | (MacroTop _) -> raise Impossible in
+    | (MacroTop _) -> raise (Impossible 120) in
 
 
 
diff --git a/parsing_c/token_annot.ml b/parsing_c/token_annot.ml
new file mode 100644 (file)
index 0000000..a879f64
--- /dev/null
@@ -0,0 +1,30 @@
+(* Provides a dictionary of possible annotations on tokens, indexed by keys.
+ *
+ * The purpose of these annotations is to direct the pretty printing of
+ * tokens. The annotations can be set by AST transformations.
+ *
+ * Assumptions: only a few tokens have annotations, and those have only
+ * a few of them.
+ *)
+
+type annot_key =
+    Exclude_start
+  | Exclude_end
+
+type annot_val =
+  Unit
+
+(* A linked list should offer a good tradeoff between space usage
+ * and lookup overhead given our assumptions.
+ *)
+type annots = (annot_key * annot_val) list
+
+let empty = []
+
+let get_annot anns key =
+  if List.mem_assoc key anns
+  then Some (List.assoc key anns)
+  else None
+
+let put_annot key value anns =
+  (key, value) :: anns
diff --git a/parsing_c/token_annot.mli b/parsing_c/token_annot.mli
new file mode 100644 (file)
index 0000000..ad78f1b
--- /dev/null
@@ -0,0 +1,12 @@
+type annot_key =
+    Exclude_start
+  | Exclude_end
+
+type annot_val =
+  Unit
+
+type annots
+
+val empty : annots
+val get_annot : annots -> annot_key -> annot_val option
+val put_annot : annot_key -> annot_val -> annots -> annots
index b941476..afc800c 100644 (file)
@@ -305,7 +305,7 @@ let line_of_paren = function
   | PToken x -> x.line
   | Parenthised (xxs, info_parens) ->
       (match info_parens with
-      | [] -> raise Impossible
+      | [] -> raise (Impossible 121)
       | x::xs -> x.line
       )
 
@@ -352,7 +352,7 @@ let rec mk_body_function_grouped xs =
           | [] ->
               pr2 "PB:not found closing brace in fuzzy parsing";
               [NotBodyLine body]
-          | _ -> raise Impossible
+          | _ -> raise (Impossible 122)
           )
 
       | _ ->
@@ -411,9 +411,9 @@ let tokens_of_paren_ordered xs =
               (match List.rev xs with
               | cpar::xs ->
                   opar, cpar, List.rev xs
-              | _ -> raise Impossible
+              | _ -> raise (Impossible 123)
               )
-          | _ -> raise Impossible
+          | _ -> raise (Impossible 124)
         in
         push2 opar g;
         aux_args (xxs,commas);
@@ -427,7 +427,7 @@ let tokens_of_paren_ordered xs =
         xs +> List.iter aux_tokens_ordered;
         push2 comma g;
         aux_args (ys::xxs, commas)
-    | _ -> raise Impossible
+    | _ -> raise (Impossible 125)
 
   in
 
index 5ce7284..d4fd615 100644 (file)
@@ -202,10 +202,10 @@ let initial_env = ref [
 
   (*
    VarOrFunc("malloc",
-            (Lib.al_type(Parse_c.type_of_string "void* (*)(int size)"),
+            (Lib.al_type(Parse_c.type_of_string "void* ( * )(int size)"),
            Ast_c.NotLocalVar));
    VarOrFunc("free",
-            (Lib.al_type(Parse_c.type_of_string "void (*)(void *ptr)"),
+            (Lib.al_type(Parse_c.type_of_string "void ( * )(void *ptr)"),
            Ast_c.NotLocalVar));
   *)
   ]
@@ -852,7 +852,7 @@ let annotater_expr_visitor_subpart = (fun (k,bigf) expr ->
                 | Pointer (t) -> Some t
                 | _ -> None
                 )
-            | _ -> raise Impossible
+            | _ -> raise (Impossible 159)
 
           in
           (match topt with
@@ -1201,7 +1201,7 @@ let rec visit_toplevel ~just_add_in_env ~depth elem =
                *)
             | iifunc1::iifunc2::ibrace1::ibrace2::ifakestart::isto ->
                 iifunc1, iifunc2
-            | _ -> raise Impossible
+            | _ -> raise (Impossible 160)
           in
           let funcs = Ast_c.str_of_name name in
 
index 7acaf6b..3e4d927 100644 (file)
@@ -84,6 +84,7 @@ let mk_fulltype bt str =
     Ast_c.cocci_tag =
      {contents =
        Some (Ast_cocci.CONTEXT (Ast_cocci.NoPos, Ast_cocci.NOTHING), [])};
+    Ast_c.annots_tag = Token_annot.empty;
     Ast_c.comments_tag = {contents =
         {Ast_c.mbefore = []; Ast_c.mafter = [];
          Ast_c.mbefore2 = []; Ast_c.mafter2 = []
@@ -205,9 +206,9 @@ let structdef_to_struct_name ty =
           qu, Ast_c.mk_tybis (StructUnionName (su, s)) [i1;i2]
       | None, _ ->
           ty
-      | x -> raise Impossible
+      | x -> raise (Impossible 126)
       )
-  | _ -> raise Impossible
+  | _ -> raise (Impossible 127)
 
 
 (*****************************************************************************)
@@ -233,7 +234,7 @@ let type_of_decl decl =
   match decl with
   | Ast_c.DeclList (xs,ii1) ->
       (match xs with
-      | [] -> raise Impossible
+      | [] -> raise (Impossible 128)
 
       (* todo? for other xs ? *)
       | (x,ii2)::xs ->
@@ -255,7 +256,7 @@ let structdef_of_decl decl =
   match decl with
   | Ast_c.DeclList (xs,ii1) ->
       (match xs with
-      | [] -> raise Impossible
+      | [] -> raise (Impossible 129)
 
       (* todo? for other xs ? *)
       | (x,ii2)::xs ->
@@ -265,10 +266,10 @@ let structdef_of_decl decl =
           (match Ast_c.unwrap_typeC v_type with
           | Ast_c.StructUnion (su, _must_be_some, fields) ->
               (su, fields)
-          | _ -> raise Impossible
+          | _ -> raise (Impossible 130)
           )
       )
-  | Ast_c.MacroDecl _ | Ast_c.MacroDeclInit _ -> raise Impossible
+  | Ast_c.MacroDecl _ | Ast_c.MacroDeclInit _ -> raise (Impossible 131)
 
 
 
dissimilarity index 60%
index e0938e4..fb5d9e3 100644 (file)
-(* Yoann Padioleau, Julia Lawall
- *
- * Copyright (C) 2012, INRIA.
- * Copyright (C) 2010, 2011, University of Copenhagen DIKU and INRIA.
- * Copyright (C) 2006, 2007, 2008, 2009 Ecole des Mines de Nantes and DIKU
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License (GPL)
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * file license.txt for more details.
- *
- *
- * Modifications by Julia Lawall for better newline handling.
- *)
-open Common
-
-open Ast_c
-
-module TH = Token_helpers
-
-
-(* should keep comments and directives in between adjacent deleted terms,
-but not comments and directives within deleted terms.  should use the
-labels found in the control-flow graph *)
-
-
-
-(*****************************************************************************)
-(* Wrappers *)
-(*****************************************************************************)
-let pr2, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_unparsing
-
-(*****************************************************************************)
-(* Types used during the intermediate phases of the unparsing *)
-(*****************************************************************************)
-
-type token1 =
-  | Fake1 of info
-  | T1 of Parser_c.token
-
-(* The cocci_tag of the token should always be a NOTHING. The mark of
- * the token can only be OriginTok or ExpandedTok. Why not get rid of
- * token and get something simpler ? because we need to know if the
- * info is a TCommentCpp or TCommentSpace, etc for some of the further
- * analysis so easier to keep with the token.
- *
- * This type contains the whole information. Have all the tokens with this
- * type.
- *)
-type min =
-    Min of (int list (* match numbers from witness trees *) *
-             Ast_cocci.adjacency (* adjacency information *))
-  | Ctx
-
-type token2 =
-  | T2 of Parser_c.token * min *
-          int option (* orig index, abstracting away comments and space *)
-  | Fake2 of min
-  | Cocci2 of string * int (* line *) * int (* lcol *) * int (* rcol *)
-       * Unparse_cocci.nlhint option
-  | C2 of string
-  | Comma of string
-  | Indent_cocci2
-  | Unindent_cocci2 of bool (* true for permanent, false for temporary *)
-  | EatSpace2
-
-(* not used yet *)
-type token3 =
-  | T3 of Parser_c.token
-  | Cocci3 of string
-  | C3 of string
-
-
-(* similar to the tech in parsing_hack *)
-type token_extended = {
-  tok2 : token2;
-  str  : string;
-  idx: int option; (* to know if 2 tokens were consecutive in orig file *)
-  mutable new_tokens_before : token2 list;
-  mutable remove : bool;
-}
-
-
-(*****************************************************************************)
-(* Helpers *)
-(*****************************************************************************)
-
-let info_of_token1 t =
-  match t with
-  | Fake1 info -> info
-  | T1 tok -> TH.info_of_tok tok
-
-let print_token1 = function
-    T1 tok -> TH.str_of_tok tok
-  | Fake1 info -> "fake"
-
-let str_of_token2 = function
-  | T2 (t,_,_) -> TH.str_of_tok t
-  | Fake2 _ -> ""
-  | Cocci2 (s,_,_,_,_) -> s
-  | C2 s -> s
-  | Comma s -> s
-  | Indent_cocci2 -> ""
-  | Unindent_cocci2 _ -> ""
-  | EatSpace2 -> ""
-
-let print_token2 = function
-  | T2 (t,b,_) ->
-      let t_str =
-       match t with
-       | Parser_c.TCommentSpace _ -> " sp "
-       | Parser_c.TCommentNewline _ -> " nl "
-       | Parser_c.TCommentCpp _ -> " cp "
-       | Parser_c.TCommentMisc _ -> " misc "
-       | Parser_c.TComment _ -> " comment "
-       | _ -> "" in
-      let b_str =
-       match b with
-         Min (index,adj) ->
-           Printf.sprintf "-%d[%s]"
-             (match adj with Ast_cocci.ADJ n -> n | _ -> -1)
-             (String.concat " " (List.map string_of_int index))
-       | Ctx -> "" in
-      "T2:"^b_str^t_str^TH.str_of_tok t
-  | Fake2 b ->
-      let b_str =
-       match b with
-         Min (index,adj) ->
-           Printf.sprintf "-%d[%s]"
-             (match adj with Ast_cocci.ADJ n -> n | _ -> -1)
-             (String.concat " " (List.map string_of_int index))
-       | Ctx -> "" in
-      b_str^"fake"
-  | Cocci2 (s,_,lc,rc,_) -> Printf.sprintf "Cocci2:%d:%d%s" lc rc s
-  | C2 s -> "C2:"^s
-  | Comma s -> "Comma:"^s
-  | Indent_cocci2 -> "Indent"
-  | Unindent_cocci2 _ -> "Unindent"
-  | EatSpace2 -> "EatSpace"
-
-let simple_print_all_tokens1 l =
-  List.iter (function x -> Printf.printf "|%s| " (print_token1 x)) l;
-  Printf.printf "\n"
-
-let simple_print_all_tokens2 l =
-  List.iter (function x -> Printf.printf "|%s| " (print_token2 x)) l;
-  Printf.printf "\n"
-
-let str_of_token3 = function
-  | T3 t -> TH.str_of_tok t
-  | Cocci3 s | C3 s -> s
-
-
-
-let mk_token_extended x =
-  let origidx =
-    match x with
-    | T2 (_,_, idx) -> idx
-    | _ -> None
-  in
-  { tok2 = x;
-    str = str_of_token2 x;
-    idx = origidx;
-    new_tokens_before = [];
-    remove = false;
-  }
-
-let rebuild_tokens_extented toks_ext =
-  let _tokens = ref [] in
-  toks_ext +> List.iter (fun tok ->
-    tok.new_tokens_before +> List.iter (fun x -> push2 x _tokens);
-    if not tok.remove then push2 tok.tok2 _tokens;
-  );
-  let tokens = List.rev !_tokens in
-  (tokens +> List.map mk_token_extended)
-
-
-let mcode_contain_plus = function
-  | Ast_cocci.CONTEXT (_,Ast_cocci.NOTHING) -> false
-  | Ast_cocci.CONTEXT _ -> true
-(* patch: when need full coccinelle transformation *)
-  | Ast_cocci.MINUS (_,_,_,Ast_cocci.NOREPLACEMENT) -> false
-  | Ast_cocci.MINUS (_,_,_,Ast_cocci.REPLACEMENT _) -> true(*REPL is not empty*)
-  | Ast_cocci.PLUS _ -> raise Impossible
-
-let contain_plus info =
-  let mck = Ast_c.mcode_of_info info in
-  mcode_contain_plus mck
-
-(*****************************************************************************)
-(* Last fix on the ast *)
-(*****************************************************************************)
-
-(* Because of the ugly trick to handle initialiser, I generate fake ','
- * for the last initializer element, but if there is nothing around it,
- * I don't want in the end to print it.
- *)
-
-let remove_useless_fakeInfo_struct program =
-  let bigf = { Visitor_c.default_visitor_c_s with
-    Visitor_c.kini_s = (fun (k,bigf) ini ->
-      match k ini with
-      | InitList args, ii ->
-          (match ii with
-          | [_i1;_i2] -> ini
-          | [i1;i2;iicommaopt] ->
-              if (not (contain_plus iicommaopt)) && (not (contain_plus i2))
-                 && (Ast_c.is_fake iicommaopt)
-                 (* sometimes the guy put a normal iicommaopt *)
-              then InitList args, [i1;i2]
-              else InitList args, [i1;i2;iicommaopt]
-          | [i1;i2;iicommaopt;end_comma_opt] ->
-             (* only in #define. end_comma_opt canot be fake *)
-             (* not sure if this will be considered ambiguous with a previous
-                case? *)
-              if (not (contain_plus iicommaopt)) && (not (contain_plus i2))
-                 && (Ast_c.is_fake iicommaopt)
-                 (* sometimes the guy put a normal iicommaopt *)
-              then InitList args, [i1;i2;end_comma_opt]
-              else InitList args, [i1;i2;iicommaopt;end_comma_opt]
-          | _ -> raise Impossible
-          )
-      | x -> x
-    )
-  } in
-  Visitor_c.vk_toplevel_s bigf program
-
-
-(*****************************************************************************)
-(* Tokens1 generation *)
-(*****************************************************************************)
-
-let get_fakeInfo_and_tokens celem toks =
-  let toks_in  = ref toks in
-  let toks_out = ref [] in
-
-  (* todo? verify good order of position ? *)
-  let pr_elem info =
-    match Ast_c.pinfo_of_info info with
-    | FakeTok _ ->
-        Common.push2 (Fake1 info) toks_out
-    | OriginTok _ | ExpandedTok _ ->
-        (* get the associated comments/space/cppcomment tokens *)
-        let (before, x, after) =
-         !toks_in +> Common.split_when (fun tok ->
-           info =*= TH.info_of_tok tok)
-        in
-        assert(info =*= TH.info_of_tok x);
-        (*old: assert(before +> List.for_all (TH.is_comment)); *)
-        before +> List.iter (fun x ->
-          if not (TH.is_comment x)
-          then pr2 ("WEIRD: not a comment:" ^ TH.str_of_tok x)
-          (* case such as  int asm d3("x"); not yet in ast *)
-        );
-        before +> List.iter (fun x -> Common.push2 (T1 x) toks_out);
-        push2 (T1 x) toks_out;
-        toks_in := after;
-    | AbstractLineTok _ ->
-        (* can be called on type info when for instance use -type_c *)
-        if !Flag_parsing_c.pretty_print_type_info
-        then Common.push2 (Fake1 info) toks_out
-        else raise Impossible (* at this stage *)
-  in
-
-  let pr_space _ = () in (* use the spacing that is there already *)
-
-  Pretty_print_c.pp_program_gen pr_elem pr_space celem;
-
-  if not (null !toks_in)
-  then failwith "WEIRD: unparsing not finished";
-
-  List.rev !toks_out
-
-(* Fake nodes that have BEFORE code or are - should be moved over any subsequent
-whitespace and newlines, but not any comments, to get as close to the affected
-code as possible.  Similarly, fake nodes that have AFTER code should be moved
-backwards.  No fake nodes should have both before and after code. *)
-
-let displace_fake_nodes toks =
-  let is_fake = function Fake1 _ -> true | _ -> false in
-  let is_whitespace = function
-      T1(Parser_c.TCommentSpace _)
-      (* patch: cocci    *)
-    | T1(Parser_c.TCommentNewline _) -> true
-    | _ -> false in
-  let rec loop toks =
-    let fake_info =
-      try Some (Common.split_when is_fake toks)
-      with Not_found -> None in
-    match fake_info with
-      Some(bef,((Fake1 info) as fake),aft) ->
-       (match !(info.cocci_tag) with
-        | Some x ->
-          (match x with
-           (Ast_cocci.CONTEXT(_,Ast_cocci.BEFORE _),_)
-         | (Ast_cocci.MINUS(_,_,_,Ast_cocci.REPLACEMENT _),_) ->
-           (* move the fake node forwards *)
-             let (whitespace,rest) = Common.span is_whitespace aft in
-             bef @ whitespace @ fake :: (loop rest)
-         | (Ast_cocci.CONTEXT(_,Ast_cocci.AFTER _),_) ->
-           (* move the fake node backwards *)
-             let revbef = List.rev bef in
-             let (revwhitespace,revprev) = Common.span is_whitespace revbef in
-             let whitespace = List.rev revwhitespace in
-             let prev = List.rev revprev in
-             prev @ fake :: (loop (whitespace @ aft))
-         | (Ast_cocci.CONTEXT(_,Ast_cocci.NOTHING),_) ->
-             bef @ fake :: (loop aft)
-         | (Ast_cocci.CONTEXT(_,Ast_cocci.BEFOREAFTER _),_) ->
-             failwith "fake node should not be before-after"
-         | _ -> bef @ fake :: (loop aft) (* old: was removed when have simpler yacfe *)
-        )
-        | None ->
-            bef @ fake :: (loop aft)
-        )
-    | None -> toks
-    | _ -> raise Impossible in
-  loop toks
-
-(*****************************************************************************)
-(* Tokens2 generation *)
-(*****************************************************************************)
-
-let comment2t2 = function
-    (Token_c.TCommentCpp
-       (* not sure iif the following list is exhaustive or complete *)
-       (Token_c.CppAttr|Token_c.CppMacro|Token_c.CppPassingCosWouldGetError),
-     (info : Token_c.info)) ->
-      C2(info.Common.str)
-  | (Token_c.TCommentCpp x,(info : Token_c.info)) ->
-      C2("\n"^info.Common.str^"\n")
-  | x -> failwith (Printf.sprintf "unexpected comment %s" (Common.dump x))
-
-let expand_mcode toks =
-  let toks_out = ref [] in
-
-  let index = ref 0 in
-
-  let add_elem t minus =
-    match t with
-    | Fake1 info ->
-        let str = Ast_c.str_of_info info in
-        if str =$= ""
-        then push2 (Fake2 minus) toks_out
-       (* fx the fake "," at the end of a structure or enum.
-          no idea what other fake info there can be... *)
-       else push2 (Comma str) toks_out
-
-
-    | T1 tok ->
-       (*let (a,b) = !((TH.info_of_tok tok).cocci_tag) in*)
-        (* no tag on expandedTok ! *)
-       let modified = function
-           None -> false
-         | Some (Ast_cocci.CONTEXT(pos,Ast_cocci.NOTHING),l) -> false
-         | _ -> true in
-        (if (TH.is_expanded tok &&
-            modified !((TH.info_of_tok tok).cocci_tag)
-            (*!((TH.info_of_tok tok).cocci_tag) <> Ast_c.emptyAnnot*))
-       then
-         failwith
-           (Printf.sprintf
-              "expanded token %s on line %d is either modified or stored in a metavariable"
-              (TH.str_of_tok tok) (TH.line_of_tok tok)));
-
-        let tok' = tok +> TH.visitor_info_of_tok (fun i ->
-          { i with cocci_tag = ref Ast_c.emptyAnnot; }
-        ) in
-
-        let optindex =
-          if TH.is_origin tok && not (TH.is_real_comment tok)
-          then begin
-              incr index;
-              Some !index
-          end
-          else None
-        in
-
-        push2 (T2 (tok', minus, optindex)) toks_out
-  in
-
-  let expand_info t =
-    let (mcode,env) =
-      Ast_c.mcode_and_env_of_cocciref ((info_of_token1 t).cocci_tag) in
-
-    let pr_cocci s ln col rcol hint =
-      push2 (Cocci2(s,ln,col,rcol,hint)) toks_out  in
-    let pr_c info =
-      (match Ast_c.pinfo_of_info info with
-       Ast_c.AbstractLineTok _ ->
-         push2 (C2 (Ast_c.str_of_info info)) toks_out
-      |        Ast_c.FakeTok (s,_) ->
-         push2 (C2 s) toks_out
-      |        _ ->
-         Printf.fprintf stderr "line: %s\n" (Common.dump info);
-         failwith "not an abstract line");
-      (!(info.Ast_c.comments_tag)).Ast_c.mafter +>
-      List.iter (fun x -> Common.push2 (comment2t2 x) toks_out) in
-
-    let pr_barrier ln col = (* marks a position, used around C code *)
-      push2 (Cocci2("",ln,col,col,None)) toks_out  in
-    let pr_nobarrier ln col = () in (* not needed for linux spacing *)
-
-    let pr_cspace _ = push2 (C2 " ") toks_out in
-
-    let pr_space _ = () (* rely on add_space in cocci code *) in
-    let pr_arity _ = () (* not interested *) in
-
-    let indent _   = push2 Indent_cocci2 toks_out in
-    let unindent x = push2 (Unindent_cocci2 x) toks_out in
-    let eat_space _   = push2 EatSpace2 toks_out in
-
-    let args_pp =
-      (env, pr_cocci, pr_c, pr_cspace,
-       (match !Flag_parsing_c.spacing with
-        Flag_parsing_c.SMPL -> pr_space | _ -> pr_cspace),
-       pr_arity,
-       (match !Flag_parsing_c.spacing with
-        Flag_parsing_c.SMPL -> pr_barrier | _ -> pr_nobarrier),
-       indent, unindent, eat_space) in
-
-    (* old: when for yacfe with partial cocci:
-     *    add_elem t false;
-    *)
-
-    (* patch: when need full coccinelle transformation *)
-    let unparser = Unparse_cocci.pp_list_list_any args_pp false in
-    match mcode with
-    | Ast_cocci.MINUS (_,inst,adj,any_xxs) ->
-        (* Why adding ? because I want to have all the information, the whole
-         * set of tokens, so I can then process and remove the
-         * is_between_two_minus for instance *)
-        add_elem t (Min (inst,adj));
-       (match any_xxs with
-         Ast_cocci.NOREPLACEMENT -> ()
-       | Ast_cocci.REPLACEMENT(any_xxs,_) ->
-            unparser any_xxs Unparse_cocci.InPlace)
-    | Ast_cocci.CONTEXT (_,any_befaft) ->
-        (match any_befaft with
-        | Ast_cocci.NOTHING ->
-            add_elem t Ctx
-        | Ast_cocci.BEFORE (xxs,_) ->
-            unparser xxs Unparse_cocci.Before;
-            add_elem t Ctx
-        | Ast_cocci.AFTER (xxs,_) ->
-            add_elem t Ctx;
-            unparser xxs Unparse_cocci.After;
-        | Ast_cocci.BEFOREAFTER (xxs, yys, _) ->
-            unparser xxs Unparse_cocci.Before;
-            add_elem t Ctx;
-            unparser yys Unparse_cocci.After;
-        )
-    | Ast_cocci.PLUS _ -> raise Impossible
-
-  in
-
-  toks +> List.iter expand_info;
-  List.rev !toks_out
-
-
-(*****************************************************************************)
-(* Tokens2 processing, filtering, adjusting *)
-(*****************************************************************************)
-
-let is_space = function
-  | T2(Parser_c.TCommentSpace _,_b,_i) -> true  (* only whitespace *)
-  | _ -> false
-
-let is_newline = function
-  | T2(Parser_c.TCommentNewline _,_b,_i) -> true
-  | _ -> false
-
-let is_whitespace = function
-  | (T2 (t,_b,_i)) ->
-      (match t with
-      | Parser_c.TCommentSpace _ -> true  (* only whitespace *)
-      | Parser_c.TCommentNewline _ (* newline plus whitespace *) -> true
-      | _ -> false
-      )
-  | _ -> false
-
-let is_minusable_comment = function
-  | (T2 (t,_b,_i)) ->
-      (match t with
-      | Parser_c.TCommentSpace _   (* only whitespace *)
-      (* patch: coccinelle *)
-      | Parser_c.TCommentNewline _ (* newline plus whitespace *) -> true
-      | Parser_c.TComment _ when !Flag_parsing_c.keep_comments -> false
-      | Parser_c.TComment _
-      | Parser_c.TCommentCpp (Token_c.CppAttr, _)
-      | Parser_c.TCommentCpp (Token_c.CppMacro, _)
-      | Parser_c.TCommentCpp (Token_c.CppIfDirective _, _)
-      | Parser_c.TCommentCpp (Token_c.CppDirective, _) (* result was false *)
-        -> true
-
-      | Parser_c.TCommentMisc _
-      | Parser_c.TCommentCpp (Token_c.CppPassingCosWouldGetError, _)
-        -> false
-
-      | _ -> false
-      )
-  | _ -> false
-
-let is_minusable_comment_nocpp = function
-  | (T2 (t,_b,_i)) ->
-      (match t with
-      | Parser_c.TCommentSpace _   (* only whitespace *)
-      (* patch: coccinelle *)
-      | Parser_c.TCommentNewline _ (* newline plus whitespace *) -> true
-      | Parser_c.TComment _ when !Flag_parsing_c.keep_comments -> false
-      | Parser_c.TComment _ -> true
-      | Parser_c.TCommentCpp (Token_c.CppAttr, _)
-      | Parser_c.TCommentCpp (Token_c.CppMacro, _)
-      | Parser_c.TCommentCpp (Token_c.CppIfDirective _, _)
-      | Parser_c.TCommentCpp (Token_c.CppDirective, _)
-        -> false
-
-      | Parser_c.TCommentMisc _
-      | Parser_c.TCommentCpp (Token_c.CppPassingCosWouldGetError, _)
-        -> false
-
-      | _ -> false
-      )
-  | _ -> false
-
-let all_coccis = function
-    Cocci2 _ | C2 _ | Comma _ | Indent_cocci2 | Unindent_cocci2 _
-  | EatSpace2 -> true
-  | _ -> false
-
-(*previously gave up if the first character was a newline, but not clear why*)
-let is_minusable_comment_or_plus x = is_minusable_comment x or all_coccis x
-
-let set_minus_comment adj = function
-  | T2 (t,Ctx,idx) ->
-      let str = TH.str_of_tok t in
-      (match t with
-      | Parser_c.TCommentSpace _
-(* patch: coccinelle *)
-      | Parser_c.TCommentNewline _ -> ()
-
-      | Parser_c.TComment _
-      | Parser_c.TCommentCpp (Token_c.CppAttr, _)
-      | Parser_c.TCommentCpp (Token_c.CppMacro, _)
-      | Parser_c.TCommentCpp (Token_c.CppIfDirective _, _)
-      | Parser_c.TCommentCpp (Token_c.CppDirective, _)
-        ->
-          pr2 (Printf.sprintf "%d: ERASING_COMMENTS: %s"
-                (TH.line_of_tok t) str)
-      | _ -> raise Impossible
-      );
-      T2 (t, Min adj, idx)
-(* patch: coccinelle *)
-  | T2 (t,Min adj,idx) as x -> x
-  | Fake2 _ as x -> x
-  | _ -> raise Impossible
-
-(* don't touch ifdefs, done after *)
-let set_minus_comment_or_plus adj = function
-    Cocci2 _ | C2 _ | Comma _ | Indent_cocci2 | Unindent_cocci2 _
-  | EatSpace2 as x -> x
-  | x -> set_minus_comment adj x
-
-let drop_minus xs =
-  xs +> Common.exclude (function
-    | T2 (t,Min adj,_) -> true
-    | _ -> false
-  )
-
-let drop_expanded xs =
-  xs +> Common.exclude (function
-    | T2 (t,_,_) when TH.is_expanded t -> true
-    | _ -> false
-  )
-
-let drop_fake xs =
-  xs +> Common.exclude (function
-    | Fake2 _ -> true
-    | _ -> false
-  )
-
-let remove_minus_and_between_and_expanded_and_fake xs =
-
-  (* get rid of expanded tok *)
-  let xs = drop_expanded xs in
-
-  let minus_or_comment = function
-      T2(_,Min adj,_) -> true
-    | x -> is_minusable_comment x in
-
-  let minus_or_comment_nocpp = function
-      T2(_,Min adj,_) -> true
-    | x -> is_minusable_comment_nocpp x in
-
-  let common_adj (index1,adj1) (index2,adj2) =
-    let same_adj = (* same adjacency info *)
-      match (adj1,adj2) with
-       (Ast_cocci.ADJ adj1,Ast_cocci.ADJ adj2) -> adj1 = adj2
-      | (Ast_cocci.ALLMINUS,_) | (_,Ast_cocci.ALLMINUS) -> true in
-    same_adj &&
-    (* non-empty intersection of witness trees *)
-    not ((Common.inter_set index1 index2) = []) in
-
-  (* new idea: collects regions not containing non-space context code
-     if two adjacent adjacent minus tokens satisfy common_adj then delete
-     all spaces, comments etc between them
-     if two adjacent minus tokens do not satisfy common_adj only delete
-     the spaces between them if there are no comments, etc.
-     if the region contain no plus code and is both preceded and followed
-     by a newline, delete the initial newline. *)
-
-  let rec adjust_around_minus = function
-      [] -> []
-    | (T2(Parser_c.TCommentNewline c,_b,_i) as x)::
-      ((Fake2(Min adj1) | T2(_,Min adj1,_)) as t1)::xs ->
-       let (minus_list,rest) = Common.span not_context (t1::xs) in
-       let contains_plus = List.exists is_plus minus_list in
-       let x =
-         match List.rev minus_list with
-           (T2(Parser_c.TCommentNewline c,_b,_i))::rest
-           when List.for_all minus_or_comment minus_list ->
-             set_minus_comment_or_plus adj1 x
-         | _ -> x in
-       x :: adjust_within_minus contains_plus minus_list @
-       adjust_around_minus rest
-    | ((Fake2(Min adj1) | T2(_,Min adj1,_)) as t1)::xs ->
-       let (minus_list,rest) = Common.span not_context (t1::xs) in
-       let contains_plus = List.exists is_plus minus_list in
-       adjust_within_minus contains_plus minus_list @ adjust_around_minus rest
-    | x::xs ->
-       x :: adjust_around_minus xs
-  and adjust_within_minus cp (* contains plus *) = function
-      ((Fake2(Min adj1) | T2(_,Min adj1,_)) as t1)::xs ->
-       let not_minus = function T2(_,Min _,_) -> false | _ -> true in
-       let (not_minus_list,rest) = Common.span not_minus xs in
-       t1 ::
-       (match rest with
-         ((Fake2(Min adj2) | T2(_,Min adj2,_)) as t2)::xs
-         when common_adj adj1 adj2 ->
-           (List.map (set_minus_comment_or_plus adj1) not_minus_list)
-           @ (adjust_within_minus cp (t2::xs))
-       | ((Fake2(Min adj2) | T2(_,Min adj2,_)) as t2)::xs ->
-           if not cp && List.for_all is_whitespace not_minus_list
-           then
-             (List.map (set_minus_comment_or_plus adj1) not_minus_list)
-             @ (adjust_within_minus cp (t2::xs))
-           else
-             not_minus_list @ (adjust_within_minus cp (t2::xs))
-       | _ ->
-           if cp
-           then xs
-           else
-             (* remove spaces after removed stuff, eg a comma after a
-                function argument *)
-             (let (spaces,rest) = Common.span is_space xs in
-             (List.map (set_minus_comment_or_plus adj1) spaces)
-             @ rest))
-    | xs -> failwith "should always start with minus"
-  and not_context = function
-      (T2(_,Ctx,_) as x) when not (is_minusable_comment x) -> false
-    | _ -> true
-  and is_plus = function
-      C2 _ | Comma _ | Cocci2 _ -> true
-    | _ -> false in
-
-  let xs = adjust_around_minus xs in
-
-  (* get rid of fake tok *)
-  let xs = drop_fake xs in
-
-  (* this drops blank lines after a brace introduced by removing code *)
-  let minus_or_comment_nonl = function
-      T2(_,Min adj,_) -> true
-    | T2(Parser_c.TCommentNewline _,_b,_i) -> false
-    | x -> is_minusable_comment x in
-
-  let rec adjust_after_brace = function
-      [] -> []
-    | ((T2(_,Ctx,_)) as x)::((T2(_,Min adj,_)::_) as xs)
-       when str_of_token2 x =$= "{" ->
-        let (between_minus,rest) = Common.span minus_or_comment_nonl xs in
-        let is_whitespace = function
-            T2(Parser_c.TCommentSpace _,_b,_i)
-            (* patch: cocci    *)
-          | T2(Parser_c.TCommentNewline _,_b,_i) -> true
-          | _ -> false in
-        let (newlines,rest) = Common.span is_whitespace rest in
-        let (drop_newlines,last_newline) =
-          let rec loop = function
-              [] -> ([],[])
-            | ((T2(Parser_c.TCommentNewline _,_b,_i)) as x) :: rest ->
-                (List.rev rest,[x])
-            | x::xs ->
-                let (drop_newlines,last_newline) = loop xs in
-                (drop_newlines,x::last_newline) in
-          loop (List.rev newlines) in
-        x::between_minus@(List.map (set_minus_comment adj) drop_newlines)@
-        last_newline@
-        adjust_after_brace rest
-    | x::xs -> x::adjust_after_brace xs in
-
-  let xs = adjust_after_brace xs in
-
-  (* search backwards from context } over spaces until reaching a newline.
-     then go back over all minus code until reaching some context or + code.
-     get rid of all intervening spaces, newlines, and comments
-     input is reversed *)
-  let rec adjust_before_brace = function
-      [] -> []
-    | ((T2(t,Ctx,_)) as x)::xs when str_of_token2 x =$= "}" or is_newline x ->
-       let (outer_spaces,rest) = Common.span is_space xs in
-       x :: outer_spaces @
-       (match rest with
-         ((T2 (Parser_c.TCommentNewline _,Ctx,_i)) as h) ::
-         (* the rest of this code is the same as from_newline below
-            but merging them seems to be error prone... *)
-         ((T2 (t, Min adj, idx)) as m) :: rest ->
-           let (spaces,rest) = Common.span minus_or_comment_nocpp rest in
-           h :: m ::
-           (List.map (set_minus_comment adj) spaces) @
-           (adjust_before_brace rest)
-       | _ -> adjust_before_brace rest)
-    | x::xs -> x :: (adjust_before_brace xs) in
-
-  let from_newline = function
-      ((T2 (t, Min adj, idx)) as m) :: rest ->
-       let (spaces,rest) = Common.span minus_or_comment_nocpp rest in
-       m ::
-       (List.map (set_minus_comment adj) spaces) @
-       (adjust_before_brace rest)
-    | ((T2 (t0, Ctx, idx0)) as m0) :: ((T2 (t, Min adj, idx)) as m) :: rest
-       when TH.str_of_tok t0 = "" ->
-         (* This is for the case of a #define that is completely deleted,
-            because a #define has a strange EOL token at the end.
-            We hope there i no other kind of token that is represented by
-            "", but it seems like changing the kind of token might break
-            the end of entity recognition in the C parser.
-            See parsing_hacks.ml *)
-         let (spaces,rest) = Common.span minus_or_comment_nocpp rest in
-         m0 :: m ::
-         (List.map (set_minus_comment adj) spaces) @
-         (adjust_before_brace rest)
-    | rest -> adjust_before_brace rest in
-
-  let xs = List.rev (from_newline (List.rev xs)) in
-
-  let cleanup_ifdefs toks =
-  (* TODO: these functions are horrid, but using tokens caused circularity *)
-    let is_ifdef = function
-       T2((Parser_c.TCommentCpp
-             (Token_c.CppIfDirective Token_c.IfDef, _)),m,idx) -> true
-      | T2((Parser_c.TCommentCpp
-             (Token_c.CppIfDirective Token_c.IfDef0, _)),m,idx) -> true
-      | t -> false in
-    let is_else = function
-       T2((Parser_c.TCommentCpp
-             (Token_c.CppIfDirective Token_c.Else, _)),m,idx) -> true
-      | _ -> false in
-    let is_endif = function
-       T2((Parser_c.TCommentCpp
-             (Token_c.CppIfDirective Token_c.Endif, _)),m,idx) -> true
-      | _ -> false in
-    let add t = function
-       l::rest -> (t::l)::rest
-      |        _ -> failwith "not possible" in
-    let rec parse_ifdef acc_keywords acc_code stack = function
-       [] -> (None,acc_keywords,acc_code)
-      | t::rest when is_else t ->
-         (match stack with
-           [] -> parse_ifdef (t::acc_keywords) ([]::acc_code) stack rest
-         | _ -> parse_ifdef acc_keywords (add t acc_code) stack rest)
-      | t::rest when is_endif t ->
-         (match stack with
-           [] -> ((Some (t,rest)),acc_keywords,acc_code)
-         | _::stack -> parse_ifdef acc_keywords (add t acc_code) stack rest)
-      | t::rest when is_ifdef t ->
-         parse_ifdef acc_keywords (add t acc_code) (()::stack) rest
-      | t::rest -> parse_ifdef acc_keywords (add t acc_code) stack rest in
-    let unminus = function
-       T2 (t,Min adj,idx) -> T2 (t,Ctx,idx)
-      | x -> x in
-    let is_minus = function
-       T2 (t,Min adj,idx) -> true
-      | x -> false in
-    let rec loop = function
-       [] -> []
-      | t::rest when is_ifdef t ->
-         let (ender,acc_keywords,acc_code) =
-           parse_ifdef [t] [[]] [] rest in
-         let acc_code = List.map loop acc_code in
-         let merge = (* args reversed *)
-           List.fold_left2
-             (fun prev kwd code -> kwd :: (List.rev code) @ prev)
-             [] in
-         (match ender with
-           None -> merge (List.map unminus acc_keywords) acc_code
-         | Some(endif,rest) ->
-             let rest = loop rest in
-             if List.for_all is_minus (endif::acc_keywords)
-             then (merge acc_keywords acc_code) @ (endif :: rest)
-             else
-               (merge (List.map unminus acc_keywords) acc_code) @
-               ((unminus endif) :: rest))
-      | x::xs -> x :: loop xs in
-    loop toks in
-      
-  let xs = cleanup_ifdefs xs in
-  let xs = drop_minus xs in
-  xs
-
-(* things that should not be followed by space - boundary between SmPL
-   code and C code *)
-let adjust_eat_space toks =
-  let rec loop = function
-      [] -> []
-    | EatSpace2 :: x :: rest when is_space x -> loop rest
-    | EatSpace2 :: rest -> loop rest
-    | x :: xs -> x :: loop xs in
-  loop toks
-
-(* normally, in C code, a semicolon is not preceded by a space or newline *)
-let adjust_before_semicolon toks =
-  let toks = List.rev toks in
-  let rec search_semic = function
-      [] -> []
-    | ((T2(_,Ctx,_)) as x)::xs | ((Cocci2 _) as x)::xs ->
-       if List.mem (str_of_token2 x) [";";")";","]
-       then x :: search_semic (search_minus false xs)
-       else x :: search_semic xs
-    | x::xs -> x :: search_semic xs
-  and search_minus seen_minus xs =
-    let (spaces, rest) = Common.span is_space xs in
-    (* only delete spaces if something is actually deleted *)
-    match rest with
-      ((T2(_,Min _,_)) as a)::rerest -> a :: search_minus true rerest
-    | _ -> if seen_minus then rest else xs in
-  List.rev (search_semic toks)
-
-(* normally, in C code, a ( is not followed by a space or newline *)
-let adjust_after_paren toks =
-  let rec search_paren = function
-      [] -> []
-    | ((T2(_,Ctx,_)) as x)::xs | ((Cocci2 _) as x)::xs ->
-       if List.mem (str_of_token2 x) ["("] (* other things? *)
-       then x :: search_paren(search_minus false xs)
-       else x :: search_paren xs
-    | x::xs -> x :: search_paren xs
-  and search_minus seen_minus xs =
-    let (spaces, rest) = Common.span is_whitespace xs in
-    (* only delete spaces if something is actually deleted *)
-    match rest with
-      ((T2(_,Min _,_)) as a)::rerest -> (* minus *)
-       a :: search_minus true rerest
-    | ((T2(_,Ctx,_)) as a)::rerest when seen_minus && str_of_token2 a = "," ->
-       (* comma after ( will be deleted, so consider it as minus code
-          already *)
-       a :: search_minus true rerest
-    | _ -> if seen_minus then rest else xs in (* drop trailing space *)
-  search_paren toks
-
-(* this is for the case where braces are added around an if branch *)
-let paren_then_brace toks =
-  let rec search_paren = function
-      [] -> []
-    | ((T2(_,Ctx,_)) as x)::xs ->
-       if List.mem (str_of_token2 x) [")"]
-       then x :: search_paren(search_plus xs)
-       else x :: search_paren xs
-    | x::xs -> x :: search_paren xs
-  and search_plus xs =
-    let (spaces, rest) = Common.span is_whitespace xs in
-    match rest with
-      (* move the brace up to the previous line *)
-      ((Cocci2("{",_,_,_,_)) as x) :: (((Cocci2 _) :: _) as rest) ->
-       (C2 " ") :: x :: spaces @ rest
-    | _ -> xs in
-  search_paren toks
-
-let is_ident_like s = s ==~ Common.regexp_alpha
-
-let rec drop_space_at_endline = function
-    [] -> []
-  | [x] -> [x]
-  | (C2 " ") ::
-    ((((T2(Parser_c.TCommentSpace _,Ctx,_)) | Cocci2("\n",_,_,_,_) |
-    (T2(Parser_c.TCommentNewline _,Ctx,_))) :: _) as rest) ->
-      (* when unparse_cocci doesn't know whether space is needed *)
-      drop_space_at_endline rest
-  | ((T2(Parser_c.TCommentSpace _,Ctx,_i)) as a)::rest ->
-      let (outer_spaces,rest) = Common.span is_space rest in
-      let minus_or_comment_or_space_nocpp = function
-         T2(_,Min adj,_) -> true
-       | (T2(Parser_c.TCommentSpace _,Ctx,_i)) -> true
-       | (T2(Parser_c.TCommentNewline _,Ctx,_i)) -> false
-       | x -> false in
-      let (minus,rest) = Common.span minus_or_comment_or_space_nocpp rest in
-      let fail _ = a :: outer_spaces @ minus @ (drop_space_at_endline rest) in
-      if List.exists (function T2(_,Min adj,_) -> true | _ -> false) minus
-      then
-       match rest with
-         ((T2(Parser_c.TCommentNewline _,Ctx,_i)) as a)::rest ->
-           (* drop trailing spaces *)
-           minus@a::(drop_space_at_endline rest)
-       | _ -> fail()
-      else fail()
-  | a :: rest ->
-      a :: drop_space_at_endline rest
-
-(* if a removed ( is between two tokens, then add a space *)
-let rec paren_to_space = function
-    [] -> []
-  | [x] -> [x]
-  | [x;y] -> [x;y]
-  | ((T2(_,Ctx,_)) as a)::((T2(t,Min _,_)) as b)::((T2(_,Ctx,_)) as c)::rest
-    when not (is_whitespace a) && TH.str_of_tok t = "(" ->
-      a :: b :: (C2 " ") :: (paren_to_space (c :: rest))
-  | a :: rest -> a :: (paren_to_space rest)
-
-let rec add_space xs =
-  match xs with
-  | [] -> []
-  | [x] -> [x]
-  | (Cocci2(sx,lnx,_,rcolx,_) as x)::((Cocci2(sy,lny,lcoly,_,_)) as y)::xs
-    when !Flag_parsing_c.spacing = Flag_parsing_c.SMPL &&
-      not (lnx = -1) && lnx = lny && not (rcolx = -1) && rcolx < lcoly ->
-       (* this only works within a line.  could consider whether
-          something should be done to add newlines too, rather than
-          printing them explicitly in unparse_cocci. *)
-       x::C2 (String.make (lcoly-rcolx) ' ')::add_space (y::xs)
-  | (Cocci2(sx,lnx,_,rcolx,_) as x)::((Cocci2(sy,lny,lcoly,_,_)) as y)::xs
-    when !Flag_parsing_c.spacing = Flag_parsing_c.SMPL &&
-      not (lnx = -1) && lnx < lny && not (rcolx = -1) ->
-       (* this only works within a line.  could consider whether
-          something should be done to add newlines too, rather than
-          printing them explicitly in unparse_cocci. *)
-       x::C2 (String.make (lny-lnx) '\n')::
-       C2 (String.make (lcoly-1) ' '):: (* -1 is for the + *)
-       add_space (y::xs)
-  | ((T2(_,Ctx,_)) as x)::((Cocci2 _) as y)::xs -> (* add space on boundary *)
-      let sx = str_of_token2 x in
-      let sy = str_of_token2 y in
-      if is_ident_like sx && (is_ident_like sy or List.mem sy ["="])
-      then x::C2 " "::(add_space (y::xs))
-      else x::(add_space (y::xs))
-  | x::y::xs -> (* not boundary, not sure if it is possible *)
-      let sx = str_of_token2 x in
-      let sy = str_of_token2 y in
-      if is_ident_like sx && is_ident_like sy
-      then x::C2 " "::(add_space (y::xs))
-      else x::(add_space (y::xs))
-
-(* A fake comma is added at the end of an unordered initlist or a enum
-decl, if the initlist or enum doesn't already end in a comma.  This is only
-needed if there is + code, ie if we see Cocci after it in the code sequence *)
-
-let rec drop_end_comma = function
-    [] -> []
-  | [x] -> [x]
-  | ((Comma ",") as x) :: rest ->
-      let (newlines,rest2) = Common.span is_whitespace rest in
-      (match rest2 with
-       (Cocci2 _) :: _ -> x :: drop_end_comma rest
-      |        _ -> drop_end_comma rest)
-  | x :: xs -> x :: drop_end_comma xs
-
-(* The following only works for the outermost function call.  Stack records
-the column of all open parentheses.  Space_cell contains the most recent
-comma in the outermost function call.  The goal is to decide whether this
-should be followed by a space or a newline and indent. *)
-let add_newlines toks tabbing_unit =
-  let create_indent n =
-    let (tu,tlen) = 
-      match tabbing_unit with
-       Some ("\t",_) -> ("\t",8)
-      | Some ("",_) -> ("\t",8) (* not sure why... *)
-      | Some (s,_) -> (s,String.length s) (* assuming only spaces *)
-      |        None -> ("\t",8) in
-    let rec loop seen =
-      if seen + tlen <= n
-      then tu ^ loop (seen + tlen)
-      else String.make (n-seen) ' ' in
-    loop 0 in
-  let check_for_newline count x = function
-      Some (start,space_cell) when count > Flag_parsing_c.max_width ->
-       space_cell := "\n"^(create_indent x);
-       Some (x + (count - start))
-    | _ -> None in
-  (* the following is for strings that may contain newline *)
-  let string_length s count =
-    let l = list_of_string s in
-    List.fold_left
-      (function count ->
-       function
-           '\t' -> count + 8
-         | '\n' -> 0
-         | c -> count + 1)
-      count l in
-  let rec loop info count = function
-      [] -> []
-    | ((T2(tok,_,_)) as a)::xs ->
-       a :: loop info (string_length (TH.str_of_tok tok) count) xs
-    | ((Cocci2(s,line,lcol,rcol,hint)) as a)::xs ->
-       let (stack,space_cell) = info in
-       let rest =
-         match hint with
-           None -> loop info (string_length s count) xs
-         | Some Unparse_cocci.StartBox ->
-             let count = string_length s count in
-             loop (count::stack,space_cell) count xs
-         | Some Unparse_cocci.EndBox ->
-             let count = string_length s count in
-             (match stack with
-               [x] ->
-                 (match check_for_newline count x space_cell with
-                   Some count -> loop ([],None) count xs
-                 | None -> loop ([],None) count xs)
-             | _ -> loop (List.tl stack,space_cell) count xs)
-         | Some (Unparse_cocci.SpaceOrNewline sp) ->
-             let count = string_length s (count + 1 (*space*)) in
-             (match stack with
-               [x] ->
-                 (match check_for_newline count x space_cell with
-                   Some count -> loop (stack,Some (x,sp)) count xs
-                 | None -> loop (stack,Some (count,sp)) count xs)
-             | _ -> loop info count xs) in
-       a :: rest
-    | ((C2(s)) as a)::xs -> a :: loop info (string_length s count) xs
-    | ((Comma(s)) as a)::xs -> a :: loop info (string_length s count) xs
-    | Fake2 _ :: _ | Indent_cocci2 :: _
-    | Unindent_cocci2 _::_ | EatSpace2::_ ->
-       failwith "unexpected fake, indent, unindent, or eatspace" in
-  let redo_spaces prev = function
-      Cocci2(s,line,lcol,rcol,Some (Unparse_cocci.SpaceOrNewline sp)) ->
-        C2 !sp :: Cocci2(s,line,lcol,rcol,None) :: prev
-    | t -> t::prev in
-  (match !Flag_parsing_c.spacing with
-    Flag_parsing_c.SMPL -> toks
-  | _ -> List.rev (List.fold_left redo_spaces [] (loop ([],None) 0 toks)))
-
-(* When insert some new code, because of a + in a SP, we must add this
- * code at the right place, with the good indentation. So each time we
- * encounter some spacing info, with some newline, we maintain the
- * current indentation level used.
- *
- * TODO problems: not accurate. ex: TODO
- *
- * TODO: if in #define region, should add a \ \n
- *)
-let new_tabbing2 space =
-  (list_of_string space)
-    +> List.rev
-    +> Common.take_until (fun c -> c =<= '\n')
-    +> List.rev
-    +> List.map string_of_char
-    +> String.concat ""
-
-let new_tabbing a =
-  Common.profile_code "C unparsing.new_tabbing" (fun () -> new_tabbing2 a)
-
-
-let rec adjust_indentation xs =
-
-  let _current_tabbing = ref ([] : string list) in
-  let tabbing_unit = ref None in
-
-  let string_of_list l = String.concat "" (List.map string_of_char l) in
-
-  (* try to pick a tabbing unit for the plus code *)
-  let adjust_tabbing_unit old_tab new_tab =
-    if !tabbing_unit =*= None && String.length new_tab > String.length old_tab
-    then
-      let old_tab = list_of_string old_tab in
-      let new_tab = list_of_string new_tab in
-      let rec loop = function
-         ([],new_tab) ->
-           tabbing_unit := Some(string_of_list new_tab,List.rev new_tab)
-       | (_,[]) -> failwith "not possible"
-       | (o::os,n::ns) -> loop (os,ns) in (* could check for equality *)
-      loop (old_tab,new_tab) in
-
-(*
-  let remtab tu current_tab =
-    let current_tab = List.rev(list_of_string current_tab) in
-    let rec loop = function
-       ([],new_tab) -> string_of_list (List.rev new_tab)
-      |        (_,[]) -> (-*weird; tabbing unit used up more than the current tab*-)
-        ""
-      |        (t::ts,n::ns) when t =<= n -> loop (ts,ns)
-      |        (_,ns) -> (-* mismatch; remove what we can *-)
-         string_of_list (List.rev ns) in
-    loop (tu,current_tab) in
-*)
-
-  let rec find_first_tab started = function
-      [] -> ()
-    | ((T2 (tok,_,_)) as x)::xs when str_of_token2 x =$= "{" ->
-       find_first_tab true xs
-(* patch: coccinelle *)
-    | ((T2 (Parser_c.TCommentNewline s, _, _)) as x)::_
-      when started ->
-       let s = str_of_token2 x +> new_tabbing in
-       tabbing_unit := Some (s,List.rev (list_of_string s))
-    | x::xs -> find_first_tab started xs in
-  find_first_tab false xs;
-
-  let rec balanced ct = function
-      [] -> ct >= 0
-    | ((T2(tok,_,_)) as x)::xs ->
-       (match str_of_token2 x with
-         "(" -> balanced (ct+1) xs
-       | ")" -> balanced (ct-1) xs
-       | _ -> balanced ct xs)
-    | x::xs -> balanced ct xs in
-
-  let update_tabbing started s x =
-    let old_tabbing = !_current_tabbing in
-    str_of_token2 x +> new_tabbing +> (fun s -> _current_tabbing := [s]);
-    (* only trust the indentation after the first { *)
-    if started
-    then
-      adjust_tabbing_unit
-       (String.concat "" old_tabbing)
-       (String.concat "" !_current_tabbing) in
-
-  let rec aux started xs =
-    match xs with
-    | [] ->  []
-(* patch: coccinelle *)
-    | ((T2 (Parser_c.TCommentNewline s,_,_)) as x)::
-      Unindent_cocci2(false)::xs ->
-       update_tabbing started s x;
-        (C2 "\n")::aux started xs
-    | (Cocci2("\n",_,_,_,_))::Unindent_cocci2(false)::xs ->
-        (C2 "\n")::aux started xs
-    | ((T2 (tok,_,_)) as x)::(T2 (Parser_c.TCommentNewline s, _, _))::
-      ((Cocci2 ("{",_,_,_,_)) as a)::xs
-      when started && str_of_token2 x =$= ")" ->
-       (* to be done for if, etc, but not for a function header *)
-       x::(C2 " ")::a::(aux started xs)
-    | ((T2 (Parser_c.TCommentNewline s, _, _)) as x)::xs
-      when
-       balanced 0 (fst(Common.span (function x -> not(is_newline x)) xs)) ->
-       update_tabbing started s x;
-       let coccis_rest = Common.span all_coccis xs in
-       (match coccis_rest with
-         (_::_,((T2 (tok,_,_)) as y)::_) when str_of_token2 y =$= "}" ->
-           (* the case where cocci code has been added before a close } *)
-           x::aux started (Indent_cocci2::xs)
-        | _ -> x::aux started xs)
-    | Indent_cocci2::((Cocci2(sy,lny,lcoly,_,_)) as y)::xs
-      when !Flag_parsing_c.spacing = Flag_parsing_c.SMPL ->
-       let tu = String.make (lcoly-1) ' ' in
-       _current_tabbing := tu::(!_current_tabbing);
-       C2 (tu)::aux started (y::xs)
-    | Indent_cocci2::xs ->
-       (match !tabbing_unit with
-         None -> aux started xs
-       | Some (tu,_) ->
-           _current_tabbing := tu::(!_current_tabbing);
-            (* can't be C2, for later phases *)
-            Cocci2 (tu,-1,-1,-1,None)::aux started xs)
-    | Unindent_cocci2(permanent)::xs ->
-       (match !_current_tabbing with
-         [] -> aux started xs
-       | _::new_tabbing ->
-            let s = String.concat "" new_tabbing in
-           _current_tabbing := new_tabbing;
-           Cocci2 (s,-1,-1,-1,None)::aux started xs)
-    (* border between existing code and cocci code *)
-    | ((T2 (tok,_,_)) as x)::((Cocci2("\n",_,_,_,_)) as y)::xs
-      when str_of_token2 x =$= "{" ->
-       x::aux true (y::Indent_cocci2::xs)
-    | ((Cocci2 _) as x)::((T2 (tok,_,_)) as y)::xs
-      when str_of_token2 y =$= "}" ->
-       x::aux started (Unindent_cocci2 true::y::xs)
-    (* starting the body of the function *)
-    | ((T2 (tok,_,_)) as x)::xs when str_of_token2 x =$= "{" ->  x::aux true xs
-    | ((Cocci2("{",_,_,_,_)) as a)::xs -> a::aux true xs
-    | ((Cocci2("\n",_,_,_,_)) as x)::xs ->
-            (* dont inline in expr because of weird eval order of ocaml *)
-        let s = String.concat "" !_current_tabbing in
-        (* can't be C2, for later phases *)
-        x::Cocci2 (s,-1,-1,-1,None)::aux started xs
-    | x::xs -> x::aux started xs in
-  (aux false xs,!tabbing_unit)
-
-
-let rec find_paren_comma = function
-  | [] -> ()
-
-  (* do nothing if was like this in original file *)
-  | ({ str = "("; idx = Some p1 } as _x1)::({ str = ","; idx = Some p2} as x2)
-    ::xs when p2 =|= p1 + 1 ->
-      find_paren_comma (x2::xs)
-
-  | ({ str = ","; idx = Some p1 } as _x1)::({ str = ","; idx = Some p2} as x2)
-    ::xs when p2 =|= p1 + 1 ->
-      find_paren_comma (x2::xs)
-
-  | ({ str = ","; idx = Some p1 } as _x1)::({ str = ")"; idx = Some p2} as x2)
-    ::xs when p2 =|= p1 + 1 ->
-      find_paren_comma (x2::xs)
-
-  (* otherwise yes can adjust *)
-  | ({ str = "(" } as _x1)::({ str = ","} as x2)::xs ->
-      x2.remove <- true;
-      find_paren_comma (x2::xs)
-  | ({ str = "," } as x1)::({ str = ","} as x2)::xs ->
-      x1.remove <- true;
-      find_paren_comma (x2::xs)
-
-  | ({ str = "," } as x1)::({ str = ")"} as x2)::xs ->
-      x1.remove <- true;
-      find_paren_comma (x2::xs)
-
-  | x::xs ->
-      find_paren_comma xs
-
-
-let fix_tokens toks =
-  let toks = toks +> List.map mk_token_extended in
-
-  let cleaner = toks +> Common.exclude (function
-    | {tok2 = T2 (t,_,_)} -> TH.is_real_comment t (* I want the ifdef *)
-    | _ -> false
-  ) in
-  find_paren_comma cleaner;
-
-  let toks = rebuild_tokens_extented toks in
-  toks +> List.map (fun x -> x.tok2)
-
-
-
-(*****************************************************************************)
-(* Final unparsing (and debugging support) *)
-(*****************************************************************************)
-
-(* for debugging *)
-type kind_token2 = KFake | KCocci | KC | KExpanded | KOrigin
-
-let kind_of_token2 = function
-  | Fake2 _ -> KFake
-  | Cocci2 _ -> KCocci
-  | C2 _ -> KC
-  | Comma _ -> KC
-  | T2 (t,_,_) ->
-      (match TH.pinfo_of_tok t with
-      | ExpandedTok _ -> KExpanded
-      | OriginTok _ -> KOrigin
-      | FakeTok _ -> raise Impossible (* now a Fake2 *)
-      | AbstractLineTok _ -> raise Impossible (* now a KC *)
-      )
-  | Unindent_cocci2 _ | Indent_cocci2 | EatSpace2 -> raise Impossible
-
-let end_mark = "!"
-
-let start_mark = function
-  | KFake -> "!F!"
-  | KCocci -> "!S!"
-  | KC -> "!A!"
-  | KExpanded -> "!E!"
-  | KOrigin -> ""
-
-let print_all_tokens2 pr xs =
-  if !Flag_parsing_c.debug_unparsing
-  then
-    let current_kind = ref KOrigin in
-    xs +> List.iter (fun t ->
-      let newkind = kind_of_token2 t in
-      if newkind =*= !current_kind
-      then pr (str_of_token2 t)
-      else begin
-        pr (end_mark);
-        pr (start_mark newkind);
-        pr (str_of_token2 t);
-        current_kind := newkind
-      end
-    );
-  else
-    xs +> List.iter (fun x -> pr (str_of_token2 x))
-
-
-
-
-(*****************************************************************************)
-(* Entry points *)
-(*****************************************************************************)
-
-(* old: PPviatok was made in the beginning to allow to pretty print a
- * complete C file, including a modified C file by transformation.ml,
- * even if we don't handle yet in pretty_print_c.ml, ast_to_flow (and
- * maybe flow_to_ast) all the cases. Indeed we don't need to do some
- * fancy stuff when a function was not modified at all. Just need to
- * print the list of token as-is. But now pretty_print_c.ml handles
- * almost everything so maybe less useful. Maybe PPviatok allows to
- * optimize a little the pretty printing.
- *
- * update: now have PPviastr which goes even faster than PPviatok, so
- * PPviatok has disappeared.
- *)
-
-type ppmethod = PPnormal | PPviastr
-
-
-
-
-(* The pp_program function will call pretty_print_c.ml with a special
- * function to print the leaf components, the tokens. When we want to
- * print a token, we need to print also maybe the space and comments that
- * were close to it in the original file (and that was omitted during the
- * parsing phase), and honor what the cocci-info attached to the token says.
- * Maybe we will not print the token if it's a MINUS-token, and maybe we will
- * print it and also print some cocci-code attached in a PLUS to it.
- * So we will also maybe call unparse_cocci. Because the cocci-code may
- * contain metavariables, unparse_cocci will in fact sometimes call back
- * pretty_print_c (which will this time don't call back again unparse_cocci)
- *)
-
-let pp_program2 xs outfile  =
-  Common.with_open_outfile outfile (fun (pr,chan) ->
-    let pr s =
-      if !Flag_parsing_c.debug_unparsing
-      then begin pr2_no_nl s; flush stderr end
-      else pr s
-        (* flush chan; *)
-        (* Common.pr2 ("UNPARSING: >" ^ s ^ "<"); *)
-    in
-
-    xs +> List.iter (fun ((e,(str, toks_e)), ppmethod) ->
-      (* here can still work on ast *)
-      let e = remove_useless_fakeInfo_struct e in
-
-      match ppmethod with
-      | PPnormal ->
-          (* now work on tokens *)
-          (* phase1: just get all the tokens, all the information *)
-          assert(toks_e +> List.for_all (fun t ->
-           TH.is_origin t or TH.is_expanded t
-          ));
-          let toks = get_fakeInfo_and_tokens e toks_e in
-         let toks = displace_fake_nodes toks in
-          (* assert Origin;ExpandedTok;Faketok *)
-          let toks = expand_mcode toks in
-
-          (* assert Origin;ExpandedTok; + Cocci + C (was AbstractLineTok)
-           * and no tag information, just NOTHING. *)
-
-         let toks =
-           if !Flag.sgrep_mode2
-           then
-             (* nothing else to do for sgrep *)
-             drop_expanded(drop_fake(drop_minus toks))
-           else
-              (* phase2: can now start to filter and adjust *)
-              (let (toks,tu) = adjust_indentation toks in
-             let toks = adjust_eat_space toks in
-             let toks = adjust_before_semicolon toks in(*before remove minus*)
-             let toks = adjust_after_paren toks in(*also before remove minus*)
-             let toks = drop_space_at_endline toks in
-             let toks = paren_to_space toks in
-             let toks = drop_end_comma toks in
-             let toks = remove_minus_and_between_and_expanded_and_fake toks in
-              (* assert Origin + Cocci + C and no minus *)
-             let toks = add_space toks in
-             let toks = add_newlines toks tu in
-             let toks = paren_then_brace toks in
-              let toks = fix_tokens toks in
-              toks) in
-
-          (* in theory here could reparse and rework the ast! or
-           * apply some SP. Not before cos julia may have generated
-           * not parsable file. Need do unparsing_tricks call before being
-           * ready to reparse. *)
-          print_all_tokens2 pr toks;
-
-      | PPviastr -> pr str
-    )
-  )
-
-let pp_program a b =
-  Common.profile_code "C unparsing" (fun () -> pp_program2 a b)
-
-
-let pp_program_default xs outfile =
-  let xs' = xs +> List.map (fun x -> x, PPnormal) in
-  pp_program xs' outfile
+(* Yoann Padioleau, Julia Lawall
+ *
+ * Copyright (C) 2012, INRIA.
+ * Copyright (C) 2010, 2011, University of Copenhagen DIKU and INRIA.
+ * Copyright (C) 2006, 2007, 2008, 2009 Ecole des Mines de Nantes and DIKU
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License (GPL)
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * file license.txt for more details.
+ *
+ *
+ * Modifications by Julia Lawall for better newline handling.
+ *)
+open Common
+
+module TH = Token_helpers
+
+(* should keep comments and directives in between adjacent deleted terms,
+but not comments and directives within deleted terms.  should use the
+labels found in the control-flow graph *)
+
+
+
+(*****************************************************************************)
+(* Wrappers *)
+(*****************************************************************************)
+let pr2, pr2_once = mk_pr2_wrappers Flag_parsing_c.verbose_unparsing
+
+(*****************************************************************************)
+(* Types used during the intermediate phases of the unparsing *)
+(*****************************************************************************)
+
+type token1 =
+  | Fake1 of Ast_c.info
+  | T1 of Parser_c.token
+
+(* The cocci_tag of the token should always be a NOTHING. The mark of
+ * the token can only be OriginTok or ExpandedTok. Why not get rid of
+ * token and get something simpler ? because we need to know if the
+ * info is a TCommentCpp or TCommentSpace, etc for some of the further
+ * analysis so easier to keep with the token.
+ *
+ * This type contains the whole information. Have all the tokens with this
+ * type.
+ *)
+type min =
+  | Min of (int list (* match numbers from witness trees *) *
+            Ast_cocci.adjacency (* adjacency information *))
+  | Ctx
+
+type token2 =
+  | T2 of Parser_c.token * min 
+        * int option (* orig index, abstracting away comments and space *)
+        * Unparse_cocci.nlhint option
+  | Fake2 of min
+  | Cocci2 of string * int (* line *) * int (* lcol *) * int (* rcol *)
+            * Unparse_cocci.nlhint option
+  | C2 of string
+  | Comma of string
+  | Indent_cocci2
+  | Unindent_cocci2 of bool (* true for permanent, false for temporary *)
+  | EatSpace2
+
+(* not used yet *)
+type token3 =
+  | T3 of Parser_c.token
+  | Cocci3 of string
+  | C3 of string
+
+
+(* similar to the tech in parsing_hack *)
+type token_extended = 
+  { tok2 : token2;
+    str  : string;
+    idx  : int option; (* to know if 2 tokens were consecutive in orig file *)
+    mutable new_tokens_before : token2 list;
+    mutable remove : bool;
+  }
+
+
+(*****************************************************************************)
+(* Helpers *)
+(*****************************************************************************)
+
+let info_of_token1 t =
+  match t with
+  | Fake1 info -> info
+  | T1 tok -> TH.info_of_tok tok
+
+let print_token1 = function
+  | T1 tok -> TH.str_of_tok tok
+  | Fake1 info -> "fake"
+
+let str_of_token2 = function
+  | T2 (t,_,_,_) -> TH.str_of_tok t
+  | Cocci2 (s,_,_,_,_)
+  | C2 s
+  | Comma s -> s
+  | Fake2 _
+  | Indent_cocci2
+  | Unindent_cocci2 _
+  | EatSpace2 -> ""
+
+let print_token2 = function
+  | T2 (t,b,_,_) ->
+    let t_str =
+      match t with
+      | Parser_c.TCommentSpace _ -> " sp "
+      | Parser_c.TCommentNewline _ -> " nl "
+      | Parser_c.TCommentCpp _ -> " cp "
+      | Parser_c.TCommentMisc _ -> " misc "
+      | Parser_c.TComment _ -> " comment "
+      | _ -> "" in
+    let b_str =
+      match b with
+      | Min (index,adj) ->
+        Printf.sprintf "-.%d[%s]"
+          (match adj with Ast_cocci.ADJ n -> n | _ -> -1)
+          (String.concat " " (List.map string_of_int index))
+      | Ctx -> "" in
+    "T2:"^b_str^t_str^TH.str_of_tok t
+  | Fake2 b ->
+    let b_str =
+      match b with
+      | Min (index,adj) ->
+        Printf.sprintf "-%d[%s]"
+          (match adj with Ast_cocci.ADJ n -> n | _ -> -1)
+          (String.concat " " (List.map string_of_int index))
+      | Ctx -> "" in
+    b_str^"fake"
+  | Cocci2 (s,_,lc,rc,_) -> Printf.sprintf "Cocci2:%d:%d%s" lc rc s
+  | C2 s -> "C2:"^s
+  | Comma s -> "Comma:"^s
+  | Indent_cocci2 -> "Indent"
+  | Unindent_cocci2 _ -> "Unindent"
+  | EatSpace2 -> "EatSpace"
+
+(*
+let simple_print_all_tokens pr l =
+  List.iter (function x -> Printf.printf "|%s| " (pr x)) l;
+  Printf.printf "\n"
+*)
+
+let str_of_token3 = function
+  | T3 t -> TH.str_of_tok t
+  | Cocci3 s | C3 s -> s
+
+
+
+let mk_token_extended x =
+  let origidx =
+    match x with
+    | T2 (_,_,idx,_) -> idx
+    | _ -> None in
+  { tok2 = x;
+    str = str_of_token2 x;
+    idx = origidx;
+    new_tokens_before = [];
+    remove = false;
+  }
+
+let rebuild_tokens_extented toks_ext =
+  let _tokens = ref [] in
+  toks_ext +> List.iter (fun tok ->
+    tok.new_tokens_before +> List.iter (fun x -> push2 x _tokens);
+    if not tok.remove then push2 tok.tok2 _tokens;
+    );
+  let tokens = List.rev !_tokens in
+  (tokens +> List.map mk_token_extended)
+
+
+let mcode_contain_plus = function
+  | Ast_cocci.CONTEXT (_,Ast_cocci.NOTHING) -> false
+  | Ast_cocci.CONTEXT _ -> true
+  (* patch: when need full coccinelle transformation *)
+  | Ast_cocci.MINUS (_,_,_,Ast_cocci.NOREPLACEMENT) -> false
+  | Ast_cocci.MINUS (_,_,_,Ast_cocci.REPLACEMENT _) -> true(*REPL is not empty*)
+  | Ast_cocci.PLUS _ -> raise (Impossible 132)
+
+let contain_plus info =
+  let mck = Ast_c.mcode_of_info info in
+  mcode_contain_plus mck
+
+(*****************************************************************************)
+(* Last fix on the ast *)
+(*****************************************************************************)
+
+(* Because of the ugly trick to handle initialiser, I generate fake ','
+ * for the last initializer element, but if there is nothing around it,
+ * I don't want in the end to print it.
+ *)
+
+let remove_useless_fakeInfo_struct program =
+  let bigf = { Visitor_c.default_visitor_c_s with
+    Visitor_c.kini_s = (fun (k,bigf) ini ->
+      match k ini with
+      | Ast_c.InitList args, ii ->
+        (match ii with
+        | [_;_] -> ini
+        | i1 :: i2 :: iicommaopt :: tl when 
+           (not (contain_plus iicommaopt)) 
+        && (not (contain_plus i2))
+        && (Ast_c.is_fake iicommaopt) -> 
+          (* sometimes the guy put a normal iicommaopt *)
+          Ast_c.InitList args, (i1 :: i2 :: tl)
+        | ii -> Ast_c.InitList args, ii
+        )
+      | x -> x)
+    } in
+  Visitor_c.vk_toplevel_s bigf program
+
+
+(*****************************************************************************)
+(* Tokens1 generation *)
+(*****************************************************************************)
+
+let get_fakeInfo_and_tokens celem toks =
+  let toks_in  = ref toks in
+  let toks_out = ref [] in
+
+  (* todo? verify good order of position ? *)
+  let pr_elem info =
+    match Ast_c.pinfo_of_info info with
+    | Ast_c.FakeTok _ ->
+      push2 (Fake1 info) toks_out
+    | Ast_c.OriginTok _ | Ast_c.ExpandedTok _ ->
+      (* get the associated comments/space/cppcomment tokens *)
+      let (before, x, after) =
+        !toks_in +> split_when (fun tok ->
+          info =*= TH.info_of_tok tok)
+      in
+      assert(info =*= TH.info_of_tok x);
+      (*old: assert(before +> List.for_all (TH.is_comment)); *)
+      before +> List.iter (fun x ->
+        if not (TH.is_comment x)
+        then pr2 ("WEIRD: not a comment:" ^ TH.str_of_tok x)
+        (* case such as  int asm d3("x"); not yet in ast *)
+        );
+      before +> List.iter (fun x -> push2 (T1 x) toks_out);
+      push2 (T1 x) toks_out;
+      toks_in := after;
+    | Ast_c.AbstractLineTok _ ->
+      (* can be called on type info when for instance use -type_c *)
+      if !Flag_parsing_c.pretty_print_type_info
+      then push2 (Fake1 info) toks_out
+      else raise (Impossible 134) (* at this stage *)
+  in
+
+  let pr_space _ = () in (* use the spacing that is there already *)
+
+  Pretty_print_c.pp_program_gen pr_elem pr_space celem;
+
+  if not (null !toks_in)
+  then failwith "WEIRD: unparsing not finished";
+
+  List.rev !toks_out
+
+(* Fake nodes that have BEFORE code or are - should be moved over any subsequent
+whitespace and newlines, but not any comments, to get as close to the affected
+code as possible.  Similarly, fake nodes that have AFTER code should be moved
+backwards.  No fake nodes should have both before and after code. *)
+
+let displace_fake_nodes toks =
+  let is_fake = function Fake1 _ -> true | _ -> false in
+  let is_whitespace = function
+    | T1(Parser_c.TCommentSpace _)
+  (* patch: cocci    *)
+    | T1(Parser_c.TCommentNewline _) -> true
+    | _ -> false in
+  let rec loop toks =
+    let fake_info =
+      try Some (split_when is_fake toks)
+      with Not_found -> None in
+    match fake_info with
+    | Some(bef,((Fake1 info) as fake),aft) ->
+      (match !(info.Ast_c.cocci_tag) with
+      | Some x ->
+        (match x with
+        | (Ast_cocci.MINUS(_,_,_,Ast_cocci.REPLACEMENT _),_)
+          (* for , replacement is more likely to be like after, but not clear...
+            but treating it as after breaks a lot of tests. *)
+
+        | (Ast_cocci.CONTEXT(_,Ast_cocci.BEFORE _),_) ->
+          (* move the fake node forwards *)
+          let (whitespace,rest) = span is_whitespace aft in
+          bef @ whitespace @ fake :: (loop rest)
+
+        | (Ast_cocci.CONTEXT(_,Ast_cocci.AFTER _),_) ->
+          (* move the fake node backwards *)
+          let revbef = List.rev bef in
+          let (revwhitespace,revprev) = span is_whitespace revbef in
+          let whitespace = List.rev revwhitespace in
+          let prev = List.rev revprev in
+          prev @ fake :: (loop (whitespace @ aft))
+        | (Ast_cocci.CONTEXT(_,Ast_cocci.BEFOREAFTER _),_) ->
+          failwith "fake node should not be before-after"      
+        | (Ast_cocci.CONTEXT(_,Ast_cocci.NOTHING),_)
+        | _ -> bef @ fake :: (loop aft) (* old: was removed when have simpler yacfe *)
+        )
+      | None ->
+        bef @ fake :: (loop aft)
+      )
+    | None -> toks
+    | _ -> raise (Impossible 135) in
+  loop toks
+
+(*****************************************************************************)
+(* Tokens2 generation *)
+(*****************************************************************************)
+
+let comment2t2 = function
+  | (Token_c.TCommentCpp
+  (* not sure iif the following list is exhaustive or complete *)
+    (Token_c.CppAttr|Token_c.CppMacro|Token_c.CppPassingCosWouldGetError),
+    (info : Token_c.info)) ->
+    C2(info.Common.str)
+  | (Token_c.TCommentCpp x,(info : Token_c.info)) ->
+    C2("\n"^info.Common.str^"\n")
+  | x -> failwith (Printf.sprintf "unexpected comment %s" (Dumper.dump x))
+
+let expand_mcode toks =
+  let toks_out = ref [] in
+
+  let index = ref 0 in
+
+  let add_elem t minus =
+    match t with
+    | Fake1 info ->
+      let str = Ast_c.str_of_info info in
+      let isminus = match minus with Min _ -> true | Ctx -> false in
+      (* don't add fake string if the thing should be removed *)
+      if str =$= "" or isminus
+      then push2 (Fake2 minus) toks_out
+      (* fx the fake "," at the end of a structure or enum.
+      no idea what other fake info there can be... *)
+      else push2 (Comma str) toks_out
+
+    | T1 tok ->
+      (*let (a,b) = !((TH.info_of_tok tok).cocci_tag) in*)
+      (* no tag on expandedTok ! *)
+      let modified = function
+        | None -> false
+        | Some (Ast_cocci.CONTEXT(pos,Ast_cocci.NOTHING),l) -> false
+        | _ -> true in
+      (if TH.is_expanded tok &&
+        modified !((TH.info_of_tok tok).Ast_c.cocci_tag)
+        (*!((TH.info_of_tok tok).cocci_tag) <> Ast_c.emptyAnnot*)
+      then
+        failwith
+          (Printf.sprintf
+            "expanded token %s on line %d is either modified or stored in a metavariable"
+            (TH.str_of_tok tok) (TH.line_of_tok tok)));
+
+      let tok' = tok +> TH.visitor_info_of_tok (fun i ->
+        { i with Ast_c.cocci_tag = ref Ast_c.emptyAnnot; }
+      ) in
+
+      let optindex =
+        if TH.is_origin tok && not (TH.is_real_comment tok)
+        then 
+          begin
+            incr index;
+            Some !index
+          end
+        else None
+      in
+
+      push2 (T2 (tok', minus, optindex, None)) toks_out
+  in
+
+  let expand_info t =
+    let (mcode,env) =
+      Ast_c.mcode_and_env_of_cocciref ((info_of_token1 t).Ast_c.cocci_tag) in
+
+    let pr_cocci s ln col rcol hint =
+      push2 (Cocci2 (s,ln,col,rcol,hint)) toks_out  in
+    let pr_c info =
+      (match Ast_c.pinfo_of_info info with
+      | Ast_c.AbstractLineTok _ ->
+        push2 (C2 (Ast_c.str_of_info info)) toks_out
+      |        Ast_c.FakeTok (s,_) ->
+        push2 (C2 s) toks_out
+      |        _ ->
+        Printf.fprintf stderr "line: %s\n" (Dumper.dump info);
+        failwith "not an abstract line"
+      );
+      (!(info.Ast_c.comments_tag)).Ast_c.mafter +>
+      List.iter (fun x -> push2 (comment2t2 x) toks_out) in
+
+    let pr_barrier ln col = (* marks a position, used around C code *)
+      push2 (Cocci2 ("",ln,col,col,None)) toks_out in
+    let pr_nobarrier ln col = () in (* not needed for linux spacing *)
+
+    let pr_cspace _ = push2 (C2 " ") toks_out in
+
+    let pr_space _ = () (* rely on add_space in cocci code *) in
+    let pr_arity _ = () (* not interested *) in
+
+    let indent _ = push2 Indent_cocci2 toks_out in
+    let unindent x = push2 (Unindent_cocci2 x) toks_out in
+    let eat_space _ = push2 EatSpace2 toks_out in
+
+    let args_pp =
+      (env, pr_cocci, pr_c, pr_cspace,
+        (match !Flag_parsing_c.spacing with
+        | Flag_parsing_c.SMPL -> pr_space | _ -> pr_cspace),
+        pr_arity,
+        (match !Flag_parsing_c.spacing with
+        | Flag_parsing_c.SMPL -> pr_barrier | _ -> pr_nobarrier),
+        indent, unindent, eat_space) in
+
+(* old: when for yacfe with partial cocci:
+ *    add_elem t false;
+ *)
+
+(* patch: when need full coccinelle transformation *)
+    let unparser = Unparse_cocci.pp_list_list_any args_pp false in
+    match mcode with
+    | Ast_cocci.MINUS (_,inst,adj,any_xxs) ->
+    (* Why adding ? because I want to have all the information, the whole
+     * set of tokens, so I can then process and remove the
+     * is_between_two_minus for instance *)
+      add_elem t (Min (inst,adj));
+      (match any_xxs with
+      | Ast_cocci.NOREPLACEMENT -> ()
+      | Ast_cocci.REPLACEMENT(any_xxs,_) ->
+        unparser any_xxs Unparse_cocci.InPlace
+      )
+    | Ast_cocci.CONTEXT (_,any_befaft) ->
+      (match any_befaft with
+      | Ast_cocci.NOTHING ->
+        add_elem t Ctx
+      | Ast_cocci.BEFORE (xxs,_) ->
+        unparser xxs Unparse_cocci.Before;
+        add_elem t Ctx
+      | Ast_cocci.AFTER (xxs,_) ->
+        add_elem t Ctx;
+        unparser xxs Unparse_cocci.After;
+      | Ast_cocci.BEFOREAFTER (xxs, yys, _) ->
+        unparser xxs Unparse_cocci.Before;
+        add_elem t Ctx;
+        unparser yys Unparse_cocci.After;
+      )
+    | Ast_cocci.PLUS _ -> raise (Impossible 136)
+  in
+
+  toks +> List.iter expand_info;
+  List.rev !toks_out
+
+
+(*****************************************************************************)
+(* Tokens2 processing, filtering, adjusting *)
+(*****************************************************************************)
+
+let is_space = function
+  | T2(Parser_c.TCommentSpace _,_b,_i,_h) -> true (* only whitespace *)
+  | _ -> false
+
+let is_newline = function
+  | T2(Parser_c.TCommentNewline _,_b,_i,_h) -> true
+  | _ -> false
+
+let is_whitespace x = 
+  is_space x or is_newline x
+
+let is_minusable_comment = function
+  | (T2 (t,_b,_i,_h)) ->
+    (match t with
+    | Parser_c.TCommentSpace _   (* only whitespace *)
+    (* patch: coccinelle *)
+    | Parser_c.TCommentNewline _ (* newline plus whitespace *) -> true
+    | Parser_c.TComment _ when !Flag_parsing_c.keep_comments -> false
+    | Parser_c.TComment _
+    | Parser_c.TCommentCpp (Token_c.CppAttr, _)
+    | Parser_c.TCommentCpp (Token_c.CppMacro, _)
+    | Parser_c.TCommentCpp (Token_c.CppIfDirective _, _)
+    | Parser_c.TCommentCpp (Token_c.CppDirective, _) -> (* result was false *)
+      true
+    (*
+    | Parser_c.TCommentMisc _
+    | Parser_c.TCommentCpp (Token_c.CppPassingCosWouldGetError, _) -> 
+      false
+    *)
+    | _ -> false
+    )
+  | _ -> false
+
+let is_minusable_comment_nocpp = function
+  | (T2 (t,_b,_i,_h)) ->
+    (match t with
+    | Parser_c.TCommentSpace _   (* only whitespace *)
+    (* patch: coccinelle *)
+    | Parser_c.TCommentNewline _ (* newline plus whitespace *) -> true
+    | Parser_c.TComment _ when !Flag_parsing_c.keep_comments -> false
+    | Parser_c.TComment _ -> true
+    (*
+    | Parser_c.TCommentCpp (Token_c.CppAttr, _)
+    | Parser_c.TCommentCpp (Token_c.CppMacro, _)
+    | Parser_c.TCommentCpp (Token_c.CppIfDirective _, _)
+    | Parser_c.TCommentCpp (Token_c.CppDirective, _) -> 
+      false
+
+    | Parser_c.TCommentMisc _
+    | Parser_c.TCommentCpp (Token_c.CppPassingCosWouldGetError, _) -> 
+      false
+    *)
+    | _ -> false
+    )
+  | _ -> false
+
+let all_coccis = function
+  | Cocci2 _ | C2 _ | Comma _ | Indent_cocci2 
+  | Unindent_cocci2 _ | EatSpace2 -> true
+  | _ -> false
+
+(* previously gave up if the first character was a newline, but not clear why *)
+let is_minusable_comment_or_plus x = 
+  is_minusable_comment x or all_coccis x
+
+let set_minus_comment adj = function
+  | T2 (t,Ctx,idx,hint) ->
+    let str = TH.str_of_tok t in
+    (match t with
+    | Parser_c.TCommentSpace _
+    (* patch: coccinelle *)
+    | Parser_c.TCommentNewline _ -> ()
+
+    | Parser_c.TComment _
+    | Parser_c.TCommentCpp (Token_c.CppAttr, _)
+    | Parser_c.TCommentCpp (Token_c.CppMacro, _)
+    | Parser_c.TCommentCpp (Token_c.CppIfDirective _, _)
+    | Parser_c.TCommentCpp (Token_c.CppDirective, _) ->
+      pr2 (Printf.sprintf "%d: ERASING_COMMENTS: %s"
+        (TH.line_of_tok t) str)
+    | _ -> raise (Impossible 137)
+    );
+    T2 (t, Min adj, idx, hint)
+    (* patch: coccinelle *)
+  | T2 (t, Min adj, idx, hint) as x -> x
+  | Fake2 _ as x -> x
+  | _ -> raise (Impossible 138)
+
+(* don't touch ifdefs, done after *)
+let set_minus_comment_or_plus adj = function
+  | Cocci2 _ | C2 _ | Comma _ | Indent_cocci2 
+  | Unindent_cocci2 _ | EatSpace2 as x -> x
+  | x -> set_minus_comment adj x
+
+let is_minus = function
+  | T2 (_, Min _, _, _) -> true
+  | _ -> false 
+
+let drop_minus xs =
+  xs +> exclude is_minus 
+
+let drop_expanded xs =
+  xs +> exclude (function
+    | T2 (t,_,_,_) when TH.is_expanded t -> true
+    | _ -> false
+  )
+
+let drop_fake xs =
+  xs +> exclude (function
+    | Fake2 _ -> true
+    | _ -> false
+  )
+
+let remove_minus_and_between_and_expanded_and_fake xs =
+
+  (* get rid of expanded tok *)
+  let xs = drop_expanded xs in
+
+  let minus_or_comment x = 
+    is_minus x or is_minusable_comment x in
+
+  let minus_or_comment_nocpp x =
+    is_minus x or is_minusable_comment_nocpp x in
+
+  let common_adj (index1,adj1) (index2,adj2) =
+    let same_adj = (* same adjacency info *)
+      match (adj1,adj2) with
+      | (Ast_cocci.ADJ adj1,Ast_cocci.ADJ adj2) -> adj1 = adj2
+      | (Ast_cocci.ALLMINUS,_) | (_,Ast_cocci.ALLMINUS) -> true in
+    same_adj &&
+    (* non-empty intersection of witness trees *)
+    not ((inter_set index1 index2) = []) in
+
+  (* new idea: collects regions not containing non-space context code
+  if two adjacent adjacent minus tokens satisfy common_adj then delete
+  all spaces, comments etc between them
+  if two adjacent minus tokens do not satisfy common_adj only delete
+  the spaces between them if there are no comments, etc.
+  if the region contain no plus code and is both preceded and followed
+  by a newline, delete the initial newline. *)
+
+  let rec adjust_around_minus = function
+    | [] -> []
+    | (T2(Parser_c.TCommentNewline c,_b,_i,_h) as x)::
+      ((Fake2(Min adj1) | T2(_,Min adj1,_,_)) as t1)::xs ->
+      let (minus_list,rest) = span not_context (t1::xs) in
+      let contains_plus = List.exists is_plus minus_list in
+      let x =
+        match List.rev minus_list with
+        | (T2(Parser_c.TCommentNewline c,_b,_i,_h))::rest
+          when List.for_all minus_or_comment minus_list ->
+          set_minus_comment_or_plus adj1 x
+        | _ -> x in
+      x :: adjust_within_minus contains_plus minus_list 
+         @ adjust_around_minus rest
+    | ((Fake2(Min adj1) | T2(_,Min adj1,_,_)) as t1)::xs ->
+      let (minus_list,rest) = span not_context (t1::xs) in
+      let contains_plus = List.exists is_plus minus_list in
+        adjust_within_minus contains_plus minus_list 
+      @ adjust_around_minus rest
+    | x::xs ->
+      x :: adjust_around_minus xs
+  and adjust_within_minus cp (* contains plus *) = function
+    | ((Fake2(Min adj1) | T2(_,Min adj1,_,_)) as t1)::xs ->
+      let not_minus = function T2(_,Min _,_,_) -> false | _ -> true in
+      let (not_minus_list,rest) = span not_minus xs in
+      t1 ::
+      (match rest with
+      | ((Fake2(Min adj2) | T2(_,Min adj2,_,_)) as t2)::xs ->
+        if common_adj adj1 adj2 
+        || not cp && List.for_all is_whitespace not_minus_list
+        then
+          (List.map (set_minus_comment_or_plus adj1) not_minus_list)
+          @ (adjust_within_minus cp (t2::xs))
+        else
+          not_minus_list 
+         @ (adjust_within_minus cp (t2::xs))
+      | _ ->
+        if cp
+        then xs
+        else
+          (* remove spaces after removed stuff, eg a comma after a
+          function argument *)
+          (let (spaces,rest) = span is_space xs in
+          (List.map (set_minus_comment_or_plus adj1) spaces)
+          @ rest)
+      )
+    | xs -> failwith "should always start with minus"
+  and not_context = function
+    | (T2(_,Ctx,_,_) as x) when not (is_minusable_comment x) -> false
+    | _ -> true
+  and is_plus = function
+    | C2 _ | Comma _ | Cocci2 _ -> true
+    | _ -> false in
+
+  let xs = adjust_around_minus xs in
+
+  (* get rid of fake tok *)
+  let xs = drop_fake xs in
+
+  (* this drops blank lines after a brace introduced by removing code *)
+  let minus_or_comment_nonl = function
+    | T2(_,Min adj,_,_) -> true
+    | T2(Parser_c.TCommentNewline _,_b,_i,_h) -> false
+    | x -> is_minusable_comment x in
+
+  let rec adjust_after_brace = function
+    | [] -> []
+    | ((T2(_,Ctx,_,_)) as x)::((T2(_,Min adj,_,_)::_) as xs)
+      when str_of_token2 x =$= "{" ->
+      let (between_minus,rest) = span minus_or_comment_nonl xs in
+      let (newlines,rest) = span is_whitespace rest in
+      let (drop_newlines,last_newline) =
+        let rec loop = function
+          | [] -> ([],[])
+          | ((T2(Parser_c.TCommentNewline _,_b,_i,_h)) as x) :: rest ->
+            (List.rev rest,[x])
+          | x::xs ->
+            let (drop_newlines,last_newline) = loop xs in
+            (drop_newlines,x::last_newline) in
+        loop (List.rev newlines) in
+      x :: between_minus
+         @ List.map (set_minus_comment adj) drop_newlines
+         @ last_newline
+         @ adjust_after_brace rest
+    | x::xs -> x :: (adjust_after_brace xs) in
+
+  let xs = adjust_after_brace xs in
+
+  (* search backwards from context } over spaces until reaching a newline.
+  then go back over all minus code until reaching some context or + code.
+  get rid of all intervening spaces, newlines, and comments
+  input is reversed *)
+  let rec adjust_before_brace = function
+    | [] -> []
+    | ((T2(t,Ctx,_,_)) as x)::xs
+      when str_of_token2 x =$= "}" or is_newline x ->
+      let (outer_spaces,rest) = span is_space xs in
+      x :: outer_spaces @
+      (match rest with
+      | ((T2 (Parser_c.TCommentNewline _,Ctx,_i,_h)) as h) ::
+        (* the rest of this code is the same as from_newline below
+        but merging them seems to be error prone... *)
+        ((T2 (t, Min adj, idx, hint)) as m) :: rest ->
+        let (spaces,rest) = span minus_or_comment_nocpp rest in
+        h :: m ::
+        (List.map (set_minus_comment adj) spaces) @
+        (adjust_before_brace rest)
+      | _ -> adjust_before_brace rest
+      )
+    | x::xs -> x :: (adjust_before_brace xs) in
+
+  let from_newline = function
+    | ((T2 (t, Min adj, idx, hint)) as m) :: rest ->
+      let (spaces,rest) = span minus_or_comment_nocpp rest in
+      m ::
+      (List.map (set_minus_comment adj) spaces) @
+      (adjust_before_brace rest)
+    | ((T2 (t0,Ctx, idx0,h0)) as m0) :: 
+      ((T2 (t,Min adj,idx,h)) as m) :: rest
+      when TH.str_of_tok t0 = "" ->
+      (* This is for the case of a #define that is completely deleted,
+      because a #define has a strange EOL token at the end.
+      We hope there i no other kind of token that is represented by
+      "", but it seems like changing the kind of token might break
+      the end of entity recognition in the C parser.
+      See parsing_hacks.ml *)
+      let (spaces,rest) = span minus_or_comment_nocpp rest in
+      m0 :: m ::
+      (List.map (set_minus_comment adj) spaces) @
+      (adjust_before_brace rest)
+    | rest -> adjust_before_brace rest in
+
+  let xs = List.rev (from_newline (List.rev xs)) in
+
+  let cleanup_ifdefs toks =
+    (* TODO: these functions are horrid, but using tokens caused circularity *)
+    let is_ifdef = function
+      | T2((Parser_c.TCommentCpp
+        (Token_c.CppIfDirective Token_c.IfDef, _)),m,idx,_) -> true
+      | T2((Parser_c.TCommentCpp
+        (Token_c.CppIfDirective Token_c.IfDef0, _)),m,idx,_) -> true
+      | t -> false in
+    let is_else = function
+      | T2((Parser_c.TCommentCpp
+        (Token_c.CppIfDirective Token_c.Else, _)),m,idx,_) -> true
+      | _ -> false in
+    let is_endif = function
+      | T2((Parser_c.TCommentCpp
+        (Token_c.CppIfDirective Token_c.Endif, _)),m,idx,_) -> true
+      | _ -> false in
+    let add t = function
+      | l::rest -> (t::l)::rest
+      |        _ -> failwith "not possible" in
+    let rec parse_ifdef acc_keywords acc_code stack = function
+      | [] -> (None,acc_keywords,acc_code)
+      | t::rest when is_else t ->
+        (match stack with
+        | [] -> parse_ifdef (t::acc_keywords) ([]::acc_code) stack rest
+        | _ -> parse_ifdef acc_keywords (add t acc_code) stack rest
+        )
+      | t::rest when is_endif t ->
+        (match stack with
+        | [] -> ((Some (t,rest)),acc_keywords,acc_code)
+        | _::stack -> parse_ifdef acc_keywords (add t acc_code) stack rest
+        )
+      | t::rest when is_ifdef t ->
+        parse_ifdef acc_keywords (add t acc_code) (()::stack) rest
+      | t::rest -> parse_ifdef acc_keywords (add t acc_code) stack rest in
+    let unminus = function
+      | T2 (t,Min adj,idx,hint) -> T2 (t,Ctx,idx,hint)
+      | x -> x in
+    let rec loop = function
+      | [] -> []
+      | t::rest when is_ifdef t ->
+        let (ender,acc_keywords,acc_code) =
+          parse_ifdef [t] [[]] [] rest in
+        let acc_code = List.map loop acc_code in
+        let merge = (* args reversed *)
+          List.fold_left2
+            (fun prev kwd code -> kwd :: (List.rev code) @ prev)
+            [] in
+        (match ender with
+        | None -> merge (List.map unminus acc_keywords) acc_code
+        | Some(endif,rest) ->
+          let rest = loop rest in
+          if List.for_all is_minus (endif :: acc_keywords)
+          then (merge acc_keywords acc_code) @ (endif :: rest)
+          else
+            (merge (List.map unminus acc_keywords) acc_code) @
+            ((unminus endif) :: rest)
+        )
+      | x::xs -> x :: loop xs in
+    loop toks in
+
+  let xs = cleanup_ifdefs xs in
+  let xs = drop_minus xs in
+  xs
+
+(* things that should not be followed by space - boundary between SmPL
+code and C code *)
+let adjust_eat_space toks =
+  let rec loop = function
+    | [] -> []
+    | EatSpace2 :: x :: rest when is_space x -> loop rest
+    | EatSpace2 :: rest -> loop rest
+    | x :: xs -> x :: loop xs in
+  loop toks
+
+(* normally, in C code, a semicolon is not preceded by a space or newline *)
+let adjust_before_semicolon toks =
+  let toks = List.rev toks in
+  let rec search_semic = function
+    | [] -> []
+    | ((T2(_,Ctx,_,_) | Cocci2 _) as x)::xs
+      when List.mem (str_of_token2 x) [";";")";","] ->
+      x :: search_semic (search_minus false xs)
+    | x::xs -> x :: search_semic xs
+  and search_minus seen_minus xs =
+    let (spaces, rest) = span is_space xs in
+    (* only delete spaces if something is actually deleted *)
+    match rest with
+    | ((T2(_,Min _,_,_)) as a)::rerest -> a :: search_minus true rerest
+    | _ -> if seen_minus then rest else xs in
+  List.rev (search_semic toks)
+
+(* normally, in C code, a ( is not followed by a space or newline *)
+let adjust_after_paren toks =
+  let rec search_paren = function
+    | [] -> []
+    | ((T2(_,Ctx,_,_) | Cocci2 _) as x)::xs
+      when List.mem (str_of_token2 x) ["("] (* other things? *) ->
+      x :: search_paren (search_minus false xs)
+    | x::xs -> x :: search_paren xs
+  and search_minus seen_minus xs =
+    let (spaces, rest) = span is_whitespace xs in
+    (* only delete spaces if something is actually deleted *)
+    match rest with
+    | ((T2(_,Min _,_,_)) as a)::rerest -> (* minus *)
+      a :: search_minus true rerest
+    | ((T2(_,Ctx,_,_)) as a)::rerest
+      when seen_minus && str_of_token2 a = "," ->
+      (* comma after ( will be deleted, so consider it as minus code
+      already *)
+      a :: search_minus true rerest
+    | _ -> if seen_minus then rest else xs in (* drop trailing space *)
+  search_paren toks
+
+(* this is for the case where braces are added around an if branch *)
+let paren_then_brace toks =
+  let rec search_paren = function
+    | [] -> []
+    | ((T2(_,Ctx,_,_)) as x)::xs
+      when List.mem (str_of_token2 x) [")"] ->
+      x :: search_paren (search_plus xs)
+    | x::xs -> x :: search_paren xs
+  and search_plus xs =
+    let (spaces, rest) = span is_space xs in
+    let (nls, rest) = span is_newline rest in
+    match rest with
+    (* move the brace up to the previous line *)
+    | ((Cocci2("{",_,_,_,_)) as x) :: (((Cocci2 _) :: _) as rest) ->
+      spaces @ x :: nls @ rest
+    | _ -> xs in
+  search_paren toks
+
+let is_ident_like s = s ==~ regexp_alpha
+
+let rec drop_space_at_endline = function
+  | [] -> []
+  | [x] -> [x]
+  | (C2 " ") ::
+    ((((T2(Parser_c.TCommentSpace _,Ctx,_,_)) | Cocci2("\n",_,_,_,_) |
+    (T2(Parser_c.TCommentNewline _,Ctx,_,_))) :: _) as rest) ->
+    (* when unparse_cocci doesn't know whether space is needed *)
+    drop_space_at_endline rest
+  | ((T2(Parser_c.TCommentSpace _,Ctx,_i,_h)) as a)::rest ->
+    let (outer_spaces,rest) = span is_space rest in
+    let minus_or_comment_or_space_nocpp = function
+      | T2(_,Min adj,_,_) -> true
+      | (T2(Parser_c.TCommentSpace _,Ctx,_i,_)) -> true
+      | (T2(Parser_c.TCommentNewline _,Ctx,_i,_)) -> false
+      | x -> false in
+    let (minus,rest) = span minus_or_comment_or_space_nocpp rest in
+    let fail _ = a :: outer_spaces @ minus @ (drop_space_at_endline rest) in
+    if List.exists is_minus minus
+    then
+      match rest with
+      | ((T2(Parser_c.TCommentNewline _,Ctx,_i,_h)) as a)::rest ->
+        (* drop trailing spaces *)
+        minus @ a :: (drop_space_at_endline rest)
+      | _ -> fail ()
+    else fail ()
+  | a :: rest ->
+    a :: drop_space_at_endline rest
+
+(* if a removed ( is between two tokens, then add a space *)
+let rec paren_to_space = function
+  | [] -> []
+  | [x] -> [x]
+  | [x;y] -> [x;y]
+  | ((T2(_,Ctx,_,_)) as a)::
+    ((T2(t,Min _,_,_)) as b)::
+    ((T2(_,Ctx,_,_)) as c)::rest
+    when not (is_whitespace a) && TH.str_of_tok t = "(" ->
+    a :: b :: (C2 " ") :: (paren_to_space (c :: rest))
+  | a :: rest -> a :: (paren_to_space rest)
+
+let rec add_space xs =
+  match xs with
+  | [] -> []
+  | [x] -> [x]
+  | (Cocci2(sx,lnx,_,rcolx,_) as x)::((Cocci2(sy,lny,lcoly,_,_)) as y)::xs
+    when !Flag_parsing_c.spacing = Flag_parsing_c.SMPL &&
+    not (lnx = -1) && not (rcolx = -1) && lnx = lny && rcolx < lcoly ->
+    (* this only works within a line.  could consider whether
+    something should be done to add newlines too, rather than
+    printing them explicitly in unparse_cocci. *)
+    x::C2 (String.make (lcoly-rcolx) ' ')::add_space (y::xs)
+  | (Cocci2(sx,lnx,_,rcolx,_) as x)::((Cocci2(sy,lny,lcoly,_,_)) as y)::xs
+    when !Flag_parsing_c.spacing = Flag_parsing_c.SMPL &&
+    not (lnx = -1) && not (rcolx = -1) && lnx < lny ->
+    (* this only works within a line.  could consider whether
+    something should be done to add newlines too, rather than
+    printing them explicitly in unparse_cocci. *)
+    x::C2 (String.make (lny-lnx) '\n')::
+    C2 (String.make (lcoly-1) ' '):: (* -1 is for the + *)
+    add_space (y::xs)
+  | ((T2(_,Ctx,_,_)) as x)::((Cocci2 _) as y)::xs -> (* add space on boundary *)
+    let sx = str_of_token2 x in
+    let sy = str_of_token2 y in
+    if is_ident_like sx && (is_ident_like sy or List.mem sy ["="])
+    then x::C2 " "::(add_space (y::xs))
+    else x::(add_space (y::xs))
+  | x::y::xs -> (* not boundary, not sure if it is possible *)
+    let sx = str_of_token2 x in
+    let sy = str_of_token2 y in
+    if is_ident_like sx && is_ident_like sy
+    then x::C2 " "::(add_space (y::xs))
+    else x::(add_space (y::xs))
+
+(* A fake comma is added at the end of an unordered initlist or a enum
+decl, if the initlist or enum doesn't already end in a comma.  This is only
+needed if there is + code, ie if we see Cocci after it in the code sequence *)
+
+let rec drop_end_comma = function
+  | [] -> []
+  | [x] -> [x]
+  | ((Comma ",") as x) :: rest ->
+    let (newlines,rest2) = span is_whitespace rest in
+    (match rest2 with
+    | (Cocci2 _) :: _ -> x :: drop_end_comma rest
+    |  _ -> drop_end_comma rest
+    )
+  | x :: xs -> x :: drop_end_comma xs
+
+(* The following only works for the outermost function call.  Stack records
+the column of all open parentheses.  Space_cell contains the most recent
+comma in the outermost function call.  The goal is to decide whether this
+should be followed by a space or a newline and indent. *)
+let add_newlines toks tabbing_unit =
+  (* the following is for strings that may contain newline or tabs *)
+  let string_length s count =
+    let l = list_of_string s in
+    List.fold_left
+      (function count ->
+        function
+        | '\t' -> count + 8
+        | '\n' -> 0
+        | c -> count + 1)
+      count l in
+  let create_indent n =
+    let (tu,tlen) = 
+      match tabbing_unit with
+      | Some ("\t",_) -> ("\t",8)
+      | Some ("",_) -> ("\t",8) (* not sure why... *)
+      | Some (s,_) -> (s,string_length s 0) (* assuming only tabs or spaces *)
+      |        None -> ("\t",8) in
+    let rec loop seen =
+      if seen + tlen <= n
+      then tu ^ loop (seen + tlen)
+      else String.make (n-seen) ' ' in
+    loop 0 in
+  let check_for_newline count x = function
+    | Some (start,space_cell) when count > Flag_parsing_c.max_width ->
+      space_cell := "\n"^(create_indent x);
+      Some (x + (count - start))
+    | _ -> None in
+  let start_box stack space_cell count s =
+    let count = string_length s count in
+    (count,count::stack,space_cell) in
+  let end_box stack space_cell count s =
+    (* this assumes that start_box and end_box are matched, but this is not
+    necessarily the case, if ( is modified and ) is context code *)
+    let count = string_length s count in
+    match stack with
+    | [x] ->
+      (match check_for_newline count x space_cell with
+      | Some count -> (count,[],None)
+      | None -> (count,[],None)
+      )
+    | [] -> (count,stack,space_cell)
+    | _ -> (count,List.tl stack,space_cell) in
+  let rec loop ((stack,space_cell) as info) count = function
+    | [] -> []
+    | ((Cocci2(s,line,lcol,rcol,hint)) as a):: (* hint can't be start *)
+      (T2(commatok,Ctx,idx,_))::
+      (T2(((Parser_c.TCommentSpace _) as sptok),Ctx,_,_)) ::
+      (((T2(codetok,Ctx,_,_)) :: _) as xs)
+      when
+      (TH.str_of_tok commatok) = "," && 
+      (TH.str_of_tok sptok) = " " &&
+      ((List.length stack = 1) or (* not super elegant... *)
+      (* check if the Cocci2 token is a ), need double treatment *)
+      (List.length stack = 2) && (hint = Some Unparse_cocci.EndBox)) ->
+      (* something large added before a comma *)
+      let stack = (* do the work of end_box in the length 2 case *)
+        if List.length stack = 2
+        then List.tl stack
+        else stack in
+      let x = List.hd stack in
+      let sp = ref " " in
+      let cocci_count = string_length s count in
+      let space_cell = Some (cocci_count+1,sp) in (* count before space *)
+      let newcount = cocci_count + 2 in (* count incuding space *)
+      let future_count =
+        string_length (TH.str_of_tok codetok) newcount in
+      let b = T2(commatok,Ctx,idx,
+        Some (Unparse_cocci.SpaceOrNewline sp)) in
+      (match check_for_newline future_count x space_cell with
+      | Some count -> a :: b :: loop (stack,Some (x,sp)) count xs
+      | None -> a :: b :: loop (stack,Some (newcount,sp)) newcount xs
+      )
+    | (T2(commatok,Ctx,_,_))::
+      (T2(((Parser_c.TCommentSpace _) as sptok),Ctx,idx,_)) ::
+      (((Cocci2(s,line,lcol,rcol,hint))::_) as xs)
+      when (TH.str_of_tok commatok) = "," && (TH.str_of_tok sptok) = " " &&
+      List.length stack = 1 (* not super elegant... *) ->
+      (* something large added after a comma *)
+      let x = List.hd stack in
+      let sp = ref " " in
+      let space_cell = Some (count+1,sp) in (* count before space *)
+      let newcount = count + 2 in (* count incuding space *)
+      let future_count = string_length s newcount in
+      let a = T2(commatok,Ctx,idx,
+        Some (Unparse_cocci.SpaceOrNewline sp)) in
+      (match check_for_newline future_count x space_cell with
+      | Some count -> a :: loop (stack,Some (x,sp)) count xs
+      | None -> a :: loop (stack,Some (newcount,sp)) newcount xs
+      )
+    | ((T2(tok,Ctx,idx,_)) as a)::xs ->
+    (* let (stack,space_cell) = info in *)
+      (match TH.str_of_tok tok with
+      | "=" as s ->
+        let (spaces,rest) = span is_space xs in
+        (match rest with
+        | ((T2(tok,Ctx,_,_)) as b)::ixs ->
+          (match TH.str_of_tok tok with
+          | "{" ->
+            let newcount =
+              List.fold_left
+                (function prev ->
+                  function
+                  | (T2(tok,_b,_i,_h)) ->
+                    string_length (TH.str_of_tok tok) prev
+                  | _ -> failwith "not possible")
+                count spaces in
+            let front = a :: spaces @ [b] in
+            let (newcount,newstack,newspacecell) =
+              start_box stack space_cell newcount "{" in
+            front @ loop (newstack,newspacecell) newcount ixs
+          | s -> a :: loop info (string_length s count) xs
+          )
+        | _ -> a :: loop info (string_length s count) xs
+        )
+      | "(" as s ->
+        let (newcount,newstack,newspacecell) =
+          start_box stack space_cell count s in
+        a :: loop (newstack,newspacecell) newcount xs
+      | ")" as s ->
+        let (newcount,newstack,newspacecell) =
+          end_box stack space_cell count s in
+        a :: loop (newstack,newspacecell) newcount xs
+      | "{" as s when not (stack = []) ->
+        (* [] case means statement braces *)
+        let (newcount,newstack,newspacecell) =
+          start_box stack space_cell count s in
+        a :: loop (newstack,newspacecell) newcount xs
+      | "}" as s when not (stack = []) ->
+        (* [] case means statement braces *)
+        let (newcount,newstack,newspacecell) =
+          end_box stack space_cell count s in
+        a :: loop (newstack,newspacecell) newcount xs
+      | s -> a :: loop info (string_length s count) xs
+      )
+    | ((Cocci2(s,line,lcol,rcol,hint)) as a)::xs ->
+      let (stack,space_cell) = info in
+      let rest =
+        match hint with
+        | None -> loop info (string_length s count) xs
+        | Some Unparse_cocci.StartBox ->
+          let (newcount,newstack,newspacecell) =
+            start_box stack space_cell count s in
+          loop (newstack,newspacecell) newcount xs
+        | Some Unparse_cocci.EndBox ->
+          let (newcount,newstack,newspacecell) =
+            end_box stack space_cell count s in
+          loop (newstack,newspacecell) newcount xs
+        | Some (Unparse_cocci.SpaceOrNewline sp) ->
+          let count = string_length s (count + 1 (*space*)) in
+          (match stack with
+          | [x] ->
+            (match check_for_newline count x space_cell with
+            | Some count -> loop (stack,Some (x,sp)) count xs
+            | None -> loop (stack,Some (count,sp)) count xs
+           )
+          | _ -> loop info count xs
+          ) in
+      a :: rest
+    | ((T2(tok,_,_,_)) as a)::xs ->
+      a :: loop info (string_length (TH.str_of_tok tok) count) xs
+    | ((C2(s)) as a)::xs -> a :: loop info (string_length s count) xs
+    | ((Comma(s)) as a)::xs -> a :: loop info (string_length s count) xs
+    | Fake2 _ :: _ | Indent_cocci2 :: _
+    | Unindent_cocci2 _::_ | EatSpace2::_ ->
+      failwith "unexpected fake, indent, unindent, or eatspace" in
+  let redo_spaces prev = function
+    | Cocci2(s,line,lcol,rcol,Some (Unparse_cocci.SpaceOrNewline sp)) ->
+      C2 !sp :: Cocci2(s,line,lcol,rcol,None) :: prev
+    | T2(tok,min,idx,Some (Unparse_cocci.SpaceOrNewline sp)) ->
+      C2 !sp :: T2(tok,min,idx,None) :: prev
+    | t -> t::prev in
+  (match !Flag_parsing_c.spacing with
+  | Flag_parsing_c.SMPL -> toks
+  | _ -> List.rev (List.fold_left redo_spaces [] (loop ([],None) 0 toks))
+  )
+
+(* When insert some new code, because of a + in a SP, we must add this
+* code at the right place, with the good indentation. So each time we
+* encounter some spacing info, with some newline, we maintain the
+* current indentation level used.
+*
+* TODO problems: not accurate. ex: TODO
+*
+* TODO: if in #define region, should add a \ \n
+*)
+let new_tabbing2 space =
+  list_of_string space
+    +> List.rev
+    +> take_until (fun c -> c =<= '\n')
+    +> List.rev
+    +> List.map string_of_char
+    +> String.concat ""
+
+let new_tabbing a =
+  profile_code "C unparsing.new_tabbing" (fun () -> new_tabbing2 a)
+
+
+let rec adjust_indentation xs =
+
+  let _current_tabbing = ref ([] : string list) in
+  let tabbing_unit = ref None in
+
+  let string_of_list l = String.concat "" (List.map string_of_char l) in
+
+  (* try to pick a tabbing unit for the plus code *)
+  let adjust_tabbing_unit old_tab new_tab =
+    if !tabbing_unit =*= None && String.length new_tab > String.length old_tab
+    then
+      let old_tab = list_of_string old_tab in
+      let new_tab = list_of_string new_tab in
+      let rec loop = function
+        | ([],new_tab) ->
+          tabbing_unit := Some(string_of_list new_tab,List.rev new_tab)
+        | (_,[]) -> failwith "not possible"
+        | (o::os,n::ns) -> loop (os,ns) in (* could check for equality *)
+      loop (old_tab,new_tab) in
+
+(*
+let remtab tu current_tab =
+let current_tab = List.rev(list_of_string current_tab) in
+let rec loop = function
+([],new_tab) -> string_of_list (List.rev new_tab)
+|      (_,[]) -> (-*weird; tabbing unit used up more than the current tab*-)
+""
+|      (t::ts,n::ns) when t =<= n -> loop (ts,ns)
+|      (_,ns) -> (-* mismatch; remove what we can *-)
+string_of_list (List.rev ns) in
+loop (tu,current_tab) in
+*)
+
+  let rec find_first_tab started = function
+    | [] -> ()
+    | ((T2 (tok,_,_,_)) as x)::xs when str_of_token2 x =$= "{" ->
+      find_first_tab true xs
+    (* patch: coccinelle *)
+    | ((T2 (Parser_c.TCommentNewline s, _, _, _)) as x)::_
+      when started ->
+      let s = str_of_token2 x +> new_tabbing in
+      tabbing_unit := Some (s,List.rev (list_of_string s))
+    | x::xs -> find_first_tab started xs in
+  find_first_tab false xs;
+
+  let rec balanced ct = function
+    | [] -> ct >= 0
+    | ((T2(tok,_,_,_)) as x)::xs ->
+      (match str_of_token2 x with
+      | "(" -> balanced (ct+1) xs
+      | ")" -> balanced (ct-1) xs
+      | _ -> balanced ct xs
+      )
+    | x::xs -> balanced ct xs in
+
+  let update_tabbing started s x =
+    let old_tabbing = !_current_tabbing in
+    str_of_token2 x +> new_tabbing +> (fun s -> _current_tabbing := [s]);
+    (* only trust the indentation after the first { *)
+    if started
+    then
+      adjust_tabbing_unit
+        (String.concat "" old_tabbing)
+        (String.concat "" !_current_tabbing) in
+
+  let rec aux started xs =
+    match xs with
+    | [] -> []
+    (* patch: coccinelle *)
+    | ((T2 (Parser_c.TCommentNewline s,_,_,_)) as x)::
+      Unindent_cocci2(false)::xs ->
+      update_tabbing started s x;
+      (C2 "\n")::aux started xs
+    | (Cocci2("\n",_,_,_,_))::Unindent_cocci2(false)::xs ->
+      (C2 "\n")::aux started xs
+    | ((T2 (tok,_,_,_)) as x)::(T2 (Parser_c.TCommentNewline s, _, _, _))::
+      ((Cocci2 ("{",_,_,_,_)) as a)::xs
+      when started && str_of_token2 x =$= ")" ->
+      (* to be done for if, etc, but not for a function header *)
+      x::(C2 " ")::a::(aux started xs)
+    | ((T2 (Parser_c.TCommentNewline s, _, _, _)) as x)::xs
+      when
+      balanced 0 (fst(span (function x -> not(is_newline x)) xs)) ->
+      update_tabbing started s x;
+      let coccis_rest = span all_coccis xs in
+      (match coccis_rest with
+      | (_::_,((T2 (tok,_,_,_)) as y)::_) when str_of_token2 y =$= "}" ->
+        (* the case where cocci code has been added before a close } *)
+        x::aux started (Indent_cocci2::xs)
+      | _ -> x::aux started xs
+      )
+    | Indent_cocci2::((Cocci2(sy,lny,lcoly,_,_)) as y)::xs
+      when !Flag_parsing_c.spacing = Flag_parsing_c.SMPL ->
+      let tu = String.make (lcoly-1) ' ' in
+      _current_tabbing := tu::(!_current_tabbing);
+      C2 (tu)::aux started (y::xs)
+    | Indent_cocci2::xs ->
+      (match !tabbing_unit with
+      | None -> aux started xs
+      | Some (tu,_) ->
+        _current_tabbing := tu::(!_current_tabbing);
+        (* can't be C2, for later phases *)
+        Cocci2 (tu,-1,-1,-1,None)::aux started xs
+      )
+    | Unindent_cocci2(permanent)::((Cocci2("\n",_,_,_,_)) as x)::xs ->
+      (* seems only relevant if there is a following cocci newline *)
+      (match !_current_tabbing with
+      | [] -> aux started xs
+      | _::new_tabbing ->
+        let s = String.concat "" new_tabbing in
+        _current_tabbing := new_tabbing;
+        x::Cocci2 (s,-1,-1,-1,None)::aux started xs
+      )
+    | Unindent_cocci2(permanent)::xs -> aux started xs
+    (* border between existing code and cocci code *)
+    | ((T2 (tok,_,_,_)) as x)::((Cocci2("\n",_,_,_,_)) as y)::xs
+      when str_of_token2 x =$= "{" ->
+      x::aux true (y::Indent_cocci2::xs)
+    | ((Cocci2 _) as x)::((T2 (tok,_,_,_)) as y)::xs
+      when str_of_token2 y =$= "}" ->
+      x::aux started (Unindent_cocci2 true::y::xs)
+    (* starting the body of the function *)
+    | ((T2 (tok,_,_,_)) as x)::xs when str_of_token2 x =$= "{" ->
+      x::aux true xs
+    | ((Cocci2("{",_,_,_,_)) as a)::xs -> a::aux true xs
+    | ((Cocci2("\n",_,_,_,_)) as x)::xs ->
+      (* dont inline in expr because of weird eval order of ocaml *)
+      let s = String.concat "" !_current_tabbing in
+      (* can't be C2, for later phases *)
+      x::Cocci2 (s,-1,-1,-1,None)::aux started xs
+    | x::xs -> x::aux started xs in
+  (aux false xs,!tabbing_unit)
+
+
+let rec find_paren_comma = function
+  | [] -> ()
+
+  (* do nothing if was like this in original file *)
+  | { str = "("; idx = Some p1 } :: ({ str = ","; idx = Some p2} :: _ as xs)
+  | { str = ","; idx = Some p1 } :: ({ str = ","; idx = Some p2} :: _ as xs)
+  | { str = ","; idx = Some p1 } :: ({ str = ")"; idx = Some p2} :: _ as xs) 
+    when p2 =|= p1 + 1 ->
+    find_paren_comma xs
+
+  (* otherwise yes can adjust *)
+  | { str = "(" } :: (({ str = ","} as rem) :: _ as xs)
+  | ({ str = "," } as rem) :: ({ str = ","} :: _ as xs)
+  | ({ str = "," } as rem) :: ({ str = ")"} :: _ as xs) ->
+    rem.remove <- true;
+    find_paren_comma xs
+
+  | x::xs ->
+    find_paren_comma xs
+
+
+let fix_tokens toks =
+  let toks = toks +> List.map mk_token_extended in
+
+  let cleaner = toks +> exclude (function
+    | {tok2 = T2 (t,_,_,_)} -> TH.is_real_comment t (* I want the ifdef *)
+    | _ -> false
+  ) in
+  find_paren_comma cleaner;
+
+  let toks = rebuild_tokens_extented toks in
+  toks +> List.map (fun x -> x.tok2)
+
+
+(*****************************************************************************)
+(* Final unparsing (and debugging support) *)
+(*****************************************************************************)
+
+(* for debugging *)
+type kind_token2 = KFake | KCocci | KC | KExpanded | KOrigin
+
+let kind_of_token2 = function
+  | Fake2 _ -> KFake
+  | Cocci2 _ -> KCocci
+  | C2 _ -> KC
+  | Comma _ -> KC
+  | T2 (t,_,_,_) ->
+    (match TH.pinfo_of_tok t with
+    | Ast_c.ExpandedTok _ -> KExpanded
+    | Ast_c.OriginTok _ -> KOrigin
+    | Ast_c.FakeTok _ -> raise (Impossible 139) (* now a Fake2 *)
+    | Ast_c.AbstractLineTok _ -> raise (Impossible 140) (* now a KC *)
+    )
+  | Unindent_cocci2 _ | Indent_cocci2 | EatSpace2 -> raise (Impossible 141)
+
+let end_mark = "!"
+
+let start_mark = function
+  | KFake -> "!F!"
+  | KCocci -> "!S!"
+  | KC -> "!A!"
+  | KExpanded -> "!E!"
+  | KOrigin -> ""
+
+let print_all_tokens2 pr xs =
+  if !Flag_parsing_c.debug_unparsing
+  then
+    let current_kind = ref KOrigin in
+    xs +> List.iter (fun t ->
+      let newkind = kind_of_token2 t in
+      if newkind =*= !current_kind
+      then pr (str_of_token2 t)
+      else 
+        begin
+          pr (end_mark);
+          pr (start_mark newkind);
+          pr (str_of_token2 t);
+          current_kind := newkind
+        end
+    );
+  else
+    let to_whitespace s = 
+      let r = String.copy s in
+      for i = 1 to String.length r do
+        let c = String.get r (i-1) in
+        match c with
+        | ' ' | '\t' | '\r' | '\n' -> ()
+        | _ -> String.set r (i-1) ' '
+      done;
+      r in
+    let hiding_level = ref 0 in
+    let handle_token t =
+      let s = str_of_token2 t in
+      let hide_current =
+        match t with
+        | T2 (t,_,_,_) ->
+          let i = TH.info_of_tok t in
+          (match Ast_c.get_annot_info i Token_annot.Exclude_start with
+          | None   -> ()
+          | Some _ -> hiding_level := !hiding_level + 1
+          );
+          let hide_current = !hiding_level > 0 in
+          (match Ast_c.get_annot_info i Token_annot.Exclude_end with
+          | None   -> ()
+          | Some _ -> hiding_level := max (!hiding_level - 1) 0
+          );
+          hide_current
+        | _ -> !hiding_level > 0 in
+      if hide_current then to_whitespace s else s in
+    xs +> List.iter (fun x -> pr (handle_token x))
+
+
+
+
+
+(*****************************************************************************)
+(* Entry points *)
+(*****************************************************************************)
+
+(* old: PPviatok was made in the beginning to allow to pretty print a
+ * complete C file, including a modified C file by transformation.ml,
+ * even if we don't handle yet in pretty_print_c.ml, ast_to_flow (and
+ * maybe flow_to_ast) all the cases. Indeed we don't need to do some
+ * fancy stuff when a function was not modified at all. Just need to
+ * print the list of token as-is. But now pretty_print_c.ml handles
+ * almost everything so maybe less useful. Maybe PPviatok allows to
+ * optimize a little the pretty printing.
+ *
+ * update: now have PPviastr which goes even faster than PPviatok, so
+ * PPviatok has disappeared.
+ *)
+
+type ppmethod = PPnormal | PPviastr
+
+
+
+
+(* The pp_program function will call pretty_print_c.ml with a special
+ * function to print the leaf components, the tokens. When we want to
+ * print a token, we need to print also maybe the space and comments that
+ * were close to it in the original file (and that was omitted during the
+ * parsing phase), and honor what the cocci-info attached to the token says.
+ * Maybe we will not print the token if it's a MINUS-token, and maybe we will
+ * print it and also print some cocci-code attached in a PLUS to it.
+ * So we will also maybe call unparse_cocci. Because the cocci-code may
+ * contain metavariables, unparse_cocci will in fact sometimes call back
+ * pretty_print_c (which will this time don't call back again unparse_cocci)
+ *)
+
+let pp_program2 xs outfile  =
+  with_open_outfile outfile (fun (pr,chan) ->
+    let pr s =
+      if !Flag_parsing_c.debug_unparsing
+      then begin pr2_no_nl s; flush stderr end
+      else pr s
+(* flush chan; *)
+(* Common.pr2 ("UNPARSING: >" ^ s ^ "<"); *)
+    in
+
+    xs +> List.iter (fun ((e,(str, toks_e)), ppmethod) ->
+      (* here can still work on ast *)
+      let e = remove_useless_fakeInfo_struct e in
+
+      match ppmethod with
+      | PPnormal ->
+        (* now work on tokens *)
+        (* phase1: just get all the tokens, all the information *)
+        assert(toks_e +> List.for_all (fun t ->
+          TH.is_origin t or TH.is_expanded t
+        ));
+        let toks = get_fakeInfo_and_tokens e toks_e in
+        let toks = displace_fake_nodes toks in
+        (* assert Origin;ExpandedTok;Faketok *)
+        let toks = expand_mcode toks in
+
+        (* assert Origin;ExpandedTok; + Cocci + C (was AbstractLineTok)
+         * and no tag information, just NOTHING. *)
+
+        let toks =
+          if !Flag.sgrep_mode2
+          then
+            (* nothing else to do for sgrep *)
+            drop_expanded(drop_fake(drop_minus toks))
+          else 
+            begin
+              (* phase2: can now start to filter and adjust *)
+              let (toks,tu) = adjust_indentation toks in
+              let toks = adjust_eat_space toks in
+              let toks = adjust_before_semicolon toks in(*before remove minus*)
+              let toks = adjust_after_paren toks in(*also before remove minus*)
+              let toks = drop_space_at_endline toks in
+              let toks = paren_to_space toks in
+              let toks = drop_end_comma toks in
+              let toks = remove_minus_and_between_and_expanded_and_fake toks in
+              (* assert Origin + Cocci + C and no minus *)
+              let toks = add_space toks in
+              let toks = add_newlines toks tu in
+              let toks = paren_then_brace toks in
+              let toks = fix_tokens toks in
+              toks
+            end in
+
+        (* in theory here could reparse and rework the ast! or
+         * apply some SP. Not before cos julia may have generated
+         * not parsable file. Need do unparsing_tricks call before 
+        * being ready to reparse. *)
+        print_all_tokens2 pr toks;
+
+      | PPviastr -> pr str
+    )
+  )
+
+let pp_program a b =
+  profile_code "C unparsing" (fun () -> pp_program2 a b)
+
+
+let pp_program_default xs outfile =
+  let xs' = xs +> List.map (fun x -> x, PPnormal) in
+  pp_program xs' outfile
index a3f9730..61a59b5 100644 (file)
@@ -1,4 +1,5 @@
 (*
+ * Copyright (C) 2012, INRIA.
  * Copyright (C) 2010, University of Copenhagen DIKU and INRIA.
  * Copyright (C) 2006, 2007 Julia Lawall
  *
@@ -69,6 +70,12 @@ let print_option_prespace fn = function
   | Some x -> pr_space(); fn x in
 let print_between = Common.print_between in
 
+let rec param_print_between between fn = function
+  | [] -> ()
+  | [x] -> fn x
+  | x::xs -> fn x; between x; param_print_between between fn xs in
+
+
 let outdent _ = () (* should go to leftmost col, does nothing now *) in
 
 let pretty_print_c =
@@ -201,20 +208,24 @@ in
 
 (* --------------------------------------------------------------------- *)
 
-let handle_metavar name fn =
+let lookup_metavar name =
   let ((_,b) as s,info,mc,pos) = name in
   let line = info.Ast.line in
   let lcol = info.Ast.column in
-  match Common.optionise (fun () -> List.assoc s env) with
+  let rcol = if lcol = unknown then unknown else lcol + (String.length b) in
+  let res = Common.optionise (fun () -> List.assoc s env) in
+  (res,b,line,lcol,rcol) in
+
+let handle_metavar name fn =
+  let (res,name_string,line,lcol,rcol) = lookup_metavar name in
+  match res with
     None ->
-      let name_string (_,s) = s in
       if generating
-      then
-       mcode (function _ -> print_string (name_string s)) name
+      then mcode (function _ -> print_string name_string) name
       else
        failwith
          (Printf.sprintf "SP line %d: Not found a value in env for: %s"
-            line (name_string s))
+            line name_string)
   | Some e  ->
       pr_barrier line lcol;
       (if generating
@@ -222,16 +233,14 @@ let handle_metavar name fn =
        (* call mcode to preserve the -+ annotation *)
        mcode (fun _ _ _ -> fn e) name
       else fn e);
-      let rcol =
-       if lcol = unknown then unknown else lcol + (String.length b) in
       pr_barrier line rcol
 in
 (* --------------------------------------------------------------------- *)
 let dots between fn d =
   match Ast.unwrap d with
-    Ast.DOTS(l) -> print_between between fn l
-  | Ast.CIRCLES(l) -> print_between between fn l
-  | Ast.STARS(l) -> print_between between fn l
+    Ast.DOTS(l) -> param_print_between between fn l
+  | Ast.CIRCLES(l) -> param_print_between between fn l
+  | Ast.STARS(l) -> param_print_between between fn l
 in
 
 let nest_dots starter ender fn f d =
@@ -259,17 +268,17 @@ let rec ident i =
     | Ast.MetaId(name,_,_,_) ->
        handle_metavar name (function
                               | (Ast_c.MetaIdVal (id,_)) -> print_text id
-                              | _ -> raise Impossible
+                              | _ -> raise (Impossible 142)
                            )
     | Ast.MetaFunc(name,_,_,_) ->
        handle_metavar name (function
                               | (Ast_c.MetaFuncVal id) -> print_text id
-                              | _ -> raise Impossible
+                              | _ -> raise (Impossible 143)
                            )
     | Ast.MetaLocalFunc(name,_,_,_) ->
        handle_metavar name (function
                               | (Ast_c.MetaLocalFuncVal id) -> print_text id
-                              | _ -> raise Impossible
+                              | _ -> raise (Impossible 144)
                            )
 
     | Ast.AsIdent(id,asid) -> ident id
@@ -342,7 +351,7 @@ let rec expression e =
       handle_metavar name  (function
         | Ast_c.MetaExprVal (exp,_) ->
             pretty_print_c.Pretty_print_c.expression exp
-        | _ -> raise Impossible
+        | _ -> raise (Impossible 145)
       )
 
   | Ast.MetaExprList (name,_,_,_) ->
@@ -351,7 +360,7 @@ let rec expression e =
             pretty_print_c.Pretty_print_c.arg_list args
        | Ast_c.MetaParamListVal _ ->
            failwith "have meta param list matching meta exp list\n";
-        | _ -> raise Impossible
+        | _ -> raise (Impossible 146)
       )
 
   | Ast.AsExpr(expr,asexpr) -> expression expr
@@ -509,7 +518,7 @@ and typeC ty =
       handle_metavar name  (function
           Ast_c.MetaTypeVal exp ->
             pretty_print_c.Pretty_print_c.ty exp
-        | _ -> raise Impossible)
+        | _ -> raise (Impossible 147))
 
 and baseType = function
     Ast.VoidType -> print_string "void"
@@ -593,18 +602,25 @@ and ty_space ty =
 and ft_space ty =
   match Ast.unwrap ty with
     Ast.Type(_,cv,ty) ->
-      (match Ast.unwrap ty with
-       Ast.Pointer(_,_) -> ()
-      | Ast.MetaType(name,_,_) ->
-         (match List.assoc (Ast.unwrap_mcode name) env with
-            Ast_c.MetaTypeVal (tq,ty) ->
-             (match Ast_c.unwrap ty with
-               Ast_c.Pointer(_,_) -> ()
-             | _ -> pr_space())
-         | _ -> pr_space())
-      | _ -> pr_space())
+      let isptr =
+       match Ast.unwrap ty with
+         Ast.Pointer(_,_) -> true
+       | Ast.MetaType(name,_,_) ->
+           let (res,name_string,line,lcol,rcol) = lookup_metavar name in
+           (match res with
+             None ->
+               failwith
+                 (Printf.sprintf "variable %s not known on SP line %d\n"
+                    name_string line)
+           | Some (Ast_c.MetaTypeVal (tq,ty)) ->
+               (match Ast_c.unwrap ty with
+                 Ast_c.Pointer(_,_) ->  true
+               | _ -> false)
+           | _ -> false)
+       | _ -> false in
+      if isptr then () else pr_space()
   | _ -> pr_space()
-
+       
 and declaration d =
   match Ast.unwrap d with
     Ast.MetaDecl(name,_,_) ->
@@ -612,20 +628,20 @@ and declaration d =
        (function
            Ast_c.MetaDeclVal d ->
               pretty_print_c.Pretty_print_c.decl d
-          | _ -> raise Impossible)
+          | _ -> raise (Impossible 148))
   | Ast.MetaField(name,_,_) ->
       handle_metavar name
        (function
            Ast_c.MetaFieldVal f ->
               pretty_print_c.Pretty_print_c.field f
-          | _ -> raise Impossible)
+          | _ -> raise (Impossible 149))
 
   | Ast.MetaFieldList(name,_,_,_) ->
       handle_metavar name
        (function
            Ast_c.MetaFieldListVal f ->
              print_between force_newline pretty_print_c.Pretty_print_c.field f
-          | _ -> raise Impossible)
+          | _ -> raise (Impossible 150))
 
   | Ast.AsDecl(decl,asdecl) -> declaration decl
 
@@ -642,11 +658,11 @@ and declaration d =
       mcode print_string sem
   | Ast.MacroDecl(name,lp,args,rp,sem) ->
       ident name; mcode print_string_box lp;
-      dots (function _ -> ()) expression args;
+      dots (function _ -> ()) arg_expression args;
       close_box(); mcode print_string rp; mcode print_string sem
   | Ast.MacroDeclInit(name,lp,args,rp,eq,ini,sem) ->
       ident name; mcode print_string_box lp;
-      dots (function _ -> ()) expression args;
+      dots (function _ -> ()) arg_expression args;
       close_box(); mcode print_string rp;
       pr_space(); mcode print_string eq;
       pr_space(); initialiser true ini; mcode print_string sem
@@ -669,12 +685,12 @@ and initialiser nlcomma i =
       handle_metavar name  (function
           Ast_c.MetaInitVal ini ->
             pretty_print_c.Pretty_print_c.init ini
-        | _ -> raise Impossible)
+        | _ -> raise (Impossible 151))
   | Ast.MetaInitList(name,_,_,_) ->
       handle_metavar name  (function
           Ast_c.MetaInitListVal ini ->
            pretty_print_c.Pretty_print_c.init_list ini
-        | _ -> raise Impossible)
+        | _ -> raise (Impossible 152))
   | Ast.AsInit(init,asinit) -> initialiser nlcomma init
   | Ast.InitExpr(exp) -> expression exp
   | Ast.ArInitList(lb,initlist,rb) ->
@@ -742,13 +758,13 @@ and parameterTypeDef p =
        (function
            Ast_c.MetaParamVal p ->
               pretty_print_c.Pretty_print_c.param p
-          | _ -> raise Impossible)
+          | _ -> raise (Impossible 153))
   | Ast.MetaParamList(name,_,_,_) ->
       handle_metavar name
        (function
            Ast_c.MetaParamListVal p ->
               pretty_print_c.Pretty_print_c.paramlist p
-          | _ -> raise Impossible)
+          | _ -> raise (Impossible 154))
 
   | Ast.PComma(cm) -> mcode print_string cm
   | Ast.Pdots(dots) | Ast.Pcircles(dots) when generating ->
@@ -826,7 +842,7 @@ and rule_elem arity re =
   | Ast.IteratorHeader(nm,lp,args,rp) ->
       pr_arity arity;
       ident nm; pr_space(); mcode print_string_box lp;
-      dots (function _ -> ()) expression args; close_box();
+      dots (function _ -> ()) arg_expression args; close_box();
       mcode print_string rp
 
   | Ast.SwitchHeader(switch,lp,exp,rp) ->
@@ -874,13 +890,13 @@ and rule_elem arity re =
       else raise CantBeInPlus
 
   | Ast.MetaRuleElem(name,_,_) ->
-      raise Impossible
+      raise (Impossible 155)
 
   | Ast.MetaStmt(name,_,_,_) ->
       handle_metavar name  (function
         | Ast_c.MetaStmtVal stm ->
             pretty_print_c.Pretty_print_c.statement stm
-        | _ -> raise Impossible
+        | _ -> raise (Impossible 156)
                            )
   | Ast.MetaStmtList(name,_,_) ->
       failwith
@@ -914,11 +930,32 @@ and print_fninfo = function
   | Ast.FAttr(attr) -> mcode print_string attr; pr_space() in
 
 let indent_if_needed s f =
-  match Ast.unwrap s with
-    Ast.Seq(lbrace,body,rbrace) -> pr_space(); f()
-  | _ ->
+  let isseq =
+    match Ast.unwrap s with
+      Ast.Seq(lbrace,body,rbrace) -> true
+    | Ast.Atomic s ->
+       (match Ast.unwrap s with
+       | Ast.MetaStmt(name,_,_,_) ->
+           let (res,name_string,line,lcol,rcol) = lookup_metavar name in
+           (match res with
+             None ->
+               failwith
+                 (Printf.sprintf "variable %s not known on SP line %d\n"
+                    name_string line)
+           | Some (Ast_c.MetaStmtVal stm) ->
+               (match Ast_c.unwrap stm with
+                 Ast_c.Compound _ -> true
+               | _ -> false)
+           | _ -> failwith "bad metavariable value")
+       | _ -> false)
+    | _ -> false in
+  if isseq
+  then begin pr_space(); f() end
+  else
+    begin
       (*no newline at the end - someone else will do that*)
-      start_block(); f(); unindent true in
+      start_block(); f(); unindent true
+    end in
 
 let rec statement arity s =
   match Ast.unwrap s with
@@ -1107,7 +1144,12 @@ let rec pp_any = function
 
   (* this is not '...', but a list of expr/statement/params, and
      normally there should be no '...' inside them *)
-  | Ast.ExprDotsTag(x) -> dots (function _ -> ()) expression x; false
+  | Ast.ExprDotsTag(x) ->
+      let check_comma cm =
+       match Ast.unwrap cm with
+         Ast.EComma(cm) -> pr_space()
+       | _ -> () in
+      dots check_comma expression x; false
   | Ast.ParamDotsTag(x) -> parameter_list x; false
   | Ast.StmtDotsTag(x) -> dots force_newline (statement "") x; false
   | Ast.DeclDotsTag(x) -> dots force_newline declaration x; false
index 0c7054f..317a9d3 100644 (file)
@@ -502,7 +502,7 @@ let pp_rule local_metas ast env srcfile =
        Ast_c.AbstractLineTok _ -> pr (Ast_c.str_of_info info)
       | Ast_c.FakeTok (s,_) -> pr s
       |        _ ->
-         Printf.printf "line: %s\n" (Common.dump info);
+         Printf.printf "line: %s\n" (Dumper.dump info);
          error rule "not an abstract line" in
     let pr_space _ = pr " " in
     Unparse_cocci.pp_list_list_any
index 0ff05e3..882d0a5 100644 (file)
@@ -752,7 +752,9 @@ and vk_define_val bigf defval =
   | DefineText (s, ii) -> vk_ii bigf ii
   | DefineEmpty -> ()
   | DefineInit ini -> vk_ini bigf ini
-
+    (* christia: added multi *)
+  | DefineMulti stmts ->
+      List.fold_left (fun () d -> vk_statement bigf d) () stmts 
   | DefineTodo ->
       pr2_once "DefineTodo";
       ()
@@ -1564,6 +1566,9 @@ and vk_define_val_s = fun bigf x ->
     | DefineText (s, ii) -> DefineText (s, iif ii)
     | DefineEmpty -> DefineEmpty
     | DefineInit ini -> DefineInit (vk_ini_s bigf ini)
+    (* christia: added multi *)
+    | DefineMulti ds ->
+       DefineMulti (List.map (vk_statement_s bigf) ds)
 
     | DefineTodo ->
         pr2_once "DefineTodo";
index fd48de5..1b0d521 100644 (file)
@@ -46,7 +46,8 @@ unify_ast.ml semantic_cocci.ml data.ml free_vars.ml safe_for_multi_decls.ml \
 parse_aux.ml disjdistr.ml \
 $(LEXER_SOURCES:.mll=.ml) $(PARSER_SOURCES:.mly=.ml) \
 $(CLI_LEXER_SOURCES:.mll=.ml) $(SCRIPT_LEXER_SOURCES:.mll=.ml) \
-get_constants2.ml id_utils.ml adjacency.ml parse_cocci.ml command_line.ml
+get_constants2.ml id_utils.ml adjacency.ml commas_on_lists.ml \
+parse_cocci.ml command_line.ml
 
 LIBS=../commons/commons.cma ../globals/globals.cma
 SYSLIBS = str.cma unix.cma
@@ -73,6 +74,7 @@ OBJS = $(SOURCES:.ml=.cmo)
 OPTOBJS = $(OBJS:.cmo=.cmx)
 
 
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 all: $(LIB)
 local: $(EXEC)
 
@@ -89,6 +91,21 @@ $(OPTLIB): $(GENERATED) $(OPTOBJS)
 
 $(EXEC): $(OBJS) main.cmo $(LIBS)
        $(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES) -o $(EXEC) $(SYSLIBS) $(LIBS) $(OBJS) main.cmo
+else
+all:
+       cd .. && $(OCAMLBUILD) parsing_cocci/parsing_cocci.cma
+
+all.opt:
+       cd .. && $(OCAMLBUILD) parsing_cocci/parsing_cocci.cmxa
+
+$(EXEC):
+       cd .. && $(OCAMLBUILD) parsing_cocci/main.byte
+       cp ../_build/parsing_cocci/main.byte $(EXEC)
+
+clean::
+       cd .. && $(OCAMLBUILD) -clean
+       rm -f $(TARGET) $(TARGET).byte $(TARGET).native
+endif
 
 clean::
        rm -f $(LIB)
@@ -111,8 +128,14 @@ clean::
 $(LEXER_SOURCES:.mll=.ml) :    $(LEXER_SOURCES)
        $(OCAMLLEX) $(LEXER_SOURCES)
 
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 $(PARSER_SOURCES:.mly=.ml) $(PARSER_SOURCES:.mly=.mli) : $(PARSER_SOURCES)
        $(MENHIR) --ocamlc "${OCAMLC}" --ocamldep "${OCAMLDEP}" --table --base parser_cocci_menhir $(PARSER_SOURCES)
+else
+$(PARSER_SOURCES:.mly=.ml) $(PARSER_SOURCES:.mly=.mli) : $(PARSER_SOURCES)
+       cd .. && $(OCAMLBUILD) parsing_cocci/$@
+       cp ../_build/parsing_cocci/$@ $@
+endif
 
 $(CLI_LEXER_SOURCES:.mll=.ml): $(CLI_LEXER_SOURCES)
        $(OCAMLLEX) $(CLI_LEXER_SOURCES)
@@ -121,8 +144,9 @@ $(SCRIPT_LEXER_SOURCES:.mll=.ml): $(SCRIPT_LEXER_SOURCES)
        $(OCAMLLEX) $(SCRIPT_LEXER_SOURCES)
 
 distclean:: clean
-       @echo cleaning generated parsers and lexers
-       rm -f $(GENERATED)
+       if test -z "${KEEP_GENERATED}"; then \
+               @echo cleaning generated parsers and lexers; \
+               rm -f $(GENERATED); fi
 
 # clean rule for others files
 clean::
@@ -136,15 +160,18 @@ clean::
        $(OCAMLDEP) *.mli *.ml > .depend
 
 lexer_cocci.ml: lexer_cocci.mll
-parser_cocci_menhir.ml: parser_cocci_menhir.mly lexer_cocci.mll
-parser_cocci_menhir.mli: parser_cocci_menhir.mly lexer_cocci.mll
 lexer_script.ml: lexer_script.mll
 lexer_cli.ml: lexer_cli.mll
+parser_cocci_menhir.ml: parser_cocci_menhir.mly lexer_cocci.mll
+parser_cocci_menhir.mli: parser_cocci_menhir.mly lexer_cocci.mll
+
 
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 -include .depend
 endif
 endif
+endif
 
 include ../Makefile.common
index cdbf37e..9bd63b7 100644 (file)
@@ -40,6 +40,22 @@ let compute_adjacency p =
        | Ast0.CONTEXT _ -> counter := !counter + 1; x
        | _ -> failwith "unexpected mcode for ...")
     | _ -> mcode x in
+  let statement r k s =
+    let s = k s in
+    (* a case for each kind of term that has a fake node *)
+    Ast0.rewrap s
+      (match Ast0.unwrap s with
+       Ast0.IfThen(iff,lp,exp,rp,branch,(info,mc,_)) ->
+         Ast0.IfThen(iff,lp,exp,rp,branch,(info,mc,!counter))
+      | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,(info,mc,_)) ->
+         Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,(info,mc,!counter))
+      | Ast0.While(wh,lp,exp,rp,body,(info,mc,_)) ->
+         Ast0.While(wh,lp,exp,rp,body,(info,mc,!counter))
+      | Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body,(info,mc,_)) ->
+         Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body,(info,mc,!counter))
+      | Ast0.Iterator(nm,lp,args,rp,body,(info,mc,_)) ->
+         Ast0.Iterator(nm,lp,args,rp,body,(info,mc,!counter))
+      | s -> s) in
   let fn =
     V0.rebuilder
       {V0.rebuilder_functions with
@@ -54,6 +70,7 @@ let compute_adjacency p =
        VT0.rebuilder_sign_mcode = mcode;
        VT0.rebuilder_struct_mcode = mcode;
        VT0.rebuilder_storage_mcode = mcode;
-       VT0.rebuilder_inc_mcode = mcode;} in
+       VT0.rebuilder_inc_mcode = mcode;
+       VT0.rebuilder_stmtfn = statement;} in
   List.map fn.VT0.rebuilder_rec_top_level p
 
index d8235f1..aadb009 100644 (file)
@@ -48,13 +48,13 @@ let right_mcode (a,b,info,mcodekind,d,e) =
     ([],_) | (_,Ast0.PLUS _) -> None
   | (l,_) -> Some(l,(a,b,{info with Ast0.strings_after = []},mcodekind,d,e))
 
-let update_before pragmas (info,x) =
+let update_before pragmas (info,x,adj) =
   ({info with Ast0.strings_before = pragmas @ info.Ast0.strings_before},
-   Ast0.PLUS Ast.ONE) (* not sure what the arg should be... one seems safe *)
+   Ast0.PLUS Ast.ONE,adj)(*not sure what the arg should be... one seems safe*)
 
 let update_after pragmas (info,x) =
   ({info with Ast0.strings_after = info.Ast0.strings_after @ pragmas},
-   Ast0.PLUS Ast.ONE) (* not sure what the arg should be... one seems safe *)
+   Ast0.PLUS Ast.ONE) (*not sure what the arg should be... one seems safe*)
 
 let rec right_decl d =
   match Ast0.unwrap d with
index 46bf17b..08a86cd 100644 (file)
@@ -339,13 +339,13 @@ let rec top_expression opt_allowed tgt expr =
          then fail expr "opt only allowed in the last disjunct"
       |        _ -> ());
       Ast0.rewrap expr (Ast0.DisjExpr(starter,exps,mids,ender))
-  | Ast0.NestExpr(starter,exp_dots,ender,whencode,multi) ->
+  |  Ast0.NestExpr(starter,exp_dots,ender,whencode,multi) ->
       let res =
-       Ast0.NestExpr(starter,
-                     dots (top_expression true Ast0.NONE) exp_dots,
-                     ender,whencode,multi) in
+        Ast0.NestExpr(starter,
+                      dots (top_expression true Ast0.NONE) exp_dots,
+                      ender,whencode,multi) in
       Ast0.rewrap expr res
-  | Ast0.Edots(dots,whencode) ->
+  |  Ast0.Edots(dots,whencode) ->
       let arity = exp_same (mcode2line dots) [mcode2arity dots] in
       let dots = mcode dots in
       let whencode = get_option (expression Ast0.NONE) whencode in
index 768456b..e94b4b5 100644 (file)
@@ -63,9 +63,13 @@ type info = { pos_info : position_info;
 (* adjacency index is incremented when we skip over dots or nest delimiters
 it is used in deciding how much to remove, when two adjacent code tokens are
 removed. *)
+type adjacency = int
+
+type fake_mcode = info * mcodekind * adjacency
+
 type 'a mcode =
     'a * arity * info * mcodekind * anything list ref (* pos, - only *) *
-      int (* adjacency_index *)
+      adjacency (* adjacency_index *)
 (* int ref is an index *)
 and 'a wrap =
     { node : 'a;
@@ -317,20 +321,21 @@ and define_parameters = base_define_parameters wrap
 (* Statement*)
 
 and base_statement =
+    (*Decl and FunDecl don't need adjacency.  Delete all comments in any case*)
     Decl          of (info * mcodekind) (* before the decl *) * declaration
   | Seq           of string mcode (* { *) * statement dots *
                     string mcode (* } *)
   | ExprStatement of expression option * string mcode (*;*)
   | IfThen        of string mcode (* if *) * string mcode (* ( *) *
                     expression * string mcode (* ) *) *
-                    statement * (info * mcodekind) (* after info *)
+                    statement * fake_mcode (* after info *)
   | IfThenElse    of string mcode (* if *) * string mcode (* ( *) *
                     expression * string mcode (* ) *) *
                     statement * string mcode (* else *) * statement *
-                    (info * mcodekind)
+                    fake_mcode (* after info *)
   | While         of string mcode (* while *) * string mcode (* ( *) *
                     expression * string mcode (* ) *) *
-                    statement * (info * mcodekind) (* after info *)
+                    statement * fake_mcode (* after info *)
   | Do            of string mcode (* do *) * statement *
                      string mcode (* while *) * string mcode (* ( *) *
                     expression * string mcode (* ) *) *
@@ -338,10 +343,10 @@ and base_statement =
   | For           of string mcode (* for *) * string mcode (* ( *) * forinfo *
                     expression option * string mcode (*;*) *
                      expression option * string mcode (* ) *) * statement *
-                    (info * mcodekind) (* after info *)
+                    fake_mcode (* after info *)
   | Iterator      of ident (* name *) * string mcode (* ( *) *
                     expression dots * string mcode (* ) *) *
-                    statement * (info * mcodekind) (* after info *)
+                    statement * fake_mcode (* after info *)
   | Switch        of string mcode (* switch *) * string mcode (* ( *) *
                     expression * string mcode (* ) *) * string mcode (* { *) *
                     statement (*decl*) dots *
index 72d8df0..dee872e 100644 (file)
@@ -55,9 +55,13 @@ type info = { pos_info : position_info;
              strings_after : (Ast_cocci.added_string * position_info) list;
              isSymbolIdent : bool; (* is the token a symbol identifier or not *) }
 
+type adjacency = int
+
+type fake_mcode = info * mcodekind * adjacency
+
 type 'a mcode =
     'a * arity * info * mcodekind * anything list ref (* pos, - only *) *
-      int (* adjacency_index *)
+      adjacency (* adjacency_index *)
 
 and 'a wrap =
     { node : 'a;
@@ -310,14 +314,14 @@ and base_statement =
   | ExprStatement of expression option * string mcode (*;*)
   | IfThen        of string mcode (* if *) * string mcode (* ( *) *
                     expression * string mcode (* ) *) *
-                    statement * (info * mcodekind)
+                    statement * fake_mcode (* after info *)
   | IfThenElse    of string mcode (* if *) * string mcode (* ( *) *
                     expression * string mcode (* ) *) *
                     statement * string mcode (* else *) * statement *
-                    (info * mcodekind)
+                    fake_mcode (* after info *)
   | While         of string mcode (* while *) * string mcode (* ( *) *
                     expression * string mcode (* ) *) *
-                    statement * (info * mcodekind) (* after info *)
+                    statement * fake_mcode (* after info *)
   | Do            of string mcode (* do *) * statement *
                      string mcode (* while *) * string mcode (* ( *) *
                     expression * string mcode (* ) *) *
@@ -325,10 +329,10 @@ and base_statement =
   | For           of string mcode (* for *) * string mcode (* ( *) * forinfo *
                     expression option * string mcode (*;*) *
                      expression option * string mcode (* ) *) * statement *
-                    (info * mcodekind) (* after info *)
+                    fake_mcode (* after info *)
   | Iterator      of ident (* name *) * string mcode (* ( *) *
                     expression dots * string mcode (* ) *) *
-                    statement * (info * mcodekind) (* after info *)
+                    statement * fake_mcode (* after info *)
   | Switch        of string mcode (* switch *) * string mcode (* ( *) *
                     expression * string mcode (* ) *) * string mcode (* { *) *
                     statement (*decl*) dots *
index 107c495..820f848 100644 (file)
@@ -299,6 +299,8 @@ let convert_mcodekind adj = function
       Ast.CONTEXT(Ast.NoPos,befaft)
   | Ast0.MIXED(_) -> failwith "not possible for mcode"
 
+let convert_fake_mcode (_,mc,adj) = convert_mcodekind adj mc
+
 let convert_allminus_mcodekind allminus = function
     Ast0.CONTEXT(befaft) ->
       let (befaft,_,_) = !befaft in
@@ -351,41 +353,6 @@ let dots fn d =
     | Ast0.CIRCLES(x) -> Ast.CIRCLES(List.map fn x)
     | Ast0.STARS(x) -> Ast.STARS(List.map fn x))
 
-(* commas in dotted lists, here due to polymorphism restrictions *)
-
-let add_comma is_comma is_dots make_comma itemlist =
-  match Ast0.unwrap itemlist with
-    Ast0.DOTS(x) ->
-      (match List.rev x with
-       [] -> itemlist
-(* Not sure if comma is needed if the list is just ...; leave it there for
-now. See list_matcher in cocci_vs_c.ml in first try_matches case. *)
-(*      |      [e] when is_dots e -> itemlist*)
-      | e::es ->
-         if is_comma e
-         then itemlist
-         else
-           let comma =
-             match Ast0.get_mcodekind e with
-               Ast0.MINUS(_) -> (Ast0.make_minus_mcode ",")
-             | _ -> (Ast0.make_mcode ",") in
-           Ast0.rewrap itemlist
-             (Ast0.DOTS
-                (List.rev (Ast0.rewrap e (make_comma comma) :: (e::es)))))
-  | _ -> failwith "not possible"
-
-let add_exp_comma =
-  add_comma
-    (function x -> match Ast0.unwrap x with Ast0.EComma _ -> true | _ -> false)
-    (function x -> match Ast0.unwrap x with Ast0.Edots _  -> true | _ -> false)
-    (function x -> Ast0.EComma x)
-
-and add_init_comma =
-  add_comma
-    (function x -> match Ast0.unwrap x with Ast0.IComma _ -> true | _ -> false)
-    (function x -> match Ast0.unwrap x with Ast0.Idots _  -> true | _ -> false)
-    (function x -> Ast0.IComma x)
-
 (* --------------------------------------------------------------------- *)
 (* Identifier *)
 
@@ -578,7 +545,6 @@ and base_typeC allminus t =
   | Ast0.EnumName(kind,name) ->
       Ast.EnumName(mcode kind,get_option ident name)
   | Ast0.EnumDef(ty,lb,ids,rb) ->
-      let ids = add_exp_comma ids in
       Ast.EnumDef(typeC allminus ty,mcode lb,dots expression ids,mcode rb)
   | Ast0.StructUnionName(kind,name) ->
       Ast.StructUnionName(mcode kind,get_option ident name)
@@ -723,10 +689,8 @@ and initialiser i =
        Ast.AsInit(initialiser init,initialiser asinit)
     | Ast0.InitExpr(exp) -> Ast.InitExpr(expression exp)
     | Ast0.InitList(lb,initlist,rb,true) ->
-       let initlist = add_init_comma initlist in
        Ast.ArInitList(mcode lb,dots initialiser initlist,mcode rb)
     | Ast0.InitList(lb,initlist,rb,false) ->
-       let initlist = add_init_comma initlist in
        let (whencode,initlist,allminus) = strip_idots initlist in
        Ast.StrInitList
          (allminus,mcode lb,List.map initialiser initlist,mcode rb,
@@ -807,14 +771,15 @@ and statement s =
                  tokenwrap rbrace s (Ast.SeqEnd(rbrace)))
       | Ast0.ExprStatement(exp,sem) ->
          Ast.Atomic(rewrap_rule_elem s
-                      (Ast.ExprStatement(get_option expression exp,mcode sem)))
-      | Ast0.IfThen(iff,lp,exp,rp,branch,(_,aft)) ->
+                      (Ast.ExprStatement
+                         (get_option expression exp,mcode sem)))
+      | Ast0.IfThen(iff,lp,exp,rp,branch,aft) ->
          Ast.IfThen
            (rewrap_rule_elem s
               (Ast.IfHeader(mcode iff,mcode lp,expression exp,mcode rp)),
             statement Ast.NotSequencible branch,
-            ([],[],[],convert_mcodekind (-1) aft))
-      | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,(_,aft)) ->
+            ([],[],[],convert_fake_mcode aft))
+      | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,aft) ->
          let els = mcode els in
          Ast.IfThenElse
            (rewrap_rule_elem s
@@ -822,13 +787,13 @@ and statement s =
             statement Ast.NotSequencible branch1,
             tokenwrap els s (Ast.Else(els)),
             statement Ast.NotSequencible branch2,
-            ([],[],[],convert_mcodekind (-1) aft))
-      | Ast0.While(wh,lp,exp,rp,body,(_,aft)) ->
+            ([],[],[],convert_fake_mcode aft))
+      | Ast0.While(wh,lp,exp,rp,body,aft) ->
          Ast.While(rewrap_rule_elem s
                      (Ast.WhileHeader
                         (mcode wh,mcode lp,expression exp,mcode rp)),
                    statement Ast.NotSequencible body,
-                   ([],[],[],convert_mcodekind (-1) aft))
+                   ([],[],[],convert_fake_mcode aft))
       | Ast0.Do(d,body,wh,lp,exp,rp,sem) ->
          let wh = mcode wh in
          Ast.Do(rewrap_rule_elem s (Ast.DoHeader(mcode d)),
@@ -836,7 +801,7 @@ and statement s =
                 tokenwrap wh s
                   (Ast.WhileTail(wh,mcode lp,expression exp,mcode rp,
                                  mcode sem)))
-      | Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body,(_,aft)) ->
+      | Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body,aft) ->
          let fr = mcode fr in
          let lp = mcode lp in
          let first = forinfo first in
@@ -847,15 +812,15 @@ and statement s =
          let body = statement Ast.NotSequencible body in
          Ast.For(rewrap_rule_elem s
                    (Ast.ForHeader(fr,lp,first,exp2,sem2,exp3,rp)),
-                 body,([],[],[],convert_mcodekind (-1) aft))
-      | Ast0.Iterator(nm,lp,args,rp,body,(_,aft)) ->
+                 body,([],[],[],convert_fake_mcode aft))
+      | Ast0.Iterator(nm,lp,args,rp,body,aft) ->
          Ast.Iterator(rewrap_rule_elem s
                      (Ast.IteratorHeader
                         (ident nm,mcode lp,
                          dots expression args,
                          mcode rp)),
                    statement Ast.NotSequencible body,
-                   ([],[],[],convert_mcodekind (-1) aft))
+                   ([],[],[],convert_fake_mcode aft))
       |        Ast0.Switch(switch,lp,exp,rp,lb,decls,cases,rb) ->
          let switch = mcode switch in
          let lp = mcode lp in
diff --git a/parsing_cocci/commas_on_lists.ml b/parsing_cocci/commas_on_lists.ml
new file mode 100644 (file)
index 0000000..a8ca227
--- /dev/null
@@ -0,0 +1,97 @@
+(*
+ * Copyright 2012, INRIA
+ * Julia Lawall, Gilles Muller
+ * Copyright 2010-2011, INRIA, University of Copenhagen
+ * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix
+ * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen
+ * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
+ * This file is part of Coccinelle.
+ *
+ * Coccinelle is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, according to version 2 of the License.
+ *
+ * Coccinelle is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Coccinelle.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The authors reserve the right to distribute this or future versions of
+ * Coccinelle under other licenses.
+ *)
+
+
+# 0 "./commas_on_lists.ml"
+module Ast0 = Ast0_cocci
+module V0 = Visitor_ast0
+module VT0 = Visitor_ast0_types
+
+(* Add commas in init lists or exp lists, if needed.  This must be done
+before the adjacency calculation so that the commas get the right
+adjacency numbers.  This is needed for correct formatting in unparse_c.ml *)
+
+(* commas in dotted lists, here due to polymorphism restrictions *)
+
+let add_comma is_comma is_dots make_comma itemlist =
+  match Ast0.unwrap itemlist with
+    Ast0.DOTS(x) ->
+      (match List.rev x with
+        [] -> itemlist
+(* Not sure if comma is needed if the list is just ...; leave it there for      
+now. See list_matcher in cocci_vs_c.ml in first try_matches case. *)
+(*      |       [e] when is_dots e -> itemlist*)
+      |         e::es ->
+          if is_comma e
+          then itemlist
+          else
+            let comma =
+              match Ast0.get_mcodekind e with
+                Ast0.MINUS(_) -> (Ast0.make_minus_mcode ",")
+              |         _ -> (Ast0.make_mcode ",") in
+               Ast0.rewrap itemlist
+              (Ast0.DOTS
+                 (List.rev (Ast0.rewrap e (make_comma comma) :: (e::es)))))
+  |  _ -> failwith "not possible"
+
+let add_exp_comma =
+  add_comma
+    (function x -> match Ast0.unwrap x with Ast0.EComma _ -> true | _ -> false)
+    (function x -> match Ast0.unwrap x with Ast0.Edots _  -> true | _ -> false)
+    (function x -> Ast0.EComma x)
+
+and add_init_comma =
+  add_comma
+    (function x -> match Ast0.unwrap x with Ast0.IComma _ -> true | _ -> false)
+    (function x -> match Ast0.unwrap x with Ast0.Idots _  -> true | _ -> false)
+    (function x -> Ast0.IComma x)
+
+(* --------------------------------------------------------------------- *)
+(* special cases for terms that contain comma-separated lists where the
+trailing comma is allowed but not required *)
+
+let base_typeC r k t =
+  let t = k t in
+  match Ast0.unwrap t with
+    Ast0.EnumDef(ty,lb,ids,rb) ->
+      let ids = add_exp_comma ids in
+      Ast0.rewrap t (Ast0.EnumDef(ty,lb,ids,rb))
+  | _ -> t
+
+let initialiser r k i =
+  let i = k i in
+  match Ast0.unwrap i with
+    Ast0.InitList(lb,initlist,rb,ordered) ->
+      let initlist = add_init_comma initlist in
+      Ast0.rewrap i (Ast0.InitList(lb,initlist,rb,ordered))
+  | _ -> i
+
+let process p =
+  let fn =
+    V0.rebuilder
+      {V0.rebuilder_functions with
+       VT0.rebuilder_tyfn = base_typeC;
+       VT0.rebuilder_initfn = initialiser} in
+  List.map fn.VT0.rebuilder_rec_top_level p
diff --git a/parsing_cocci/commas_on_lists.mli b/parsing_cocci/commas_on_lists.mli
new file mode 100644 (file)
index 0000000..a0aed83
--- /dev/null
@@ -0,0 +1,28 @@
+(*
+ * Copyright 2012, INRIA
+ * Julia Lawall, Gilles Muller
+ * Copyright 2010-2011, INRIA, University of Copenhagen
+ * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix
+ * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen
+ * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
+ * This file is part of Coccinelle.
+ *
+ * Coccinelle is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, according to version 2 of the License.
+ *
+ * Coccinelle is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Coccinelle.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The authors reserve the right to distribute this or future versions of
+ * Coccinelle under other licenses.
+ *)
+
+
+# 0 "./commas_on_lists.mli"
+val process : Ast0_cocci.rule -> Ast0_cocci.rule
index 1e18f13..105abf4 100644 (file)
@@ -837,16 +837,17 @@ let rec statement s =
        let sem = normal_mcode sem in
        let promoted_sem = promote_mcode sem in
        mkres s (Ast0.ExprStatement(None,sem)) promoted_sem promoted_sem
-    | Ast0.IfThen(iff,lp,exp,rp,branch,(_,aft)) ->
+    | Ast0.IfThen(iff,lp,exp,rp,branch,(_,aft,adj)) ->
        let iff = normal_mcode iff in
        let lp = normal_mcode lp in
        let exp = expression exp in
        let rp = normal_mcode rp in
        let branch = statement branch in
        let right = promote_to_statement branch aft in
-       mkres s (Ast0.IfThen(iff,lp,exp,rp,branch,(Ast0.get_info right,aft)))
+       mkres s
+         (Ast0.IfThen(iff,lp,exp,rp,branch,(Ast0.get_info right,aft,adj)))
          (promote_mcode iff) right
-    | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,(_,aft)) ->
+    | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,(_,aft,adj)) ->
        let iff = normal_mcode iff in
        let lp = normal_mcode lp in
        let exp = expression exp in
@@ -857,16 +858,16 @@ let rec statement s =
        let right = promote_to_statement branch2 aft in
        mkres s
          (Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,
-           (Ast0.get_info right,aft)))
+           (Ast0.get_info right,aft,adj)))
          (promote_mcode iff) right
-    | Ast0.While(wh,lp,exp,rp,body,(_,aft)) ->
+    | Ast0.While(wh,lp,exp,rp,body,(_,aft,adj)) ->
        let wh = normal_mcode wh in
        let lp = normal_mcode lp in
        let exp = expression exp in
        let rp = normal_mcode rp in
        let body = statement body in
        let right = promote_to_statement body aft in
-       mkres s (Ast0.While(wh,lp,exp,rp,body,(Ast0.get_info right,aft)))
+       mkres s (Ast0.While(wh,lp,exp,rp,body,(Ast0.get_info right,aft,adj)))
          (promote_mcode wh) right
     | Ast0.Do(d,body,wh,lp,exp,rp,sem) ->
        let d = normal_mcode d in
@@ -877,7 +878,7 @@ let rec statement s =
        let rp = normal_mcode rp in
        mkres s (Ast0.Do(d,body,wh,lp,exp,rp,sem))
          (promote_mcode d) (promote_mcode sem)
-    | Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body,(_,aft)) ->
+    | Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body,(_,aft,adj)) ->
        let fr = normal_mcode fr in
        let lp = normal_mcode lp in
        let first =
@@ -903,16 +904,17 @@ let rec statement s =
        let body = statement body in
        let right = promote_to_statement body aft in
        mkres s (Ast0.For(fr,lp,first,exp2,sem2,exp3,rp,body,
-                         (Ast0.get_info right,aft)))
+                         (Ast0.get_info right,aft,adj)))
          (promote_mcode fr) right
-    | Ast0.Iterator(nm,lp,args,rp,body,(_,aft)) ->
+    | Ast0.Iterator(nm,lp,args,rp,body,(_,aft,adj)) ->
        let nm = ident nm in
        let lp = normal_mcode lp in
        let args = dots is_exp_dots (Some(promote_mcode lp)) expression args in
        let rp = normal_mcode rp in
        let body = statement body in
        let right = promote_to_statement body aft in
-       mkres s (Ast0.Iterator(nm,lp,args,rp,body,(Ast0.get_info right,aft)))
+       mkres s
+         (Ast0.Iterator(nm,lp,args,rp,body,(Ast0.get_info right,aft,adj)))
          nm right
     | Ast0.Switch(switch,lp,exp,rp,lb,decls,cases,rb) ->
        let switch = normal_mcode switch in
index 58bdc82..26cb99f 100644 (file)
@@ -440,12 +440,12 @@ let classify is_minus all_marked table code =
       |        Ast0.FunDecl((info,bef),_,_,_,_,_,_,_,_)
       | Ast0.Decl((info,bef),_) ->
          bind (nc_mcode ((),(),info,bef,(),-1)) (k s)
-      | Ast0.IfThen(_,_,_,_,_,(info,aft))
-      | Ast0.IfThenElse(_,_,_,_,_,_,_,(info,aft))
-      | Ast0.Iterator(_,_,_,_,_,(info,aft))
-      | Ast0.While(_,_,_,_,_,(info,aft))
-      | Ast0.For(_,_,_,_,_,_,_,_,(info,aft)) ->
-         bind (k s) (nc_mcode ((),(),info,aft,(),-1))
+      | Ast0.IfThen(_,_,_,_,_,(info,aft,adj))
+      | Ast0.IfThenElse(_,_,_,_,_,_,_,(info,aft,adj))
+      | Ast0.Iterator(_,_,_,_,_,(info,aft,adj))
+      | Ast0.While(_,_,_,_,_,(info,aft,adj))
+      | Ast0.For(_,_,_,_,_,_,_,_,(info,aft,adj)) ->
+         bind (k s) (nc_mcode ((),(),info,aft,(),adj))
       |        _ -> k s
 
 ) in
index dbaa429..a356786 100644 (file)
@@ -505,7 +505,8 @@ let collect_plus_nodes root =
     | Ast0.CONTEXT _ -> let (bef,aft) = extract_strings info in bef@aft
     | _ -> [] in
 
-  let info (i,_) = let (bef,aft) = extract_strings i in bef@aft in
+  let info (i,_,_) = let (bef,aft) = extract_strings i in bef@aft in
+  let pre_info (i,_) = let (bef,aft) = extract_strings i in bef@aft in
 
   let do_nothing fn r k e =
     match Ast0.get_mcodekind e with
@@ -522,9 +523,9 @@ let collect_plus_nodes root =
     | Ast0.Ty(ty) -> r.VT0.combiner_rec_typeC ty
     | Ast0.TopInit(init) -> r.VT0.combiner_rec_initialiser init
     | Ast0.Decl(bef,decl) ->
-       (info bef) @ (do_nothing mk_statement r k e)
+       (pre_info bef) @ (do_nothing mk_statement r k e)
     | Ast0.FunDecl(bef,fi,name,lp,params,rp,lbrace,body,rbrace) ->
-       (info bef) @ (do_nothing mk_statement r k e)
+       (pre_info bef) @ (do_nothing mk_statement r k e)
     | Ast0.IfThen(iff,lp,exp,rp,branch1,aft) ->
        (do_nothing mk_statement r k e) @ (info aft)
     | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,aft) ->
@@ -1049,7 +1050,12 @@ let reevaluate_contextness =
        Ast0.CONTEXT(mc) -> let (ba,_,_) = !mc in [ba]
      | _ -> [] in
 
-   let info (_,mc) =
+   let pre_info (_,mc) =
+     match mc with
+       Ast0.CONTEXT(mc) -> let (ba,_,_) = !mc in [ba]
+     | _ -> [] in
+
+   let info (_,mc,_) =
      match mc with
        Ast0.CONTEXT(mc) -> let (ba,_,_) = !mc in [ba]
      | _ -> [] in
@@ -1066,9 +1072,9 @@ let reevaluate_contextness =
    let stmt r k e =
      match Ast0.unwrap e with
        Ast0.Decl(bef,decl) ->
-        (info bef) @ (donothing r k e)
+        (pre_info bef) @ (donothing r k e)
      | Ast0.FunDecl(bef,fi,name,lp,params,rp,lbrace,body,rbrace) ->
-        (info bef) @ (donothing r k e)
+        (pre_info bef) @ (donothing r k e)
      | Ast0.IfThen(iff,lp,exp,rp,branch1,aft) ->
         (donothing r k e) @ (info aft)
      | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,aft) ->
index 45ec5e1..f0f35d8 100644 (file)
@@ -40,7 +40,7 @@ let sequence_tokens =
     (* sort of unpleasant to convert the token representation to a string
        but we can't make a list of mcodes otherwise because the types are all
        different *)
-    [(Common.dump (Ast0.unwrap_mcode x),Ast0.get_pos_ref x)] in
+    [(Dumper.dump (Ast0.unwrap_mcode x),Ast0.get_pos_ref x)] in
   let donothing r k e = k e in
   let bind x y = x @ y in
   let option_default = [] in
index 3ce58d6..2c291e0 100644 (file)
@@ -1482,18 +1482,18 @@ let rebuild_mcode start_line =
           (match Ast0.unwrap s with
             Ast0.Decl((info,mc),decl) ->
               Ast0.Decl((info,copy_mcodekind mc),decl)
-          | Ast0.IfThen(iff,lp,tst,rp,branch,(info,mc)) ->
-              Ast0.IfThen(iff,lp,tst,rp,branch,(info,copy_mcodekind mc))
-          | Ast0.IfThenElse(iff,lp,tst,rp,branch1,els,branch2,(info,mc)) ->
+          | Ast0.IfThen(iff,lp,tst,rp,branch,(info,mc,adj)) ->
+              Ast0.IfThen(iff,lp,tst,rp,branch,(info,copy_mcodekind mc,adj))
+          | Ast0.IfThenElse(iff,lp,tst,rp,branch1,els,branch2,(info,mc,adj))->
               Ast0.IfThenElse(iff,lp,tst,rp,branch1,els,branch2,
-                (info,copy_mcodekind mc))
-          | Ast0.While(whl,lp,exp,rp,body,(info,mc)) ->
-              Ast0.While(whl,lp,exp,rp,body,(info,copy_mcodekind mc))
-          | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,(info,mc)) ->
+                (info,copy_mcodekind mc,adj))
+          | Ast0.While(whl,lp,exp,rp,body,(info,mc,adj)) ->
+              Ast0.While(whl,lp,exp,rp,body,(info,copy_mcodekind mc,adj))
+          | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,(info,mc,adj)) ->
               Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,
-                       (info,copy_mcodekind mc))
-          | Ast0.Iterator(nm,lp,args,rp,body,(info,mc)) ->
-              Ast0.Iterator(nm,lp,args,rp,body,(info,copy_mcodekind mc))
+                       (info,copy_mcodekind mc,adj))
+          | Ast0.Iterator(nm,lp,args,rp,body,(info,mc,adj)) ->
+              Ast0.Iterator(nm,lp,args,rp,body,(info,copy_mcodekind mc,adj))
           | Ast0.FunDecl
               ((info,mc),fninfo,name,lp,params,rp,lbrace,body,rbrace) ->
                 Ast0.FunDecl
@@ -2089,17 +2089,17 @@ let extra_copy_stmt_plus model e =
        | Ast0.Decl((info,bef1),_) ->
            merge_plus bef bef1
        | _ ->  merge_plus bef (Ast0.get_mcodekind e))
-    | Ast0.IfThen(_,_,_,_,_,(info,aft))
-    | Ast0.IfThenElse(_,_,_,_,_,_,_,(info,aft))
-    | Ast0.While(_,_,_,_,_,(info,aft))
-    | Ast0.For(_,_,_,_,_,_,_,_,(info,aft))
-    | Ast0.Iterator(_,_,_,_,_,(info,aft)) ->
+    | Ast0.IfThen(_,_,_,_,_,(_,aft,_))
+    | Ast0.IfThenElse(_,_,_,_,_,_,_,(_,aft,_))
+    | Ast0.While(_,_,_,_,_,(_,aft,_))
+    | Ast0.For(_,_,_,_,_,_,_,_,(_,aft,_))
+    | Ast0.Iterator(_,_,_,_,_,(_,aft,_)) ->
        (match Ast0.unwrap e with
-         Ast0.IfThen(_,_,_,_,_,(info,aft1))
-       | Ast0.IfThenElse(_,_,_,_,_,_,_,(info,aft1))
-       | Ast0.While(_,_,_,_,_,(info,aft1))
-       | Ast0.For(_,_,_,_,_,_,_,_,(info,aft1))
-       | Ast0.Iterator(_,_,_,_,_,(info,aft1)) ->
+         Ast0.IfThen(_,_,_,_,_,(_,aft1,_))
+       | Ast0.IfThenElse(_,_,_,_,_,_,_,(_,aft1,_))
+       | Ast0.While(_,_,_,_,_,(_,aft1,_))
+       | Ast0.For(_,_,_,_,_,_,_,_,(_,aft1,_))
+       | Ast0.Iterator(_,_,_,_,_,(_,aft1,_)) ->
            merge_plus aft aft1
        | _ -> merge_plus aft (Ast0.get_mcodekind e))
     | _ -> ()));
index f051200..64c5699 100644 (file)
@@ -486,50 +486,58 @@ let drop_spaces s =
 # 487 "lexer_cocci.ml"
 let __ocaml_lex_tables = {
   Lexing.lex_base = 
-   "\000\000\175\255\176\255\081\000\119\000\181\255\182\255\192\000\
-    \219\000\206\255\078\000\035\000\090\000\220\255\080\000\081\000\
-    \224\255\225\255\228\255\229\255\230\255\231\255\233\255\082\000\
-    \105\000\237\255\239\255\101\000\102\000\140\000\162\000\033\001\
-    \108\001\095\000\097\000\084\000\183\001\138\000\255\255\041\002\
-    \102\000\167\000\186\255\213\255\026\002\101\002\176\002\251\002\
-    \070\003\145\003\220\003\039\004\114\004\189\004\008\005\122\005\
-    \112\000\152\000\168\000\242\000\243\000\251\255\177\255\205\255\
-    \249\255\204\255\248\255\197\005\016\006\091\006\166\006\241\006\
-    \084\005\107\000\117\000\092\000\244\255\242\255\012\002\094\005\
-    \060\007\093\000\117\000\135\000\141\000\144\000\245\255\145\000\
-    \147\000\243\255\208\255\178\255\216\255\149\000\227\255\245\000\
-    \215\255\153\000\019\001\232\255\234\255\236\255\198\255\210\255\
-    \214\255\212\255\199\255\211\255\209\255\203\255\136\000\207\255\
-    \097\000\089\000\116\000\123\000\104\000\112\000\109\007\193\255\
-    \131\000\131\000\132\000\060\001\162\007\237\007\133\000\132\000\
-    \128\000\149\000\061\001\095\008\178\008\190\255\039\007\153\000\
-    \145\000\169\000\188\000\214\000\110\007\055\002\090\001\165\001\
-    \189\255\056\002\188\255\056\001\155\005\110\007\154\005\084\001\
-    \111\007\113\007\085\001\202\000\217\000\213\000\219\000\222\000\
-    \086\001\087\001\224\000\228\000\119\001\221\000\219\000\159\001\
-    \237\000\232\000\238\000\028\001\160\001\016\001\026\001\161\001\
-    \046\007\096\001\253\008\124\007\147\007\085\008\024\009\066\008\
-    \095\008\094\009\168\001\179\255\234\001\255\255\034\009\252\255\
-    \164\009\107\007\134\007\254\255\187\009\253\255\235\001\254\255\
-    \053\009\255\255\251\255\226\009\062\009\085\009\253\255\249\009\
-    \252\255\042\007\254\255\025\010\255\255\251\255\049\010\132\009\
-    \155\009\253\255\072\010\252\255\163\004\252\255\253\255\254\255\
-    \119\001\255\255";
+   "\000\000\170\255\171\255\081\000\119\000\176\255\177\255\192\000\
+    \023\001\052\001\038\000\078\000\067\000\103\000\220\255\081\000\
+    \082\000\224\255\225\255\228\255\229\255\230\255\231\255\233\255\
+    \084\000\106\000\237\255\239\255\101\000\116\000\140\000\122\001\
+    \144\001\231\001\087\000\090\000\085\000\062\002\138\000\255\255\
+    \176\002\106\000\146\000\186\255\213\255\096\000\159\002\246\002\
+    \077\003\164\003\251\003\082\004\169\004\000\005\087\005\174\005\
+    \005\006\092\006\206\006\115\000\170\000\117\000\119\000\149\000\
+    \037\007\101\000\124\007\211\007\013\008\100\008\158\008\105\000\
+    \055\000\245\008\126\000\129\000\076\009\163\009\133\000\250\009\
+    \081\010\139\010\226\010\251\255\172\255\205\255\249\255\204\255\
+    \248\255\057\011\144\011\231\011\062\012\149\012\134\001\146\000\
+    \150\000\132\000\244\255\242\255\148\002\220\001\051\002\134\000\
+    \136\000\157\000\159\000\160\000\245\255\163\000\165\000\243\255\
+    \208\255\173\255\216\255\169\000\227\255\205\000\215\255\174\000\
+    \208\000\232\255\234\255\236\255\198\255\210\255\214\255\212\255\
+    \199\255\211\255\209\255\203\255\158\000\207\255\207\012\038\013\
+    \163\000\096\013\183\013\164\000\014\014\101\014\159\014\246\014\
+    \118\000\110\000\121\000\123\000\125\000\122\000\122\006\193\255\
+    \134\000\136\000\136\000\053\001\104\015\179\015\149\000\148\000\
+    \144\000\154\000\054\001\037\016\120\016\190\255\017\015\184\000\
+    \176\000\168\000\186\000\187\000\209\006\216\001\034\001\036\001\
+    \189\255\225\002\188\255\153\001\114\002\116\002\203\002\155\001\
+    \208\002\205\002\156\001\202\000\220\000\043\001\219\000\221\000\
+    \027\002\028\002\218\000\223\000\115\002\227\000\000\001\201\002\
+    \018\001\013\001\038\001\053\001\202\002\041\001\053\001\209\002\
+    \038\015\130\001\195\016\241\003\119\007\068\009\222\016\071\004\
+    \158\004\036\017\219\001\174\255\067\001\255\255\080\015\252\255\
+    \106\017\069\003\245\004\254\255\129\017\253\255\228\005\254\255\
+    \010\016\255\255\251\255\167\017\076\005\163\005\253\255\190\017\
+    \252\255\231\005\254\255\043\016\255\255\251\255\228\017\250\005\
+    \084\006\253\255\251\017\252\255\046\004\252\255\253\255\254\255\
+    \108\001\255\255";
   Lexing.lex_backtrk = 
-   "\255\255\255\255\255\255\076\000\076\000\255\255\255\255\072\000\
-    \080\000\255\255\055\000\061\000\060\000\255\255\034\000\032\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\020\000\
-    \080\000\255\255\255\255\015\000\014\000\054\000\029\000\072\000\
-    \072\000\017\000\038\000\005\000\072\000\033\000\255\255\001\000\
-    \255\255\002\000\255\255\255\255\072\000\072\000\072\000\072\000\
+   "\255\255\255\255\255\255\081\000\081\000\255\255\255\255\073\000\
+    \072\000\085\000\049\000\055\000\061\000\060\000\255\255\034\000\
+    \032\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \020\000\085\000\255\255\255\255\015\000\014\000\054\000\029\000\
+    \072\000\072\000\017\000\038\000\005\000\072\000\033\000\255\255\
+    \001\000\255\255\002\000\255\255\255\255\255\255\255\255\072\000\
     \072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\
-    \255\255\255\255\255\255\255\255\003\000\255\255\255\255\255\255\
-    \255\255\255\255\255\255\072\000\072\000\008\000\072\000\072\000\
-    \075\000\255\255\009\000\255\255\255\255\255\255\255\255\075\000\
-    \255\255\053\000\059\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\037\000\255\255\070\000\
-    \255\255\036\000\071\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\058\000\255\255\
+    \072\000\072\000\072\000\255\255\255\255\255\255\255\255\003\000\
+    \255\255\075\000\255\255\076\000\255\255\074\000\255\255\255\255\
+    \255\255\255\255\074\000\255\255\255\255\255\255\076\000\255\255\
+    \076\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\072\000\072\000\008\000\072\000\072\000\080\000\255\255\
+    \009\000\255\255\255\255\255\255\255\255\080\000\255\255\053\000\
+    \059\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\037\000\255\255\070\000\255\255\036\000\
+    \071\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\058\000\255\255\255\255\077\000\
+    \255\255\255\255\255\255\077\000\255\255\077\000\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\063\000\255\255\255\255\
     \255\255\255\255\255\255\255\255\064\000\255\255\068\000\255\255\
@@ -538,8 +546,8 @@ let __ocaml_lex_tables = {
     \068\000\068\000\068\000\255\255\255\255\255\255\255\255\255\255\
     \068\000\068\000\255\255\255\255\068\000\255\255\255\255\068\000\
     \255\255\255\255\255\255\255\255\068\000\255\255\255\255\068\000\
-    \076\000\076\000\255\255\075\000\255\255\255\255\076\000\075\000\
-    \255\255\076\000\076\000\255\255\255\255\255\255\000\000\255\255\
+    \081\000\081\000\255\255\080\000\255\255\255\255\081\000\080\000\
+    \255\255\081\000\081\000\255\255\255\255\255\255\000\000\255\255\
     \003\000\001\000\001\000\255\255\002\000\255\255\255\255\255\255\
     \001\000\255\255\255\255\004\000\002\000\002\000\255\255\003\000\
     \255\255\255\255\255\255\001\000\255\255\255\255\004\000\002\000\
@@ -547,403 +555,652 @@ let __ocaml_lex_tables = {
     \004\000\255\255";
   Lexing.lex_default = 
    "\001\000\000\000\000\000\255\255\255\255\000\000\000\000\255\255\
-    \255\255\000\000\255\255\255\255\255\255\000\000\255\255\255\255\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255\
-    \255\255\000\000\000\000\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\000\000\255\255\
-    \255\255\041\000\000\000\000\000\255\255\255\255\255\255\255\255\
+    \255\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \255\255\255\255\000\000\000\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\
+    \255\255\255\255\042\000\000\000\000\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\061\000\061\000\061\000\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\000\000\000\000\000\000\000\000\000\000\
+    \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\000\000\000\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\000\000\255\255\255\255\000\000\
+    \000\000\000\000\000\000\255\255\000\000\117\000\000\000\255\255\
+    \120\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\255\255\000\000\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\058\000\058\000\058\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\000\000\000\000\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\000\000\255\255\
-    \255\255\000\000\000\000\000\000\000\000\255\255\000\000\095\000\
-    \000\000\255\255\098\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\255\255\000\000\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\000\000\147\000\255\255\
-    \255\255\255\255\255\255\255\255\255\255\145\000\143\000\143\000\
-    \000\000\145\000\000\000\147\000\147\000\147\000\147\000\151\000\
-    \147\000\147\000\154\000\255\255\255\255\255\255\255\255\255\255\
-    \160\000\161\000\255\255\255\255\164\000\255\255\255\255\167\000\
-    \255\255\255\255\255\255\255\255\172\000\255\255\255\255\175\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\000\000\189\000\000\000\191\000\000\000\
-    \255\255\255\255\255\255\000\000\255\255\000\000\199\000\000\000\
-    \202\000\000\000\000\000\255\255\255\255\255\255\000\000\255\255\
-    \000\000\210\000\000\000\213\000\000\000\000\000\255\255\255\255\
-    \255\255\000\000\255\255\000\000\221\000\000\000\000\000\000\000\
+    \255\255\255\255\255\255\255\255\255\255\000\000\179\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\177\000\175\000\175\000\
+    \000\000\177\000\000\000\179\000\179\000\179\000\179\000\183\000\
+    \179\000\179\000\186\000\255\255\255\255\255\255\255\255\255\255\
+    \192\000\193\000\255\255\255\255\196\000\255\255\255\255\199\000\
+    \255\255\255\255\255\255\255\255\204\000\255\255\255\255\207\000\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\000\000\221\000\000\000\223\000\000\000\
+    \255\255\255\255\255\255\000\000\255\255\000\000\231\000\000\000\
+    \234\000\000\000\000\000\255\255\255\255\255\255\000\000\255\255\
+    \000\000\242\000\000\000\245\000\000\000\000\000\255\255\255\255\
+    \255\255\000\000\255\255\000\000\253\000\000\000\000\000\000\000\
     \255\255\000\000";
   Lexing.lex_trans = 
    "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\039\000\038\000\038\000\038\000\038\000\000\000\000\000\
+    \000\000\040\000\039\000\039\000\039\000\039\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \039\000\033\000\005\000\008\000\000\000\014\000\012\000\006\000\
-    \025\000\022\000\015\000\027\000\017\000\028\000\030\000\037\000\
+    \040\000\034\000\005\000\009\000\007\000\015\000\013\000\006\000\
+    \026\000\023\000\016\000\028\000\018\000\029\000\031\000\038\000\
     \004\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\009\000\016\000\029\000\034\000\010\000\026\000\
-    \035\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\032\000\
-    \007\000\007\000\007\000\021\000\024\000\020\000\011\000\036\000\
-    \108\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\031\000\
-    \007\000\007\000\007\000\019\000\023\000\018\000\013\000\179\000\
-    \106\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\003\000\109\000\110\000\105\000\104\000\103\000\
-    \097\000\101\000\099\000\093\000\061\000\041\000\180\000\107\000\
-    \058\000\074\000\077\000\091\000\065\000\176\000\063\000\062\000\
-    \075\000\057\000\096\000\092\000\094\000\179\000\177\000\182\000\
-    \182\000\182\000\182\000\182\000\182\000\182\000\182\000\181\000\
-    \181\000\255\255\090\000\076\000\042\000\087\000\180\000\083\000\
-    \057\000\041\000\084\000\085\000\180\000\176\000\086\000\088\000\
-    \056\000\089\000\095\000\176\000\098\000\111\000\177\000\043\000\
-    \082\000\081\000\173\000\168\000\177\000\126\000\102\000\178\000\
-    \073\000\059\000\072\000\072\000\072\000\072\000\072\000\072\000\
-    \072\000\072\000\072\000\072\000\180\000\066\000\120\000\064\000\
-    \157\000\134\000\156\000\176\000\118\000\100\000\155\000\121\000\
-    \122\000\135\000\123\000\127\000\177\000\128\000\129\000\178\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\130\000\118\000\136\000\137\000\119\000\255\255\
+    \003\000\003\000\010\000\017\000\030\000\035\000\011\000\027\000\
+    \036\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\033\000\
+    \008\000\008\000\008\000\022\000\025\000\021\000\012\000\037\000\
+    \134\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\032\000\
+    \008\000\008\000\008\000\020\000\024\000\019\000\014\000\211\000\
+    \130\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
+    \003\000\003\000\003\000\131\000\132\000\128\000\127\000\126\000\
+    \119\000\125\000\123\000\121\000\087\000\083\000\212\000\085\000\
+    \084\000\042\000\066\000\061\000\255\255\208\000\062\000\045\000\
+    \063\000\115\000\118\000\072\000\129\000\211\000\209\000\214\000\
+    \214\000\214\000\214\000\214\000\214\000\214\000\214\000\213\000\
+    \213\000\114\000\116\000\060\000\043\000\068\000\212\000\105\000\
+    \071\000\042\000\106\000\079\000\212\000\208\000\063\000\075\000\
+    \096\000\097\000\099\000\208\000\113\000\112\000\209\000\044\000\
+    \104\000\103\000\060\000\109\000\209\000\107\000\108\000\210\000\
+    \124\000\110\000\059\000\111\000\098\000\088\000\117\000\255\255\
+    \086\000\120\000\255\255\133\000\212\000\140\000\136\000\205\000\
+    \200\000\166\000\158\000\208\000\007\000\189\000\122\000\188\000\
+    \152\000\167\000\153\000\187\000\209\000\154\000\155\000\210\000\
+    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
+    \007\000\007\000\045\000\159\000\046\000\160\000\161\000\162\000\
     \002\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
     \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
     \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\060\000\060\000\255\255\138\000\007\000\
-    \139\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\140\000\165\000\162\000\158\000\116\000\
-    \114\000\161\000\255\255\160\000\115\000\124\000\131\000\112\000\
-    \159\000\163\000\164\000\113\000\166\000\167\000\169\000\170\000\
-    \117\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\171\000\124\000\131\000\255\255\255\255\
-    \255\255\255\255\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\255\255\172\000\174\000\175\000\
-    \007\000\255\255\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\070\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\225\000\255\255\
-    \255\255\255\255\255\255\255\255\186\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\067\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\144\000\
-    \000\000\000\000\000\000\007\000\186\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\000\000\255\255\255\255\187\000\255\255\000\000\000\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\201\000\255\255\187\000\000\000\044\000\000\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\039\000\038\000\038\000\038\000\038\000\080\000\
-    \255\255\080\000\000\000\000\000\079\000\079\000\079\000\079\000\
-    \079\000\079\000\079\000\079\000\079\000\079\000\190\000\200\000\
-    \000\000\039\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\255\255\255\255\255\255\255\255\
-    \040\000\000\000\255\255\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\255\255\146\000\255\255\
-    \000\000\007\000\000\000\045\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\255\255\
-    \255\255\255\255\000\000\000\000\000\000\255\255\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \000\000\000\000\000\000\000\000\007\000\000\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\046\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\255\255\255\255\000\000\000\000\000\000\000\000\
-    \000\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\000\000\000\000\000\000\000\000\007\000\
-    \000\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\047\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\000\000\000\000\255\255\
-    \255\255\000\000\000\000\000\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\000\000\000\000\
-    \000\000\000\000\007\000\000\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\048\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\000\000\000\000\000\000\000\000\007\000\000\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\049\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\000\000\000\000\000\000\000\000\
-    \007\000\000\000\007\000\050\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\000\000\
-    \000\000\000\000\000\000\007\000\000\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\051\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\000\000\000\000\000\000\000\000\007\000\000\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\052\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\000\000\223\000\223\000\223\000\
-    \223\000\000\000\000\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\224\000\222\000\000\000\
-    \000\000\007\000\000\000\007\000\007\000\007\000\007\000\053\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \000\000\000\000\000\000\000\000\054\000\000\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\000\000\000\000\000\000\000\000\055\000\
-    \000\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\057\000\072\000\072\000\072\000\072\000\
-    \072\000\072\000\072\000\072\000\072\000\072\000\079\000\079\000\
-    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
-    \000\000\078\000\057\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\056\000\255\255\255\255\255\255\000\000\000\000\
-    \000\000\000\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\000\000\000\000\000\000\000\000\
-    \000\000\078\000\000\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\000\000\000\000\000\000\
-    \000\000\007\000\000\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\152\000\
-    \151\000\000\000\000\000\000\000\000\000\000\000\007\000\007\000\
-    \007\000\007\000\068\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \000\000\000\000\000\000\000\000\007\000\000\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\069\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\000\000\000\000\000\000\000\000\007\000\
-    \000\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\000\000\000\000\000\000\
-    \000\000\000\000\255\255\255\255\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\000\000\000\000\
-    \000\000\000\000\007\000\000\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\000\000\000\000\000\000\000\000\007\000\000\000\007\000\
-    \007\000\007\000\007\000\071\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\255\255\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\212\000\000\000\000\000\000\000\
-    \007\000\000\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\069\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\079\000\079\000\079\000\079\000\
-    \079\000\079\000\079\000\079\000\079\000\079\000\118\000\140\000\
-    \255\255\255\255\187\000\255\255\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\187\000\000\000\000\000\211\000\000\000\
-    \000\000\000\000\000\000\149\000\000\000\118\000\140\000\000\000\
-    \142\000\000\000\000\000\000\000\000\000\148\000\000\000\000\000\
-    \000\000\000\000\187\000\194\000\194\000\194\000\194\000\194\000\
-    \194\000\194\000\194\000\187\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\141\000\124\000\179\000\179\000\179\000\179\000\
-    \179\000\179\000\179\000\179\000\179\000\179\000\195\000\195\000\
-    \195\000\195\000\195\000\195\000\195\000\195\000\184\000\000\000\
-    \184\000\078\000\124\000\183\000\183\000\183\000\183\000\183\000\
-    \183\000\183\000\183\000\183\000\183\000\000\000\000\000\000\000\
-    \000\000\116\000\114\000\150\000\153\000\000\000\115\000\154\000\
-    \000\000\112\000\000\000\000\000\000\000\113\000\000\000\000\000\
-    \000\000\078\000\117\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\000\000\000\000\000\000\
-    \000\000\125\000\000\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\255\255\
-    \000\000\000\000\255\255\000\000\000\000\000\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \000\000\000\000\000\000\000\000\125\000\000\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \131\000\000\000\000\000\000\000\000\000\000\000\255\255\255\255\
-    \000\000\255\255\183\000\183\000\183\000\183\000\183\000\183\000\
-    \183\000\183\000\183\000\183\000\000\000\000\000\000\000\131\000\
-    \000\000\000\000\000\000\179\000\000\000\181\000\181\000\181\000\
-    \181\000\181\000\181\000\181\000\181\000\181\000\181\000\183\000\
-    \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
-    \183\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\180\000\000\000\000\000\000\000\132\000\000\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\133\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\000\000\000\000\000\000\
-    \000\000\132\000\000\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\185\000\185\000\185\000\
-    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\185\000\185\000\
-    \185\000\185\000\185\000\185\000\000\000\000\000\179\000\000\000\
-    \182\000\182\000\182\000\182\000\182\000\182\000\182\000\182\000\
-    \181\000\181\000\193\000\193\000\193\000\193\000\193\000\193\000\
-    \193\000\193\000\000\000\000\000\000\000\180\000\185\000\185\000\
-    \185\000\185\000\185\000\185\000\176\000\204\000\204\000\204\000\
-    \204\000\204\000\204\000\204\000\204\000\177\000\205\000\205\000\
-    \205\000\205\000\205\000\205\000\205\000\205\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\180\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\176\000\206\000\206\000\206\000\
-    \206\000\206\000\206\000\206\000\206\000\177\000\185\000\185\000\
-    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
-    \000\000\000\000\192\000\000\000\000\000\000\000\000\000\185\000\
-    \185\000\185\000\185\000\185\000\185\000\000\000\000\000\000\000\
-    \000\000\000\000\176\000\000\000\000\000\203\000\000\000\000\000\
-    \000\000\000\000\000\000\177\000\216\000\216\000\216\000\216\000\
-    \216\000\216\000\216\000\216\000\000\000\000\000\000\000\185\000\
-    \185\000\185\000\185\000\185\000\185\000\000\000\000\000\000\000\
-    \000\000\000\000\176\000\217\000\217\000\217\000\217\000\217\000\
-    \217\000\217\000\217\000\177\000\196\000\196\000\196\000\196\000\
-    \196\000\196\000\196\000\196\000\196\000\196\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\196\000\196\000\196\000\
-    \196\000\196\000\196\000\197\000\197\000\197\000\197\000\197\000\
-    \197\000\197\000\197\000\197\000\197\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\197\000\197\000\197\000\197\000\
-    \197\000\197\000\000\000\000\000\000\000\196\000\196\000\196\000\
-    \196\000\196\000\196\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\207\000\207\000\207\000\207\000\207\000\207\000\
-    \207\000\207\000\207\000\207\000\197\000\197\000\197\000\197\000\
-    \197\000\197\000\255\255\207\000\207\000\207\000\207\000\207\000\
-    \207\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\
-    \208\000\208\000\208\000\000\000\000\000\255\255\000\000\000\000\
-    \000\000\000\000\208\000\208\000\208\000\208\000\208\000\208\000\
-    \000\000\000\000\000\000\207\000\207\000\207\000\207\000\207\000\
-    \207\000\215\000\215\000\215\000\215\000\215\000\215\000\215\000\
+    \007\000\007\000\007\000\168\000\169\000\170\000\171\000\007\000\
+    \172\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
+    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
+    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
+    \007\000\007\000\007\000\007\000\197\000\150\000\156\000\163\000\
+    \194\000\193\000\192\000\195\000\255\255\196\000\176\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\045\000\198\000\046\000\150\000\156\000\163\000\151\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\199\000\201\000\202\000\255\255\008\000\255\255\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\255\255\203\000\190\000\255\255\204\000\206\000\
+    \148\000\146\000\207\000\001\001\000\000\147\000\191\000\222\000\
+    \144\000\000\000\000\000\255\255\145\000\255\255\255\255\000\000\
+    \095\000\149\000\094\000\094\000\094\000\094\000\094\000\094\000\
+    \094\000\094\000\094\000\094\000\007\000\000\000\094\000\094\000\
+    \094\000\094\000\094\000\094\000\094\000\094\000\094\000\094\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\045\000\100\000\046\000\255\255\218\000\000\000\
+    \255\255\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\100\000\000\000\000\000\218\000\008\000\
+    \000\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \092\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\007\000\101\000\101\000\101\000\101\000\
+    \101\000\101\000\101\000\101\000\101\000\101\000\255\255\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\045\000\255\255\046\000\255\255\255\255\255\255\219\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\089\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\000\000\255\255\000\000\000\000\008\000\219\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\007\000\101\000\101\000\101\000\101\000\101\000\
+    \101\000\101\000\101\000\101\000\101\000\000\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \045\000\000\000\046\000\000\000\255\255\255\255\255\255\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\255\255\000\000\255\255\255\255\047\000\000\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\040\000\039\000\039\000\039\000\039\000\000\000\102\000\
+    \000\000\102\000\000\000\064\000\101\000\101\000\101\000\101\000\
+    \101\000\101\000\101\000\101\000\101\000\101\000\000\000\000\000\
+    \040\000\000\000\000\000\255\255\255\255\255\255\184\000\255\255\
+    \255\255\182\000\255\255\255\255\000\000\000\000\000\000\041\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\000\000\000\000\000\000\000\000\064\000\000\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\007\000\255\255\255\255\064\000\000\000\178\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \045\000\183\000\046\000\186\000\000\000\185\000\000\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\000\000\000\000\000\000\000\000\008\000\000\000\048\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\007\000\255\255\255\255\255\255\226\000\226\000\226\000\
+    \226\000\226\000\226\000\226\000\226\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\045\000\
+    \000\000\046\000\000\000\000\000\000\000\000\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \000\000\000\000\000\000\000\000\008\000\000\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\049\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \007\000\255\255\255\255\255\255\000\000\255\255\000\000\000\000\
+    \255\255\255\255\000\000\000\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\045\000\000\000\
+    \046\000\255\255\000\000\000\000\000\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\000\000\
+    \000\000\000\000\000\000\008\000\000\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \050\000\008\000\008\000\008\000\008\000\008\000\008\000\007\000\
+    \000\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\
+    \211\000\211\000\211\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\045\000\100\000\046\000\
+    \255\000\255\000\255\000\255\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\100\000\000\000\
+    \000\001\254\000\008\000\000\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\051\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\007\000\215\000\
+    \215\000\215\000\215\000\215\000\215\000\215\000\215\000\215\000\
+    \215\000\000\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\045\000\000\000\046\000\000\000\
+    \000\000\000\000\000\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\000\000\000\000\000\000\
+    \000\000\008\000\000\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\052\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\007\000\215\000\215\000\
+    \215\000\215\000\215\000\215\000\215\000\215\000\215\000\215\000\
+    \000\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\045\000\000\000\046\000\000\000\000\000\
+    \000\000\000\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\000\000\000\000\000\000\000\000\
+    \008\000\000\000\008\000\053\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\007\000\227\000\227\000\227\000\
+    \227\000\227\000\227\000\227\000\227\000\000\000\255\255\000\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\045\000\000\000\046\000\000\000\000\000\000\000\
+    \000\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\000\000\000\000\000\000\000\000\008\000\
+    \000\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\054\000\008\000\008\000\
+    \008\000\008\000\008\000\007\000\237\000\237\000\237\000\237\000\
+    \237\000\237\000\237\000\237\000\000\000\000\000\000\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\045\000\000\000\046\000\000\000\000\000\000\000\000\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\000\000\000\000\000\000\000\000\008\000\000\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\055\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\007\000\238\000\238\000\238\000\238\000\238\000\
+    \238\000\238\000\238\000\000\000\000\000\000\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \045\000\000\000\046\000\000\000\000\000\000\000\000\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\244\000\000\000\233\000\000\000\008\000\000\000\008\000\
+    \008\000\008\000\008\000\056\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\007\000\248\000\248\000\248\000\248\000\248\000\248\000\
+    \248\000\248\000\000\000\000\000\000\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\045\000\
+    \232\000\046\000\000\000\243\000\000\000\000\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \000\000\000\000\000\000\000\000\057\000\000\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \007\000\000\000\000\000\150\000\249\000\249\000\249\000\249\000\
+    \249\000\249\000\249\000\249\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\045\000\000\000\
+    \046\000\000\000\150\000\000\000\000\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\000\000\
+    \000\000\000\000\000\000\058\000\000\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\060\000\
+    \000\000\000\000\172\000\000\000\000\000\000\000\148\000\146\000\
+    \000\000\000\000\000\000\147\000\255\255\000\000\144\000\255\255\
+    \000\000\000\000\145\000\000\000\000\000\000\000\060\000\149\000\
+    \000\000\172\000\007\000\174\000\000\000\000\000\059\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \045\000\000\000\046\000\000\000\000\000\173\000\000\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\000\000\000\000\000\000\000\000\008\000\000\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\064\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\000\000\
+    \000\000\000\000\000\000\065\000\000\000\000\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \000\000\000\000\000\000\000\000\064\000\000\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \067\000\000\000\216\000\064\000\216\000\000\000\000\000\215\000\
+    \215\000\215\000\215\000\215\000\215\000\215\000\215\000\215\000\
     \215\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\208\000\208\000\208\000\208\000\208\000\208\000\
-    \000\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
-    \218\000\218\000\218\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\218\000\218\000\218\000\218\000\218\000\218\000\
-    \219\000\219\000\219\000\219\000\219\000\219\000\219\000\219\000\
-    \219\000\219\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\219\000\219\000\219\000\219\000\219\000\219\000\000\000\
-    \000\000\214\000\218\000\218\000\218\000\218\000\218\000\218\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\219\000\219\000\219\000\219\000\219\000\219\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\255\255\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000";
+    \000\000\000\000\000\000\000\000\000\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\000\000\
+    \000\000\000\000\000\000\067\000\000\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
+    \000\000\000\000\068\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\067\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\075\000\000\000\076\000\
+    \000\000\000\000\000\000\000\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\000\000\000\000\
+    \000\000\069\000\067\000\000\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
+    \000\000\000\000\000\000\000\000\069\000\000\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
+    \069\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\069\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\071\000\000\000\
+    \070\000\000\000\000\000\000\000\000\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\000\000\
+    \000\000\000\000\073\000\069\000\000\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\000\000\000\000\000\000\000\000\073\000\000\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\000\000\000\000\073\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\000\000\
+    \000\000\000\000\000\000\074\000\000\000\000\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \000\000\000\000\000\000\000\000\073\000\000\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \077\000\000\000\211\000\073\000\213\000\213\000\213\000\213\000\
+    \213\000\213\000\213\000\213\000\213\000\213\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\212\000\000\000\000\000\000\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\000\000\
+    \000\000\212\000\000\000\077\000\000\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \000\000\000\000\077\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\000\000\000\000\000\000\
+    \000\000\078\000\000\000\000\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\000\000\000\000\
+    \000\000\000\000\077\000\000\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\080\000\000\000\
+    \000\000\077\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\000\000\000\000\000\000\
+    \000\000\080\000\000\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\075\000\000\000\081\000\000\000\000\000\
+    \000\000\000\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\000\000\000\000\000\000\082\000\
+    \080\000\000\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\000\000\000\000\
+    \000\000\000\000\082\000\000\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\000\000\
+    \000\000\082\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\000\000\000\000\000\000\000\000\
+    \078\000\000\000\000\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\000\000\000\000\000\000\
+    \000\000\082\000\000\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\007\000\000\000\000\000\
+    \082\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\045\000\000\000\046\000\000\000\000\000\
+    \000\000\000\000\008\000\008\000\008\000\008\000\090\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\000\000\000\000\000\000\000\000\
+    \008\000\000\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\007\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\045\000\000\000\046\000\000\000\000\000\000\000\
+    \000\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\091\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\000\000\000\000\000\000\000\000\008\000\
+    \000\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\007\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\045\000\000\000\046\000\000\000\000\000\000\000\000\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\000\000\000\000\000\000\000\000\008\000\000\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\007\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \045\000\000\000\046\000\000\000\000\000\000\000\000\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\000\000\000\000\000\000\000\000\008\000\000\000\008\000\
+    \008\000\008\000\008\000\093\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\007\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\045\000\
+    \000\000\046\000\000\000\000\000\000\000\000\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \000\000\000\000\000\000\135\000\008\000\000\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\091\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\000\000\000\000\000\000\000\000\135\000\000\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \136\000\000\000\137\000\000\000\000\000\000\000\000\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\000\000\000\000\000\000\138\000\135\000\000\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\000\000\000\000\000\000\000\000\138\000\
+    \000\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\000\000\000\000\138\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\000\000\000\000\000\000\000\000\139\000\000\000\000\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\000\000\000\000\000\000\000\000\138\000\000\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\141\000\000\000\000\000\138\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\000\000\000\000\000\000\000\000\141\000\000\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\136\000\
+    \000\000\142\000\000\000\000\000\000\000\000\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \000\000\000\000\000\000\143\000\141\000\000\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\000\000\000\000\000\000\000\000\143\000\000\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\255\255\000\000\143\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \000\000\000\000\000\000\000\000\139\000\000\000\000\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\000\000\000\000\000\000\000\000\143\000\000\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\156\000\219\000\000\000\143\000\181\000\000\000\000\000\
+    \000\000\000\000\000\000\219\000\000\000\000\000\000\000\180\000\
+    \225\000\225\000\225\000\225\000\225\000\225\000\225\000\225\000\
+    \156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\219\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\219\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\000\000\000\000\000\000\000\000\157\000\
+    \224\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\000\000\000\000\
+    \000\000\255\255\157\000\000\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\163\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\236\000\236\000\236\000\236\000\236\000\236\000\
+    \236\000\236\000\000\000\000\000\000\000\163\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \255\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\247\000\247\000\247\000\247\000\247\000\
+    \247\000\247\000\247\000\000\000\000\000\000\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \000\000\000\000\235\000\000\000\164\000\000\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \165\000\000\000\000\000\246\000\000\000\000\000\000\000\000\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\000\000\000\000\000\000\000\000\164\000\
+    \000\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\217\000\217\000\217\000\217\000\217\000\
+    \217\000\217\000\217\000\217\000\217\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\217\000\217\000\217\000\217\000\
+    \217\000\217\000\255\255\000\000\211\000\000\000\214\000\214\000\
+    \214\000\214\000\214\000\214\000\214\000\214\000\213\000\213\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\212\000\217\000\217\000\217\000\217\000\
+    \217\000\217\000\208\000\255\255\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\209\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\212\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\208\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\209\000\217\000\217\000\217\000\217\000\
+    \217\000\217\000\217\000\217\000\217\000\217\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\217\000\217\000\217\000\
+    \217\000\217\000\217\000\000\000\000\000\000\000\000\000\000\000\
+    \208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\209\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\217\000\217\000\217\000\
+    \217\000\217\000\217\000\000\000\000\000\000\000\000\000\000\000\
+    \208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\209\000\228\000\228\000\228\000\228\000\228\000\228\000\
+    \228\000\228\000\228\000\228\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\228\000\228\000\228\000\228\000\228\000\
+    \228\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\
+    \229\000\229\000\229\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\229\000\229\000\229\000\229\000\229\000\229\000\
+    \000\000\000\000\000\000\228\000\228\000\228\000\228\000\228\000\
+    \228\000\000\000\000\000\000\000\000\000\000\000\000\000\239\000\
+    \239\000\239\000\239\000\239\000\239\000\239\000\239\000\239\000\
+    \239\000\000\000\229\000\229\000\229\000\229\000\229\000\229\000\
+    \239\000\239\000\239\000\239\000\239\000\239\000\240\000\240\000\
+    \240\000\240\000\240\000\240\000\240\000\240\000\240\000\240\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\
+    \240\000\240\000\240\000\240\000\240\000\000\000\000\000\000\000\
+    \239\000\239\000\239\000\239\000\239\000\239\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\250\000\250\000\250\000\250\000\
+    \250\000\250\000\250\000\250\000\250\000\250\000\000\000\240\000\
+    \240\000\240\000\240\000\240\000\240\000\250\000\250\000\250\000\
+    \250\000\250\000\250\000\251\000\251\000\251\000\251\000\251\000\
+    \251\000\251\000\251\000\251\000\251\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\251\000\251\000\251\000\251\000\
+    \251\000\251\000\000\000\000\000\000\000\250\000\250\000\250\000\
+    \250\000\250\000\250\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\251\000\251\000\251\000\251\000\
+    \251\000\251\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000";
   Lexing.lex_check = 
    "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\000\000\000\000\000\000\000\000\000\000\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \000\000\000\000\000\000\000\000\255\255\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -951,215 +1208,279 @@ let __ocaml_lex_tables = {
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\
     \012\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\003\000\010\000\010\000\014\000\015\000\023\000\
-    \027\000\024\000\024\000\028\000\035\000\040\000\003\000\012\000\
-    \056\000\073\000\075\000\081\000\033\000\003\000\034\000\034\000\
-    \074\000\057\000\027\000\028\000\028\000\004\000\003\000\004\000\
+    \003\000\003\000\003\000\011\000\011\000\013\000\015\000\016\000\
+    \028\000\024\000\025\000\025\000\034\000\036\000\003\000\035\000\
+    \035\000\041\000\045\000\059\000\042\000\003\000\061\000\065\000\
+    \062\000\029\000\028\000\071\000\013\000\004\000\003\000\004\000\
     \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
-    \004\000\041\000\082\000\074\000\037\000\083\000\003\000\029\000\
-    \057\000\037\000\029\000\084\000\004\000\003\000\085\000\087\000\
-    \057\000\088\000\093\000\004\000\097\000\110\000\003\000\037\000\
-    \029\000\029\000\112\000\113\000\004\000\116\000\023\000\004\000\
-    \030\000\058\000\030\000\030\000\030\000\030\000\030\000\030\000\
-    \030\000\030\000\030\000\030\000\004\000\033\000\117\000\034\000\
-    \114\000\115\000\114\000\004\000\008\000\024\000\114\000\120\000\
-    \121\000\115\000\122\000\126\000\004\000\127\000\128\000\004\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\129\000\008\000\135\000\136\000\008\000\095\000\
+    \004\000\029\000\029\000\060\000\038\000\072\000\003\000\030\000\
+    \074\000\038\000\030\000\075\000\004\000\003\000\063\000\078\000\
+    \095\000\096\000\097\000\004\000\103\000\104\000\003\000\038\000\
+    \030\000\030\000\060\000\105\000\004\000\106\000\107\000\004\000\
+    \024\000\109\000\060\000\110\000\096\000\034\000\115\000\117\000\
+    \035\000\119\000\120\000\132\000\004\000\136\000\139\000\144\000\
+    \145\000\147\000\148\000\004\000\007\000\146\000\025\000\146\000\
+    \149\000\147\000\152\000\146\000\004\000\153\000\154\000\004\000\
+    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
+    \007\000\007\000\007\000\158\000\007\000\159\000\160\000\161\000\
     \000\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
     \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
     \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\059\000\060\000\098\000\137\000\007\000\
-    \138\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
-    \007\000\007\000\007\000\139\000\155\000\156\000\157\000\008\000\
-    \008\000\158\000\147\000\159\000\008\000\123\000\130\000\008\000\
-    \157\000\162\000\163\000\008\000\165\000\166\000\168\000\169\000\
-    \008\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\170\000\123\000\130\000\151\000\154\000\
-    \160\000\161\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\142\000\171\000\173\000\174\000\
-    \031\000\164\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\032\000\032\000\032\000\032\000\
-    \032\000\032\000\032\000\032\000\032\000\032\000\224\000\041\000\
-    \058\000\167\000\172\000\175\000\177\000\032\000\032\000\032\000\
+    \007\000\007\000\007\000\167\000\168\000\169\000\170\000\007\000\
+    \171\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
+    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
+    \007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\
+    \007\000\007\000\007\000\008\000\187\000\009\000\155\000\162\000\
+    \188\000\190\000\191\000\194\000\174\000\195\000\175\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\197\000\008\000\009\000\155\000\162\000\009\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\198\000\200\000\201\000\061\000\008\000\062\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\008\000\008\000\008\000\008\000\008\000\008\000\
+    \008\000\008\000\042\000\202\000\189\000\063\000\203\000\205\000\
+    \009\000\009\000\206\000\000\001\255\255\009\000\189\000\220\000\
+    \009\000\255\255\255\255\179\000\009\000\183\000\186\000\255\255\
+    \031\000\009\000\031\000\031\000\031\000\031\000\031\000\031\000\
+    \031\000\031\000\031\000\031\000\032\000\255\255\094\000\094\000\
+    \094\000\094\000\094\000\094\000\094\000\094\000\094\000\094\000\
+    \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\
+    \032\000\032\000\032\000\094\000\032\000\117\000\209\000\255\255\
+    \120\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\
     \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\
     \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\
-    \032\000\032\000\032\000\032\000\032\000\032\000\032\000\143\000\
-    \255\255\255\255\255\255\032\000\177\000\032\000\032\000\032\000\
+    \032\000\032\000\032\000\094\000\255\255\255\255\209\000\032\000\
+    \255\255\032\000\032\000\032\000\032\000\032\000\032\000\032\000\
     \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\
     \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\
-    \032\000\032\000\032\000\032\000\032\000\032\000\032\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\255\255\059\000\060\000\186\000\095\000\255\255\255\255\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\198\000\098\000\186\000\255\255\036\000\255\255\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\039\000\039\000\039\000\039\000\039\000\078\000\
-    \147\000\078\000\255\255\255\255\078\000\078\000\078\000\078\000\
-    \078\000\078\000\078\000\078\000\078\000\078\000\188\000\198\000\
-    \255\255\039\000\044\000\044\000\044\000\044\000\044\000\044\000\
-    \044\000\044\000\044\000\044\000\151\000\154\000\160\000\161\000\
-    \039\000\255\255\142\000\044\000\044\000\044\000\044\000\044\000\
-    \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\
-    \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\
-    \044\000\044\000\044\000\044\000\044\000\141\000\145\000\164\000\
-    \255\255\044\000\255\255\044\000\044\000\044\000\044\000\044\000\
-    \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\
-    \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\
-    \044\000\044\000\044\000\044\000\044\000\045\000\045\000\045\000\
-    \045\000\045\000\045\000\045\000\045\000\045\000\045\000\167\000\
-    \172\000\175\000\255\255\255\255\255\255\143\000\045\000\045\000\
-    \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\
-    \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\
-    \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\
-    \255\255\255\255\255\255\255\255\045\000\255\255\045\000\045\000\
-    \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\
-    \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\
-    \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\
+    \032\000\032\000\032\000\033\000\101\000\101\000\101\000\101\000\
+    \101\000\101\000\101\000\101\000\101\000\101\000\173\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\174\000\033\000\175\000\192\000\193\000\218\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\255\255\220\000\255\255\255\255\033\000\218\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\037\000\102\000\102\000\102\000\102\000\102\000\
+    \102\000\102\000\102\000\102\000\102\000\255\255\037\000\037\000\
+    \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\
+    \037\000\255\255\037\000\255\255\180\000\196\000\181\000\037\000\
+    \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\
+    \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\
+    \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\
+    \037\000\179\000\255\255\183\000\186\000\037\000\255\255\037\000\
+    \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\
+    \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\
+    \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\
+    \037\000\040\000\040\000\040\000\040\000\040\000\255\255\100\000\
+    \255\255\100\000\255\255\046\000\100\000\100\000\100\000\100\000\
+    \100\000\100\000\100\000\100\000\100\000\100\000\255\255\255\255\
+    \040\000\255\255\255\255\199\000\204\000\182\000\180\000\185\000\
+    \173\000\181\000\184\000\207\000\255\255\255\255\255\255\040\000\
     \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
-    \046\000\046\000\188\000\198\000\255\255\255\255\255\255\255\255\
-    \255\255\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
     \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
     \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
-    \046\000\046\000\046\000\255\255\255\255\255\255\255\255\046\000\
-    \255\255\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
+    \046\000\046\000\255\255\255\255\255\255\255\255\046\000\255\255\
     \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
     \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
-    \046\000\046\000\046\000\047\000\047\000\047\000\047\000\047\000\
-    \047\000\047\000\047\000\047\000\047\000\255\255\255\255\141\000\
-    \145\000\255\255\255\255\255\255\047\000\047\000\047\000\047\000\
+    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
+    \046\000\046\000\047\000\192\000\193\000\046\000\255\255\177\000\
+    \255\255\255\255\255\255\255\255\255\255\255\255\047\000\047\000\
+    \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\
+    \047\000\182\000\047\000\185\000\255\255\184\000\255\255\047\000\
+    \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\
     \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\
     \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\
-    \047\000\047\000\047\000\047\000\047\000\047\000\255\255\255\255\
-    \255\255\255\255\047\000\255\255\047\000\047\000\047\000\047\000\
+    \047\000\255\255\255\255\255\255\255\255\047\000\255\255\047\000\
     \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\
     \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\
-    \047\000\047\000\047\000\047\000\047\000\047\000\048\000\048\000\
+    \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\
+    \047\000\048\000\180\000\196\000\181\000\225\000\225\000\225\000\
+    \225\000\225\000\225\000\225\000\225\000\048\000\048\000\048\000\
     \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\048\000\
+    \255\255\048\000\255\255\255\255\255\255\255\255\048\000\048\000\
     \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
     \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
     \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
-    \048\000\255\255\255\255\255\255\255\255\048\000\255\255\048\000\
+    \255\255\255\255\255\255\255\255\048\000\255\255\048\000\048\000\
     \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
     \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
     \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
-    \048\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
-    \049\000\049\000\049\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\049\000\049\000\049\000\049\000\049\000\049\000\
+    \049\000\199\000\204\000\182\000\255\255\185\000\255\255\255\255\
+    \184\000\207\000\255\255\255\255\049\000\049\000\049\000\049\000\
+    \049\000\049\000\049\000\049\000\049\000\049\000\049\000\255\255\
+    \049\000\177\000\255\255\255\255\255\255\049\000\049\000\049\000\
     \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
     \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
-    \049\000\049\000\049\000\049\000\255\255\255\255\255\255\255\255\
-    \049\000\255\255\049\000\049\000\049\000\049\000\049\000\049\000\
+    \049\000\049\000\049\000\049\000\049\000\049\000\049\000\255\255\
+    \255\255\255\255\255\255\049\000\255\255\049\000\049\000\049\000\
     \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
     \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
-    \049\000\049\000\049\000\049\000\050\000\050\000\050\000\050\000\
-    \050\000\050\000\050\000\050\000\050\000\050\000\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\050\000\050\000\050\000\
+    \049\000\049\000\049\000\049\000\049\000\049\000\049\000\050\000\
+    \255\255\211\000\211\000\211\000\211\000\211\000\211\000\211\000\
+    \211\000\211\000\211\000\050\000\050\000\050\000\050\000\050\000\
+    \050\000\050\000\050\000\050\000\050\000\050\000\211\000\050\000\
+    \252\000\252\000\252\000\252\000\050\000\050\000\050\000\050\000\
     \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\
     \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\
-    \050\000\050\000\050\000\050\000\050\000\050\000\050\000\255\255\
-    \255\255\255\255\255\255\050\000\255\255\050\000\050\000\050\000\
+    \050\000\050\000\050\000\050\000\050\000\050\000\211\000\255\255\
+    \252\000\252\000\050\000\255\255\050\000\050\000\050\000\050\000\
     \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\
     \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\
-    \050\000\050\000\050\000\050\000\050\000\050\000\050\000\051\000\
-    \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\
-    \051\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \050\000\050\000\050\000\050\000\050\000\050\000\051\000\215\000\
+    \215\000\215\000\215\000\215\000\215\000\215\000\215\000\215\000\
+    \215\000\255\255\051\000\051\000\051\000\051\000\051\000\051\000\
+    \051\000\051\000\051\000\051\000\051\000\255\255\051\000\255\255\
+    \255\255\255\255\255\255\051\000\051\000\051\000\051\000\051\000\
     \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\
     \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\
+    \051\000\051\000\051\000\051\000\051\000\255\255\255\255\255\255\
+    \255\255\051\000\255\255\051\000\051\000\051\000\051\000\051\000\
     \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\
-    \051\000\051\000\255\255\255\255\255\255\255\255\051\000\255\255\
     \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\
-    \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\
-    \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\
-    \051\000\051\000\052\000\052\000\052\000\052\000\052\000\052\000\
-    \052\000\052\000\052\000\052\000\255\255\220\000\220\000\220\000\
-    \220\000\255\255\255\255\052\000\052\000\052\000\052\000\052\000\
+    \051\000\051\000\051\000\051\000\051\000\052\000\216\000\216\000\
+    \216\000\216\000\216\000\216\000\216\000\216\000\216\000\216\000\
+    \255\255\052\000\052\000\052\000\052\000\052\000\052\000\052\000\
+    \052\000\052\000\052\000\052\000\255\255\052\000\255\255\255\255\
+    \255\255\255\255\052\000\052\000\052\000\052\000\052\000\052\000\
     \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\
     \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\
-    \052\000\052\000\052\000\052\000\052\000\220\000\220\000\255\255\
-    \255\255\052\000\255\255\052\000\052\000\052\000\052\000\052\000\
+    \052\000\052\000\052\000\052\000\255\255\255\255\255\255\255\255\
+    \052\000\255\255\052\000\052\000\052\000\052\000\052\000\052\000\
     \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\
     \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\
-    \052\000\052\000\052\000\052\000\052\000\053\000\053\000\053\000\
-    \053\000\053\000\053\000\053\000\053\000\053\000\053\000\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\053\000\053\000\
+    \052\000\052\000\052\000\052\000\053\000\226\000\226\000\226\000\
+    \226\000\226\000\226\000\226\000\226\000\255\255\252\000\255\255\
     \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
+    \053\000\053\000\053\000\255\255\053\000\255\255\255\255\255\255\
+    \255\255\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
     \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
     \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
-    \255\255\255\255\255\255\255\255\053\000\255\255\053\000\053\000\
-    \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
+    \053\000\053\000\053\000\255\255\255\255\255\255\255\255\053\000\
+    \255\255\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
     \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
     \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\
+    \053\000\053\000\053\000\054\000\236\000\236\000\236\000\236\000\
+    \236\000\236\000\236\000\236\000\255\255\255\255\255\255\054\000\
     \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
-    \054\000\054\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
+    \054\000\054\000\255\255\054\000\255\255\255\255\255\255\255\255\
     \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
     \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
-    \054\000\054\000\054\000\255\255\255\255\255\255\255\255\054\000\
-    \255\255\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
     \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
+    \054\000\054\000\255\255\255\255\255\255\255\255\054\000\255\255\
     \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
-    \054\000\054\000\054\000\055\000\072\000\072\000\072\000\072\000\
-    \072\000\072\000\072\000\072\000\072\000\072\000\079\000\079\000\
-    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
-    \255\255\072\000\055\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\055\000\220\000\150\000\148\000\255\255\255\255\
-    \255\255\255\255\055\000\055\000\055\000\055\000\055\000\055\000\
-    \055\000\055\000\055\000\055\000\255\255\255\255\255\255\255\255\
-    \255\255\072\000\255\255\055\000\055\000\055\000\055\000\055\000\
+    \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
+    \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
+    \054\000\054\000\055\000\237\000\237\000\237\000\237\000\237\000\
+    \237\000\237\000\237\000\255\255\255\255\255\255\055\000\055\000\
     \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\
+    \055\000\255\255\055\000\255\255\255\255\255\255\255\255\055\000\
     \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\
-    \055\000\055\000\055\000\055\000\055\000\255\255\255\255\255\255\
-    \255\255\055\000\255\255\055\000\055\000\055\000\055\000\055\000\
     \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\
     \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\
-    \055\000\055\000\055\000\055\000\055\000\067\000\067\000\067\000\
-    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\148\000\
-    \150\000\255\255\255\255\255\255\255\255\255\255\067\000\067\000\
-    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
-    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
+    \055\000\241\000\255\255\230\000\255\255\055\000\255\255\055\000\
+    \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\
+    \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\
+    \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\
+    \055\000\056\000\247\000\247\000\247\000\247\000\247\000\247\000\
+    \247\000\247\000\255\255\255\255\255\255\056\000\056\000\056\000\
+    \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\
+    \230\000\056\000\255\255\241\000\255\255\255\255\056\000\056\000\
+    \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\
+    \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\
+    \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\
+    \255\255\255\255\255\255\255\255\056\000\255\255\056\000\056\000\
+    \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\
+    \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\
+    \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\
+    \057\000\255\255\255\255\150\000\248\000\248\000\248\000\248\000\
+    \248\000\248\000\248\000\248\000\057\000\057\000\057\000\057\000\
+    \057\000\057\000\057\000\057\000\057\000\057\000\057\000\255\255\
+    \057\000\255\255\150\000\255\255\255\255\057\000\057\000\057\000\
+    \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\
+    \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\
+    \057\000\057\000\057\000\057\000\057\000\057\000\057\000\255\255\
+    \255\255\255\255\255\255\057\000\255\255\057\000\057\000\057\000\
+    \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\
+    \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\
+    \057\000\057\000\057\000\057\000\057\000\057\000\057\000\058\000\
+    \255\255\255\255\172\000\255\255\255\255\255\255\150\000\150\000\
+    \255\255\255\255\255\255\150\000\230\000\255\255\150\000\241\000\
+    \255\255\255\255\150\000\255\255\255\255\255\255\058\000\150\000\
+    \255\255\172\000\058\000\172\000\255\255\255\255\058\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\255\255\058\000\255\255\255\255\172\000\255\255\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\255\255\255\255\255\255\255\255\058\000\255\255\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\064\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\255\255\
+    \255\255\255\255\255\255\064\000\255\255\255\255\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \255\255\255\255\255\255\255\255\064\000\255\255\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\
+    \066\000\255\255\212\000\064\000\212\000\255\255\255\255\212\000\
+    \212\000\212\000\212\000\212\000\212\000\212\000\212\000\212\000\
+    \212\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\066\000\066\000\066\000\
+    \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\
+    \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\
+    \066\000\066\000\066\000\066\000\066\000\066\000\066\000\255\255\
+    \255\255\255\255\255\255\066\000\255\255\066\000\066\000\066\000\
+    \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\
+    \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\
+    \066\000\066\000\066\000\066\000\066\000\066\000\066\000\067\000\
+    \255\255\255\255\066\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\067\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\255\255\067\000\
+    \255\255\255\255\255\255\255\255\067\000\067\000\067\000\067\000\
     \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
-    \255\255\255\255\255\255\255\255\067\000\255\255\067\000\067\000\
     \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\255\255\255\255\
+    \255\255\068\000\067\000\255\255\067\000\067\000\067\000\067\000\
     \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
     \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
+    \067\000\067\000\067\000\067\000\067\000\067\000\068\000\068\000\
     \068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
-    \068\000\068\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
     \068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
     \068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
-    \068\000\068\000\068\000\255\255\255\255\255\255\255\255\068\000\
-    \255\255\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
+    \255\255\255\255\255\255\255\255\068\000\255\255\068\000\068\000\
     \068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
     \068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
-    \068\000\068\000\068\000\069\000\069\000\069\000\069\000\069\000\
-    \069\000\069\000\069\000\069\000\069\000\255\255\255\255\255\255\
-    \255\255\255\255\150\000\148\000\069\000\069\000\069\000\069\000\
+    \068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\
+    \069\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\069\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\255\255\
+    \069\000\255\255\255\255\255\255\255\255\069\000\069\000\069\000\
     \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
     \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
-    \069\000\069\000\069\000\069\000\069\000\069\000\255\255\255\255\
-    \255\255\255\255\069\000\255\255\069\000\069\000\069\000\069\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\255\255\
+    \255\255\255\255\070\000\069\000\255\255\069\000\069\000\069\000\
     \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
     \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\
-    \069\000\069\000\069\000\069\000\069\000\069\000\070\000\070\000\
-    \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\070\000\
+    \069\000\069\000\069\000\069\000\069\000\069\000\069\000\070\000\
     \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
     \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
     \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
@@ -1167,146 +1488,333 @@ let __ocaml_lex_tables = {
     \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
     \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
     \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\
-    \070\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\
-    \071\000\071\000\071\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\134\000\071\000\071\000\071\000\071\000\071\000\071\000\
-    \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\
-    \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\
-    \071\000\071\000\071\000\071\000\209\000\255\255\255\255\255\255\
-    \071\000\255\255\071\000\071\000\071\000\071\000\071\000\071\000\
-    \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\
-    \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\
-    \071\000\071\000\071\000\071\000\080\000\080\000\080\000\080\000\
-    \080\000\080\000\080\000\080\000\080\000\080\000\118\000\140\000\
-    \149\000\152\000\176\000\153\000\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\176\000\255\255\255\255\209\000\255\255\
-    \255\255\255\255\255\255\134\000\255\255\118\000\140\000\255\255\
-    \140\000\255\255\255\255\255\255\255\255\134\000\255\255\255\255\
-    \255\255\255\255\176\000\193\000\193\000\193\000\193\000\193\000\
-    \193\000\193\000\193\000\176\000\255\255\255\255\255\255\255\255\
-    \255\255\255\255\140\000\124\000\179\000\179\000\179\000\179\000\
-    \179\000\179\000\179\000\179\000\179\000\179\000\194\000\194\000\
-    \194\000\194\000\194\000\194\000\194\000\194\000\180\000\255\255\
-    \180\000\179\000\124\000\180\000\180\000\180\000\180\000\180\000\
-    \180\000\180\000\180\000\180\000\180\000\255\255\255\255\255\255\
-    \255\255\118\000\118\000\149\000\152\000\255\255\118\000\153\000\
-    \255\255\118\000\255\255\255\255\255\255\118\000\255\255\255\255\
-    \255\255\179\000\118\000\124\000\124\000\124\000\124\000\124\000\
-    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
-    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
-    \124\000\124\000\124\000\124\000\124\000\255\255\255\255\255\255\
-    \255\255\124\000\255\255\124\000\124\000\124\000\124\000\124\000\
-    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
-    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
-    \124\000\124\000\124\000\124\000\124\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\134\000\
-    \255\255\255\255\209\000\255\255\255\255\255\255\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \255\255\255\255\255\255\255\255\125\000\255\255\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \125\000\125\000\125\000\125\000\125\000\125\000\125\000\125\000\
-    \131\000\255\255\255\255\255\255\255\255\255\255\149\000\152\000\
-    \255\255\153\000\183\000\183\000\183\000\183\000\183\000\183\000\
-    \183\000\183\000\183\000\183\000\255\255\255\255\255\255\131\000\
-    \255\255\255\255\255\255\181\000\255\255\181\000\181\000\181\000\
-    \181\000\181\000\181\000\181\000\181\000\181\000\181\000\184\000\
-    \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
-    \184\000\255\255\181\000\255\255\255\255\255\255\255\255\255\255\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\181\000\255\255\255\255\255\255\131\000\255\255\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\132\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\255\255\255\255\255\255\
-    \255\255\132\000\255\255\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\178\000\178\000\178\000\
-    \178\000\178\000\178\000\178\000\178\000\178\000\178\000\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\178\000\178\000\
-    \178\000\178\000\178\000\178\000\255\255\255\255\182\000\255\255\
-    \182\000\182\000\182\000\182\000\182\000\182\000\182\000\182\000\
-    \182\000\182\000\190\000\190\000\190\000\190\000\190\000\190\000\
-    \190\000\190\000\255\255\255\255\255\255\182\000\178\000\178\000\
-    \178\000\178\000\178\000\178\000\182\000\200\000\200\000\200\000\
-    \200\000\200\000\200\000\200\000\200\000\182\000\204\000\204\000\
-    \204\000\204\000\204\000\204\000\204\000\204\000\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\182\000\255\255\255\255\
-    \255\255\255\255\255\255\255\255\182\000\205\000\205\000\205\000\
-    \205\000\205\000\205\000\205\000\205\000\182\000\185\000\185\000\
-    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
-    \255\255\255\255\190\000\255\255\255\255\255\255\255\255\185\000\
-    \185\000\185\000\185\000\185\000\185\000\255\255\255\255\255\255\
-    \255\255\255\255\185\000\255\255\255\255\200\000\255\255\255\255\
-    \255\255\255\255\255\255\185\000\215\000\215\000\215\000\215\000\
-    \215\000\215\000\215\000\215\000\255\255\255\255\255\255\185\000\
-    \185\000\185\000\185\000\185\000\185\000\255\255\255\255\255\255\
-    \255\255\255\255\185\000\216\000\216\000\216\000\216\000\216\000\
-    \216\000\216\000\216\000\185\000\192\000\192\000\192\000\192\000\
-    \192\000\192\000\192\000\192\000\192\000\192\000\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\192\000\192\000\192\000\
-    \192\000\192\000\192\000\196\000\196\000\196\000\196\000\196\000\
-    \196\000\196\000\196\000\196\000\196\000\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\196\000\196\000\196\000\196\000\
-    \196\000\196\000\255\255\255\255\255\255\192\000\192\000\192\000\
-    \192\000\192\000\192\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\203\000\203\000\203\000\203\000\203\000\203\000\
-    \203\000\203\000\203\000\203\000\196\000\196\000\196\000\196\000\
-    \196\000\196\000\190\000\203\000\203\000\203\000\203\000\203\000\
-    \203\000\207\000\207\000\207\000\207\000\207\000\207\000\207\000\
-    \207\000\207\000\207\000\255\255\255\255\200\000\255\255\255\255\
-    \255\255\255\255\207\000\207\000\207\000\207\000\207\000\207\000\
-    \255\255\255\255\255\255\203\000\203\000\203\000\203\000\203\000\
-    \203\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\
-    \211\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\207\000\207\000\207\000\207\000\207\000\207\000\
-    \255\255\214\000\214\000\214\000\214\000\214\000\214\000\214\000\
-    \214\000\214\000\214\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\214\000\214\000\214\000\214\000\214\000\214\000\
-    \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
-    \218\000\218\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\218\000\218\000\218\000\218\000\218\000\218\000\255\255\
-    \255\255\211\000\214\000\214\000\214\000\214\000\214\000\214\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\218\000\218\000\218\000\218\000\218\000\218\000\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\211\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255";
+    \070\000\073\000\255\255\255\255\070\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\255\255\
+    \255\255\255\255\255\255\073\000\255\255\255\255\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \255\255\255\255\255\255\255\255\073\000\255\255\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
+    \076\000\255\255\213\000\073\000\213\000\213\000\213\000\213\000\
+    \213\000\213\000\213\000\213\000\213\000\213\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\213\000\255\255\255\255\255\255\076\000\076\000\076\000\
+    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
+    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
+    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\255\255\
+    \255\255\213\000\255\255\076\000\255\255\076\000\076\000\076\000\
+    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
+    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
+    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\077\000\
+    \255\255\255\255\076\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\255\255\255\255\255\255\
+    \255\255\077\000\255\255\255\255\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\255\255\255\255\
+    \255\255\255\255\077\000\255\255\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
+    \077\000\077\000\077\000\077\000\077\000\077\000\079\000\255\255\
+    \255\255\077\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\079\000\079\000\079\000\079\000\079\000\
+    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
+    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
+    \079\000\079\000\079\000\079\000\079\000\255\255\255\255\255\255\
+    \255\255\079\000\255\255\079\000\079\000\079\000\079\000\079\000\
+    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
+    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
+    \079\000\079\000\079\000\079\000\079\000\080\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\255\255\080\000\255\255\255\255\
+    \255\255\255\255\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\255\255\255\255\255\255\081\000\
+    \080\000\255\255\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
+    \080\000\080\000\080\000\080\000\081\000\081\000\081\000\081\000\
+    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
+    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
+    \081\000\081\000\081\000\081\000\081\000\081\000\255\255\255\255\
+    \255\255\255\255\081\000\255\255\081\000\081\000\081\000\081\000\
+    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
+    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
+    \081\000\081\000\081\000\081\000\081\000\081\000\082\000\255\255\
+    \255\255\081\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\255\255\255\255\255\255\255\255\
+    \082\000\255\255\255\255\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\255\255\255\255\255\255\
+    \255\255\082\000\255\255\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\
+    \082\000\082\000\082\000\082\000\082\000\089\000\255\255\255\255\
+    \082\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
+    \089\000\089\000\089\000\089\000\255\255\089\000\255\255\255\255\
+    \255\255\255\255\089\000\089\000\089\000\089\000\089\000\089\000\
+    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
+    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
+    \089\000\089\000\089\000\089\000\255\255\255\255\255\255\255\255\
+    \089\000\255\255\089\000\089\000\089\000\089\000\089\000\089\000\
+    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
+    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
+    \089\000\089\000\089\000\089\000\090\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\
+    \090\000\090\000\090\000\255\255\090\000\255\255\255\255\255\255\
+    \255\255\090\000\090\000\090\000\090\000\090\000\090\000\090\000\
+    \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\
+    \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\
+    \090\000\090\000\090\000\255\255\255\255\255\255\255\255\090\000\
+    \255\255\090\000\090\000\090\000\090\000\090\000\090\000\090\000\
+    \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\
+    \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\
+    \090\000\090\000\090\000\091\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\091\000\
+    \091\000\091\000\091\000\091\000\091\000\091\000\091\000\091\000\
+    \091\000\091\000\255\255\091\000\255\255\255\255\255\255\255\255\
+    \091\000\091\000\091\000\091\000\091\000\091\000\091\000\091\000\
+    \091\000\091\000\091\000\091\000\091\000\091\000\091\000\091\000\
+    \091\000\091\000\091\000\091\000\091\000\091\000\091\000\091\000\
+    \091\000\091\000\255\255\255\255\255\255\255\255\091\000\255\255\
+    \091\000\091\000\091\000\091\000\091\000\091\000\091\000\091\000\
+    \091\000\091\000\091\000\091\000\091\000\091\000\091\000\091\000\
+    \091\000\091\000\091\000\091\000\091\000\091\000\091\000\091\000\
+    \091\000\091\000\092\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\092\000\092\000\
+    \092\000\092\000\092\000\092\000\092\000\092\000\092\000\092\000\
+    \092\000\255\255\092\000\255\255\255\255\255\255\255\255\092\000\
+    \092\000\092\000\092\000\092\000\092\000\092\000\092\000\092\000\
+    \092\000\092\000\092\000\092\000\092\000\092\000\092\000\092\000\
+    \092\000\092\000\092\000\092\000\092\000\092\000\092\000\092\000\
+    \092\000\255\255\255\255\255\255\255\255\092\000\255\255\092\000\
+    \092\000\092\000\092\000\092\000\092\000\092\000\092\000\092\000\
+    \092\000\092\000\092\000\092\000\092\000\092\000\092\000\092\000\
+    \092\000\092\000\092\000\092\000\092\000\092\000\092\000\092\000\
+    \092\000\093\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\093\000\093\000\093\000\
+    \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\
+    \255\255\093\000\255\255\255\255\255\255\255\255\093\000\093\000\
+    \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\
+    \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\
+    \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\
+    \255\255\255\255\255\255\134\000\093\000\255\255\093\000\093\000\
+    \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\
+    \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\
+    \093\000\093\000\093\000\093\000\093\000\093\000\093\000\093\000\
+    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
+    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
+    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
+    \134\000\134\000\255\255\255\255\255\255\255\255\134\000\255\255\
+    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
+    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
+    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
+    \134\000\134\000\135\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\255\255\135\000\255\255\255\255\255\255\255\255\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\255\255\255\255\255\255\137\000\135\000\255\255\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \135\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
+    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
+    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
+    \137\000\137\000\137\000\255\255\255\255\255\255\255\255\137\000\
+    \255\255\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
+    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
+    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
+    \137\000\137\000\137\000\138\000\255\255\255\255\137\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\255\255\255\255\255\255\255\255\138\000\255\255\255\255\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\255\255\255\255\255\255\255\255\138\000\255\255\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
+    \138\000\138\000\140\000\255\255\255\255\138\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\140\000\
+    \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
+    \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
+    \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
+    \140\000\255\255\255\255\255\255\255\255\140\000\255\255\140\000\
+    \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
+    \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
+    \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
+    \140\000\141\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \255\255\141\000\255\255\255\255\255\255\255\255\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \255\255\255\255\255\255\142\000\141\000\255\255\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
+    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
+    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
+    \142\000\142\000\255\255\255\255\255\255\255\255\142\000\255\255\
+    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
+    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
+    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
+    \142\000\142\000\143\000\166\000\255\255\142\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \255\255\255\255\255\255\255\255\143\000\255\255\255\255\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\255\255\255\255\255\255\255\255\143\000\255\255\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\156\000\208\000\255\255\143\000\166\000\255\255\255\255\
+    \255\255\255\255\255\255\208\000\255\255\255\255\255\255\166\000\
+    \222\000\222\000\222\000\222\000\222\000\222\000\222\000\222\000\
+    \156\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\208\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\208\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\156\000\156\000\156\000\156\000\156\000\156\000\156\000\
+    \156\000\156\000\156\000\156\000\156\000\156\000\156\000\156\000\
+    \156\000\156\000\156\000\156\000\156\000\156\000\156\000\156\000\
+    \156\000\156\000\156\000\255\255\255\255\255\255\255\255\156\000\
+    \222\000\156\000\156\000\156\000\156\000\156\000\156\000\156\000\
+    \156\000\156\000\156\000\156\000\156\000\156\000\156\000\156\000\
+    \156\000\156\000\156\000\156\000\156\000\156\000\156\000\156\000\
+    \156\000\156\000\156\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\255\255\255\255\
+    \255\255\166\000\157\000\255\255\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
+    \157\000\157\000\157\000\157\000\157\000\157\000\163\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\232\000\232\000\232\000\232\000\232\000\232\000\
+    \232\000\232\000\255\255\255\255\255\255\163\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \222\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\243\000\243\000\243\000\243\000\243\000\
+    \243\000\243\000\243\000\255\255\255\255\255\255\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \255\255\255\255\232\000\255\255\163\000\255\255\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \164\000\255\255\255\255\243\000\255\255\255\255\255\255\255\255\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\255\255\255\255\255\255\255\255\164\000\
+    \255\255\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\210\000\210\000\210\000\210\000\210\000\
+    \210\000\210\000\210\000\210\000\210\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\210\000\210\000\210\000\210\000\
+    \210\000\210\000\232\000\255\255\214\000\255\255\214\000\214\000\
+    \214\000\214\000\214\000\214\000\214\000\214\000\214\000\214\000\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\214\000\210\000\210\000\210\000\210\000\
+    \210\000\210\000\214\000\243\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\214\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\214\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\214\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\214\000\217\000\217\000\217\000\217\000\
+    \217\000\217\000\217\000\217\000\217\000\217\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\217\000\217\000\217\000\
+    \217\000\217\000\217\000\255\255\255\255\255\255\255\255\255\255\
+    \217\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\217\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\217\000\217\000\217\000\
+    \217\000\217\000\217\000\255\255\255\255\255\255\255\255\255\255\
+    \217\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\217\000\224\000\224\000\224\000\224\000\224\000\224\000\
+    \224\000\224\000\224\000\224\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\224\000\224\000\224\000\224\000\224\000\
+    \224\000\228\000\228\000\228\000\228\000\228\000\228\000\228\000\
+    \228\000\228\000\228\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\228\000\228\000\228\000\228\000\228\000\228\000\
+    \255\255\255\255\255\255\224\000\224\000\224\000\224\000\224\000\
+    \224\000\255\255\255\255\255\255\255\255\255\255\255\255\235\000\
+    \235\000\235\000\235\000\235\000\235\000\235\000\235\000\235\000\
+    \235\000\255\255\228\000\228\000\228\000\228\000\228\000\228\000\
+    \235\000\235\000\235\000\235\000\235\000\235\000\239\000\239\000\
+    \239\000\239\000\239\000\239\000\239\000\239\000\239\000\239\000\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\239\000\
+    \239\000\239\000\239\000\239\000\239\000\255\255\255\255\255\255\
+    \235\000\235\000\235\000\235\000\235\000\235\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\246\000\246\000\246\000\246\000\
+    \246\000\246\000\246\000\246\000\246\000\246\000\255\255\239\000\
+    \239\000\239\000\239\000\239\000\239\000\246\000\246\000\246\000\
+    \246\000\246\000\246\000\250\000\250\000\250\000\250\000\250\000\
+    \250\000\250\000\250\000\250\000\250\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\250\000\250\000\250\000\250\000\
+    \250\000\250\000\255\255\255\255\255\255\246\000\246\000\246\000\
+    \246\000\246\000\246\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\250\000\250\000\250\000\250\000\
+    \250\000\250\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255";
   Lexing.lex_base_code = 
    "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -1337,7 +1845,11 @@ let __ocaml_lex_tables = {
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -1390,6 +1902,10 @@ let __ocaml_lex_tables = {
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000";
   Lexing.lex_trans_code = 
    "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -1427,10 +1943,10 @@ let __ocaml_lex_tables = {
     \000\000\000\000\000\000\000\000\000\000\000\000";
   Lexing.lex_check_code = 
    "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\000\000\039\000\123\000\124\000\130\000\131\000\255\255\
+    \255\255\000\000\040\000\155\000\156\000\162\000\163\000\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \000\000\039\000\123\000\124\000\130\000\131\000\255\255\255\255\
+    \000\000\040\000\155\000\156\000\162\000\163\000\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
@@ -1485,18 +2001,18 @@ and __ocaml_lex_token_rec lexbuf __ocaml_lex_state =
          | _ -> reset_line lexbuf; token lexbuf
        end
       else (reset_line lexbuf; token lexbuf) )
-# 1489 "lexer_cocci.ml"
+# 2005 "lexer_cocci.ml"
 
   | 1 ->
 # 522 "lexer_cocci.mll"
                    ( start_line false; token lexbuf )
-# 1494 "lexer_cocci.ml"
+# 2010 "lexer_cocci.ml"
 
   | 2 ->
 let
 # 524 "lexer_cocci.mll"
                                        after
-# 1500 "lexer_cocci.ml"
+# 2016 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) lexbuf.Lexing.lex_curr_pos in
 # 524 "lexer_cocci.mll"
                                               (
@@ -1509,7 +2025,7 @@ let
        start_line true;
        TPragma (Ast.Indent str, get_current_line_type lexbuf)
     | _ -> start_line false; token lexbuf )
-# 1513 "lexer_cocci.ml"
+# 2029 "lexer_cocci.ml"
 
   | 3 ->
 # 536 "lexer_cocci.mll"
@@ -1518,12 +2034,12 @@ let
        start_line true;
        TPragma (Ast.Space (tok lexbuf), get_current_line_type lexbuf)
     | _ -> failwith "attributes only allowedin + code" )
-# 1522 "lexer_cocci.ml"
+# 2038 "lexer_cocci.ml"
 
   | 4 ->
 # 542 "lexer_cocci.mll"
          ( start_line true; TArobArob )
-# 1527 "lexer_cocci.ml"
+# 2043 "lexer_cocci.ml"
 
   | 5 ->
 # 543 "lexer_cocci.mll"
@@ -1532,53 +2048,53 @@ let
           then (start_line true; TArob)
           else (check_minus_context_linetype "@";
                 TPArob (get_current_line_type lexbuf)) )
-# 1536 "lexer_cocci.ml"
+# 2052 "lexer_cocci.ml"
 
   | 6 ->
 # 549 "lexer_cocci.mll"
           ( start_line true; TTildeEq (get_current_line_type lexbuf) )
-# 1541 "lexer_cocci.ml"
+# 2057 "lexer_cocci.ml"
 
   | 7 ->
 # 550 "lexer_cocci.mll"
          ( start_line true; TTildeExclEq (get_current_line_type lexbuf) )
-# 1546 "lexer_cocci.ml"
+# 2062 "lexer_cocci.ml"
 
   | 8 ->
 # 552 "lexer_cocci.mll"
       ( start_line true; check_minus_context_linetype (tok lexbuf);
        TWhen (get_current_line_type lexbuf) )
-# 1552 "lexer_cocci.ml"
+# 2068 "lexer_cocci.ml"
 
   | 9 ->
 # 556 "lexer_cocci.mll"
       ( start_line true; check_minus_context_linetype (tok lexbuf);
        TEllipsis (get_current_line_type lexbuf) )
-# 1558 "lexer_cocci.ml"
+# 2074 "lexer_cocci.ml"
 
   | 10 ->
 # 567 "lexer_cocci.mll"
            ( start_line true; check_context_linetype (tok lexbuf);
             TOEllipsis (get_current_line_type lexbuf) )
-# 1564 "lexer_cocci.ml"
+# 2080 "lexer_cocci.ml"
 
   | 11 ->
 # 569 "lexer_cocci.mll"
            ( start_line true; check_context_linetype (tok lexbuf);
             TCEllipsis (get_current_line_type lexbuf) )
-# 1570 "lexer_cocci.ml"
+# 2086 "lexer_cocci.ml"
 
   | 12 ->
 # 571 "lexer_cocci.mll"
             ( start_line true; check_minus_context_linetype (tok lexbuf);
             TPOEllipsis (get_current_line_type lexbuf) )
-# 1576 "lexer_cocci.ml"
+# 2092 "lexer_cocci.ml"
 
   | 13 ->
 # 573 "lexer_cocci.mll"
             ( start_line true; check_minus_context_linetype (tok lexbuf);
             TPCEllipsis (get_current_line_type lexbuf) )
-# 1582 "lexer_cocci.ml"
+# 2098 "lexer_cocci.ml"
 
   | 14 ->
 # 586 "lexer_cocci.mll"
@@ -1587,7 +2103,7 @@ let
          then (start_line true; TMinus (get_current_line_type lexbuf))
           else (patch_or_match PATCH;
                add_current_line_type D.MINUS; token lexbuf) )
-# 1591 "lexer_cocci.ml"
+# 2107 "lexer_cocci.ml"
 
   | 15 ->
 # 591 "lexer_cocci.mll"
@@ -1598,7 +2114,7 @@ let
          then TPlus0
           else (patch_or_match PATCH;
                add_current_line_type D.PLUS; token lexbuf) )
-# 1602 "lexer_cocci.ml"
+# 2118 "lexer_cocci.ml"
 
   | 16 ->
 # 598 "lexer_cocci.mll"
@@ -1608,7 +2124,7 @@ let
           else if !Data.in_meta
          then TWhy0
           else (add_current_line_type D.OPT; token lexbuf) )
-# 1612 "lexer_cocci.ml"
+# 2128 "lexer_cocci.ml"
 
   | 17 ->
 # 604 "lexer_cocci.mll"
@@ -1618,7 +2134,7 @@ let
           else if !Data.in_meta
          then TBang0
           else (add_current_line_type D.UNIQUE; token lexbuf) )
-# 1622 "lexer_cocci.ml"
+# 2138 "lexer_cocci.ml"
 
   | 18 ->
 # 610 "lexer_cocci.mll"
@@ -1627,13 +2143,13 @@ let
           else
             (start_line true; check_context_linetype (tok lexbuf);
             TOPar0 (get_current_line_type lexbuf)))
-# 1631 "lexer_cocci.ml"
+# 2147 "lexer_cocci.ml"
 
   | 19 ->
 # 615 "lexer_cocci.mll"
           ( start_line true;
            TOPar0 (contextify(get_current_line_type lexbuf)) )
-# 1637 "lexer_cocci.ml"
+# 2153 "lexer_cocci.ml"
 
   | 20 ->
 # 617 "lexer_cocci.mll"
@@ -1642,13 +2158,13 @@ let
           else (start_line true;
                check_context_linetype (tok lexbuf);
                TMid0 (get_current_line_type lexbuf)))
-# 1646 "lexer_cocci.ml"
+# 2162 "lexer_cocci.ml"
 
   | 21 ->
 # 622 "lexer_cocci.mll"
           ( start_line true;
            TMid0 (contextify(get_current_line_type lexbuf)) )
-# 1652 "lexer_cocci.ml"
+# 2168 "lexer_cocci.ml"
 
   | 22 ->
 # 624 "lexer_cocci.mll"
@@ -1657,48 +2173,48 @@ let
           else
             (start_line true; check_context_linetype (tok lexbuf);
             TCPar0 (get_current_line_type lexbuf)))
-# 1661 "lexer_cocci.ml"
+# 2177 "lexer_cocci.ml"
 
   | 23 ->
 # 629 "lexer_cocci.mll"
           ( start_line true;
            TCPar0 (contextify(get_current_line_type lexbuf)) )
-# 1667 "lexer_cocci.ml"
+# 2183 "lexer_cocci.ml"
 
   | 24 ->
 # 632 "lexer_cocci.mll"
         ( start_line true; TOCro (get_current_line_type lexbuf)   )
-# 1672 "lexer_cocci.ml"
+# 2188 "lexer_cocci.ml"
 
   | 25 ->
 # 633 "lexer_cocci.mll"
         ( start_line true; TCCro (get_current_line_type lexbuf)   )
-# 1677 "lexer_cocci.ml"
+# 2193 "lexer_cocci.ml"
 
   | 26 ->
 # 634 "lexer_cocci.mll"
         ( start_line true; TOBrace (get_current_line_type lexbuf) )
-# 1682 "lexer_cocci.ml"
+# 2198 "lexer_cocci.ml"
 
   | 27 ->
 # 635 "lexer_cocci.mll"
         ( start_line true; TCBrace (get_current_line_type lexbuf) )
-# 1687 "lexer_cocci.ml"
+# 2203 "lexer_cocci.ml"
 
   | 28 ->
 # 637 "lexer_cocci.mll"
                    ( start_line true; TPtrOp (get_current_line_type lexbuf)  )
-# 1692 "lexer_cocci.ml"
+# 2208 "lexer_cocci.ml"
 
   | 29 ->
 # 638 "lexer_cocci.mll"
                    ( start_line true; TDot (get_current_line_type lexbuf)    )
-# 1697 "lexer_cocci.ml"
+# 2213 "lexer_cocci.ml"
 
   | 30 ->
 # 639 "lexer_cocci.mll"
                    ( start_line true; TComma (get_current_line_type lexbuf)  )
-# 1702 "lexer_cocci.ml"
+# 2218 "lexer_cocci.ml"
 
   | 31 ->
 # 640 "lexer_cocci.mll"
@@ -1706,7 +2222,7 @@ let
                     if !Data.in_meta
                     then TMPtVirg (* works better with tokens_all *)
                     else TPtVirg (get_current_line_type lexbuf) )
-# 1710 "lexer_cocci.ml"
+# 2226 "lexer_cocci.ml"
 
   | 32 ->
 # 646 "lexer_cocci.mll"
@@ -1717,24 +2233,24 @@ let
                     else
                       (patch_or_match MATCH;
                        add_current_line_type D.MINUS; token lexbuf) )
-# 1721 "lexer_cocci.ml"
+# 2237 "lexer_cocci.ml"
 
   | 33 ->
 # 653 "lexer_cocci.mll"
                    ( start_line true;
                     TDmOp (Ast.Div,get_current_line_type lexbuf) )
-# 1727 "lexer_cocci.ml"
+# 2243 "lexer_cocci.ml"
 
   | 34 ->
 # 655 "lexer_cocci.mll"
                    ( start_line true;
                     TDmOp (Ast.Mod,get_current_line_type lexbuf) )
-# 1733 "lexer_cocci.ml"
+# 2249 "lexer_cocci.ml"
 
   | 35 ->
 # 657 "lexer_cocci.mll"
                    ( start_line true;  TTilde (get_current_line_type lexbuf) )
-# 1738 "lexer_cocci.ml"
+# 2254 "lexer_cocci.ml"
 
   | 36 ->
 # 659 "lexer_cocci.mll"
@@ -1744,88 +2260,88 @@ let
                       (start_line true; TInc (get_current_line_type lexbuf))
                     else (patch_or_match PATCH;
                           add_current_line_type D.PLUSPLUS; token lexbuf) )
-# 1748 "lexer_cocci.ml"
+# 2264 "lexer_cocci.ml"
 
   | 37 ->
 # 665 "lexer_cocci.mll"
                    ( start_line true;  TDec (get_current_line_type lexbuf) )
-# 1753 "lexer_cocci.ml"
+# 2269 "lexer_cocci.ml"
 
   | 38 ->
 # 667 "lexer_cocci.mll"
                    ( start_line true; TEq (get_current_line_type lexbuf) )
-# 1758 "lexer_cocci.ml"
+# 2274 "lexer_cocci.ml"
 
   | 39 ->
 # 669 "lexer_cocci.mll"
                    ( start_line true; mkassign Ast.Minus lexbuf )
-# 1763 "lexer_cocci.ml"
+# 2279 "lexer_cocci.ml"
 
   | 40 ->
 # 670 "lexer_cocci.mll"
                    ( start_line true; mkassign Ast.Plus lexbuf )
-# 1768 "lexer_cocci.ml"
+# 2284 "lexer_cocci.ml"
 
   | 41 ->
 # 672 "lexer_cocci.mll"
                    ( start_line true; mkassign Ast.Mul lexbuf )
-# 1773 "lexer_cocci.ml"
+# 2289 "lexer_cocci.ml"
 
   | 42 ->
 # 673 "lexer_cocci.mll"
                    ( start_line true; mkassign Ast.Div lexbuf )
-# 1778 "lexer_cocci.ml"
+# 2294 "lexer_cocci.ml"
 
   | 43 ->
 # 674 "lexer_cocci.mll"
                    ( start_line true; mkassign Ast.Mod lexbuf )
-# 1783 "lexer_cocci.ml"
+# 2299 "lexer_cocci.ml"
 
   | 44 ->
 # 676 "lexer_cocci.mll"
                    ( start_line true; mkassign Ast.And lexbuf )
-# 1788 "lexer_cocci.ml"
+# 2304 "lexer_cocci.ml"
 
   | 45 ->
 # 677 "lexer_cocci.mll"
                    ( start_line true; mkassign Ast.Or lexbuf )
-# 1793 "lexer_cocci.ml"
+# 2309 "lexer_cocci.ml"
 
   | 46 ->
 # 678 "lexer_cocci.mll"
                    ( start_line true; mkassign Ast.Xor lexbuf )
-# 1798 "lexer_cocci.ml"
+# 2314 "lexer_cocci.ml"
 
   | 47 ->
 # 680 "lexer_cocci.mll"
                    ( start_line true; mkassign Ast.DecLeft lexbuf )
-# 1803 "lexer_cocci.ml"
+# 2319 "lexer_cocci.ml"
 
   | 48 ->
 # 681 "lexer_cocci.mll"
                    ( start_line true; mkassign Ast.DecRight lexbuf )
-# 1808 "lexer_cocci.ml"
+# 2324 "lexer_cocci.ml"
 
   | 49 ->
 # 683 "lexer_cocci.mll"
                    ( start_line true; TDotDot (get_current_line_type lexbuf) )
-# 1813 "lexer_cocci.ml"
+# 2329 "lexer_cocci.ml"
 
   | 50 ->
 # 685 "lexer_cocci.mll"
                    ( start_line true; TEqEq    (get_current_line_type lexbuf) )
-# 1818 "lexer_cocci.ml"
+# 2334 "lexer_cocci.ml"
 
   | 51 ->
 # 686 "lexer_cocci.mll"
                    ( start_line true; TNotEq   (get_current_line_type lexbuf) )
-# 1823 "lexer_cocci.ml"
+# 2339 "lexer_cocci.ml"
 
   | 52 ->
 # 687 "lexer_cocci.mll"
                    ( start_line true;
                     TLogOp(Ast.SupEq,get_current_line_type lexbuf) )
-# 1829 "lexer_cocci.ml"
+# 2345 "lexer_cocci.ml"
 
   | 53 ->
 # 689 "lexer_cocci.mll"
@@ -1833,67 +2349,67 @@ let
                     if !Data.in_meta
                     then TSub(get_current_line_type lexbuf)
                     else TLogOp(Ast.InfEq,get_current_line_type lexbuf) )
-# 1837 "lexer_cocci.ml"
+# 2353 "lexer_cocci.ml"
 
   | 54 ->
 # 693 "lexer_cocci.mll"
                    ( start_line true;
                     TLogOp(Ast.Inf,get_current_line_type lexbuf) )
-# 1843 "lexer_cocci.ml"
+# 2359 "lexer_cocci.ml"
 
   | 55 ->
 # 695 "lexer_cocci.mll"
                    ( start_line true;
                     TLogOp(Ast.Sup,get_current_line_type lexbuf) )
-# 1849 "lexer_cocci.ml"
+# 2365 "lexer_cocci.ml"
 
   | 56 ->
 # 698 "lexer_cocci.mll"
                    ( start_line true; TAndLog (get_current_line_type lexbuf) )
-# 1854 "lexer_cocci.ml"
+# 2370 "lexer_cocci.ml"
 
   | 57 ->
 # 699 "lexer_cocci.mll"
                    ( start_line true; TOrLog  (get_current_line_type lexbuf) )
-# 1859 "lexer_cocci.ml"
+# 2375 "lexer_cocci.ml"
 
   | 58 ->
 # 701 "lexer_cocci.mll"
                    ( start_line true;
                     TShROp(Ast.DecRight,get_current_line_type lexbuf) )
-# 1865 "lexer_cocci.ml"
+# 2381 "lexer_cocci.ml"
 
   | 59 ->
 # 703 "lexer_cocci.mll"
                    ( start_line true;
                     TShLOp(Ast.DecLeft,get_current_line_type lexbuf) )
-# 1871 "lexer_cocci.ml"
+# 2387 "lexer_cocci.ml"
 
   | 60 ->
 # 706 "lexer_cocci.mll"
                    ( start_line true; TAnd    (get_current_line_type lexbuf) )
-# 1876 "lexer_cocci.ml"
+# 2392 "lexer_cocci.ml"
 
   | 61 ->
 # 707 "lexer_cocci.mll"
                    ( start_line true; TXor(get_current_line_type lexbuf) )
-# 1881 "lexer_cocci.ml"
+# 2397 "lexer_cocci.ml"
 
   | 62 ->
 # 709 "lexer_cocci.mll"
                     ( start_line true; TCppConcatOp )
-# 1886 "lexer_cocci.ml"
+# 2402 "lexer_cocci.ml"
 
   | 63 ->
 let
 # 710 "lexer_cocci.mll"
                                                   def
-# 1892 "lexer_cocci.ml"
+# 2408 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_mem.(0)
 and
 # 711 "lexer_cocci.mll"
                                    ident
-# 1897 "lexer_cocci.ml"
+# 2413 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) lexbuf.Lexing.lex_curr_pos in
 # 712 "lexer_cocci.mll"
       ( start_line true;
@@ -1905,18 +2421,18 @@ and
          (lt,
           check_var ident
             (arity,line,lline,offset+off,col+off,[],[],[])) )
-# 1909 "lexer_cocci.ml"
+# 2425 "lexer_cocci.ml"
 
   | 64 ->
 let
 # 721 "lexer_cocci.mll"
                                                    def
-# 1915 "lexer_cocci.ml"
+# 2431 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_mem.(0)
 and
 # 722 "lexer_cocci.mll"
                                    ident
-# 1920 "lexer_cocci.ml"
+# 2436 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) lexbuf.Lexing.lex_curr_pos in
 # 723 "lexer_cocci.mll"
       ( start_line true;
@@ -1928,18 +2444,18 @@ and
          (lt,
           check_var ident
             (arity,line,lline,offset+off,col+off,[],[],[])) )
-# 1932 "lexer_cocci.ml"
+# 2448 "lexer_cocci.ml"
 
   | 65 ->
 let
 # 732 "lexer_cocci.mll"
                                                    def
-# 1938 "lexer_cocci.ml"
+# 2454 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_mem.(0)
 and
 # 733 "lexer_cocci.mll"
                                     ident
-# 1943 "lexer_cocci.ml"
+# 2459 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) (lexbuf.Lexing.lex_curr_pos + -1) in
 # 735 "lexer_cocci.mll"
       ( start_line true;
@@ -1953,17 +2469,17 @@ and
           (arity,line,lline,offset+off,col+off,strbef,straft,pos),
         offset + off + (String.length ident),
         col + off + (String.length ident)) )
-# 1957 "lexer_cocci.ml"
+# 2473 "lexer_cocci.ml"
 
   | 66 ->
 # 747 "lexer_cocci.mll"
       ( TIncludeL
          (let str = tok lexbuf in
-         let start = String.index str '"' in
-         let finish = String.rindex str '"' in
+         let start = String.index str '\"' in
+         let finish = String.rindex str '\"' in
          start_line true;
          (process_include start finish str,get_current_line_type lexbuf)) )
-# 1967 "lexer_cocci.ml"
+# 2483 "lexer_cocci.ml"
 
   | 67 ->
 # 754 "lexer_cocci.mll"
@@ -1973,13 +2489,13 @@ and
          let finish = String.rindex str '>' in
          start_line true;
          (process_include start finish str,get_current_line_type lexbuf)) )
-# 1977 "lexer_cocci.ml"
+# 2493 "lexer_cocci.ml"
 
   | 68 ->
 # 769 "lexer_cocci.mll"
       ( start_line true; check_plus_linetype (tok lexbuf);
        TPragma (Ast.Noindent(tok lexbuf), get_current_line_type lexbuf) )
-# 1983 "lexer_cocci.ml"
+# 2499 "lexer_cocci.ml"
 
   | 69 ->
 # 772 "lexer_cocci.mll"
@@ -1993,7 +2509,7 @@ and
        TPragma (Ast.Indent("/*"^(comment check_comment lexbuf)),
                 get_current_line_type lexbuf)
       |        _ -> let _ = comment (fun _ -> ()) lexbuf in token lexbuf )
-# 1997 "lexer_cocci.ml"
+# 2513 "lexer_cocci.ml"
 
   | 70 ->
 # 783 "lexer_cocci.mll"
@@ -2004,7 +2520,7 @@ and
          (let str = tok lexbuf in
          (drop_spaces(String.sub str 3 (String.length str - 3)),
           (get_current_line_type lexbuf))) )
-# 2008 "lexer_cocci.ml"
+# 2524 "lexer_cocci.ml"
 
   | 71 ->
 # 791 "lexer_cocci.mll"
@@ -2015,265 +2531,310 @@ and
          (let str = tok lexbuf in
          (drop_spaces(String.sub str 3 (String.length str - 3)),
           (get_current_line_type lexbuf))) )
-# 2019 "lexer_cocci.ml"
+# 2535 "lexer_cocci.ml"
 
   | 72 ->
 # 800 "lexer_cocci.mll"
       ( start_line true; id_tokens lexbuf )
-# 2024 "lexer_cocci.ml"
+# 2540 "lexer_cocci.ml"
 
   | 73 ->
-# 802 "lexer_cocci.mll"
-        ( start_line true;
-         TChar(char lexbuf,get_current_line_type lexbuf) )
-# 2030 "lexer_cocci.ml"
+# 804 "lexer_cocci.mll"
+      ( start_line true; id_tokens lexbuf )
+# 2545 "lexer_cocci.ml"
 
   | 74 ->
-# 804 "lexer_cocci.mll"
+# 811 "lexer_cocci.mll"
+      ( 
+       start_line true; 
+       if not !Flag.c_plus_plus
+       then Common.pr2_once "< and > not allowed in C identifiers, try -c++ option";
+       id_tokens lexbuf 
+      )
+# 2555 "lexer_cocci.ml"
+
+  | 75 ->
+# 820 "lexer_cocci.mll"
+      ( 
+       start_line true; 
+       if not !Flag.c_plus_plus
+       then Common.pr2_once "< and > not allowed in C identifiers, try -c++ option";
+       id_tokens lexbuf 
+      )
+# 2565 "lexer_cocci.ml"
+
+  | 76 ->
+# 834 "lexer_cocci.mll"
+      ( 
+       start_line true; 
+       if not !Flag.c_plus_plus
+       then Common.pr2_once "~ and :: not allowed in C identifiers, try -c++ option";
+       id_tokens lexbuf 
+      )
+# 2575 "lexer_cocci.ml"
+
+  | 77 ->
+# 845 "lexer_cocci.mll"
+      ( 
+       start_line true; 
+       if not !Flag.c_plus_plus
+       then Common.pr2_once "~ and :: not allowed in C identifiers, try -c++ option";
+       id_tokens lexbuf 
+      )
+# 2585 "lexer_cocci.ml"
+
+  | 78 ->
+# 854 "lexer_cocci.mll"
         ( start_line true;
+         TChar(char lexbuf,get_current_line_type lexbuf) )
+# 2591 "lexer_cocci.ml"
+
+  | 79 ->
+# 856 "lexer_cocci.mll"
+         ( start_line true;
          TString(string lexbuf,(get_current_line_type lexbuf)) )
-# 2036 "lexer_cocci.ml"
+# 2597 "lexer_cocci.ml"
 
-  | 75 ->
+  | 80 ->
 let
-# 806 "lexer_cocci.mll"
+# 858 "lexer_cocci.mll"
              x
-# 2042 "lexer_cocci.ml"
+# 2603 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
-# 806 "lexer_cocci.mll"
+# 858 "lexer_cocci.mll"
                    ( start_line true;
                     TFloat(x,(get_current_line_type lexbuf)) )
-# 2047 "lexer_cocci.ml"
+# 2608 "lexer_cocci.ml"
 
-  | 76 ->
+  | 81 ->
 let
-# 816 "lexer_cocci.mll"
+# 868 "lexer_cocci.mll"
          x
-# 2053 "lexer_cocci.ml"
+# 2614 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
-# 816 "lexer_cocci.mll"
+# 868 "lexer_cocci.mll"
             ( start_line true; TInt(x,(get_current_line_type lexbuf)) )
-# 2057 "lexer_cocci.ml"
+# 2618 "lexer_cocci.ml"
 
-  | 77 ->
-# 818 "lexer_cocci.mll"
+  | 82 ->
+# 870 "lexer_cocci.mll"
                    ( TIso )
-# 2062 "lexer_cocci.ml"
+# 2623 "lexer_cocci.ml"
 
-  | 78 ->
-# 819 "lexer_cocci.mll"
+  | 83 ->
+# 871 "lexer_cocci.mll"
                    ( TRightIso )
-# 2067 "lexer_cocci.ml"
+# 2628 "lexer_cocci.ml"
 
-  | 79 ->
-# 821 "lexer_cocci.mll"
+  | 84 ->
+# 873 "lexer_cocci.mll"
                    ( EOF )
-# 2072 "lexer_cocci.ml"
+# 2633 "lexer_cocci.ml"
 
-  | 80 ->
-# 823 "lexer_cocci.mll"
+  | 85 ->
+# 875 "lexer_cocci.mll"
       ( lexerr "unrecognised symbol, in token rule: " (tok lexbuf) )
-# 2077 "lexer_cocci.ml"
+# 2638 "lexer_cocci.ml"
 
   | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_token_rec lexbuf __ocaml_lex_state
 
 and char lexbuf =
-    __ocaml_lex_char_rec lexbuf 188
+    __ocaml_lex_char_rec lexbuf 220
 and __ocaml_lex_char_rec lexbuf __ocaml_lex_state =
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
 let
-# 827 "lexer_cocci.mll"
+# 879 "lexer_cocci.mll"
           x
-# 2089 "lexer_cocci.ml"
+# 2650 "lexer_cocci.ml"
 = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in
-# 827 "lexer_cocci.mll"
+# 879 "lexer_cocci.mll"
                                        ( String.make 1 x ^ restchars lexbuf )
-# 2093 "lexer_cocci.ml"
+# 2654 "lexer_cocci.ml"
 
   | 1 ->
 let
-# 829 "lexer_cocci.mll"
+# 881 "lexer_cocci.mll"
                                              x
-# 2099 "lexer_cocci.ml"
+# 2660 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
-# 829 "lexer_cocci.mll"
+# 881 "lexer_cocci.mll"
                                                      ( x ^ restchars lexbuf )
-# 2103 "lexer_cocci.ml"
+# 2664 "lexer_cocci.ml"
 
   | 2 ->
 let
-# 833 "lexer_cocci.mll"
+# 885 "lexer_cocci.mll"
                                   x
-# 2109 "lexer_cocci.ml"
+# 2670 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
-# 833 "lexer_cocci.mll"
+# 885 "lexer_cocci.mll"
                                                      ( x ^ restchars lexbuf )
-# 2113 "lexer_cocci.ml"
+# 2674 "lexer_cocci.ml"
 
   | 3 ->
 let
-# 834 "lexer_cocci.mll"
+# 886 "lexer_cocci.mll"
                  v
-# 2119 "lexer_cocci.ml"
+# 2680 "lexer_cocci.ml"
 = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 1)
 and
-# 834 "lexer_cocci.mll"
+# 886 "lexer_cocci.mll"
                                   x
-# 2124 "lexer_cocci.ml"
+# 2685 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos (lexbuf.Lexing.lex_start_pos + 2) in
-# 835 "lexer_cocci.mll"
+# 887 "lexer_cocci.mll"
  (
           (match v with (* Machine specific ? *)
           | 'n' -> ()  | 't' -> ()   | 'v' -> ()  | 'b' -> () | 'r' -> ()
           | 'f' -> () | 'a' -> ()
-         | '\\' -> () | '?'  -> () | '\'' -> ()  | '"' -> ()
+         | '\\' -> () | '?'  -> () | '\'' -> ()  | '\"' -> ()
           | 'e' -> () (* linuxext: ? *)
          | _ ->
               Common.pr2 ("LEXER: unrecognised symbol in char:"^tok lexbuf);
          );
           x ^ restchars lexbuf
        )
-# 2138 "lexer_cocci.ml"
+# 2699 "lexer_cocci.ml"
 
   | 4 ->
-# 847 "lexer_cocci.mll"
+# 899 "lexer_cocci.mll"
       ( Common.pr2 ("LEXER: unrecognised symbol in char:"^tok lexbuf);
         tok lexbuf ^ restchars lexbuf
       )
-# 2145 "lexer_cocci.ml"
+# 2706 "lexer_cocci.ml"
 
   | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_char_rec lexbuf __ocaml_lex_state
 
 and restchars lexbuf =
-    __ocaml_lex_restchars_rec lexbuf 198
+    __ocaml_lex_restchars_rec lexbuf 230
 and __ocaml_lex_restchars_rec lexbuf __ocaml_lex_state =
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
-# 852 "lexer_cocci.mll"
+# 904 "lexer_cocci.mll"
                                        ( "" )
-# 2156 "lexer_cocci.ml"
+# 2717 "lexer_cocci.ml"
 
   | 1 ->
 let
-# 853 "lexer_cocci.mll"
+# 905 "lexer_cocci.mll"
           x
-# 2162 "lexer_cocci.ml"
+# 2723 "lexer_cocci.ml"
 = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in
-# 853 "lexer_cocci.mll"
+# 905 "lexer_cocci.mll"
                                        ( String.make 1 x ^ restchars lexbuf )
-# 2166 "lexer_cocci.ml"
+# 2727 "lexer_cocci.ml"
 
   | 2 ->
 let
-# 855 "lexer_cocci.mll"
+# 907 "lexer_cocci.mll"
                                              x
-# 2172 "lexer_cocci.ml"
+# 2733 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
-# 855 "lexer_cocci.mll"
+# 907 "lexer_cocci.mll"
                                                      ( x ^ restchars lexbuf )
-# 2176 "lexer_cocci.ml"
+# 2737 "lexer_cocci.ml"
 
   | 3 ->
 let
-# 859 "lexer_cocci.mll"
+# 911 "lexer_cocci.mll"
                                   x
-# 2182 "lexer_cocci.ml"
+# 2743 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
-# 859 "lexer_cocci.mll"
+# 911 "lexer_cocci.mll"
                                                      ( x ^ restchars lexbuf )
-# 2186 "lexer_cocci.ml"
+# 2747 "lexer_cocci.ml"
 
   | 4 ->
 let
-# 860 "lexer_cocci.mll"
+# 912 "lexer_cocci.mll"
                  v
-# 2192 "lexer_cocci.ml"
+# 2753 "lexer_cocci.ml"
 = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 1)
 and
-# 860 "lexer_cocci.mll"
+# 912 "lexer_cocci.mll"
                                   x
-# 2197 "lexer_cocci.ml"
+# 2758 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos (lexbuf.Lexing.lex_start_pos + 2) in
-# 861 "lexer_cocci.mll"
+# 913 "lexer_cocci.mll"
  (
           (match v with (* Machine specific ? *)
           | 'n' -> ()  | 't' -> ()   | 'v' -> ()  | 'b' -> () | 'r' -> ()
           | 'f' -> () | 'a' -> ()
-         | '\\' -> () | '?'  -> () | '\'' -> ()  | '"' -> ()
+         | '\\' -> () | '?'  -> () | '\'' -> ()  | '\"' -> ()
           | 'e' -> () (* linuxext: ? *)
          | _ ->
               Common.pr2 ("LEXER: unrecognised symbol in char:"^tok lexbuf);
          );
           x ^ restchars lexbuf
        )
-# 2211 "lexer_cocci.ml"
+# 2772 "lexer_cocci.ml"
 
   | 5 ->
-# 873 "lexer_cocci.mll"
+# 925 "lexer_cocci.mll"
       ( Common.pr2 ("LEXER: unrecognised symbol in char:"^tok lexbuf);
         tok lexbuf ^ restchars lexbuf
       )
-# 2218 "lexer_cocci.ml"
+# 2779 "lexer_cocci.ml"
 
   | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_restchars_rec lexbuf __ocaml_lex_state
 
 and string lexbuf =
-    __ocaml_lex_string_rec lexbuf 209
+    __ocaml_lex_string_rec lexbuf 241
 and __ocaml_lex_string_rec lexbuf __ocaml_lex_state =
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
-# 878 "lexer_cocci.mll"
-                                              ( "" )
-# 2229 "lexer_cocci.ml"
+# 930 "lexer_cocci.mll"
+                                               ( "" )
+# 2790 "lexer_cocci.ml"
 
   | 1 ->
 let
-# 879 "lexer_cocci.mll"
+# 931 "lexer_cocci.mll"
           x
-# 2235 "lexer_cocci.ml"
+# 2796 "lexer_cocci.ml"
 = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in
-# 879 "lexer_cocci.mll"
+# 931 "lexer_cocci.mll"
                                ( Common.string_of_char x ^ string lexbuf )
-# 2239 "lexer_cocci.ml"
+# 2800 "lexer_cocci.ml"
 
   | 2 ->
 let
-# 880 "lexer_cocci.mll"
+# 932 "lexer_cocci.mll"
                                             x
-# 2245 "lexer_cocci.ml"
+# 2806 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
-# 880 "lexer_cocci.mll"
+# 932 "lexer_cocci.mll"
                                               ( x ^ string lexbuf )
-# 2249 "lexer_cocci.ml"
+# 2810 "lexer_cocci.ml"
 
   | 3 ->
 let
-# 881 "lexer_cocci.mll"
+# 933 "lexer_cocci.mll"
                                x
-# 2255 "lexer_cocci.ml"
+# 2816 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
-# 881 "lexer_cocci.mll"
+# 933 "lexer_cocci.mll"
                                               ( x ^ string lexbuf )
-# 2259 "lexer_cocci.ml"
+# 2820 "lexer_cocci.ml"
 
   | 4 ->
 let
-# 882 "lexer_cocci.mll"
+# 934 "lexer_cocci.mll"
                 v
-# 2265 "lexer_cocci.ml"
+# 2826 "lexer_cocci.ml"
 = Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_start_pos + 1)
 and
-# 882 "lexer_cocci.mll"
+# 934 "lexer_cocci.mll"
                        x
-# 2270 "lexer_cocci.ml"
+# 2831 "lexer_cocci.ml"
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos (lexbuf.Lexing.lex_start_pos + 2) in
-# 883 "lexer_cocci.mll"
+# 935 "lexer_cocci.mll"
        (
          (match v with
            | 'n' -> ()  | 't' -> ()   | 'v' -> ()  | 'b' -> () | 'r' -> ()
            | 'f' -> () | 'a' -> ()
-           | '\\' -> () | '?'  -> () | '\'' -> ()  | '"' -> ()
+           | '\\' -> () | '?'  -> () | '\'' -> ()  | '\"' -> ()
            | 'e' -> ()
            | '\n' -> ()
            | '(' -> () | '|' -> () | ')' -> ()
@@ -2281,60 +2842,60 @@ and
         );
           x ^ string lexbuf
        )
-# 2285 "lexer_cocci.ml"
+# 2846 "lexer_cocci.ml"
 
   | 5 ->
-# 895 "lexer_cocci.mll"
+# 947 "lexer_cocci.mll"
       ( lexerr "unrecognised symbol: " (tok lexbuf) )
-# 2290 "lexer_cocci.ml"
+# 2851 "lexer_cocci.ml"
 
   | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_string_rec lexbuf __ocaml_lex_state
 
 and comment check_comment lexbuf =
-    __ocaml_lex_comment_rec check_comment lexbuf 220
+    __ocaml_lex_comment_rec check_comment lexbuf 252
 and __ocaml_lex_comment_rec check_comment lexbuf __ocaml_lex_state =
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
-# 898 "lexer_cocci.mll"
+# 950 "lexer_cocci.mll"
          ( let s = tok lexbuf in check_comment s; start_line true; s )
-# 2301 "lexer_cocci.ml"
+# 2862 "lexer_cocci.ml"
 
   | 1 ->
-# 900 "lexer_cocci.mll"
+# 952 "lexer_cocci.mll"
       ( let s = tok lexbuf in
         (* even blank line should have a + *)
         check_comment s;
         reset_line lexbuf; s ^ comment check_comment lexbuf )
-# 2309 "lexer_cocci.ml"
+# 2870 "lexer_cocci.ml"
 
   | 2 ->
-# 904 "lexer_cocci.mll"
+# 956 "lexer_cocci.mll"
         ( pass_zero();
          if !current_line_started
          then (start_line true;
                let s = tok lexbuf in s^(comment check_comment lexbuf))
          else (start_line true; comment check_comment lexbuf) )
-# 2318 "lexer_cocci.ml"
+# 2879 "lexer_cocci.ml"
 
   | 3 ->
-# 911 "lexer_cocci.mll"
+# 963 "lexer_cocci.mll"
       ( let s = tok lexbuf in
         check_comment s; start_line true; s ^ comment check_comment lexbuf )
-# 2324 "lexer_cocci.ml"
+# 2885 "lexer_cocci.ml"
 
   | 4 ->
-# 914 "lexer_cocci.mll"
+# 966 "lexer_cocci.mll"
       ( let s = tok lexbuf in
         check_comment s; start_line true; s ^ comment check_comment lexbuf )
-# 2330 "lexer_cocci.ml"
+# 2891 "lexer_cocci.ml"
 
   | 5 ->
-# 917 "lexer_cocci.mll"
+# 969 "lexer_cocci.mll"
       ( start_line true; let s = tok lexbuf in
         Common.pr2 ("LEXER: unrecognised symbol in comment:"^s);
         s ^ comment check_comment lexbuf
       )
-# 2338 "lexer_cocci.ml"
+# 2899 "lexer_cocci.ml"
 
   | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_comment_rec check_comment lexbuf __ocaml_lex_state
 
index 8a254e7..47ca36a 100644 (file)
@@ -771,11 +771,11 @@ rule token = parse
           (arity,line,lline,offset+off,col+off,strbef,straft,pos),
         offset + off + (String.length ident),
         col + off + (String.length ident)) }
-  | "#" [' ' '\t']* "include" [' ' '\t']* '"' [^ '"']+ '"'
+  | "#" [' ' '\t']* "include" [' ' '\t']* '\"' [^ '\"']+ '\"'
       { TIncludeL
          (let str = tok lexbuf in
-         let start = String.index str '"' in
-         let finish = String.rindex str '"' in
+         let start = String.index str '\"' in
+         let finish = String.rindex str '\"' in
          start_line true;
          (process_include start finish str,get_current_line_type lexbuf)) }
   | "#" [' ' '\t']* "include" [' ' '\t']* '<' [^ '>']+ '>'
@@ -827,9 +827,61 @@ rule token = parse
   | letter (letter | digit)*
       { start_line true; id_tokens lexbuf }
 
+      (* christia: testing *)
+  | (letter | '$') (letter | digit | '$') *
+      { start_line true; id_tokens lexbuf }
+
+  | (letter | '$') (letter | digit | '$') *
+      ('<' (letter | '$' | '~') (letter | digit | '$' | '~') * '>') ?
+    ("::~" (letter | '$') (letter | digit | '$') *
+      ('<' (letter | '$' | '~') (letter | digit | '$' | '~') * '>') ?) +
+
+      { 
+       start_line true; 
+       if not !Flag.c_plus_plus
+       then Common.pr2_once "< and > not allowed in C identifiers, try -c++ option";
+       id_tokens lexbuf 
+      }
+  | ((letter | '$') (letter | digit | '$') * )
+      ('<' (letter | '$' | '~') (letter | digit | '$' | '~') * '>')
+
+      { 
+       start_line true; 
+       if not !Flag.c_plus_plus
+       then Common.pr2_once "< and > not allowed in C identifiers, try -c++ option";
+       id_tokens lexbuf 
+      }
+
+  | (((letter | '$') (letter | digit | '$') * ))
+      ('<' (letter | '$' | '~') (letter | digit | '$' | '~') * '>') ?
+    "::" (((letter | '$') (letter | digit | '$') * ))
+      ('<' (letter | '$' | '~') (letter | digit | '$' | '~') * '>') ?
+    ("::" ((letter | '$') (letter | digit | '$') * )
+      ('<' (letter | '$' | '~') (letter | digit | '$' | '~') * '>') ?) *
+
+      { 
+       start_line true; 
+       if not !Flag.c_plus_plus
+       then Common.pr2_once "~ and :: not allowed in C identifiers, try -c++ option";
+       id_tokens lexbuf 
+      }
+
+   | "::" ((letter | '$') (letter | digit | '$') * )
+      ('<' (letter | '$' | '~') (letter | digit | '$' | '~') * '>') ?
+    ("::" ((letter | '$') (letter | digit | '$') * )
+      ('<' (letter | '$' | '~') (letter | digit | '$' | '~') * '>') ?) *
+      { 
+       start_line true; 
+       if not !Flag.c_plus_plus
+       then Common.pr2_once "~ and :: not allowed in C identifiers, try -c++ option";
+       id_tokens lexbuf 
+      }
+       (* christia: end *)
+
+
   | "'" { start_line true;
          TChar(char lexbuf,get_current_line_type lexbuf) }
-  | '"' { start_line true;
+  | '\"' { start_line true;
          TString(string lexbuf,(get_current_line_type lexbuf)) }
   | (real as x)    { start_line true;
                     TFloat(x,(get_current_line_type lexbuf)) }
@@ -864,7 +916,7 @@ and char = parse
           (match v with (* Machine specific ? *)
           | 'n' -> ()  | 't' -> ()   | 'v' -> ()  | 'b' -> () | 'r' -> ()
           | 'f' -> () | 'a' -> ()
-         | '\\' -> () | '?'  -> () | '\'' -> ()  | '"' -> ()
+         | '\\' -> () | '?'  -> () | '\'' -> ()  | '\"' -> ()
           | 'e' -> () (* linuxext: ? *)
          | _ ->
               Common.pr2 ("LEXER: unrecognised symbol in char:"^tok lexbuf);
@@ -890,7 +942,7 @@ and restchars = parse
           (match v with (* Machine specific ? *)
           | 'n' -> ()  | 't' -> ()   | 'v' -> ()  | 'b' -> () | 'r' -> ()
           | 'f' -> () | 'a' -> ()
-         | '\\' -> () | '?'  -> () | '\'' -> ()  | '"' -> ()
+         | '\\' -> () | '?'  -> () | '\'' -> ()  | '\"' -> ()
           | 'e' -> () (* linuxext: ? *)
          | _ ->
               Common.pr2 ("LEXER: unrecognised symbol in char:"^tok lexbuf);
@@ -903,7 +955,7 @@ and restchars = parse
       }
 
 and string  = parse
-  | '"'                                       { "" }
+  | '\"'                                       { "" }
   | (_ as x)                   { Common.string_of_char x ^ string lexbuf }
   | ("\\" (oct | oct oct | oct oct oct)) as x { x ^ string lexbuf }
   | ("\\x" (hex | hex hex)) as x              { x ^ string lexbuf }
@@ -912,7 +964,7 @@ and string  = parse
          (match v with
            | 'n' -> ()  | 't' -> ()   | 'v' -> ()  | 'b' -> () | 'r' -> ()
            | 'f' -> () | 'a' -> ()
-           | '\\' -> () | '?'  -> () | '\'' -> ()  | '"' -> ()
+           | '\\' -> () | '?'  -> () | '\'' -> ()  | '\"' -> ()
            | 'e' -> ()
            | '\n' -> ()
            | '(' -> () | '|' -> () | ')' -> ()
index ed8ccf9..6e444cb 100644 (file)
@@ -1,4 +1,31 @@
-# 0 "lexer_script.mll"
+(*
+ * Copyright 2012, INRIA
+ * Julia Lawall, Gilles Muller
+ * Copyright 2010-2011, INRIA, University of Copenhagen
+ * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix
+ * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen
+ * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
+ * This file is part of Coccinelle.
+ *
+ * Coccinelle is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, according to version 2 of the License.
+ *
+ * Coccinelle is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Coccinelle.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The authors reserve the right to distribute this or future versions of
+ * Coccinelle under other licenses.
+ *)
+
+
+# 0 "./lexer_script.ml"
+# 1 "lexer_script.mll"
  
 open Parser_cocci_menhir
 module D = Data
@@ -112,12 +139,12 @@ let rec token lexbuf =
 and __ocaml_lex_token_rec lexbuf __ocaml_lex_state =
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
-# 19 "lexer_script.mll"
+# 20 "lexer_script.mll"
            ( TScriptData (tok lexbuf) )
 # 118 "lexer_script.ml"
 
   | 1 ->
-# 21 "lexer_script.mll"
+# 22 "lexer_script.mll"
       ( inc_line();
        let text = tok lexbuf in
        let text =
@@ -130,42 +157,42 @@ and __ocaml_lex_token_rec lexbuf __ocaml_lex_state =
 # 131 "lexer_script.ml"
 
   | 2 ->
-# 30 "lexer_script.mll"
+# 31 "lexer_script.mll"
          ( TArobArob )
 # 136 "lexer_script.ml"
 
   | 3 ->
-# 31 "lexer_script.mll"
+# 32 "lexer_script.mll"
          ( TArob )
 # 141 "lexer_script.ml"
 
   | 4 ->
-# 32 "lexer_script.mll"
+# 33 "lexer_script.mll"
          ( TScriptData (tok lexbuf) )
 # 146 "lexer_script.ml"
 
   | 5 ->
-# 33 "lexer_script.mll"
+# 34 "lexer_script.mll"
                    ( token lexbuf )
 # 151 "lexer_script.ml"
 
   | 6 ->
-# 34 "lexer_script.mll"
+# 35 "lexer_script.mll"
          ( TScriptData (Printf.sprintf "\"%s\"" (string lexbuf)) )
 # 156 "lexer_script.ml"
 
   | 7 ->
-# 35 "lexer_script.mll"
+# 36 "lexer_script.mll"
          ( TScriptData (Printf.sprintf "'%s'" (cstring lexbuf)) )
 # 161 "lexer_script.ml"
 
   | 8 ->
-# 36 "lexer_script.mll"
+# 37 "lexer_script.mll"
          ( EOF )
 # 166 "lexer_script.ml"
 
   | 9 ->
-# 37 "lexer_script.mll"
+# 38 "lexer_script.mll"
       ( raise (Lexical ("unrecognised symbol, in token rule:"^tok lexbuf)) )
 # 171 "lexer_script.ml"
 
@@ -176,17 +203,17 @@ and string lexbuf =
 and __ocaml_lex_string_rec lexbuf __ocaml_lex_state =
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
-# 41 "lexer_script.mll"
+# 42 "lexer_script.mll"
                         ( "" )
 # 182 "lexer_script.ml"
 
   | 1 ->
 let
-# 42 "lexer_script.mll"
+# 43 "lexer_script.mll"
           x
 # 188 "lexer_script.ml"
 = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in
-# 42 "lexer_script.mll"
+# 43 "lexer_script.mll"
                         ( (String.make 1 x) ^ string lexbuf )
 # 192 "lexer_script.ml"
 
@@ -197,17 +224,17 @@ and cstring lexbuf =
 and __ocaml_lex_cstring_rec lexbuf __ocaml_lex_state =
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
-# 45 "lexer_script.mll"
+# 46 "lexer_script.mll"
                         ( "" )
 # 203 "lexer_script.ml"
 
   | 1 ->
 let
-# 46 "lexer_script.mll"
+# 47 "lexer_script.mll"
           x
 # 209 "lexer_script.ml"
 = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in
-# 46 "lexer_script.mll"
+# 47 "lexer_script.mll"
                         ( (String.make 1 x) ^ cstring lexbuf )
 # 213 "lexer_script.ml"
 
index 85c3ac4..2ce1c4f 100644 (file)
@@ -516,34 +516,33 @@ let meta_stm name =
 let exp_stm exp pv =
   Ast0.wrap(Ast0.ExprStatement (exp, clt2mcode ";" pv))
 
+let make_fake_mcode _ = (Ast0.default_info(),Ast0.context_befaft(),-1)
+
 let ifthen iff lp tst rp thn =
   Ast0.wrap(Ast0.IfThen(clt2mcode "if" iff,
-    clt2mcode "(" lp,tst,clt2mcode ")" rp,thn,
-    (Ast0.default_info(),Ast0.context_befaft())))
+    clt2mcode "(" lp,tst,clt2mcode ")" rp,thn,make_fake_mcode()))
 
 let ifthenelse iff lp tst rp thn e els =
   Ast0.wrap(Ast0.IfThenElse(clt2mcode "if" iff,
     clt2mcode "(" lp,tst,clt2mcode ")" rp,thn,
-    clt2mcode "else" e,els,
-    (Ast0.default_info(),Ast0.context_befaft())))
+    clt2mcode "else" e,els,make_fake_mcode()))
 
 let forloop fr lp e1 sc1 e2 sc2 e3 rp s =
   Ast0.wrap(Ast0.For(clt2mcode "for" fr,clt2mcode "(" lp,
                     Ast0.wrap(Ast0.ForExp(e1,clt2mcode ";" sc1)),e2,
                     clt2mcode ";" sc2,e3,clt2mcode ")" rp,s,
-                    (Ast0.default_info(),Ast0.context_befaft())))
+                    make_fake_mcode()))
 
 let forloop2 fr lp decl e2 sc2 e3 rp s =
   let bef = (Ast0.default_info(),Ast0.context_befaft()) in
   Ast0.wrap(Ast0.For(clt2mcode "for" fr,clt2mcode "(" lp,
                     Ast0.wrap(Ast0.ForDecl (bef,decl)),e2,
                     clt2mcode ";" sc2,e3,clt2mcode ")" rp,s,
-                    (Ast0.default_info(),Ast0.context_befaft())))
+                    make_fake_mcode()))
 
 let whileloop w lp e rp s =
   Ast0.wrap(Ast0.While(clt2mcode "while" w,clt2mcode "(" lp,
-                      e,clt2mcode ")" rp,s,
-                      (Ast0.default_info(),Ast0.context_befaft())))
+                      e,clt2mcode ")" rp,s,make_fake_mcode()))
 
 let doloop d s w lp e rp pv =
   Ast0.wrap(Ast0.Do(clt2mcode "do" d,s,clt2mcode "while" w,
@@ -552,7 +551,7 @@ let doloop d s w lp e rp pv =
 
 let iterator i lp e rp s =
   Ast0.wrap(Ast0.Iterator(i,clt2mcode "(" lp,e,clt2mcode ")" rp,s,
-                         (Ast0.default_info(),Ast0.context_befaft())))
+                         make_fake_mcode()))
 
 let switch s lp e rp lb d c rb =
   let d =
index bf0e4aa..8a8f834 100644 (file)
@@ -1070,20 +1070,17 @@ let rec translate_when_true_false = function
 
 (* ----------------------------------------------------------------------- *)
 
-(* In a nest, if the nest is -, all of the nested code must also be -.
-All are converted to context, because the next takes care of the -. *)
+(* In a nest, if the nest is -, all of the nested code must also be -. *)
 let check_nests tokens =
   let is_minus t =
     let (line_type,a,b,c,d,e,f,g) = get_clt t in
     List.mem line_type [D.MINUS;D.OPTMINUS;D.UNIQUEMINUS] in
-  let drop_minus t =
+  let check_minus t =
     let clt = try Some(get_clt t) with Failure _ -> None in
        match clt with
          Some (line_type,a,b,c,d,e,f,g) ->
            (match line_type with
-             D.MINUS -> update_clt t (D.CONTEXT,a,b,c,d,e,f,g)
-           | D.OPTMINUS -> update_clt t (D.OPT,a,b,c,d,e,f,g)
-           | D.UNIQUEMINUS -> update_clt t (D.UNIQUE,a,b,c,d,e,f,g)
+             D.MINUS | D.OPTMINUS | D.UNIQUEMINUS -> t
            | _ -> failwith "minus token expected")
        | None -> t in
   let rec outside = function
@@ -1093,11 +1090,11 @@ let check_nests tokens =
   and inside stack = function
       [] -> failwith "missing nest end"
     | ((PC.TPCEllipsis(clt),q) as t)::r ->
-       (drop_minus t)
+       (check_minus t)
        :: (if stack = 0 then outside r else inside (stack - 1) r)
     | ((PC.TPOEllipsis(clt),q) as t)::r ->
-       (drop_minus t) :: (inside (stack + 1) r)
-    | t :: r -> (drop_minus t) :: (inside stack r) in
+       (check_minus t) :: (inside (stack + 1) r)
+    | t :: r -> (check_minus t) :: (inside stack r) in
   outside tokens
 
 let check_parentheses tokens =
@@ -1384,7 +1381,7 @@ let pop2 l =
 let reinit _ =
   PC.reinit (function _ -> PC.TArobArob (* a handy token *))
     (Lexing.from_function
-       (function buf -> function n -> raise Common.Impossible))
+       (function buf -> function n -> raise (Common.Impossible 157)))
 
 let parse_one str parsefn file toks =
   let all_tokens = ref toks in
@@ -1397,7 +1394,7 @@ let parse_one str parsefn file toks =
 
   let lexbuf_fake =
     Lexing.from_function
-      (function buf -> function n -> raise Common.Impossible)
+      (function buf -> function n -> raise (Common.Impossible 158))
   in
 
   reinit();
@@ -2113,6 +2110,8 @@ let process file isofile verbose =
                      some restrictions on the -+ code *)
                   ([],_) | (_,Ast.Generated) -> ([],minus)
                 | _ -> Iso_pattern.apply_isos chosen_isos minus rule_name in
+              (* must be before adj *)
+              let minus = Commas_on_lists.process minus in
               (* after iso, because iso can intro ... *)
               let minus = Adjacency.compute_adjacency minus in
               let minus = Comm_assoc.comm_assoc minus rule_name dropiso in
index 0b4e6ed..ba62583 100644 (file)
+(*
+ * Copyright 2012, INRIA
+ * Julia Lawall, Gilles Muller
+ * Copyright 2010-2011, INRIA, University of Copenhagen
+ * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix
+ * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen
+ * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
+ * This file is part of Coccinelle.
+ *
+ * Coccinelle is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, according to version 2 of the License.
+ *
+ * Coccinelle is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Coccinelle.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The authors reserve the right to distribute this or future versions of
+ * Coccinelle under other licenses.
+ *)
+
+
+# 0 "./parser_cocci_menhir.ml"
 exception Error
 
 type token = 
   | Tvolatile of (
-# 122 "parser_cocci_menhir.mly"
+# 96 "parser_cocci_menhir.mly"
       (Data.clt)
 # 8 "parser_cocci_menhir.ml"
 )
   | Tvoid of (
-# 118 "parser_cocci_menhir.mly"
+# 92 "parser_cocci_menhir.mly"
       (Data.clt)
 # 13 "parser_cocci_menhir.ml"
 )
   | Tunsigned of (
-# 119 "parser_cocci_menhir.mly"
+# 93 "parser_cocci_menhir.mly"
       (Data.clt)
 # 18 "parser_cocci_menhir.ml"
 )
   | Tunion of (
-# 118 "parser_cocci_menhir.mly"
+# 92 "parser_cocci_menhir.mly"
       (Data.clt)
 # 23 "parser_cocci_menhir.ml"
 )
   | Ttypedef of (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
 # 28 "parser_cocci_menhir.ml"
 )
   | Tstruct of (
-# 118 "parser_cocci_menhir.mly"
+# 92 "parser_cocci_menhir.mly"
       (Data.clt)
 # 33 "parser_cocci_menhir.ml"
 )
   | Tstatic of (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
 # 38 "parser_cocci_menhir.ml"
 )
   | Tssize_t of (
-# 117 "parser_cocci_menhir.mly"
+# 91 "parser_cocci_menhir.mly"
       (Data.clt)
 # 43 "parser_cocci_menhir.ml"
 )
   | Tsize_t of (
-# 117 "parser_cocci_menhir.mly"
+# 91 "parser_cocci_menhir.mly"
       (Data.clt)
 # 48 "parser_cocci_menhir.ml"
 )
   | Tsigned of (
-# 119 "parser_cocci_menhir.mly"
+# 93 "parser_cocci_menhir.mly"
       (Data.clt)
 # 53 "parser_cocci_menhir.ml"
 )
   | Tshort of (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
 # 58 "parser_cocci_menhir.ml"
 )
   | Tregister of (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
 # 63 "parser_cocci_menhir.ml"
 )
   | Tptrdiff_t of (
-# 117 "parser_cocci_menhir.mly"
+# 91 "parser_cocci_menhir.mly"
       (Data.clt)
 # 68 "parser_cocci_menhir.ml"
 )
   | Tlong of (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
 # 73 "parser_cocci_menhir.ml"
 )
   | Tlist
   | Tint of (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
 # 79 "parser_cocci_menhir.ml"
 )
   | Tinline of (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
 # 84 "parser_cocci_menhir.ml"
 )
   | Tfloat of (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
 # 89 "parser_cocci_menhir.ml"
 )
   | Textern of (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
 # 94 "parser_cocci_menhir.ml"
 )
   | Tenum of (
-# 118 "parser_cocci_menhir.mly"
+# 92 "parser_cocci_menhir.mly"
       (Data.clt)
 # 99 "parser_cocci_menhir.ml"
 )
   | Tdouble of (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
 # 104 "parser_cocci_menhir.ml"
 )
   | Tconst of (
-# 122 "parser_cocci_menhir.mly"
+# 96 "parser_cocci_menhir.mly"
       (Data.clt)
 # 109 "parser_cocci_menhir.ml"
 )
   | Tchar of (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
 # 114 "parser_cocci_menhir.ml"
 )
   | Tauto of (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
 # 119 "parser_cocci_menhir.ml"
 )
   | Tattr of (
-# 123 "parser_cocci_menhir.mly"
+# 97 "parser_cocci_menhir.mly"
       (string * Data.clt)
 # 124 "parser_cocci_menhir.ml"
 )
   | TXor of (
-# 164 "parser_cocci_menhir.mly"
+# 138 "parser_cocci_menhir.mly"
        (Data.clt)
 # 129 "parser_cocci_menhir.ml"
 )
   | TWords
   | TWhy0
   | TWhy of (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 136 "parser_cocci_menhir.ml"
 )
   | TWhile of (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
 # 141 "parser_cocci_menhir.ml"
 )
   | TWhenTrue of (
-# 146 "parser_cocci_menhir.mly"
+# 120 "parser_cocci_menhir.mly"
        (Data.clt)
 # 146 "parser_cocci_menhir.ml"
 )
   | TWhenFalse of (
-# 146 "parser_cocci_menhir.mly"
+# 120 "parser_cocci_menhir.mly"
        (Data.clt)
 # 151 "parser_cocci_menhir.ml"
 )
   | TWhen of (
-# 146 "parser_cocci_menhir.mly"
+# 120 "parser_cocci_menhir.mly"
        (Data.clt)
 # 156 "parser_cocci_menhir.ml"
 )
@@ -158,340 +185,340 @@ type token =
   | TUsing
   | TUnderscore
   | TUndef of (
-# 153 "parser_cocci_menhir.mly"
+# 127 "parser_cocci_menhir.mly"
        (Data.clt * token)
 # 164 "parser_cocci_menhir.ml"
 )
   | TTypedef
   | TTypeId of (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 170 "parser_cocci_menhir.ml"
 )
   | TType
   | TTildeExclEq of (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 176 "parser_cocci_menhir.ml"
 )
   | TTildeEq of (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 181 "parser_cocci_menhir.ml"
 )
   | TTilde of (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 186 "parser_cocci_menhir.ml"
 )
   | TSymbol
   | TSymId of (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 192 "parser_cocci_menhir.ml"
 )
   | TSwitch of (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
 # 197 "parser_cocci_menhir.ml"
 )
   | TSub of (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 202 "parser_cocci_menhir.ml"
 )
   | TString of (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 207 "parser_cocci_menhir.ml"
 )
   | TStrict of (
-# 146 "parser_cocci_menhir.mly"
+# 120 "parser_cocci_menhir.mly"
        (Data.clt)
 # 212 "parser_cocci_menhir.ml"
 )
   | TStatement
   | TSizeof of (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
 # 218 "parser_cocci_menhir.ml"
 )
   | TShROp of (
-# 168 "parser_cocci_menhir.mly"
+# 142 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 223 "parser_cocci_menhir.ml"
 )
   | TShLOp of (
-# 168 "parser_cocci_menhir.mly"
+# 142 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 228 "parser_cocci_menhir.ml"
 )
   | TScriptData of (
-# 143 "parser_cocci_menhir.mly"
+# 117 "parser_cocci_menhir.mly"
        (string)
 # 233 "parser_cocci_menhir.ml"
 )
   | TScript
   | TRuleName of (
-# 114 "parser_cocci_menhir.mly"
+# 88 "parser_cocci_menhir.mly"
       (string)
 # 239 "parser_cocci_menhir.ml"
 )
   | TRightIso
   | TReturn of (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
 # 245 "parser_cocci_menhir.ml"
 )
   | TPure
   | TPtrOp of (
-# 176 "parser_cocci_menhir.mly"
+# 150 "parser_cocci_menhir.mly"
        (Data.clt)
 # 251 "parser_cocci_menhir.ml"
 )
   | TPtVirg of (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 256 "parser_cocci_menhir.ml"
 )
   | TPragma of (
-# 128 "parser_cocci_menhir.mly"
+# 102 "parser_cocci_menhir.mly"
        (Ast_cocci.added_string * Data.clt)
 # 261 "parser_cocci_menhir.ml"
 )
   | TPosition
   | TPosAny
   | TPlusFile of (
-# 155 "parser_cocci_menhir.mly"
+# 129 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 268 "parser_cocci_menhir.ml"
 )
   | TPlus0
   | TPlus of (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
 # 274 "parser_cocci_menhir.ml"
 )
   | TPathIsoFile of (
-# 151 "parser_cocci_menhir.mly"
+# 125 "parser_cocci_menhir.mly"
        (string)
 # 279 "parser_cocci_menhir.ml"
 )
   | TParameter
   | TPOEllipsis of (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 285 "parser_cocci_menhir.ml"
 )
   | TPCEllipsis of (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 290 "parser_cocci_menhir.ml"
 )
   | TPArob of (
-# 142 "parser_cocci_menhir.mly"
+# 116 "parser_cocci_menhir.mly"
        (Data.clt)
 # 295 "parser_cocci_menhir.ml"
 )
   | TOrLog of (
-# 161 "parser_cocci_menhir.mly"
+# 135 "parser_cocci_menhir.mly"
        (Data.clt)
 # 300 "parser_cocci_menhir.ml"
 )
   | TOr of (
-# 163 "parser_cocci_menhir.mly"
+# 137 "parser_cocci_menhir.mly"
        (Data.clt)
 # 305 "parser_cocci_menhir.ml"
 )
   | TOn
   | TOPar0 of (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 311 "parser_cocci_menhir.ml"
 )
   | TOPar of (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 316 "parser_cocci_menhir.ml"
 )
   | TOInit of (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
 # 321 "parser_cocci_menhir.ml"
 )
   | TOEllipsis of (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 326 "parser_cocci_menhir.ml"
 )
   | TOCro of (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
 # 331 "parser_cocci_menhir.ml"
 )
   | TOBrace of (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
 # 336 "parser_cocci_menhir.ml"
 )
   | TNothing
   | TNotEq of (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 342 "parser_cocci_menhir.ml"
 )
   | TNever
   | TName
   | TMul of (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 349 "parser_cocci_menhir.ml"
 )
   | TMinusFile of (
-# 155 "parser_cocci_menhir.mly"
+# 129 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 354 "parser_cocci_menhir.ml"
 )
   | TMinus of (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
 # 359 "parser_cocci_menhir.ml"
 )
   | TMid0 of (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 364 "parser_cocci_menhir.ml"
 )
   | TMetavariable
   | TMetaType of (
-# 134 "parser_cocci_menhir.mly"
+# 108 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 370 "parser_cocci_menhir.ml"
 )
   | TMetaStmList of (
-# 134 "parser_cocci_menhir.mly"
+# 108 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 375 "parser_cocci_menhir.ml"
 )
   | TMetaStm of (
-# 134 "parser_cocci_menhir.mly"
+# 108 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 380 "parser_cocci_menhir.ml"
 )
   | TMetaPos of (
-# 139 "parser_cocci_menhir.mly"
+# 113 "parser_cocci_menhir.mly"
        (Parse_aux.pos_info)
 # 385 "parser_cocci_menhir.ml"
 )
   | TMetaParamList of (
-# 136 "parser_cocci_menhir.mly"
+# 110 "parser_cocci_menhir.mly"
        (Parse_aux.list_info)
 # 390 "parser_cocci_menhir.ml"
 )
   | TMetaParam of (
-# 134 "parser_cocci_menhir.mly"
+# 108 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 395 "parser_cocci_menhir.ml"
 )
   | TMetaLocalIdExp of (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
 # 400 "parser_cocci_menhir.ml"
 )
   | TMetaLocalFunc of (
-# 131 "parser_cocci_menhir.mly"
+# 105 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
 # 405 "parser_cocci_menhir.ml"
 )
   | TMetaIterator of (
-# 132 "parser_cocci_menhir.mly"
+# 106 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
 # 410 "parser_cocci_menhir.ml"
 )
   | TMetaInitList of (
-# 136 "parser_cocci_menhir.mly"
+# 110 "parser_cocci_menhir.mly"
        (Parse_aux.list_info)
 # 415 "parser_cocci_menhir.ml"
 )
   | TMetaInit of (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 420 "parser_cocci_menhir.ml"
 )
   | TMetaIdExp of (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
 # 425 "parser_cocci_menhir.ml"
 )
   | TMetaId of (
-# 130 "parser_cocci_menhir.mly"
+# 104 "parser_cocci_menhir.mly"
        (Parse_aux.midinfo)
 # 430 "parser_cocci_menhir.ml"
 )
   | TMetaFunc of (
-# 131 "parser_cocci_menhir.mly"
+# 105 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
 # 435 "parser_cocci_menhir.ml"
 )
   | TMetaFieldList of (
-# 137 "parser_cocci_menhir.mly"
+# 111 "parser_cocci_menhir.mly"
        (Parse_aux.list_info)
 # 440 "parser_cocci_menhir.ml"
 )
   | TMetaField of (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 445 "parser_cocci_menhir.ml"
 )
   | TMetaExpList of (
-# 136 "parser_cocci_menhir.mly"
+# 110 "parser_cocci_menhir.mly"
        (Parse_aux.list_info)
 # 450 "parser_cocci_menhir.ml"
 )
   | TMetaExp of (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
 # 455 "parser_cocci_menhir.ml"
 )
   | TMetaErr of (
-# 133 "parser_cocci_menhir.mly"
+# 107 "parser_cocci_menhir.mly"
        (Parse_aux.expinfo)
 # 460 "parser_cocci_menhir.ml"
 )
   | TMetaDeclarer of (
-# 132 "parser_cocci_menhir.mly"
+# 106 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
 # 465 "parser_cocci_menhir.ml"
 )
   | TMetaDecl of (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 470 "parser_cocci_menhir.ml"
 )
   | TMetaConst of (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
 # 475 "parser_cocci_menhir.ml"
 )
   | TMeta of (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 480 "parser_cocci_menhir.ml"
 )
   | TMPtVirg
   | TLogOp of (
-# 167 "parser_cocci_menhir.mly"
+# 141 "parser_cocci_menhir.mly"
        (Ast_cocci.logicalOp * Data.clt)
 # 486 "parser_cocci_menhir.ml"
 )
   | TLocal
   | TLineEnd of (
-# 146 "parser_cocci_menhir.mly"
+# 120 "parser_cocci_menhir.mly"
        (Data.clt)
 # 492 "parser_cocci_menhir.ml"
 )
   | TIteratorId of (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 497 "parser_cocci_menhir.ml"
 )
@@ -507,60 +534,60 @@ type token =
   | TIso
   | TInvalid
   | TInt of (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 513 "parser_cocci_menhir.ml"
 )
   | TInitialize
   | TInitialiser
   | TIncludeNL of (
-# 152 "parser_cocci_menhir.mly"
+# 126 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 520 "parser_cocci_menhir.ml"
 )
   | TIncludeL of (
-# 152 "parser_cocci_menhir.mly"
+# 126 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 525 "parser_cocci_menhir.ml"
 )
   | TInc of (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
 # 530 "parser_cocci_menhir.ml"
 )
   | TIf of (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
 # 535 "parser_cocci_menhir.ml"
 )
   | TIdentifier
   | TIdent of (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 541 "parser_cocci_menhir.ml"
 )
   | TIdExpression
   | TGoto of (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
 # 547 "parser_cocci_menhir.ml"
 )
   | TGenerated
   | TFunction
   | TFunDecl of (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
 # 554 "parser_cocci_menhir.ml"
 )
   | TFresh
   | TForall
   | TFor of (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
 # 561 "parser_cocci_menhir.ml"
 )
   | TFloat of (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 566 "parser_cocci_menhir.ml"
 )
@@ -572,152 +599,152 @@ type token =
   | TEver
   | TError
   | TEqEq of (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 578 "parser_cocci_menhir.ml"
 )
   | TEq of (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 583 "parser_cocci_menhir.ml"
 )
   | TElse of (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
 # 588 "parser_cocci_menhir.ml"
 )
   | TEllipsis of (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 593 "parser_cocci_menhir.ml"
 )
   | TDotDot of (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 598 "parser_cocci_menhir.ml"
 )
   | TDot of (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 603 "parser_cocci_menhir.ml"
 )
   | TDo of (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
 # 608 "parser_cocci_menhir.ml"
 )
   | TDmOp of (
-# 169 "parser_cocci_menhir.mly"
+# 143 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 613 "parser_cocci_menhir.ml"
 )
   | TDisable
   | TDepends
   | TDefineParam of (
-# 154 "parser_cocci_menhir.mly"
+# 128 "parser_cocci_menhir.mly"
        (Data.clt * token * int * int)
 # 620 "parser_cocci_menhir.ml"
 )
   | TDefine of (
-# 153 "parser_cocci_menhir.mly"
+# 127 "parser_cocci_menhir.mly"
        (Data.clt * token)
 # 625 "parser_cocci_menhir.ml"
 )
   | TDefault of (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
 # 630 "parser_cocci_menhir.ml"
 )
   | TDeclarerId of (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 635 "parser_cocci_menhir.ml"
 )
   | TDeclarer
   | TDeclaration
   | TDec of (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
 # 642 "parser_cocci_menhir.ml"
 )
   | TCppConcatOp
   | TContinue of (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
 # 648 "parser_cocci_menhir.ml"
 )
   | TContext
   | TConstant
   | TComma of (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 655 "parser_cocci_menhir.ml"
 )
   | TChar of (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 660 "parser_cocci_menhir.ml"
 )
   | TCase of (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
 # 665 "parser_cocci_menhir.ml"
 )
   | TCPar0 of (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 670 "parser_cocci_menhir.ml"
 )
   | TCPar of (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 675 "parser_cocci_menhir.ml"
 )
   | TCEllipsis of (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 680 "parser_cocci_menhir.ml"
 )
   | TCCro of (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
 # 685 "parser_cocci_menhir.ml"
 )
   | TCBrace of (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
 # 690 "parser_cocci_menhir.ml"
 )
   | TBreak of (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
 # 695 "parser_cocci_menhir.ml"
 )
   | TBang0
   | TBang of (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 701 "parser_cocci_menhir.ml"
 )
   | TAssign of (
-# 180 "parser_cocci_menhir.mly"
+# 154 "parser_cocci_menhir.mly"
        (Ast_cocci.assignOp * Data.clt)
 # 706 "parser_cocci_menhir.ml"
 )
   | TArobArob
   | TArob
   | TAny of (
-# 146 "parser_cocci_menhir.mly"
+# 120 "parser_cocci_menhir.mly"
        (Data.clt)
 # 713 "parser_cocci_menhir.ml"
 )
   | TAndLog of (
-# 162 "parser_cocci_menhir.mly"
+# 136 "parser_cocci_menhir.mly"
        (Data.clt)
 # 718 "parser_cocci_menhir.ml"
 )
   | TAnd of (
-# 165 "parser_cocci_menhir.mly"
+# 139 "parser_cocci_menhir.mly"
        (Data.clt)
 # 723 "parser_cocci_menhir.ml"
 )
@@ -726,7 +753,7 @@ type token =
 and _menhir_jeton = token
 
 
-# 27 "parser_cocci_menhir.mly"
+# 1 "parser_cocci_menhir.mly"
   
 
 (* Not clear how to allow function declarations to specify a return type
@@ -1598,19 +1625,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           Obj.repr _v
   
   let default_reduction =
-    (16, "\000\000\000\000\003\002\000\135\000\000\000\000\003V\001L\000\000\001J\001K\001I\000\000\001N\001M\000\001\000\000\001\134\000\000\000\000\000\151\002\028\000\000\000\000\003k\000\000\000\000\003r\003p\003l\003i\000\000\000\000\003n\003m\000\018\003\158\003\157\002!\002 \000\000\000\017\002\"\000\000\002\029\002\031\000\000\003\242\000\000\000\000\001\230\001\229\001\228\001\227\000\000\000\244\000\243\000\000\000\000\002\000\000\000\001\150\001\232\000\000\000\000\000\000\000\000\000\000\000\252\000\000\000\000\001\021\001E\001\020\001\019\001\018\001\017\001D\001C\001\016\001\015\002>\000\000\000\000\002=\000\000\000\000\000\000\000\163\000\000\000\000\000\162\002A\001\r\000\000\002$\000\000\000\000\000\000\002%\002\030\000\150\002*\000\000\000\000\000\000\003&\000\000\003\150\003\149\003\151\000\000\003\186\000\000\003\143\000\000\000\000\000\000\000\000\001\000\000\019\000\000\000\000\000\000\003\233\002\201\000\000\000\000\003\231\000\000\002\229\000\000\000\000\000\000\000\000\000\000\000\000\003\230\003\232\002\207\001?\002\206\001>\002\205\002\204\002\203\002\020\002\199\000\000\000\000\002\200\000\245\000\000\000\000\000\000\002\202\000\000\000\000\002\198\003\229\000\000\000\000\003\198\002\161\000\000\000\000\002\164\000\000\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\246\001=\002\197\002\210\000q\000\025\000s\000\000\000\000\000U\000\000\000\000\000\000\000\000\000\000\000\000\000V\000\000\000W\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000h\002\194\000t\000\000\000\000\000\145\000\248\002\127\002\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\000\000\000r\000j\000\000\000i\000\000\002\162\002\165\000\000\002\163\002\166\003\197\000\020\000\000\002\237\000\000\000\183\000\000\000\000\002\001\000\000\001\152\001\233\000\000\000\000\001\255\000\000\000\000\000\000\000\000\000\000\001\254\000\000\001\146\000\180\000\000\000\179\000\000\001\148\001\231\000\000\000\000\002\236\000\000\000\000\000\000\002\215\000\000\000\000\000\000\002\208\000\000\000\000\000\000\000\000\002\235\002\234\002\233\002\232\002\231\002\227\000\000\003\209\002\228\000\000\003\210\002\230\000\000\003\212\000\000\002\226\000\000\000}\002\177\000\000\000\000\002\180\000\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000m\000\000\000l\000\155\002\238\002\225\000\014\000\016\000k\0007\000\185\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009\000\000\000\000\000\000\000\000\000\000\000\000\002/\0023\000\000\000\000\000\154\0020\001\004\001\002\000\000\002\183\000\000\000\000\002\178\002\181\000\000\002\179\002\182\003\211\000\000\000\000\002\196\001\026\000\000\002\022\000\000\000\000\000\000\000\000\000\000\000\250\002\027\000\000\000\000\001\166\002\195\000\000\000\000\002\223\000\000\000\000\002\222\000\000\000\000\000\000\000\000\000\000\002\021\000\000\000\000\000\000\000\000\000\240\000\239\000\000\000\000\002\221\001^\001]\002\220\000\000\002\219\002\218\002\217\001`\002\213\000\000\003\202\002\214\000\000\000\000\000\000\000\000\000\000\000\238\000\000\003\203\002\216\000\000\003\205\000\000\002\212\000\000\000\000\000{\002\169\000\000\000\000\002\172\000\000\000\000\002\175\000\000\000\000\002\170\002\173\000\000\002\171\002\174\002\224\002\211\003\204\000\000\001\b\001Y\000\000\000\000\000\000\000\000\001[\000\000\001\132\000(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000*\000\000\000\000\000\000\000\000\001\\\000\000\001V\000\000\000\000\002D\000\000\000\000\000\000\000\167\000\000\000\000\000\166\002H\001_\001W\000\000\000\254\001U\002E\000\000\001Z\000\000\002\176\000|\000\000\002\168\003\206\000\000\002\184\000~\000\000\002\167\003\225\003\226\003\224\003\223\003\196\000\000\000\000\003\195\000\000\002\018\000\000\002\209\000\000\000\000\000z\000\000\000\000\000\000\003\213\000\000\002\019\000\000\000\000\000\000\003\227\000\000\000\000\000\000\003\199\000\000\000g\000\184\000\000\001~\000\000\003\155\003%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002d\000\189\000\190\000\000\000\000\000\000\000\000\000\000\002R\002c\002\b\000\000\000\000\000\000\000\000\000\000\001\012\000\194\000\000\002\t\000\000\000\000\000\000\000\000\000\188\000\000\000\186\000\175\000\000\000\000\000\174\002V\002S\000\000\000\000\003\154\000\000\003\153\000\000\000\000\000\000\003\156\003\144\003\145\000\000\002'\000\000\003\147\000\000\000\000\000\177\003\148\000\000\000\000\000\000\002(\003\185\000\000\000\000\002\007\000\000\001\164\001\240\000\000\003\152\000\000\000\000\002)\000\000\000\000\001d\000\000\001c\000\000\001r\000\000\001\136\000\000\000\000\000\000\001\183\000\000\003\189\000\000\000\000\002\004\001\184\000\000\001\158\001\237\003\190\000\000\003\193\003\192\000\000\000\000\003f\003\191\000\143\000\000\000\224\000\000\000\000\000\000\001|\003\188\000\000\003\187\003\139\003\141\003\142\003\140\000\000\000\000\000\000\000\000\000\000\001Q\000\000\000\000\000\000\000\000\000\000\000\192\000\204\000\191\000\000\000\000\000\132\000\000\000\000\000\000\000\216\000\000\003P\000\000\000\000\000\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\223\001$\001#\000\000\000\000\000\000\000\000\001B\000\000\000\000\000\000\000\000\000\209\000\000\000\206\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\213\000\000\000\000\000\000\000\000\000\214\000\000\000\210\000\000\000\000\000\000\000\000\002\243\000\000\000\000\000\000\000\000\003\220\000\000\003\130\000\000\003\129\000\000\000\000\000\000\000\000\003\240\000\000\000\000\000\000\003\241\000\000\000\022\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\002\249\002\248\002\247\002\246\002\245\002\241\000\000\003\216\002\242\000\000\003\217\002\244\000\000\003\219\000\000\002\240\000\000\000\127\002\185\000\000\000\000\002\188\000\000\000\000\002\191\000\000\000\000\002\186\002\189\000\000\002\187\002\190\002\252\002\239\003\218\000\000\000\000\000p\000\000\000o\000\000\002\251\000\000\001\234\000n\000F\001\025\000v\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\000\000\000\000\000\000\000\000\000\000\000\002\192\000\128\000\000\003\236\000\000\001\168\000\000\000\000\000\000\000\195\003w\001z\000\000\001y\001P\001O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\134\000\000\000\000\002f\000\000\000\000\000\000\002n\000\000\000\000\002r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002u\000\000\000\000\002y\000\000\002h\000\000\000\000\002k\000\000\000\000\000\000\002o\000\000\000\000\002s\000\000\000\000\002l\000\000\000\000\002p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\159\000\247\000\000\000\000\0026\000\000\000\000\000\158\002:\0027\001\006\000\225\000\000\000\227\000\226\000\000\003\132\000\000\003\131\003s\000\000\000\000\000\000\000\000\000\000\003~\000\000\003x\000\000\003\133\000\000\000\000\000\000\000\000\003\127\003u\002\129\000\000\000\199\001R\000\000\003\136\000\000\001T\000\000\000\000\003\164\000\000\003\171\000\201\000\000\000\207\000\000\003\165\000\200\000\000\003\166\000\000\003\173\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\221\000\000\000\203\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\218\000\000\000\000\000\222\000\000\000\000\000\000\000\000\001A\000\000\000\000\000\000\000\208\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\215\000\000\000\211\000\197\000\196\000\000\003\174\003\175\000\000\003\176\000\000\003\177\000\000\001S\003{\000\000\000\000\000\000\000\000\000\000\003|\002i\000\000\000\000\000\000\000\000\002v\000\000\000\000\002w\000\000\002e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002t\000\000\000\000\002x\000\000\002g\000\000\000\000\002j\000\000\000\000\000\000\002m\000\000\000\000\002q\000\000\000\000\002\006\000\000\001\162\001\239\000\000\003t\000\000\000\000\000\000\003z\000\000\000\000\000\000\0016\000\000\0010\000\000\0011\000\000\001;\001/\001:\000\000\003\135\001<\000\000\000\202\000\000\000\000\000\000\000\000\0018\0013\002\002\000\000\0014\000\000\0015\000\000\001\154\001\235\000\000\000\000\000\000\002\014\000\000\002\012\000\000\000\000\002\016\002\n\000\000\002\017\002\011\000\000\003\137\002\023\000\000\000\198\000\000\000\000\002\003\000\000\001\156\001\236\000\000\003\237\000\000\003\234\000\000\003\235\000\023\000\024\000\000\000\000\0032\000\000\0031\000\000\000\000\0034\000\000\0033\000\000\000\000\002\005\000\000\0030\003/\000\000\001\160\001\238\000\000\0035\000\000\000\000\003\238\000\021\000\130\000\000\003\239\000\000\000\000\003L\000\000\000\000\003\138\000w\000\000\000\000\000\000\000x\000\000\003\128\000\000\001\128\000\000\001\130\003}\000\000\000\000\001l\000\000\001k\000\000\001s\000\000\001\144\000\000\000\000\000\000\001h\000\000\001g\000\000\001p\000\000\001\140\000\000\000\000\000\000\001o\000\000\000\000\001w\000\000\000\000\001j\001x\000\000\001i\000\000\001q\000\000\001\142\000\000\000\000\000\000\001m\000\000\000\000\000\000\001f\000\000\001e\000\000\001t\000\000\001\138\000\000\000\000\000\000\001n\000\002\000\000\000d\000\000\000\000\001\226\000e\000\000\000\000\003\012\003\016\003\020\003\b\003\025\003\005\000\000\000\000\003\017\003\024\003\t\003\023\003\007\003\022\003\011\003\003\003\n\003\019\003\006\003\r\003\004\003\015\003\021\003\018\003\014\001\189\001\188\000\141\000\000\000\000\003b\000\000\000\000\000\000\000\000\003G\003D\000\000\000\000\003H\003E\003F\003#\000\000\000\000\003h\003\027\003\026\003\028\000\000\001\206\000c\001u\000\003\000\000\000\000\002\255\000\000\002}\000\000\000\142\000\000\000\000\003d\000\000\000\000\000\000\000\134\000\000\000\000\003T\000\000\002`\002_\001\180\003$\000\000\001\221\000\000\003\000\000\000\000\000\000\136\000\000\000\000\003X\000\000\001\203\000\000\000\000\001\195\000\000\000\000\000\000\001\202\000\000\001\198\000\000\000\000\000\000\001\170\001\169\000\000\000\000\000\000\001\222\000\000\001\193\000\000\001\192\000\000\000\131\000\000\000\000\003N\000\000\000\000\001\187\000\000\000\000\001\191\000\000\000\000\000\139\000\000\000\000\003^\000\000\000\000\003-\000\000\003,\000\000\000\000\000\000\002^\002]\003*\002\135\003\031\003+\000\000\001\209\000\000\000\000\000\000\001\205\000\000\001\211\000\000\000\000\000\000\000\000\000\000\000\000\001\225\000\000\001\197\000\000\001\196\000\000\000\000\000\000\003!\000\140\000\000\000\000\003`\000\000\003 \000\000\001\207\000\000\000\000\001\208\000\000\000\000\000\000\000\000\000\000\000\000\001\224\000\000\001\201\000\000\001\200\000\000\000\000\001\030\000\000\001\029\000\000\000\000\000\000\000\000\000\000\001\223\000\000\001\194\000\000\001\028\000\000\002,\000\137\000\000\000\000\003Z\000\000\000\000\000\000\000\000\003\160\003\159\000\000\000\000\001H\001G\000\133\001F\000\000\000\000\003R\000\000\002X\002W\002Z\003\029\002\131\002Y\001\027\000\000\000\138\000\000\000\000\003\\\000\000\000\000\000\000\000\000\002\\\002[\003)\003'\002\133\003\030\003(\000\000\001\216\000\000\001\219\000\000\000\000\001\212\000\000\000\000\000\000\001\204\000\000\001\210\000\000\000\000\001\199\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\001\218\000\000\001\217\000\000\000\000\000\000\000\000\001\215\000\000\000\000\001\214\000\000\001\213\000\000\000\000\001\220\000\000\000\000\001v\000\004\000\000\001\190\000\005\000\000\000\000\001!\000\006\000\000\001\244\001\245\001\243\000\000\001\242\003\161\001\176\000\000\000\007\000\000\001\247\001\248\001\246\000\000\000\000\000\000\000\000\001&\000\000\000\000\000\000\000\000\001+\001-\001,\001'\001)\001(\000\000\000\000\000\000\000\000\000\000\003\167\003\180\000\000\003\168\000\000\003\169\000\000\000\000\003\162\000\000\000\000\000\000\000\000\003\179\000\000\000\000\003\178\001\252\001\251\000\000\000\000\001\178\001\241\001\249\000\000\000\000\000\000\000\000\000\000\002b\000\000\000\000\000\000\000\000\000\000\002K\002a\000\000\000\000\000\000\000\171\000\000\000\000\000\170\002O\002L\001\n\000\193\000\000\000\000\000\000\000\000\001@\001\"\000\000\003\183\000\000\003\184\000\000\000\000\002\026\002\024\000\000\002\025\000\b\000\000\000\t\000\000\002\150\002\151\002\149\000\000\002\148\000\000\000\n\000\000\002\153\002\154\002\152\000\000\002\156\000\000\000\000\000\000\002\142\000\000\000\000\002\144\000\000\002\138\000\000\002\140\000\000\002\145\000\000\002\146\000\000\002\139\002\137\002\157\001\182\002\147\000\000\002\159\000\000\002\158\000\000\002\160\000\000\003.\000\011\000\000\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\232\000\000\000\231\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\233\000\230\000\000\000\235\000\000\000\000\000\000\003:\000\000\0039\000\000\000\000\000\000\000\000\003;\000\000\000\000\001 \000\000\000\000\000\000\000\000\000\000\003J\000\129\000\000\000\000\000\242\000\000\001\023\001\022\000\000\001b\000\000\0038\001\174\001\172\000\000\000\000\000\000\000\000\003<\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0037\000\000\000\000\000\000\000\000\000\000\000\000\0036\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003C\000\000\000\000\003B\000\000\003?\000\000\000\000\000\000\000\000\000\000\003@\000\000\000\000\000\000\003A\000\r\000\000\003=\000\000\003>")
+    (16, "\000\000\000\000\003\003\000\135\000\000\000\000\003W\001L\000\000\001J\001K\001I\000\000\001N\001M\000\001\000\000\001\134\000\000\000\000\000\151\002\029\000\000\000\000\003l\000\000\000\000\003s\003q\003m\003j\000\000\000\000\003o\003n\000\018\003\159\003\158\002\"\002!\000\000\000\017\002#\000\000\002\030\002 \000\000\003\243\000\000\000\000\001\231\001\230\001\229\001\228\000\000\000\244\000\243\000\000\000\000\002\001\000\000\001\150\001\233\000\000\000\000\000\000\000\000\000\000\000\252\000\000\000\000\001\021\001E\001\020\001\019\001\018\001\017\001D\001C\001\016\001\015\002?\000\000\000\000\002>\000\000\000\000\000\000\000\163\000\000\000\000\000\162\002B\001\r\000\000\002%\000\000\000\000\000\000\002&\002\031\000\150\002+\000\000\000\000\000\000\003'\000\000\003\151\003\150\003\152\000\000\003\187\000\000\003\144\000\000\000\000\000\000\000\000\001\000\000\019\000\000\000\000\000\000\003\234\002\202\000\000\000\000\003\232\000\000\002\230\000\000\000\000\000\000\000\000\000\000\000\000\003\231\003\233\002\208\001?\002\207\001>\002\206\002\205\002\204\002\021\002\200\000\000\000\000\002\201\000\245\000\000\000\000\000\000\002\203\000\000\000\000\002\199\003\230\000\000\000\000\003\199\002\162\000\000\000\000\002\165\000\000\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\246\001=\002\198\002\211\000q\000\025\000s\000\000\000\000\000U\000\000\000\000\000\000\000\000\000\000\000\000\000V\000\000\000W\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000h\002\195\000t\000\000\000\000\000\145\000\248\002\128\002\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\000\000\000r\000j\000\000\000i\000\000\002\163\002\166\000\000\002\164\002\167\003\198\000\020\000\000\002\238\000\000\000\183\000\000\000\000\002\002\000\000\001\152\001\234\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\001\255\000\000\001\146\000\180\000\000\000\179\000\000\001\148\001\232\000\000\000\000\002\237\000\000\000\000\000\000\002\216\000\000\000\000\000\000\002\209\000\000\000\000\000\000\000\000\002\236\002\235\002\234\002\233\002\232\002\228\000\000\003\210\002\229\000\000\003\211\002\231\000\000\003\213\000\000\002\227\000\000\000}\002\178\000\000\000\000\002\181\000\000\000\000\000\015\000\000\000\000\000\000\000\000\000\000\000m\000\000\000l\000\155\002\239\002\226\000\014\000\016\000k\0007\000\185\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009\000\000\000\000\000\000\000\000\000\000\000\000\0020\0024\000\000\000\000\000\154\0021\001\004\001\002\000\000\002\184\000\000\000\000\002\179\002\182\000\000\002\180\002\183\003\212\000\000\000\000\002\197\001\026\000\000\002\023\000\000\000\000\000\000\000\000\000\000\000\250\002\028\000\000\000\000\001\166\002\196\000\000\000\000\002\224\000\000\000\000\002\223\000\000\000\000\000\000\000\000\000\000\002\022\000\000\000\000\000\000\000\000\000\240\000\239\000\000\000\000\002\222\001^\001]\002\221\000\000\002\220\002\219\002\218\001`\002\214\000\000\003\203\002\215\000\000\000\000\000\000\000\000\000\000\000\238\000\000\003\204\002\217\000\000\003\206\000\000\002\213\000\000\000\000\000{\002\170\000\000\000\000\002\173\000\000\000\000\002\176\000\000\000\000\002\171\002\174\000\000\002\172\002\175\002\225\002\212\003\205\000\000\001\b\001Y\000\000\000\000\000\000\000\000\001[\000\000\001\132\000(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000*\000\000\000\000\000\000\000\000\001\\\000\000\001V\000\000\000\000\002E\000\000\000\000\000\000\000\167\000\000\000\000\000\166\002I\001_\001W\000\000\000\254\001U\002F\000\000\001Z\000\000\002\177\000|\000\000\002\169\003\207\000\000\002\185\000~\000\000\002\168\003\226\003\227\003\225\003\224\003\197\000\000\000\000\003\196\000\000\002\019\000\000\002\210\000\000\000\000\000z\000\000\000\000\000\000\003\214\000\000\002\020\000\000\000\000\000\000\003\228\000\000\000\000\000\000\003\200\000\000\000g\000\184\000\000\001~\000\000\003\156\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002e\000\189\000\190\000\000\000\000\000\000\000\000\000\000\002S\002d\002\t\000\000\000\000\000\000\000\000\000\000\001\012\000\194\000\000\002\n\000\000\000\000\000\000\000\000\000\188\000\000\000\186\000\175\000\000\000\000\000\174\002W\002T\000\000\000\000\003\155\000\000\003\154\000\000\000\000\000\000\003\157\003\145\003\146\000\000\002(\000\000\003\148\000\000\000\000\000\177\003\149\000\000\000\000\000\000\002)\003\186\000\000\000\000\002\b\000\000\001\164\001\241\000\000\003\153\000\000\000\000\002*\000\000\000\000\001d\000\000\001c\000\000\001r\000\000\001\136\000\000\000\000\000\000\001\184\000\000\003\190\000\000\000\000\002\005\001\185\000\000\001\158\001\238\003\191\000\000\003\194\003\193\000\000\000\000\003g\003\192\000\143\000\000\000\224\000\000\000\000\000\000\001|\003\189\000\000\003\188\003\140\003\142\003\143\003\141\000\000\000\000\000\000\000\000\000\000\001Q\000\000\000\000\000\000\000\000\000\000\000\192\000\204\000\191\000\000\000\000\000\132\000\000\000\000\000\000\000\216\000\000\003Q\000\000\000\000\000\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\223\001$\001#\000\000\000\000\000\000\000\000\001B\000\000\000\000\000\000\000\000\000\209\000\000\000\206\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\213\000\000\000\000\000\000\000\000\000\214\000\000\000\210\000\000\000\000\000\000\000\000\002\244\000\000\000\000\000\000\000\000\003\221\000\000\003\131\000\000\003\130\000\000\000\000\000\000\000\000\003\241\000\000\000\000\000\000\003\242\000\000\000\022\000\000\000\000\000\000\000\000\002\251\000\000\000\000\000\000\002\250\002\249\002\248\002\247\002\246\002\242\000\000\003\217\002\243\000\000\003\218\002\245\000\000\003\220\000\000\002\241\000\000\000\127\002\186\000\000\000\000\002\189\000\000\000\000\002\192\000\000\000\000\002\187\002\190\000\000\002\188\002\191\002\253\002\240\003\219\000\000\000\000\000p\000\000\000o\000\000\002\252\000\000\001\235\000n\000F\001\025\000v\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\000\000\000\000\000\000\000\000\000\000\000\002\193\000\128\000\000\003\237\000\000\001\168\000\000\000\000\000\000\000\195\003x\001z\000\000\001y\001P\001O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\135\000\000\000\000\002g\000\000\000\000\000\000\002o\000\000\000\000\002s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002v\000\000\000\000\002z\000\000\002i\000\000\000\000\002l\000\000\000\000\000\000\002p\000\000\000\000\002t\000\000\000\000\002m\000\000\000\000\002q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\159\000\247\000\000\000\000\0027\000\000\000\000\000\158\002;\0028\001\006\000\225\000\000\000\227\000\226\000\000\003\133\000\000\003\132\003t\000\000\000\000\000\000\000\000\000\000\003\127\000\000\003y\000\000\003\134\000\000\000\000\000\000\000\000\003\128\003v\002\130\000\000\000\199\001R\000\000\003\137\000\000\001T\000\000\000\000\003\165\000\000\003\172\000\201\000\000\000\207\000\000\003\166\000\200\000\000\003\167\000\000\003\174\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\221\000\000\000\203\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\218\000\000\000\000\000\222\000\000\000\000\000\000\000\000\001A\000\000\000\000\000\000\000\208\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\215\000\000\000\211\000\197\000\196\000\000\003\175\003\176\000\000\003\177\000\000\003\178\000\000\001S\003|\000\000\000\000\000\000\000\000\000\000\003}\002j\000\000\000\000\000\000\000\000\002w\000\000\000\000\002x\000\000\002f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002u\000\000\000\000\002y\000\000\002h\000\000\000\000\002k\000\000\000\000\000\000\002n\000\000\000\000\002r\000\000\000\000\002\007\000\000\001\162\001\240\000\000\003u\000\000\000\000\000\000\003{\000\000\000\000\000\000\0016\000\000\0010\000\000\0011\000\000\001;\001/\001:\000\000\003\136\001<\000\000\000\202\000\000\000\000\000\000\000\000\0018\0013\002\003\000\000\0014\000\000\0015\000\000\001\154\001\236\000\000\000\000\000\000\002\015\000\000\002\r\000\000\000\000\002\017\002\011\000\000\002\018\002\012\000\000\003\138\002\024\000\000\000\198\000\000\000\000\002\004\000\000\001\156\001\237\000\000\003\238\000\000\003\235\000\000\003\236\000\023\000\024\000\000\000\000\0033\000\000\0032\000\000\000\000\0035\000\000\0034\000\000\000\000\002\006\000\000\0031\0030\000\000\001\160\001\239\000\000\0036\000\000\000\000\003\239\000\021\000\130\000\000\003\240\000\000\000\000\003M\000\000\000\000\003\139\000w\000\000\000\000\000\000\000x\000\000\003\129\000\000\001\128\000\000\001\130\003~\000\000\000\000\001l\000\000\001k\000\000\001s\000\000\001\144\000\000\000\000\000\000\001h\000\000\001g\000\000\001p\000\000\001\140\000\000\000\000\000\000\001o\000\000\000\000\001w\000\000\000\000\001j\001x\000\000\001i\000\000\001q\000\000\001\142\000\000\000\000\000\000\001m\000\000\000\000\000\000\001f\000\000\001e\000\000\001t\000\000\001\138\000\000\000\000\000\000\001n\000\002\000\000\000d\000\000\000\000\001\227\000e\000\000\000\000\003\r\003\017\003\021\003\t\003\026\003\006\000\000\000\000\003\018\003\025\003\n\003\024\003\b\003\023\003\012\003\004\003\011\003\020\003\007\003\014\003\005\003\016\003\022\003\019\003\015\001\190\001\189\000\141\000\000\000\000\003c\000\000\000\000\000\000\000\000\003H\003E\000\000\000\000\003I\003F\003G\003$\000\000\000\000\003i\003\028\003\027\003\029\000\000\001\207\000c\001u\000\003\000\000\000\000\003\000\000\000\002~\000\000\000\142\000\000\000\000\003e\000\000\000\000\000\000\000\134\000\000\000\000\003U\000\000\002a\002`\001\181\003%\000\000\001\222\000\000\003\001\000\000\000\000\000\136\000\000\000\000\003Y\000\000\001\204\000\000\000\000\001\196\000\000\000\000\000\000\001\203\000\000\001\199\000\000\000\000\000\000\000\000\000\000\001\171\001\170\001\169\000\000\000\000\000\000\001\223\000\000\001\194\000\000\001\193\000\000\000\131\000\000\000\000\003O\000\000\000\000\001\188\000\000\000\000\001\192\000\000\000\000\000\139\000\000\000\000\003_\000\000\000\000\003.\000\000\003-\000\000\000\000\000\000\002_\002^\003+\002\136\003 \003,\000\000\001\210\000\000\000\000\000\000\001\206\000\000\001\212\000\000\000\000\000\000\000\000\000\000\000\000\001\226\000\000\001\198\000\000\001\197\000\000\000\000\000\000\003\"\000\140\000\000\000\000\003a\000\000\003!\000\000\001\208\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\001\225\000\000\001\202\000\000\001\201\000\000\000\000\001\030\000\000\001\029\000\000\000\000\000\000\000\000\000\000\001\224\000\000\001\195\000\000\001\028\000\000\002-\000\137\000\000\000\000\003[\000\000\000\000\000\000\000\000\003\161\003\160\000\000\000\000\001H\001G\000\133\001F\000\000\000\000\003S\000\000\002Y\002X\002[\003\030\002\132\002Z\001\027\000\000\000\138\000\000\000\000\003]\000\000\000\000\000\000\000\000\002]\002\\\003*\003(\002\134\003\031\003)\000\000\001\217\000\000\001\220\000\000\000\000\001\213\000\000\000\000\000\000\001\205\000\000\001\211\000\000\000\000\001\200\000\000\000\000\000\000\000\000\000\000\000\000\001\187\000\000\000\000\001\219\000\000\001\218\000\000\000\000\000\000\000\000\001\216\000\000\000\000\001\215\000\000\001\214\000\000\000\000\001\221\000\000\000\000\001v\000\004\000\000\001\191\000\005\000\000\000\000\001!\000\006\000\000\001\245\001\246\001\244\000\000\001\243\003\162\001\177\000\000\000\007\000\000\001\248\001\249\001\247\000\000\000\000\000\000\000\000\001&\000\000\000\000\000\000\000\000\001+\001-\001,\001'\001)\001(\000\000\000\000\000\000\000\000\000\000\003\168\003\181\000\000\003\169\000\000\003\170\000\000\000\000\003\163\000\000\000\000\000\000\000\000\003\180\000\000\000\000\003\179\001\253\001\252\000\000\000\000\001\179\001\242\001\250\000\000\000\000\000\000\000\000\000\000\002c\000\000\000\000\000\000\000\000\000\000\002L\002b\000\000\000\000\000\000\000\171\000\000\000\000\000\170\002P\002M\001\n\000\193\000\000\000\000\000\000\000\000\001@\001\"\000\000\003\184\000\000\003\185\000\000\000\000\002\027\002\025\000\000\002\026\000\b\000\000\000\t\000\000\002\151\002\152\002\150\000\000\002\149\000\000\000\n\000\000\002\154\002\155\002\153\000\000\002\157\000\000\000\000\000\000\002\143\000\000\000\000\002\145\000\000\002\139\000\000\002\141\000\000\002\146\000\000\002\147\000\000\002\140\002\138\002\158\001\183\002\148\000\000\002\160\000\000\002\159\000\000\002\161\000\000\003/\000\011\000\000\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\232\000\000\000\231\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\233\000\230\000\000\000\235\000\000\000\000\000\000\003;\000\000\003:\000\000\000\000\000\000\000\000\003<\000\000\000\000\001 \000\000\000\000\000\000\000\000\000\000\003K\000\129\000\000\000\000\000\242\000\000\001\023\001\022\000\000\001b\000\000\0039\001\175\001\173\000\000\000\000\000\000\000\000\003=\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\000\000\000\000\000\000\0037\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003D\000\000\000\000\003C\000\000\003@\000\000\000\000\000\000\000\000\000\000\003A\000\000\000\000\000\000\003B\000\r\000\000\003>\000\000\003?")
   
   let error =
-    (194, "\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000 \000\002\000A\128\000\000\129\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\240\000\000\000\000\000\000\000\001\235\218\188\000\004\000\002\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\173\028\000\000@\012@\000\192\005\002\024\004@\b\002\016\000\000\000\t\144\196\004'C@\n0\131T\0162\025@\134\0014\002!\222\004\128\001\014d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\2444\000\163\b5A\003!\148\b`\019@\"\029\224H\000\016\230C\016\016\157\r\000(\194\rP@\200e\002\024\004\208\b\135x\018\000\0049\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\026\209\192\000\004\000\196\000\012\000P!\128D\000\128!\000\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004/S@\n0\131T\0162\025@\134\0014\002!\222\004\128\001\014d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\004\000\000\016\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b \000\001\000@\000\000 \000\002\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \128\000\004\001\000\000\000\128\000\b\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\002\000\000 @\000\000\000\000\000\000@\000\000\000\000\000\0000\140\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016\000\000\000\000\000\000\016\000\000\000 \128\000\004\001\000\000\000\128\000\b\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 @\000\000\000\000\000\000@\000\000\000\130\000\000\016\004\000\000\002\000\000\000\000\000\016\000\000\000\000\000\000\016\000\000\000 \128\000\004\001\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 @\000\000\000\000\000\000@\000\000\000\130\000\000\016\004\000\000\002\000\000 \000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\tP\208\002\140 \213\004\012\198P!\128M\000\136w\129 \000C\153\012@\000\000\000\000\001\000\000\000\002\b\000\000@\016\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004\000\002\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\001\tP\208\002\140 \213\004\012\198P!\128M\000\136w\129 \000C\153\012^\189\171\192\000A\000 \000\002\b\004\000\024\016\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004\016\002\000\000 \000@\001\129\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\016\000\000\000!\000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000A\000 \000\002\b\004\000\024\016\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\001\004\016\002\000\000 \128@\001\129\000\000\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000A\000 \000\002\000\004\000\024\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\000\000\000\000\000\000\000\128\000\b\128\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\b\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\000\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\158\189\171\192\000E$ \004\131@\164\024\2270\000\bH\004\000\128\004\016\bg\175j\240\000\017I\b\001 \208)\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\134\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\158\189\171\192\000E$ \004\131@\164\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\001\000\000\000\000\000\000\000@\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\012L\019e\146\192\000\000\020\000\129\000\000\027\160\016\159\029\192\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004RB\000H4\138A\142s\000\000\132\128@\b\000A \134z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\00010M\150K\000\000\000P\002\004\000\000n\128B|w\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\006\200\000'\135p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000l\128\002xw\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\158\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\003\000\016@!\128\000\000\000\000\000\000\017\000\000\000\016\000\000\001\000 \000\000\000\192\000&\131\016\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\000\000\001\000@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000@\000z\246\175\000\001\000\000\128\000\b\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\175j\208\000\016\000\b\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\004\000\000\000\002\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\018\129\000\000\000\000\128\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\000\000\000&C\020\016\133,\000\000@\004@\000\192$\002\024\004@\b\002\016\000\000\000\t\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\020\144\000\018\rB\128c\140\192\000! \016\000\000\016@!\128\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\004\016H`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000 \000\000\012\000\016`R\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\004\016H`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000\000\001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000@\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\000\192\129\022I(\000\000\001\000\000\016\000\001\170\001\b\193\024\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\128\004\018\bg\175j\240\000\017I\b\001 \210)\0069\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\000\004\018\bg\175j\240\000\017I\b\001 \210)\0069\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000h\128\0020F\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\003\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\001\235\218\188\000\004RB\000H4\138A\142s\000\000\132\128@\b\000A \134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\001\235\218\188\000\004RB\000H4\138A\142s\000\000\132\128@\b\000A \134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000 \000\b@\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000\000\000\000\000\016\005$\000\004\131@\160\024\2270\000\bH\004\000\000\004\016\b`\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\134\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\175j\240\000\017I\b\001 \208)\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\001I\000\001\000\196(\0068\200\000\006\018\001\000\000\001\004\002\024\000\000\000\000\000R@\000H7\138\001\1903\000\001\132\128@*\000A\004\134\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\000\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\004\016H`\000\000\000\000\001I\000\001 \222(\006\248\204\000\006\018\001\000\168\001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\00010M\150K\000\000\000P\002\004\000\000n\128BTw\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000R@\000H7\138\001\1903\000\001\132\128@*\000A\004\134\000\000\000\000\000\004\000\000\000\b\000\000\001\000@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\004\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\003\019\004\217d\176\000\000\005\000 @\000\006\232\004%Gp\000\000\000\000\001I\000\001\000\192(\0068\200\000\006\018\001\000\000\001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\003\002\004\025$\160\000\000\004\000\000@\000\004(\004 @`\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\020\144\128\018\r\"\144c\156\192\000! \016\002\000\016H!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\003\003\004\025$\176\000\000\004\000\000@\000\006h\004$D`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\005$\000\004\131p\160\027\2270\000\024H\004\002 \004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000R@\000H7\n\001\1903\000\001\132\128@\"\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\004\016H`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\020\144\000\018\r\226\128o\140\192\000a \016\b\128\016A!\128\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\020\144\000\018\r\226\128o\140\192\000a \016\n\128\016A!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000R@\000H5\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000E$ \004\131@\164\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\144\000\0000\000E\129J\000\000\000@\000\000\000\000h\128\0020F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004RB\000H4\nA\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\t\000\000\003\017\004\216T\176\000\000\005\000 \000\000\006\200\000'\199p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004RB\000H4\nA\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\t\000\000\003\017\004\216T\176\000\000\005\000 \000\000\006\200\000'\199p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\000\000\000\000\000\000\000\128\000\b\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\000\007\175j\240\000\016\000\b\000\000\130\001\024\000\004\000\000\000\000\000\000\000\000\128\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000\000@\016\000\000\b\000\000\000\000\"\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\246\173\000\001\004\000\128\000\000\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\004\000\128\000\b \016\000`@\000\000 \000\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\175j\240\000\016@\b\000\000\130\001\000\006\004\000\000\002\000\000\000\000\000\016\001\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\149\r\000(\194\rP@\204e\002\024\004\208\b\135x\018\000\0049\144\197\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000@\000z\246\175\000\001\004\000\128\000\b\000\016\000`@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\001\000\004\001\000\000\000\128\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\005\235\218\188\000\004\000\002\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000@\000 \000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134z\246\175\000\001\000\000\128\000\b\000\016\000\000@\000\000\000\000\000\000\000\000\000\030\189\171\192\000@\000 \000\002\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\007\175j\240\000\016\000\b\000\000\128\001\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\004\000\000\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\004\000\000\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\235\218\180\000\004\000\002\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000@\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\129\005\164\t\004\003\016\161\028\2270\128\025\234\012\000\017\133\016(`\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\128\001\004\000\128\000\b\000\016\000\003\000\000\000 \000\000\001\128!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\004\000\128\000\b\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\012\000\000!\128@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\018\000\000\000\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\000\000\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\175j\208\000\016@\b\000\000\000\001\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\000\000\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\001\255\250\254\b\020ZB\144H5\nq\206?\b\001\158\160\192\t\030Q\134\134\000\000\000$\000\004\012L\019m\146\192\001\000T\000\129 \000\027\160\016\148\029\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\025\235\218\188\000\004RB\000H4\nA\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\t\000\000\003\017\004\216T\176\000\000\005\000 \000\000\006\136\000\005\007p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\016H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\015\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\016\000\000\000\000\000\000\000@\136\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248 Qi\nA\000\196)\1998\252 \006z\131\000\004iD\n\025\255\250\254\b\020ZB\144H5\011q\206?\b\001\158\160\192\t\026QB\134z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\020\144\000\016\012B\128c\140\128\000a \016\000\000\016@!\128\000\000\000\000\005$\000\004\003\000\160\024\227 \000\024H\004\000\000\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\001\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001\000\192(\0068\200\000\006\018\001\000\000\001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\003\019\004\217d\176\000\000\005\000 @\000\006\168\004\005\007p\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\020\144\128\018\r\"\144c\156\192\000! \016\002\000\016H!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\006\136\000\005\007p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\192\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H7\138\001\1903\000\001\132\128@*\000A\004\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\015\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\191\240\241E\164)\004\003\024\183\028\227\241\128\025\234L\000\017\229\028kp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\127\254\191\130\005\022\144\164\018\rB\220s\143\194\000g\1680\002F\148P\161\159\255\175\224\129E\164)\004\131P\167\028\227\240\128\025\234\012\000\145\165\016h`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\191\240\129E\1649\004\195P\183\028\227\241\1289\234L\001\209\229\029kp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\002\004\022\144$\016\012B\132s\140\194\000g\1680\000F\020@\161\128\000\000\000\129\005\164\t\004\003\016\161\028\2270\128\025\234\012\000\017\133\016(`\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\191\235\248\000\017I\bA \208)\0068\252\000\002\018\001\000 \t\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\004\000\128\000\b\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\000\134\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\246\173\000\001\004\000\128\000\000\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\003\003\004\027$\176\000@\020\000\000H\000\006(\004$\004`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\016H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\018\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\016Z@\144@1\n\017\2063\b\001\158\160\192\001\024Q\002\134\000\000\000\002\004\022\144$\016\012B\132s\140\194\000g\1680\000F\020@\161\128\000\000\000\000\001\000\000\000\000\b\000\000@\016\000\000\b\000\000\128\000\002\000\000\000\000\000\000\000@\000\000\000\002\000\000\016\004\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\004\000\000\000\000 \000\001\000@\000\000 \000\000\000\000\b\000\000\000\000\000\000\001\000\000\000\000\b\000\000@\016\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\000\000\000\000\000\001\000\000\000\000\b\000\000@\016\000\000\b\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\004\000\000\000\000 \000\001\000@\000\000 \000\002\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\128\004\018\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\016Z@\144@1\n\017\2063\b\001\158\160\192\001\024Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144H5\nq\206?\024\001\158\160\192\t\026Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\239\252<Qi\nA\000\198-\1998\252`\006z\147\000\004yG\026\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248 Qi\nA\000\198)\1998\252`\006z\131\000\004iD\n\024\000\000\000\000\000\000\000\000\b\004\000\000\000\000\016\000\000\000\000\b\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\003\024\167\028\227\241\128\025\234\012\000\017\165\016+p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\004\012L\019m\146\192\001\000T\000\129 \000\027\160\016\020\029\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\000@\000\000\000\000 \000\000\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\131P\167\028\227\241\128\025\234\012\000\145\165\016+p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144@1\138q\206?\024\001\158\160\192\001\026Q\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\175j\240\000\017I\b\001 \210)\0069\204\000\002\018\001\000 \001\004\130\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001\000\003\000\000\b`\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\000\000\001\000@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H5\n\001\1583\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\189\171@\000A\000 \000\000\000\004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144H5\nq\206?\024\001\158\160\192\t\026Q\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\130\005\022\144\164\018\rB\156s\143\198\000g\1680\002F\148@\161\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000@\000\192\000\002\024\004@\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\001\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A \134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\129\005\164\t\004\003\016\161\028\2270\128\025\234\012\000\017\133\016(`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\128\004\018\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\004\000\012\000\000!\128@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\175j\240\000\016\000\b\000\000\130\001\024\000\004\000\000\000\000\000 \000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H5\n\001\1583\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\175j\208\000\016@\b\000\000\000\001\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000 Ai\002A\000\196(G8\204 \006z\131\000\004aD\n\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\007\255\239\252 Qi\014A0\212-\1998\252`\014z\147\000dyGZ\220\000\000\000\b\016Z@\144@1\n\017\2063\b\001\158\160\192\001\024Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\003\024\183\028\227\240\128\025\234\012\000\017\229\028h`\000\000\000\000\000\000\000\000 \016\000\000\000\000\000\000\000\000\000 \000\000\000\001\255\250\254\b\020ZB\144@1\139q\206?\b\001\158\160\192\001\030Q\198\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\128@\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144H5\011q\206?\b\001\158\160\192\t\030Q\198\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\131P\183\028\227\240\128\025\234\012\000\145\229\028h`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\001\000\001\255\250\254\b\020ZB\144@1\139q\206?\b\001\158\160\192\001\026QB\134\000\000\000\000\000\000\000\000\002\001\000@\000\000\000\000\000\000\000\002\000\000\016\000\031\255\175\224\129E\164)\004\003\024\183\028\227\240\128\025\234\012\000\017\165\020(`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\128@\016\000\000\000\000\000\000\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144H5\011q\206?\b\001\158\160\192\t\026QB\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\004\000\012\000@!\128@\000\000 \000\000\000\000\016\000\000\000\000\000\000\000\000\016\000\192@\000\000\000\000\000 \000\000\000\128\000\001\000\023\255\235\248 Qi\nA\000\198)\1998\252 \006z\131\000\004iD\n\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\003\001\000\000\000\000\000\000\128\000\000\002\000\000\004\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248 Qi\014A0\212)\1998\252 \014z\131\000$iDJ\029\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248 Qi\014A0\212)\1998\252 \014z\131\000$iDJ\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\001\000\001\255\250\254\b\020ZB\144H5\011q\206?\b\001\158\160\192\t\026QB\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\130\005\022\144\164\018\rB\156s\143\198\000g\1680\002F\148@\161\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\254\191\128\001\020\144\164\016\012\002\144c\143\128\000a \016\000\000\148@\161\128\000\000\000\000\005$\001\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\255\175\224\000E$)\004\003\000\164\024\227\224\000\024H\004\000\000%\016(`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\001\000\001\239\250\254\000\004RB\144@0\nA\142>\000\001\132\128@\000\002Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001\000\003\000\016\b`\016\000\000\b\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\016 \000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\031\255\175\224\129E\164)\004\131P\167\028\227\240\128\025\234\012\000\145\229\024h`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\000\004\016\002\000\000 \000@\000\012\000\000\000\128\000\000\006\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\005\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\003\024\167\028\227\240\128\025\234\012\000\017\165\016(`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000@\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\003\016\165\028\227\240\128\025\234\012\000\017\165\016(g\175j\240\000\017I\b\001\000\192)\0068\200\000\006\018\001\000\000\001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000_\255\175\224\129E\164)\004\003\016\165\028\227\240\128\025\234\012\000\017\165\016(`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\130\005\022\144\164\016\012B\148s\143\194\000g\1680\000F\148@\161\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248\000\016@\b\000\000\128\001\000\0000\000\000\002\000\000\000\b\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\001\127\254\191\128\001\004\000\128\000\b\000\016\000\003\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248\000\016@\b\000\000\128\001\000\0000\000\000\002\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\194\000\226\b$I\002\016\012\000\000\018@\002\020\161H\000\024\192\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\001\000\016\002\136 \017\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\b\000\000\128\000\000\000\000\000\b\000  \000\000\000\000\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\b\128\000\000\000\000\000\b\000  \000\000\000\000\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\014\000\130D\016!\000\192\000\001$\000!H\020\128\001\140\000\000z\246\175\000\003\128 \128\004\b@0\000\000I\000\bR\005 \000c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\130\t\024@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\b\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\b\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 @\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\014\000\130@\016!\000\192\000\001$\000!H\020\128\001\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000\224\b \001\002\016\012\000\000\018@\002\020\129H\000\024@\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\129\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\n@\002\029\160H\000\016\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\004\000@\n \130D\016\002\016\000\000\000\164\000!\218\004\128\001\014\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000(v\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004\000\002\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 @\007\175j\240\000\016\000\b\000\000\128\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000@\004\000\162\b$A\000\001\128\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\000\000\000\016\000\000\000 \000\000\000\000\000\000\000\128\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\000\162\b$A\000\017\000\000\000\002@\002\029\160H\000\016\192\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000@\004\000\186\b$A\000\005\000\000\000\n@\002\029\160H\000\016\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\004\000@\n \130D\016\002\016\000\000\000\164\000!\218\004\128\001\014\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000(v\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\b\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\b\000\000\000\004\000@\138 \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\000\000\004\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000@\004\000\162\b$A\000!\000\000\000\n@\002\029\160H\000\016\224\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\002\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000(\004 @\n \130D\016\000\024\000\000\000$\000!\218\004\128\001\012\000\000\000\001\000\016\002\136 \145\004\000\006\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\130\t\016@\000`\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\137 \145\004\000\148\000\000\000)\000\bv\129 \000C\128\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\n\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\006\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\130\t\016@\000`\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\016\000\000\000 \000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000 \000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\004\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\128\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\b\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000\000\000\000\016\000\000\000 \000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\004\000@\011\160\130D\016\000P\000\000\000\164\000!\218\004\128\001\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\222\188@\014 \130D\016!\016@\000\001$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000@\004\000\162\b\004A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\016\001\000.\146\t\016@\t`\000\000\002\144\000\135h\018\000\0048\000\000\000\004\000@\n \130D\016\002\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000z\247\175\016\003\136 \145\004\bF\016\000\000I\000\bv\129 \000C\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\b\003\136 \145$\b@0\000\000I\000\bR\133 \000c\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\014\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\251\255\b\020ZB\144H=\014q\206?\b\001\158\164\192\t\026Q\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\191\240\129E\164)\004\131\208\167\028\227\240\128\025\234L\000\145\165\016+w\191\239\252\000\016\000\b\000\000\128\001\000\000\000\000\000\000\016\000\000\000\000\000\001\239\251\255\000\004\000\002\000\000 \000@\000\000\000\000\000\004\000\000\000\000\000\000{\254\255\192\001\000\000\128\000\b\000\016\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\133\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\004!C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\001\bP\192\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000B\0200\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\131\197\022\144\164\016\012b\156s\143\194\000g\1680\000F\148@\161\159\255\175\224\129E\164)\004\003\024\167\028\227\240\128\025\234\012\000\017\165\016(`\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\183\000\000\000\000\000\000\000\000\002\001\000\000\000\000\000\000\000\000\000\002\000\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\b\004\000\000\000\000\000\000\000\000\000\b\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\131P\167\028\227\240\128\025\234\012\000\145\165\016+p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H7\138\001\1903\000\001\132\128@*\000A\004\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248<Qi\nA\000\198)\1998\252 \006z\131\000\004iD\n\025\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\031\255\175\224\129E\164)\004\003\024\167\028\227\240\128\025\234\012\000\017\165\016+p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\015\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\127\254\191\130\005\022\144\164\016\012b\156s\143\194\000g\1680\000F\148@\161\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\254\255\192\001\004\000\128\000\b\000\016\000\000\000\000\000!\000\000\000\000\000\000\000B\0200\000\001\000\000\000\003\000\000\b`\016\000\000\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\002\024\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\000\000\000\b\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\192\000\000\016\004\000\000\002\000\000\000\000\b\128\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\000\000\001\000@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144H5\nq\206?\b\001\158\160\192\t\026Q\006\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\b\004\000\000\000\000\000\000\000\000\000\b\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\131P\167\028\227\240\128\025\234\012\000\145\165\016+p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004!C\000\000\016\000\016\0000\000\000\134\001\000\000\000\132\000\000\000\000\0001\000\000\000\000\000\000\002\002\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \2088\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\239\252 Qi\nA \2449\1998\252 \006z\147\000$iD\n\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\255\194\005\022\144\164\018\015B\156s\143\194\000g\1690\002F\148@\173\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\239\252 Qi\nA\000\198)\1998\252 \006z\147\000\004iD\n\220\000\000\000\000\000\000\000\000\b\004\000\000\000\000\000\000\000\000\000\b\000\000\0001\127\254\255\194\005\022\144\164\016\012b\156s\143\194\000g\1690\000F\148@\173\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\239\252 Qi\nA \212)\1998\252 \006z\147\000$iD\n\221\255\251\255\b\020ZB\144@1\138q\206?\b\001\158\164\192\001\026Q\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\128@\000\000\000\000\000\000\000\000\000\128\000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\251\255\b\020ZB\144H5\nq\206?\b\001\158\164\192\t\026Q\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\191\240\129E\164)\004\131P\167\028\227\240\128\025\234L\000\145\165\016+p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\251\255\b\020ZB\144H5\nq\206?\b\001\158\164\192\t\026Q\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\0200\000\001\000\001\000\003\000\000\b`\016\000\000\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\251\255\b\020ZB\144H5\nq\206?\b\001\158\164\192\t\026Q\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\128@\000\000\000\000\000\000\000\000\000\128\000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\251\255\b\020ZB\144H5\nq\206?\b\001\158\164\192\t\026Q\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\0200\000\001\000\001\000\003\000\000\b`\016\000\000\b@\000\000\000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\016$K\128\024\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000 \000\000\016\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\001\002\000\000\000\000\000\000\000\000\016\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\016 \000\000\000\000\000\000\000\001\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000@\128\000\000\000\000\000\000\000\004\000\000\000\002\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000 \004\000\000\000\000\000\000\000\128\000\004\b\000\000\000\000\000\000\000\000@\000\000\000 \000\000\000\000\004\000\000\000\000\016\000\000\000\000\000\000\000\000\016`\004\000\002\001@\000\000\000\000\000\000\b\000\000@\128\000\000\000\000\000\000\000\004\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\001\000\000\000\000\000\000\000\000\001\006\000@\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\0048\001\128\000\000@\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\016`\006\000\000\001\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\004\024\001\000\000\000@\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\128\016\000\128\004\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\128\016\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\006\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\0048\001\128\000\000@\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\001\006\000`\000\000\016\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000A\128\016\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016`\004\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\024\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\004\024\001\128\000\000@\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\001\006\000@\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\128\016\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016`\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")
+    (194, "\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000 \000\002\000A\128\000\000\129\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\240\000\000\000\000\000\000\000\001\235\218\188\000\004\000\002\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\173\028\000\000@\012@\000\192\005\002\024\004@\b\002\016\000\000\000\t\144\196\004'C@\n0\131T\0162\025@\134\0014\002!\222\004\128\001\014d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\2444\000\163\b5A\003!\148\b`\019@\"\029\224H\000\016\230C\016\016\157\r\000(\194\rP@\200e\002\024\004\208\b\135x\018\000\0049\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\026\209\192\000\004\000\196\000\012\000P!\128D\000\128!\000\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004/S@\n0\131T\0162\025@\134\0014\002!\222\004\128\001\014d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\004\000\000\016\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b \000\001\000@\000\000 \000\002\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \128\000\004\001\000\000\000\128\000\b\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\002\000\000 @\000\000\000\000\000\000@\000\000\000\000\000\0000\140\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016\000\000\000\000\000\000\016\000\000\000 \128\000\004\001\000\000\000\128\000\b\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 @\000\000\000\000\000\000@\000\000\000\130\000\000\016\004\000\000\002\000\000\000\000\000\016\000\000\000\000\000\000\016\000\000\000 \128\000\004\001\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 @\000\000\000\000\000\000@\000\000\000\130\000\000\016\004\000\000\002\000\000 \000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\tP\208\002\140 \213\004\012\198P!\128M\000\136w\129 \000C\153\012@\000\000\000\000\001\000\000\000\002\b\000\000@\016\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004\000\002\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\001\tP\208\002\140 \213\004\012\198P!\128M\000\136w\129 \000C\153\012^\189\171\192\000A\000 \000\002\b\004\000\024\016\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004\016\002\000\000 \000@\001\129\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\016\000\000\000!\000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000A\000 \000\002\b\004\000\024\016\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\001\004\016\002\000\000 \128@\001\129\000\000\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000A\000 \000\002\000\004\000\024\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\000\000\000\000\000\000\000\128\000\b\128\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\b\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\000\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\158\189\171\192\000E$ \004\131@\164\024\2270\000\bH\004\000\128\004\016\bg\175j\240\000\017I\b\001 \208)\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\134\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\158\189\171\192\000E$ \004\131@\164\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\001\000\000\000\000\000\000\000@\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\012L\019e\146\192\000\000\020\000\129\000\000\027\160\016\159\029\192\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004RB\000H4\138A\142s\000\000\132\128@\b\000A \134z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\00010M\150K\000\000\000P\002\004\000\000n\128B|w\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\006\200\000'\135p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000l\128\002xw\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\019 \000\158\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\003\000\016@!\128\000\000\000\000\000\000\017\000\000\000\016\000\000\001\000 \000\000\000\192\000&\131\016\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002|7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\195p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\004\200\000'\131p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0001\016M\132K\000\000\000P\002\000\000\000L\128\002x7\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\000\000\001\000@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000@\000z\246\175\000\001\000\000\128\000\b\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\175j\208\000\016\000\b\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\004\000\000\000\002\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\018\129\000\000\000\000\128\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000B\0200\000\001\000\017\000\003\000\144\b`\017\000 \b@\000\000\000&C\020\016\133,\000\000@\004@\000\192$\002\024\004@\b\002\016\000\000\000\t\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\bP\192\000\004\000D\000\012\002@!\128D\000\128!\000\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004!C\000\000\016\001\016\0000\t\000\134\001\016\002\000\132\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\020\144\000\018\rB\128c\140\192\000! \016\000\000\016@!\128\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\004\016H`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000 \000\000\012\000\016`R\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\004\016H`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000\000\001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000@\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\000\192\129\022I(\000\000\001\000\000\016\000\001\170\001\b\193\024\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\128\004\018\bg\175j\240\000\017I\b\001 \210)\0069\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\000\004\018\bg\175j\240\000\017I\b\001 \210)\0069\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000h\128\0020F\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\003\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\144\000\0000\000E\128J\000\000\000@\000\000\000\000H\128\0020\006\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\t\000\000\003\000\004X\004\160\000\000\004\000\000\000\000\004\136\000#\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\001\235\218\188\000\004RB\000H4\138A\142s\000\000\132\128@\b\000A \134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\001\235\218\188\000\004RB\000H4\138A\142s\000\000\132\128@\b\000A \134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000 \000\b@\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000\000\000\000\000\016\005$\000\004\131@\160\024\2270\000\bH\004\000\000\004\016\b`\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\000\000A\000\134\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\175j\240\000\017I\b\001 \208)\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\001I\000\001\000\196(\0068\200\000\006\018\001\000\000\001\004\002\024\000\000\000\000\000R@\000H7\138\001\1903\000\001\132\128@*\000A\004\134\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\000\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\004\016H`\000\000\000\000\001I\000\001 \222(\006\248\204\000\006\018\001\000\168\001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\00010M\150K\000\000\000P\002\004\000\000n\128BTw\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000R@\000H7\138\001\1903\000\001\132\128@*\000A\004\134\000\000\000\000\000\004\000\000\000\b\000\000\001\000@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\004\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\003\019\004\217d\176\000\000\005\000 @\000\006\232\004%Gp\000\000\000\000\001I\000\001\000\192(\0068\200\000\006\018\001\000\000\001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\003\002\004\025$\160\000\000\004\000\000@\000\004(\004 @`\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\020\144\128\018\r\"\144c\156\192\000! \016\002\000\016H!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\003\003\004\025$\176\000\000\004\000\000@\000\006h\004$D`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\005$\000\004\131p\160\027\2270\000\024H\004\002 \004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000R@\000H7\n\001\1903\000\001\132\128@\"\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002\000\000\000\192\001\006\001(\000\000\001\000\000\000\000\001\002\000\b\016\024\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000 \000\000\012\000\016`\018\128\000\000\016\000\000\000\000\016 \000\129\001\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\004\016H`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\020\144\000\018\r\226\128o\140\192\000a \016\b\128\016A!\128\000\000\000\000\005$\000\004\131x\160\027\2270\000\024H\004\002\160\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\020\144\000\018\r\226\128o\140\192\000a \016\n\128\016A!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000R@\000H5\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000E$ \004\131@\164\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\144\000\0000\000E\129J\000\000\000@\000\000\000\000h\128\0020F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004RB\000H4\nA\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\t\000\000\003\017\004\216T\176\000\000\005\000 \000\000\006\200\000'\199p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004RB\000H4\nA\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\t\000\000\003\017\004\216T\176\000\000\005\000 \000\000\006\200\000'\199p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\000\000\000\000\000\000\000\128\000\b\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\000\007\175j\240\000\016\000\b\000\000\130\001\024\000\004\000\000\000\000\000\000\000\000\128\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000\000@\016\000\000\b\000\000\000\000\"\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\246\173\000\001\004\000\128\000\000\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\004\000\128\000\b \016\000`@\000\000 \000\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\175j\240\000\016@\b\000\000\130\001\000\006\004\000\000\002\000\000\000\000\000\016\001\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\149\r\000(\194\rP@\204e\002\024\004\208\b\135x\018\000\0049\144\197\235\218\188\000\004\016\002\000\000 \128@\001\129\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000@\000z\246\175\000\001\004\000\128\000\b\000\016\000`@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\001\000\004\001\000\000\000\128\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\005\235\218\188\000\004\000\002\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000@\000 \000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134z\246\175\000\001\000\000\128\000\b\000\016\000\000@\000\000\000\000\000\000\000\000\000\030\189\171\192\000@\000 \000\002\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\007\175j\240\000\016\000\b\000\000\128\001\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\004\000\000\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\004\000\000\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\235\218\180\000\004\000\002\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000@\004\000\163\b$A\000!\132\000\000\018@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\140 \145\004\000\134\016\000\000I\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\129\005\164\t\004\003\016\161\028\2270\128\025\234\012\000\017\133\016(`\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\128\001\004\000\128\000\b\000\016\000\003\000\000\000 \000\000\001\128!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\004\000\128\000\b\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\012\000\000!\128@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000@\000 \000\002\b\004`\000\016\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\018\000\000\000\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\000\000\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\175j\208\000\016@\b\000\000\000\001\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\000\000\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\001\255\250\254\b\020ZB\144H5\nq\206?\b\001\158\160\192\t\030Q\134\134\000\000\000$\000\004\012L\019m\146\192\001\000T\000\129 \000\027\160\016\148\029\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\025\235\218\188\000\004RB\000H4\nA\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\t\000\000\003\017\004\216T\176\000\000\005\000 \000\000\006\136\000\005\007p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\016H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\015\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\016\000\000\000\000\000\000\000@\136\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248 Qi\nA\000\196)\1998\252 \006z\131\000\004iD\n\025\255\250\254\b\020ZB\144H5\011q\206?\b\001\158\160\192\t\026QB\134z\246\175\000\001\020\144\128\018\r\002\144c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\020\144\000\016\012B\128c\140\128\000a \016\000\000\016@!\128\000\000\000\000\005$\000\004\003\000\160\024\227 \000\024H\004\000\000\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\001\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001\000\192(\0068\200\000\006\018\001\000\000\001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\003\019\004\217d\176\000\000\005\000 @\000\006\168\004\005\007p\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\020\144\128\018\r\"\144c\156\192\000! \016\002\000\016H!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\003\017\004\216D\176\000\000\005\000 \000\000\006\136\000\005\007p\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\192\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000$\000\000\012D\019a\018\192\000\000\020\000\128\000\000\018 \000\020\r\192\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\002@\000\000\196A6\017,\000\000\001@\b\000\000\001\"\000\001@\220\000\000\000\000\000R@\000H7\138\001\1903\000\001\132\128@*\000A\004\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\015\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\191\240\241E\164)\004\003\024\183\028\227\241\128\025\234L\000\017\229\028kp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\127\254\191\130\005\022\144\164\018\rB\220s\143\194\000g\1680\002F\148P\161\159\255\175\224\129E\164)\004\131P\167\028\227\240\128\025\234\012\000\145\165\016h`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\191\240\129E\1649\004\195P\183\028\227\241\1289\234L\001\209\229\029kp\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\002\004\022\144$\016\012B\132s\140\194\000g\1680\000F\020@\161\128\000\000\000\129\005\164\t\004\003\016\161\028\2270\128\025\234\012\000\017\133\016(`\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\191\235\248\000\017I\bA \208)\0068\252\000\002\018\001\000 \t\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\004\000\128\000\b\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\000\134\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\246\173\000\001\004\000\128\000\000\000\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000@\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\003\003\004\027$\176\000@\020\000\000H\000\006(\004$\004`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\016H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\018\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\016Z@\144@1\n\017\2063\b\001\158\160\192\001\024Q\002\134\000\000\000\002\004\022\144$\016\012B\132s\140\194\000g\1680\000F\020@\161\128\000\000\000\000\001\000\000\000\000\b\000\000@\016\000\000\b\000\000\128\000\002\000\000\000\000\000\000\000@\000\000\000\002\000\000\016\004\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\004\000\000\000\000 \000\001\000@\000\000 \000\000\000\000\b\000\000\000\000\000\000\001\000\000\000\000\b\000\000@\016\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\000\000\000\000\000\001\000\000\000\000\b\000\000@\016\000\000\b\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\004\000\000\000\000 \000\001\000@\000\000 \000\002\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\128\004\018\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\016Z@\144@1\n\017\2063\b\001\158\160\192\001\024Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144H5\nq\206?\024\001\158\160\192\t\026Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\239\252<Qi\nA\000\198-\1998\252`\006z\147\000\004yG\026\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248 Qi\nA\000\198)\1998\252`\006z\131\000\004iD\n\024\000\000\000\000\000\000\000\000\b\004\000\000\000\000\016\000\000\000\000\b\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\003\024\167\028\227\241\128\025\234\012\000\017\165\016+p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\004\012L\019m\146\192\001\000T\000\129 \000\027\160\016\020\029\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\000@\000\000\000\000 \000\000\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\131P\167\028\227\241\128\025\234\012\000\145\165\016+p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144@1\138q\206?\024\001\158\160\192\001\026Q\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\175j\240\000\017I\b\001 \210)\0069\204\000\002\018\001\000 \001\004\130\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001\000\003\000\000\b`\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\000\000\001\000@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H5\n\001\1583\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\189\171@\000A\000 \000\000\000\004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\000\016\004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\020\144\000\018\rB\128g\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144H5\nq\206?\024\001\158\160\192\t\026Q\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\130\005\022\144\164\018\rB\156s\143\198\000g\1680\002F\148@\161\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000@\000\192\000\002\024\004@\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\001\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A \134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\129\005\164\t\004\003\016\161\028\2270\128\025\234\012\000\017\133\016(`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000E$ \004\131H\164\024\2310\000\bH\004\000\128\004\018\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131P\160\025\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\004\000\012\000\000!\128@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\175j\240\000\016\000\b\000\000\130\001\024\000\004\000\000\000\000\000 \000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H5\n\001\1583\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\175j\208\000\016@\b\000\000\000\001\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \212(\006x\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000 Ai\002A\000\196(G8\204 \006z\131\000\004aD\n\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\007\255\239\252 Qi\014A0\212-\1998\252`\014z\147\000dyGZ\220\000\000\000\b\016Z@\144@1\n\017\2063\b\001\158\160\192\001\024Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\003\024\183\028\227\240\128\025\234\012\000\017\229\028h`\000\000\000\000\000\000\000\000 \016\000\000\000\000\000\000\000\000\000 \000\000\000\001\255\250\254\b\020ZB\144@1\139q\206?\b\001\158\160\192\001\030Q\198\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\128@\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144H5\011q\206?\b\001\158\160\192\t\030Q\198\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\131P\183\028\227\240\128\025\234\012\000\145\229\028h`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\001\000\001\255\250\254\b\020ZB\144@1\139q\206?\b\001\158\160\192\001\026QB\134\000\000\000\000\000\000\000\000\002\001\000@\000\000\000\000\000\000\000\002\000\000\016\000\031\255\175\224\129E\164)\004\003\024\183\028\227\240\128\025\234\012\000\017\165\020(`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\128@\016\000\000\000\000\000\000\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144H5\011q\206?\b\001\158\160\192\t\026QB\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\004\000\012\000@!\128@\000\000 \000\000\000\000\016\000\000\000\000\000\000\000\000\016\000\192@\000\000\000\000\000 \000\000\000\128\000\001\000\023\255\235\248 Qi\nA\000\198)\1998\252 \006z\131\000\004iD\n\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\003\001\000\000\000\000\000\000\128\000\000\002\000\000\004\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248 Qi\014A0\212)\1998\252 \014z\131\000$iDJ\029\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248 Qi\014A0\212)\1998\252 \014z\131\000$iDJ\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\001\000\001\255\250\254\b\020ZB\144H5\011q\206?\b\001\158\160\192\t\026QB\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\130\005\022\144\164\018\rB\156s\143\198\000g\1680\002F\148@\161\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\254\191\128\001\020\144\164\016\012\002\144c\143\128\000a \016\000\000\148@\161\128\000\000\000\000\005$\001\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\255\175\224\000E$)\004\003\000\164\024\227\224\000\024H\004\000\000%\016(`\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\001\000\001\239\250\254\000\004RB\144@0\nA\142>\000\001\132\128@\000\002Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001\000\003\000\016\b`\016\000\000\b\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\016 \000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\031\255\175\224\129E\164)\004\131P\167\028\227\240\128\025\234\012\000\145\229\024h`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\000\004\016\002\000\000 \000@\000\012\000\000\000\128\000\000\006\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\005\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\003\024\167\028\227\240\128\025\234\012\000\017\165\016(`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000@\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\160\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\129E\164)\004\003\016\165\028\227\240\128\025\234\012\000\017\165\016(g\175j\240\000\017I\b\001\000\192)\0068\200\000\006\018\001\000\000\001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000_\255\175\224\129E\164)\004\003\016\165\028\227\240\128\025\234\012\000\017\165\016(`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\130\005\022\144\164\016\012B\148s\143\194\000g\1680\000F\148@\161\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248\000\016@\b\000\000\128\001\000\0000\000\000\002\000\000\000\b\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\001\127\254\191\128\001\004\000\128\000\b\000\016\000\003\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248\000\016@\b\000\000\128\001\000\0000\000\000\002\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\144\000\018\r\002\128c\140\192\000! \016\002\000\016@!\128\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\194\000\226\b$I\002\016\012\000\000\018@\002\020\161H\000\024\192\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\001\000\016\002\136 \017\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\b\000\000\128\000\000\000\000\000\b\000  \000\000\000\000\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\b\128\000\000\000\000\000\b\000  \000\000\000\000\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\014\000\130D\016!\000\192\000\001$\000!H\020\128\001\140\000\000z\246\175\000\003\128 \128\004\b@0\000\000I\000\bR\005 \000c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\130\t\024@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\b\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\b\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 @\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\014\000\130@\016!\000\192\000\001$\000!H\020\128\001\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\189\171\192\000\224\b \001\002\016\012\000\000\018@\002\020\129H\000\024@\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\129\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\n@\002\029\160H\000\016\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\004\000@\n \130D\016\002\016\000\000\000\164\000!\218\004\128\001\014\000\000\000\001\000\016\"\136 \145\004\000\004\000\000\000\t\000(v\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\175j\240\000\016\000\b\000\000\128\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\030\189\171\192\000@\000 \000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\001\000\016\002\136 \145\004\000\006\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\000\000\000\000\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\128\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000@\000\000\000\128\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000D\000\000\000\t\000\bv\129 \000C\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\001\000\016\002\232 \145\004\000\020\000\000\000)\000\bv\129 \000C\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\016\001\000(\130\t\016@\b@\000\000\002\144\000\135h\018\000\0048\000\000\000\004\000@\138 \130D\016\000\016\000\000\000$\000\161\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\"\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\016\001\002(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\000\000\000\016\000\000\000 \000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\001\000\016\002\136 \145\004\000\132\000\000\000)\000\bv\129 \000C\128\000\000\000@\004\b\162\b$A\000\001\000\000\000\002@\n\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\160\016\129\000(\130\t\016@\000`\000\000\000\144\000\135h\018\000\0040\000\000\000\004\000@\n \130D\016\000\024\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\000\162\b$A\000\001\128\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@\n$\130D\016\002P\000\000\000\164\000!\218\004\128\001\014\000\000\000\001\000\016\"\136 \145\004\000\004\000\000\000\t\000(v\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@\n \130D\016\000\024\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\000\162\b$A\000\001\128\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\128\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000@\000\000\000\128\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\128\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\016\000\000\000\000\000\b\b\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000  \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\128\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\132\000\000\000\000@\000\000\000\128\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000(\130\t\016@\000@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\016\001\000.\130\t\016@\001@\000\000\002\144\000\135h\018\000\0048\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\175z\241\0008\130\t\016@\132A\000\000\004\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\001\000\016\002\136 \017\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000@\004\000\186H$A\000%\128\000\000\n@\002\029\160H\000\016\224\000\000\000\016\001\000(\130\t\016@\b@\000\000\000\144\000\135h\018\000\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\000\162\b$A\000\001\000\000\000\002@\002\029\160H\000\016\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\235\222\188@\014 \130D\016!\024@\000\001$\000!\218\004\128\001\012\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@\n \130D\016\000\016\000\000\000$\000!\218\004\128\001\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\002\136 \145\004\000\004\000\000\000\t\000\bv\129 \000C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188 \014 \130D\144!\000\192\000\001$\000!J\020\128\001\140\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \2088\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \208(\0068\204\000\002\018\001\000 \001\004\002\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\239\252 Qi\nA \2449\1998\252 \006z\147\000$iD\n\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\255\194\005\022\144\164\018\015B\156s\143\194\000g\1690\002F\148@\173\222\255\191\240\000@\000 \000\002\000\004\000\000\000\000\000\000@\000\000\000\000\000\007\191\239\252\000\016\000\b\000\000\128\001\000\000\000\000\000\000\016\000\000\000\000\000\001\239\251\255\000\004\000\002\000\000 \000@\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\0200\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\016\133\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\004!C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\001\bP\192\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\250\254\015\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\127\254\191\130\005\022\144\164\016\012b\156s\143\194\000g\1680\000F\148@\161\128\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248 Qi\nA\000\198)\1998\252 \006z\131\000\004iD\n\220\000\000\000\000\000\000\000\000\b\004\000\000\000\000\000\000\000\000\000\b\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\000\000\000\000\000\000 \000\000\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\130\005\022\144\164\018\rB\156s\143\194\000g\1680\002F\148@\173\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\001 \222(\006\248\204\000\006\018\001\000\168\001\004\018\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\175\224\241E\164)\004\003\024\167\028\227\240\128\025\234\012\000\017\165\016(g\255\235\248 Qi\nA\000\198)\1998\252 \006z\131\000\004iD\n\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\127\254\191\130\005\022\144\164\016\012b\156s\143\194\000g\1680\000F\148@\173\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248<Qi\nA\000\198)\1998\252 \006z\131\000\004iD\n\025\255\250\254\b\020ZB\144@1\138q\206?\b\001\158\160\192\001\026Q\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\239\251\255\000\004\016\002\000\000 \000@\000\000\000\000\000\132\000\000\000\000\000\000\001\bP\192\000\004\000\000\000\012\000\000!\128@\000\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\b`\016\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\b\000\000 \000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\128\001\235\218\188\000\004\000\002\000\000 \128F\000\001\000\000\000\000\000\000\000\000 \000z\246\175\000\001\000\000\128\000\b \017\128\000@\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\000\007\175j\240\000\016\000\b\000\000\130\001\024\000\004\000\000\000\000\000 \000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000\000@\016\000\000\b\000\000\000\000\"\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\000\004\001\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\000\007\175j\240\000\016\000\b\000\000\130\001\024\000\004\000\000\000\000\000 \000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\235\248 Qi\nA \212)\1998\252 \006z\131\000$iD\026\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\000\000\000\000\000\000 \000\000\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\191\130\005\022\144\164\018\rB\156s\143\194\000g\1680\002F\148@\173\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\133\012\000\000@\000@\000\192\000\002\024\004\000\000\002\016\000\000\000\000\000\196\000\000\000\000\000\000\b\b\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005$\000\004\131@\224\024\2270\000\bH\004\000\128\004\016\b`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R@\000H4\n\001\1423\000\000\132\128@\b\000A\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\191\240\129E\164)\004\131\208\231\028\227\240\128\025\234L\000\145\165\016+p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\251\255\b\020ZB\144H=\nq\206?\b\001\158\164\192\t\026Q\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\191\240\129E\164)\004\003\024\167\028\227\240\128\025\234L\000\017\165\016+p\000\000\000\000\000\000\000\000 \016\000\000\000\000\000\000\000\000\000 \000\000\000\197\255\251\255\b\020ZB\144@1\138q\206?\b\001\158\164\192\001\026Q\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\255\191\240\129E\164)\004\131P\167\028\227\240\128\025\234L\000\145\165\016+w\255\239\252 Qi\nA\000\198)\1998\252 \006z\147\000\004iD\n\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\002\001\000\000\000\000\000\000\000\000\000\002\000\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\239\252 Qi\nA \212)\1998\252 \006z\147\000$iD\n\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\254\255\194\005\022\144\164\018\rB\156s\143\194\000g\1690\002F\148@\173\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\239\252 Qi\nA \212)\1998\252 \006z\147\000$iD\n\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\bP\192\000\004\000\004\000\012\000\000!\128@\000\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\239\252 Qi\nA \212)\1998\252 \006z\147\000$iD\n\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\002\001\000\000\000\000\000\000\000\000\000\002\000\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\239\252 Qi\nA \212)\1998\252 \006z\147\000$iD\n\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\bP\192\000\004\000\004\000\012\000\000!\128@\000\000!\000\000\000\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\004\000\000\000\000\000\000\000\000\000@\145.\000`\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\128\000\000@\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\004\b\000\000\000\000\000\000\000\000@\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000@\128\000\000\000\000\000\000\000\004\000\000\000\002\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\001\002\000\000\000\000\000\000\000\000\016\000\000\000\b\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\128\016\000\000\000\000\000\000\002\000\000\016 \000\000\000\000\000\000\000\001\000\000\000\000\128\000\000\000\000\016\000\000\000\000@\000\000\000\000\000\000\000\000A\128\016\000\b\005\000\000\000\000\000\000\000 \000\001\002\000\000\000\000\000\000\000\000\016\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\b\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\004\000\000\000\000\000\000\000\000\004\024\001\000\000\000P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\016\224\006\000\000\001\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000A\128\024\000\000\004\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\016`\004\000\000\001\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\006\000@\002\000\016\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\006\000@\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\024\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\016\224\006\000\000\001\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\004\024\001\128\000\000@\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\001\006\000@\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\128\016\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016`\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\016`\006\000\000\001\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\004\024\001\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\006\000@\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\128\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")
   
   let action =
-    ((16, "\002\130\000\185\000\000\000\000\022\134\000\185\000\000\000\000\000\026\000\000\000\000\000\000\000\213\000\000\000\000\000\000\002\130\000\000\000\005:*\000\000\000\000I\182\026P\000\000\025,\027t\000\000\000\000\000\000\000\000\000\213\0002\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\142\000\000\000\000\025,\000\000\000\000\000\006\000\000\000\017\000\017\000\000\000\000\000\000\000\000\000\r\000\000\000\000\000\144\000\017\000\000\000\144\000\000\000\000\000\017\000\162\001\244\000\017\001\242\000\000\003\000\000R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\223\000\017\000\000\000I\002\220\000\017\000\000\000\005\001f\000\000\000\000\000\000\002\016\000\000\028\152\000\017\002\028\000\000\000\000\000\000\000\000:*\029\188?\184\000\000?\184\000\000\000\000\000\000\000\017\000\000?\184\000\000>\156\003\028?\184\003P\000\000\000\000\000\017\007fW\234\000\000\000\000[0[\200\000\000^\200\000\000\\`Vn%\254%\254^\200Vn\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\248%\254\000\000\000\000\\\248\\\248\\\248\000\000\\\248\000\006\000\000\000\000Vn\\\248\000\000\000\000/\026\000\017\000\000 b%\254Vn\000\0000jVn<\002Vn<\128Vn\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\248Vn\000\000L\020Vn=\156Vn>\184Vn\000\000Vn\000\000Vn?\212Vn@\240VnB\012VnC(VnDDVnE`Vn!`Vn\000\000\000\000\000\000\003dVn\000\000\000\000\000\000\000\000VnL\156VnM\184VnN@VnO\\VnF|VnG\152VnH\180VnO\228VnQ\000Vn\000\000VnQ\136VnR\164VnS,Vn\000\000VnTHVnT\208Vn\000\000\000\000Vn\000\000\003\202\000\000\000\000\000\017\000\000\000\000\000\000\000\000\003\242\000\000\004\020\000\000\000\020Vn\000\000\000\020\000\000\000\000\000\194:*\000\000&\224\0032\0032m\164]\226\000\000m\164\000\000\000\000m\164\000\000\000\194\000\000\000\000%\254\004V\000\000\004x^\2005p\000\000_X%\254\004z\000\000\004\1384>5p^\200\000\000\000\000\000\000\000\000\000\000\000\000\\\248\000\000\000\000\\\248\000\000\000\000\\\248\000\000\000\006\000\000^\200\000\000\000\000n\006\000\017\000\000 b b\000\000\000\227$\226 b \230Vn\000\000Vn\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\028Vn\024\132Vn\005\nVn\000\000Vn$\"VnI\022Vnw\154Vnw\246VnxZVnx\182Vn\000\000Vny\026VnyvVny\218Vn\000\000Vnz6Vnz\154\000\175!\226\000\000\000\000\001X#b\000\000\000\000\000\000\000\000\004\228\000\000Vn\004\252\000\000\000\000\000\017\000\000\000\000\000\000\002\184^\200\000\000\000\000\006\000\000\000\000[`0\005\242Vn\005\240\000\000\000\000^\200\000[\000\000\000\000Vn\005v\000\000%\254\005\130\000\000\005\132n\1385p^\200\005\134\000\000Vn\000|Vn\005\138\000\000\000\0005p5p\000\000\000\000\000\000\000\0002\200\000\000\000\000\000\000\000\000\000\000\\\248\000\000\000\000\000\164\006\136Vn5p\000\017\000\000\\\248\000\000\000\000\\\248\000\000\000\006\000\0003\240n\138\000\000\000\000\"\172\000\017\000\000 b\005\208\000\000Vn\005\212\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000-\140\000\000\000\000\006\0165p\006&5p\000\000\000\003\000\000\000\000\025\168Vn\026\204Vn\027\240Vn\029\020Vn\0308Vn8\168VnK0VnKTVn\000\000VnV\000Vn_fVna\224Vn\000\000VnkBVnk\194\000\000\006\004\000\000\001(6\\\000\000\002x845p\000\000\003\n7H\000\000\000\000\000\000\000\000\006\152\000\000\000\000\000\000\0068\000\000\006N\000\000\000\000\006T\000\000\000\000\006X\000\000\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\006d\007,\000\000\006j\000\000\006r\000\000\006rW\234\000\000%\254\006tv\188\000\000\007X\000\000%\254\006\1309*\000\000%\254\006\132:F\000\000\006\132\000\000\000\000\007f\000\000\007x\000\000\000\000\001f\007H\000\017\006\142\007`EDED\000\000\000\000\000\000\003\\T,ED\003hG|\000\000\000\000\000\000\006h\007R\002\162\007fED\000\000\000\000\006\156\000\000\006\160\007pED\006\164\000\000\001N\000\000\000\000\003\196M\156\000\000\000\000\000\000\006\168\007\156\000\000\007\158\000\0001\234\000\017\007\160\000\000\000\000\000\000\006\174\000\000?\184\000\000D(A\240\000\000\000\000\030\224?\184\006\176\000\000\000\000\001\140?\184\000\000\001\140\000\000\000\000\006\194\000\000\002\162\006\192\000\000\001V:*\000\000:*\000\000\006\174\000\000\001V\000\000\019\1524\240:*\000\000\006\208\000\000\002\000:*\000\000\000\000\002\000\000\000\000\000\000\000\000\026\000\000\000\000\001<\000\026\000\000\000\000\000\000\007\194\000\000&\224'n'n\000\000\000\000'n\000\000\000\000\000\000\000\000\000\000\007\170Vn\006\222)X\007^\000\000\007\192Vn\006\244\007\188:*\000\000\000\000\000\000:*\000\017\000\000\000\017Vn\007\242\000\000\000\017\000\000\000\017\007\244\000\000\t.\007\196\000\017\007\014\007\222ED\007\018\001\154\000\000Vn\b\004\000\000\000\000\000\000\007\230ED\007\026\b\n\000\000\003\186\004>Vn\b\020\000\000\b\022\000\0001\234\000\017\004lVn\b(\000\000\b*\000\000\000\017\004\140Vn\b.\000\000\b6\000\000\0013\007t\t\n,n\000\000`\192%\254\007LW(\000\000X\130\000\000\b<\000\000\003\002\b\018Vn\007\208\000\000\b\022Vn\007\212\000\000\001p\000\000\t\n\t\n%\254\007X\000\000\007ZoLoL\000\000\000\000\000\000\000\000\000\000\000\000\\\248\000\000\000\000\\\248\000\000\000\000\\\248\000\000\000\006\000\000oL\000\000\000\000;b\000\017\000\000 b\007`\000\000Vn\007d\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000Y<Vn\000\000Vn\000\000\007p\000\000\000\020\000\000\000\000\000\000\000\000\000\000c\014VncvVn\007\156Vn\000\000Vnd\146Vnd\250Vnf\022Vnf~Vng\154Vnh\002Vn\000\000Vni\030Vni\134Vnj\162Vn\000\000Vnk\nVnl&5p\007n\000\000\000\000\003\002\000\000\003\002\000\000\019\152\t\n\t\n\000\000\000\000\000\000\000\003\000\000\000\000\000\000\bFVn\007|)X*j\000\017\bl\000\000\bN\022\152\000\000:*\000\017\001\166\000\000Vn\br\000\000\n&\bD\000\017\007\138\bZED\007\142\004H\000\000Vn\b\128\000\000\004L\000\000Vn\b\132\000\0001\234\000\017\004\158\000\000Vn\b\174\000\000\000\017\005 \000\000Vn\b\196\000\000-\152\b\198Z\000\b\206Vn\007\226)X)X\001\022\001\022\003\228\001\226\001\022\000\000\000\000\004\012\004\026\000\000\004Z\n\"\000\000\000\000\000\000\000\000\000\000\007\228\000\000\000\000\b\214\000\000\b\216\000\000\000\000\t\026\b\196Vn\007\250\b\238\000\000\b\242\000\000\b0\000\000\b\218 b\b\014)X\000\000\000\000\000\000\007\136\000\000\000\000\003\002\000\000\b\146\000\000\015\018\0012\000\000\015\018\000\000\000\000-\152\000\000\011\182\000\000\000\000\012\014\000\000\015\018\000\000\b\230 b\b\026\005b\000\000Vn\t\016\000\000\0032\000\000\b\226\000\017\b0\t\000ED\b4\005n\000\000Vn\t$\000\000\t\006ED\bF\t6\000\000\0056Vn\t8\000\000\t:\000\0001\234\000\017\005<Vn\t>\000\000\tP\000\000\000\000\000\000\012\014\000\000\000\000\001:\000\000\t\n\000\000\0032\000\000\000\000Z\000\tXVn\bl)X\000\000\000\000\tB b\bx\005t\000\000Vn\tt\000\000\007\184\000\000\tD\000\017\b\144\t`ED\b\152\005v\000\000Vn\t\136\000\000\005|\000\000Vn\t\138\000\0001\234\000\017\005\198\000\000Vn\t\140\000\000\002\200*j\000\000\002\200\000\000\000\000\b\162\000\000\000\020\001\128)X\000\000\006\006\0007\006\006\000\000\0007\000\000\t\n\000\000\t\n\000\000\000\000\000\000\b\174\000\000\000\000\b\186\000\000\004V\007\136\0007\006\006\000\000\000\000\000\000\0007\000\000\t\n\000\000\004V\000\000\000\000\022|\020R\019\152\000\000\020R\000\000\n\140\019\152\000\000\000\000\n\140\000\000\000\000\b\186\000\000\000\000\b\192\000\000\004\244\t\n\000\000\004\244\000\000\000\000\t@\000\000\001:\000\000\t\n\000\000\000\000\000\000\024\024Z\152\000\000\t\178\000\000\024\024\t\184\000\000\t\186\000\000\005\146\024\024\000\000\t\188\000\000\000\000\005\146\000\000\000\000\b\210\000\000\023@\tP\000\000\000\000\000\000\tR\000\000\000\165\000\178\000\000\019\152\t\176\000\000\000\000Vn\t\002\t\n\000\000\b\214\000\000\0013\000\000:*\000\000\000\000\003\236\019\152\000\000\019\152\000\000\b\198\000\000\003\236\000\000Vn\003\240Vn\000\000Vn\000\000\b\200\000\000\003\240\000\000Vn\003\240\b\204\000\000\021\024+\234\000\000\003\250\021\024\000\000\000\000\021\024\000\000\b\206\000\000\003\250\000\000Vn\003\240\b\208\000\000:*\005\216:*\000\000:*\000\000\b\218\000\000\005\216\000\000Vn\003\240\b\220\000\000\000\000'~\000\000\000\185\t~\000\000\000\000\tT]\212\000\000\000\000\000\000\000\000\000\000\000\000\t(\006\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004]\212\000\000\001\b\003P\t*\000\185\000\000\000\000\t2\000\185\000\000\000\000\000\000\000\000\001\024\003P\000\000\000\000\000\000\000\000\t\144\000\000\000\000\000\000\000\000/\0261j\000\000q&\000\000]\212\000\000\002v]\212\000\000\002\196\001\218\001\218\000\000\003\224\001\218\000\000\t\b\000\000\000\000\000\000\000\000\t\162\000\0002\200\000\0004\240]\212\000\000\000\029]\212\000\000\t\198\000\000]\212\t\202\000\000r\194]\212\t\222\000\000\t\224\000\000s\194]\212]\212\000\000\000\000\t^]\212\t\232\000\000\t\234\000\000\t\236\000\000:*\000\000\004\n:*\000\000\tf'n\000\000]\212\t\244\000\000\002\220]\212\000\000\004\154]\212\000\000\004\132\n|\000\000\n~\000\000b\030]\212\tr\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000t\016a\156\n\n\000\000\n\020\000\000u\016p\012]\212\t\150]\212\n&\000\000\n(\000\000\n*\000\000]\212\t\208\000\185\000\000\000\000\005\154]\212\000\000\004\132\000\000\n0\000\000]\212\n2\000\000u^p\028]\212\t\176]\212\n:\000\000\n<\000\000\n>\000\000l\200'n\000\000'n\000\000b\030]\212\t\188]\212\nH\000\000\nL\000\000'n\000\000qt\000\000\000\000\005\166]\212\000\000\001\128\003\142\001\218\t\196\000\000\000\000\0032\0032\000\000\000\000\000\000\000\000\005\024\0032\000\000\t\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\212\000\000\005\236]\212\000\000\005Z\001f\000\185\t\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\\\000\000\nd\000\000]\212\nf\000\000v^a\156\nh\000\000\np\000\000]\212\nr\000\000(\226\n v\172U\206rt\t\246\000\000]\212\n\140\000\000\n\142\000\000\n^(\226]\212\n\150\000\000]\212\n\152\000\000\n\154\000\000]\212\n\156\000\000\000\185\n\b\000\000\000\000'~\000\000\000\000\0044\011\002\000\000\000\000\001C\000\000\000\000\000\000Vn\000\000\000\000\000\000\004\132\000\000\000J\000\000\000\000\000\000\006\006:*:*:*\000\000\003`\003`\003`\003`\000\000\000\000\000\000\000\000\000\000\000\000\003\002\019\152\n\248\016\148\0012\000\000\000\000\004P\000\000\012\014\000\0005p\n\026\000\000\003\002\019\152\n*\018\022\000\000\003\002\016\148\000\000\000\000\000\000:*6j\000\000\000\000\000\000\n\128\0032\011\bO@O@\000\000\004\230d,O@\005\164P\228\000\000\000\000\b\170\n\252\000\017\000\000\005\200R\136\000\000\000\000\000\000\000\000\000\000\nB\011\n\t\n\nH\000\000\000\000\004P\000\000\012\014\000\000\021r\000\027\000\000\000\000\011\002\000\000\000\000\0044\000\000\002\030\000\000\000\000\000\000Vn\000\000\004\132\000\000\002\198\000\000\000\000\000\000\007\136\000\000\r\144\005L\r\144\000\000\t\n\r\144\000\000\005\246\000\000\t\n\000\000\t\n\000\000\t\n\000\000\019\242\000\000\000\000\000\000\000\000\000\000\t\n\000\000\005\246\000\000\t\n\000\000*\196\000\000\000\000\n\140\n\130\000\185\002$\011.\005\202\000\000\005\202\011V\000\000\011Z\000\000\006\204\000\000\005\202\002\196\005\202\0110\005\202\000\000\000\000\003\170\000\000\0144\002$\nR\000\000\nV\000\000\n\156\000\185\002$\nd\000\000\n\140\011p\000\000\014\234\bd\011\132\000\225\011\132\000\000\000\000\b,\000\185\000\000\001D\000\000\000\000\000p\000\000\nn\000\000\000\000\000\000\n\172\000\185\002$\nr\000\000\000\000\n\140\014\234\bd\b,\001D\000p\nv\000\000\014\234\bd\b,\001D\000p\nx\000\000\006\170\002\012\n\148\000\185\n\144\006\220\003\230\n\186\000\185\000\000\n\190\000\185\000\000\011\030\000\000\n\164\004\140\n\160\006\220\011H\000\000\n\216\006\220\011`\000\000\000\000\006\220\000\000\011b\000\000"), (16, "\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\012:\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\r\213\019N\006\145\025#\025'\r\213\005\249\001\194\025+\r!\n\001\r)\r\213\000\190\r\213\r!\r!\026\151\r\213\012n\r\213\r\213\000\n\r\213\000\190\026\155\r\213\r!\014\014\r9\000\130\r\213\r\213\r\213\001\170\026\158\r\213\000&\004\217\0056\028\006\001N\r\213\b\193\000\198\r\213\r\213\n\001\b\233\001\198\000\254\r\213\r\213\r!\r\213\006\190\r\213\000*\0007\000;\000\194\r\213\000\190\r\213\r\213\005\254\r\213\r\213\r\213\b\177\0196\000\202\r\213\r\213\r\213\004:\rY\r\213\r\213\r\213\n\218\000\206\001\"\r\213\r\213\r\213\r\213\r\213\r\213\006f\001\006\007\022\r\213\r\213\000N\n\158\019\158\019\198\019\214\020\n\020\026\020B\n\222\r\213\r\213\r\213\000\n\015\218\r\213\r\213\r\213\r\213\006\145\r\213\012\150\r\213\001Z\000\n\r\213\001\030\001\"\r\213\r\213\b\249\011r\001&\001\002\000\n\004\217\001*\001.\006\t\r\213\r\213\007\145\007\"\r\213\000\234\021\198\000\134\r\213\r\213\r\213\r\213\011~\rY\r\213\0012\r\213\000\222\001j\b\237\r\213\r\213\r\213\000\n\r\213\002}\r\213\r\213\000\190\r\213\004R\r\213\r\213\006Y\r\213\r\213\r\213\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\028.\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\r\225\n\001\r\145\006\198\015*\r\225\012n\000\190\025K\025O\012n\n~\r\225\025S\r\225\014\014\012\150\018\186\r\225\014\014\r\225\r\225\023\182\r\225\018\190\000\202\r\225\006\210\005\129\012\133\001\238\r\225\r\225\r\225\006Q\000\206\r\225\r\153\000\198\tR\003\233\003\241\r\225\024*\000\254\r\225\r\225\003\233\003\241\011\178\012\154\r\225\r\225\014\165\r\225\014~\r\225\014\165\023\202\006I\000\n\r\225\019\"\r\225\r\225\000\202\r\225\r\225\r\225\000\190\nR\020\246\r\225\r\225\r\225\000\206\020\142\r\225\r\225\r\225\015.\028\158\n\134\r\225\r\225\r\225\r\225\r\225\r\225\n\005\028\"\012\133\r\225\r\225\015\218\021&\004]\028&\015\218\r\153\000\n\021~\004\017\r\225\r\225\r\225\0156\bF\r\225\r\225\r\225\r\225\018\186\r\225\t\005\r\225\001\n\n\230\r\225\018\190\001\002\r\225\r\225\018\194\014\165\014\165\005\241\000\202\n\186\014\165\005\241\006\014\017\190\r\225\004]\002]\r\225\000\206\000\006\000\"\r\225\r\225\r\225\r\225\011\182\002\129\r\225\006\025\r\225\001\018\014\130\n\005\r\225\r\225\r\225\r\129\r\225\019\"\r\225\r\225\006\137\r\225\000\n\r\225\r\225\000\190\r\225\r\225\r\225\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\000\n\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\000\190\000\n\000\198\tR\006\153\012r\012\130\012\146\003\193\000^\b\225\006\153\000f\006\153\000v\004R\027\162\006\153\r\137\006\153\006\153\000z\006\153\020\234\006q\006\153\021z\027r\011\026\000\202\006\153\000\198\006\153\011\030\017\154\006\153\001~\001^\025n\000\206\011\"\006\153\001\142\000\190\000.\011&\025r\020\250\026\183\026\187\006\153\006\153\003\173\026\191\000~\006\153\006\153\006\201\000\202\016J\006\153\021\006\006\153\006\153\000\n\006\153\006\153\006\153\000\206\021\n\001\214\006\153\006\153\006\153\000\198\016N\006\153\006\153\006\153\023\206\021n\bR\006\153\006\153\006\153\006\153\006\153\006\153\t\021\000\138\0045\006\153\006\153\000\n\t\233\003\193\011\194\022^\006\017\006\017\020\142\000\202\011\198\006\153\006\153\006I\t\162\006\153\006\153\006\153\006\153\000\206\006\153\006N\006\153\016\238\021\022\006\153\003\193\006\201\006\153\006\153\028\178\027\178\006\129\023\186\021\026\005\241\023\210\001\026\001\222\027\162\026\215\026\219\027\170\006\153\000\n\026\223\b\253\006\153\006\153\006\153\006\153\004\133\028\190\006\153\001\238\006\153\019~\0045\019\166\006\153\006\153\006\153\bb\019\230\0045\006\153\006\153\000\190\006\153\002\141\006\153\006\153\004\165\006\153\006\153\006\153\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\003^\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\r9\006\185\tz\015*\006\185\014\174\tM\014\194\t\134\n\001\006\185\006\185\t=\006\185\028\218\022v\022~\006\185\012n\006\185\006\185\025\018\006\185\r9\000\202\006\185\019\134\014\014\019\174\005\241\006\185\006\185\006\185\019\242\000\206\006\185\006\185\006\185\006\185\r9\018\014\006\185\006\185\006\185\006\185\027\186\006\185\006\185\014\222\005\241\006\185\006\185\006\185\006\185\t\222\006\185\027\170\022\134\002\173\000\n\006\185\025\018\006\185\004\n\006\185\006\185\006\185\006\185\021\138\006\185\0152\006\185\006\185\006\185\b\221\rI\006\185\006\185\006\185\015.\004*\006\185\006\185\006\185\006\185\006\185\006\185\006\185\n\021\022:\015F\0069\006\185\006)\b\205\011\230\r1\0042\0061\rq\014\178\b\209\014\198\006\185\006\185\006\185\015\218\006\185\006\185\006\185\006\185\006\185\006\185\014\246\006\185\011~\000\n\006\185\012\006\018\142\006\185\006\185\022v\022~\r9\006\185\006\185\r9\023\182\015R\006a\004\154\006\185\002m\012\"\006\185\014\165\014\165\011~\006\185\006\185\014\165\006\185\014\226\012n\006\185\0166\006\185\004\162\004\186\n\021\006\185\016j\014\014\011~\017\"\017V\004\194\006\185\017j\006\185\022j\006\185\006\185\024&\006\185\006\185\006\185\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\020v\000v\025Z\000\182\011\"\000\186\001\146\001\150\000z\011&\025^\027z\020z\n\r\017\134\011*\018\238\026\"\005\138\020\"\006&\t1\011:\020~\001\154\020\130\014\250\006i\001\242\020\134\012B\011B\027~\012F\0062\020\138\012J\016\146\n\001\027\130\016\178\000~\023\230\012^\020\150\ry\t\253\012n\020\154\rA\015\218\ra\002\002\006^\020\158\025\146\014\014\011~\006n\016:\011~\014\"\012\162\025\190\025\202\016n\014&\017\202\017&\017Z\020\162\002&\017n\002*\004\181\n\r\001\162\015\210\014.\000\190\n1\n1\012\186\0022\0142\n1\ri\012\190\006\238\002:\020*\006v\006\150\012\194\012\198\011V\011Z\012\202\0146\006\162\006\170\020\166\006\186\014:\020\170\006\206\006y\023\014\027\138\017\138\000\198\t\154\026.\023\170\006\254\012\206\t!\020\174\014>\014B\012\210\014F\020\178\000\n\020\182\014Z\020\186\020\190\004\145\020\194\026N\014f\012\218\007\026\002\157\015\218\020\198\000\202\007j\020\202\027\150\027\146\007v\025\222\028\154\028\174\015\"\000\206\024\026\007\166\015&\015r\004\181\011^\020\206\006!\012\222\007\174\015v\020\210\020\214\027\154\012\230\004\181\004\181\n1\n1\b>\004\181\015~\n1\012\234\000\n\006\193\006\193\bz\012\242\002~\006\193\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\b\138\000v\025Z\000\182\011\"\000\186\001\146\001\150\000z\011&\025^\b\146\000\n\029\003\b\158\011*\b\170\002\233\b\182\b\210\004\198\002\233\011:\b\222\001\154\b\230\b\238\b\254\001\242\005\241\012B\011B\t\n\012F\t\022\t&\012J\t2\tF\tV\t^\000~\tb\012^\t\158\t\166\t\253\t\182\001\238\t\190\t\194\t\202\002\002\t\242\000\190\012n\t\246\t\254\n\014\n\030\nF\014\"\012\162\025\190\014\014\nj\014&\018\018\nv\n\147\0176\002&\n\178\002*\004\197\n\250\001\162\015\210\014.\011.\0116\011>\012\186\0022\0142\000\198\017:\012\190\006\238\002:\011F\011N\011R\012\194\012\198\011V\011Z\012\202\0146\011z\011\142\011\154\015\214\014:\011\162\011\166\011\174\011\194\011\190\011\206\011\214\011\218\000\202\011\198\006\254\012\206\011\238\011\246\014>\014B\012\210\014F\000\206\000\n\005\241\014Z\012\014\012\022\004\145\012*\027\254\014f\012\218\0122\012>\012V\012j\012v\012~\012\134\012\142\012\170\012\178\015\218\005\241\r\026\015\"\000\n\005\241\r&\015&\015r\r^\011^\r\142\014\006\012\222\014J\015v\014R\014b\014j\012\230\014\138\004\197\014\150\014\158\014\162\014\170\015~\014\186\012\234\014\206\006\209\006\209\000\190\012\242\002~\006\209\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\014\234\000v\025Z\000\182\011\"\000\186\001\146\001\150\000z\011&\025^\015\002\015\014\000\198\026>\011*\015\022\015\030\015n\006\177\015z\015\130\011:\015\142\001\154\006\177\006\177\015\146\001\242\015\154\012B\011B\015\158\012F\015\166\015\174\012J\028\022\015\182\015\190\000\202\000~\015\230\012^\016*\0162\t\253\006\169\000\190\016B\000\206\016R\002\002\006\169\006\169\012n\016Z\016^\016f\016v\016~\012\158\012\162\006\177\014\014\006\169\014&\016\134\016\138\016\154\016\162\002&\016\186\002*\004\225\000\n\001\162\014*\014.\000\198\011\150\016\194\012\186\0022\0142\016\254\017\006\012\190\006\238\002:\017\022\006\169\017\030\012\194\012\198\011V\011Z\012\202\0146\017.\017>\011\194\014\173\014:\017F\017J\000\202\011\198\017R\017b\017v\017\146\017\178\002\233\006\254\012\206\000\206\002\233\014>\014B\012\210\014F\017\250\000\n\018\006\014Z\018z\018\134\004\145\018\166\018\210\014f\012\218\018\222\018\230\018\250\019\018\019\030\019.\019F\019V\000\n\019b\015\218\019\147\019\187\015\"\019\211\019\255\020\023\015&\015r\004\225\011^\0207\020O\012\222\020g\015v\020r\020\146\020\254\012\230\004\225\004\225\021\014\021?\021\150\004\225\015~\000\190\012\234\000\190\n9\n9\021\171\012\242\002~\n9\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\021\211\000v\021\223\000\182\011\"\000\186\001\146\001\150\000z\011&\000\198\014\146\021\239\021\247\015*\011*\022\018\022\027\022#\022+\004y\022F\011:\022W\001\154\022z\022\130\022\146\001\242\022\175\012B\011B\011\194\012F\022\191\000\202\012J\000\202\011\198\022\199\027f\000~\b9\012^\022\218\000\206\t\253\000\206\022\227\022\235\022\243\022\254\002\002\023#\023/\012n\b9\023B\023K\023S\023[\012\158\012\162\023~\014\014\023\135\014&\023\143\023\194\023\242\000\n\002&\000\n\002*\0242\024S\001\162\014*\014.\024[\024g\024w\012\186\0022\0142\024\127\024\139\012\190\006\238\002:\015.\024\150\024\166\012\194\012\198\011V\011Z\012\202\0146\024\179\024\187\024\194\003\165\014:\024\207\024\219\024\227\024\239\024\251\025\022\025\158\025\198\002q\b9\006\254\012\206\027\214\025\214\014>\014B\012\210\014F\026\n\000\n\026\018\014Z\027\234\026B\026j\026n\004y\014f\012\218\028B\026v\027\238\004y\004y\026\163\027j\003\165\027v\027\134\015\218\027\142\027\203\015\"\027\211\004y\004y\015&\015r\027\218\011^\027\231\027\242\012\222\028\002\015v\0287\028F\028S\012\230\028w\028\147\028\162\b9\028\170\028\182\015~\028\194\012\234\028\207\028\214\004y\028\222\012\242\002~\b9\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\028\231\000v\n\001\000\182\011\"\000\186\001\146\001\150\000z\011&\028\238\012n\028\247\029\011\000\000\011*\000\000\000\000\000\000\003\165\014\014\000\000\011:\000\000\001\154\003\165\003\165\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\003\165\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\t\253\000\000\000\000\000\000\000\000\000\000\002\002\000\000\003\165\012n\000\000\000\000\014\165\000\000\000\000\012\158\012\162\003\165\014\014\027\170\014&\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\014*\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\015\218\000\000\000\000\014\173\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\000\000\014\165\014\165\014f\012\218\000\000\014\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\218\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\014\173\014\173\000\000\012\242\002~\014\173\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\025Z\000\182\011\"\000\186\001\146\001\150\000z\011&\025^\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\000\000\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\t\253\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\"\012\162\000\000\000\000\000\000\014&\026\238\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\003\177\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\004\145\000\000\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\027\162\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\n\029\n\029\000\000\012\242\002~\n\029\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\003\173\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\003\177\000\000\000\000\011:\000\000\001\154\003\177\003\177\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\003\177\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\t\253\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\"\012\162\003\177\000\000\027\170\014&\015\238\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\014\137\014:\000\000\000\000\000\000\000\000\000\000\000\000\003\173\000\000\000\000\000\000\006\254\012\206\003\173\003\173\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\003\173\027r\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\003\173\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\014\137\014\137\000\000\012\242\002~\014\137\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\000\000\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\t\253\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\"\012\162\000\000\000\000\000\000\014&\025\162\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\000\000\000\000\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\014\213\014\213\000\000\012\242\002~\014\213\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\000\000\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\t\253\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\"\012\162\000\000\000\000\000\000\014&\025\162\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\000\000\000\000\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\014\209\014\209\000\000\012\242\002~\014\209\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\011\026\000\000\000\000\000\000\000~\011\030\012^\000\000\000\000\t\253\025n\000\000\011\"\000\000\000\000\002\002\000\000\011&\025r\000\000\000\000\000\000\000\000\000\000\014\"\012\162\000\000\000\000\000\000\014&\018F\000\000\000\000\000\000\002&\000\000\002*\000\000\000\190\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\016J\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\198\016N\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\011\194\000\000\000\000\014f\012\218\000\202\011\198\b1\000\000\000\000\000\000\n\001\000\000\000\000\000\000\000\206\000\000\000\000\015\"\000\000\012n\b1\015&\015r\000\000\011^\000\000\000\000\012\222\014\014\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\n\015~\000\000\012\234\000\000\004\165\000\000\000\000\012\242\002~\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\b1\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\011\026\000\000\000\000\000\000\000~\011\030\012^\015\218\000\000\t\253\025n\000\000\011\"\000\000\000\000\002\002\000\000\011&\025r\000\000\000\000\000\000\000\000\000\000\019\218\012\162\000\000\000\000\000\000\014&\b1\000\000\000\000\000\000\002&\000\000\002*\000\000\000\190\001\162\000\000\014.\b1\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\016J\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\198\016N\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\011\194\000\000\000\000\014f\012\218\000\202\011\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\n\015~\000\000\012\234\000\000\004\165\000\000\000\000\012\242\002~\000R\000V\000Z\000\146\000\000\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\rQ\rQ\000\000\000\000\000\000\000\000\000\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\007\229\007\229\001\242\000\000\012B\007\229\016J\001\246\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\t\245\000\198\016N\000\000\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\004R\002\026\002\022\000\000\002\030\000\000\000\000\000\000\000\000\011\194\000\000\002&\000\000\002*\000\202\011\198\001\162\005z\000\000\000\000\005\130\000\000\002.\0022\000\206\000\000\000\000\0026\001\"\002:\rQ\000\000\000\000\002>\002B\011V\014n\002F\002J\000\000\000\000\000\000\000\000\005\146\005\154\000\000\000\000\000\000\000\000\000\n\rQ\000\000\000\000\000\000\000\190\002N\000\000\000\000\005\162\000\000\002R\rQ\002E\000\n\005\170\005\178\000\000\rQ\rQ\000\000\0176\000\000\002Z\000\000\005\186\000\000\000\000\005\194\000\000\005\202\000\000\000\000\000\000\002^\000\000\000\198\017:\000\000\000\000\000\000\006I\000\000\000\022\011^\000\000\000\000\002b\000\000\004R\rQ\000\000\000\000\002n\000\000\rQ\rQ\005\210\011\194\000\000\000\000\000\000\002\134\000\202\011\198\000\000\000\000\002v\002~\000R\000V\000Z\000\146\000\206\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\005\218\000\n\000\000\002E\000\000\000\000\000\000\005\226\000\000\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\000\000\000\000\012F\000\000\002E\012J\000\000\000\000\002E\002E\000~\000\000\018\198\000\000\000\000\t\253\000\000\000\000\000\000\005\234\005\242\002\002\000\000\000\000\000\000\006I\000\000\000\000\000\000\000\000\018\214\012\162\000\000\000\000\001\t\000\000\000\000\001\t\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\000\000\000\000\000\000\000\000\000\000\012\186\0022\000\000\000\000\000\000\012\190\001\"\002:\000\000\002\242\003\026\012\194\012\198\011V\014n\012\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\001\t\000\000\001\t\001\t\006\254\012\206\000\000\000\000\000\000\000\000\012\210\000\000\003\"\000\n\000\000\003\002\000\000\003\018\000\000\000\000\r\185\000\000\012\218\000\000\000\000\r\185\000\000\000j\r\185\000r\r\185\000\000\r\185\000\000\000\178\000\000\000\000\r\185\r\185\000\000\r\185\000\000\000\000\011^\003*\000\000\012\222\000\000\018\218\000\000\000\000\r\185\012\230\r\185\000\000\000\000\000\000\r\185\r\185\018\226\000\000\012\234\000\000\r\185\000\000\000\000\012\242\002~\000\000\r\185\r\185\000\000\r\185\000\000\r\185\000\000\r\185\000\000\000\000\000\000\000\000\000\000\r\185\000\000\0032\000\000\000\000\001\t\000\000\r\185\r\185\003\n\000\000\r\185\000\000\000\000\000\000\000\000\r\185\r\185\000\000\007\198\r\185\000\000\r\185\001\t\000\000\000\000\000\000\001\t\001\t\r\185\000\000\000\000\000\000\000\000\r\185\r\185\000\000\000\000\001\t\003:\000\000\000\000\000\000\000\000\r\185\007\206\007\214\r\185\r\185\000\000\r\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\185\007\222\000\000\000\000\r\185\000\000\000\000\007\230\007\238\r\185\r\185\r\185\000\000\r\185\r\185\r\185\r\185\007\246\000\000\000\000\007\254\000\000\b\006\r\185\000\000\r\165\r\185\000\000\000\000\000\000\r\165\000\000\000\000\r\165\000b\r\165\000\000\r\165\000\000\000\000\000\000\r\185\r\165\r\165\000\000\r\165\r\185\r\185\r\185\b\014\000\000\r\185\r\185\000\000\000\000\r\185\r\165\000\000\r\165\000\000\r\185\r\185\r\165\r\165\000\000\r\185\000\000\000\000\r\165\000\000\000\000\000\000\000\000\000\000\r\165\r\165\000\000\r\165\000\000\r\165\000\000\r\165\000\000\000\000\000\000\000\000\000\000\r\165\000\000\b\022\000\000\000\000\000\000\000\000\r\165\r\165\b\030\000\000\r\165\000\000\000\000\000\000\000\000\r\165\r\165\000\000\000\205\r\165\000\000\r\165\005]\000\000\000\000\000\000\000\000\000\000\r\165\005]\000\000\000\000\000\000\r\165\r\165\000\000\000\000\b&\b.\000\000\000\000\000\000\000\000\r\165\002\242\003\026\r\165\r\165\000\000\r\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\165\002\250\000\000\000\000\r\165\000\000\000\000\000\205\000\205\r\165\r\165\r\165\000\000\r\165\r\165\r\165\r\165\003\"\000\000\000\000\003\002\000\000\003\018\r\165\000\000\r\193\r\165\000\000\000\000\000\000\r\193\000\000\000\000\r\193\000n\r\193\000\000\r\193\000\000\000\000\000\000\r\165\r\193\r\193\000\000\r\193\r\165\r\165\r\165\003*\000\000\r\165\r\165\000\000\000\000\r\165\r\193\000\000\r\193\000\000\r\165\r\165\r\193\r\193\000\000\r\165\000\000\000\000\r\193\000\000\000\000\000\000\000\000\000\000\r\193\r\193\000\000\r\193\000\000\r\193\000\000\r\193\000\000\000\000\000\000\000\000\000\000\r\193\000\000\0032\000\000\000\000\000\000\000\000\r\193\r\193\003\n\000\000\r\193\000\000\000\000\000\000\000\000\r\193\r\193\000\000\000\181\r\193\000\000\r\193\000\205\000\000\000\000\000\000\000\000\000\000\r\193\000\205\000\000\000\000\000\000\r\193\r\193\000\000\000\000\000\205\003:\000\000\000\000\000\000\000\000\r\193\000\181\000\181\r\193\r\193\000\000\r\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\193\002\250\000\000\000\000\r\193\000\000\000\000\000\181\000\181\r\193\r\193\r\193\000\000\r\193\r\193\r\193\r\193\000\181\000\000\000\000\003\002\000\000\003\018\r\193\000\000\b\137\r\193\000\000\000\000\000\000\b\137\000\000\000\000\b\137\000\000\b\137\000\000\b\137\000\000\000\000\000\000\r\193\b\137\b\137\000\000\b\137\r\193\r\193\r\193\000\181\000\000\r\193\r\193\000\000\000\000\r\193\b\137\000\000\b\137\000\000\r\193\r\193\b\137\b\137\000\000\r\193\000\000\000\000\b\137\000\000\000\000\000\000\000\000\000\000\b\137\b\137\000\000\b\137\000\000\b\137\000\000\b\137\000\000\000\000\000\000\000\000\000\000\b\137\000\000\000\181\000\000\000\000\000\000\000\000\b\137\b\137\003\n\000\000\b\137\001\134\000\000\000\000\000\000\b\137\b\137\000\000\000\177\b\137\000\000\b\137\000\181\000\000\000\000\000\000\000\000\000\000\b\137\000\181\000\000\000\000\000\000\b\137\b\137\000\000\000\000\000\181\000\181\000\000\000\000\000\000\000\000\b\137\000\177\000\177\b\137\b\137\000\000\b\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\137\002\250\000\000\000\000\b\137\000\000\000\000\000\177\000\177\b\137\b\137\b\137\000\000\b\137\b\137\b\137\b\137\000\177\000\000\000\000\003\002\000\000\003\018\b\137\000\000\r\177\b\137\000\000\000\000\000\000\r\177\000\000\000\000\r\177\000\000\r\177\000\000\r\177\000\000\000\000\000\000\b\137\r\177\r\177\000\000\r\177\b\137\b\137\b\137\000\177\000\000\b\137\b\137\000\000\000\000\b\137\r\177\000\000\r\177\000\000\b\137\b\137\r\177\r\177\000\000\b\137\000\000\000\000\r\177\000\000\000\000\000\000\000\000\000\000\r\177\r\177\000\000\r\177\000\000\r\177\000\000\r\177\000\000\000\000\000\000\000\000\000\000\r\177\000\000\000\177\000\000\000\000\000\000\000\000\r\177\r\177\003\n\000\000\r\177\001\166\000\000\000\000\000\000\r\177\r\177\000\000\000\169\r\177\000\000\r\177\000\177\000\000\000\000\000\000\000\000\000\000\r\177\000\177\000\000\000\000\000\000\r\177\r\177\000\000\000\000\000\177\000\177\000\000\000\000\000\000\000\000\r\177\000\169\000\169\r\177\r\177\000\000\r\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\177\000\169\000\000\000\000\r\177\000\000\000\000\000\169\000\169\r\177\r\177\r\177\000\000\r\177\r\177\r\177\r\177\000\169\000\000\000\000\003\002\000\000\000\169\r\177\000\000\b\149\r\177\000\000\000\000\000\000\b\149\000\000\000\000\b\149\000\000\b\149\000\000\b\149\000\000\000\000\000\000\r\177\b\149\b\149\000\000\b\149\r\177\r\177\r\177\000\169\000\000\r\177\r\177\000\000\000\000\r\177\b\149\000\000\b\149\000\000\r\177\r\177\b\149\b\149\000\000\r\177\000\000\000\000\b\149\000\000\000\000\000\000\000\000\000\000\b\149\b\149\000\000\b\149\000\000\b\149\000\000\b\149\000\000\000\000\000\000\000\000\000\000\b\149\000\000\000\169\000\000\000\000\000\000\000\000\b\149\b\149\003\n\000\000\b\149\n>\000\000\000\000\000\000\b\149\b\149\000\000\000\000\b\149\000\000\b\149\000\169\000\000\000\000\000\000\000\000\000\000\b\149\000\169\000\000\000\000\000\000\b\149\b\149\000\000\000\000\000\169\000\169\000\000\000\000\000\000\000\000\b\149\000\000\000\000\b\149\b\149\000\000\b\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\149\000\000\000\000\000\000\b\149\000\000\000\000\000\000\000\000\b\149\b\149\b\149\000\000\b\149\b\149\b\149\b\149\000\000\000\000\000\000\000\000\000\000\000\000\b\149\000\000\000\000\b\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\149\000\000\000\000\000\000\000\000\b\149\b\149\b\149\000\000\000\000\b\149\b\149\000\000\000\000\b\149\000\000\000\000\000\000\000\000\b\149\b\149\000\000\000\000\000\000\b\149\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\002\n\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\162\004\146\000\000\002\030\000\000\000\000\005*\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\001\241\000\000\000\000\001\241\000\000\004\206\0022\000\000\000\000\000\000\004\210\001\"\002:\000\000\000\000\005.\004\214\004\218\000\000\000\000\004\222\002J\000\000\000\000\000\000\000\000\001\241\001\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\226\000\000\000\000\001\241\000\000\004\230\000\000\001\241\000\n\001\241\001\241\000\000\000\000\000\000\000\000\000\000\000\000\004\238\000\000\001\241\000\000\000\000\001\241\000\000\001\241\000\000\000\000\000\000\0052\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\242\000\000\000\000\000\000\000\000\000\000\004\250\000\000\000\000\004\t\001\241\000\000\000\000\004\001\000\000\004\254\000\000\004\001\000\000\000\000\005\006\002~\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\004\001\000\000\000\000\000\000\000\000\001\241\005B\000\000\001\241\000\000\000\000\000\000\001\241\000\000\000\000\001\154\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\002\n\000\000\001\241\002\014\004\001\000\000\001\241\001\241\000~\000\000\000\000\000\000\000\000\005J\000\000\004\001\000\000\001\241\001\241\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\162\004\146\000\000\002\030\000\000\000\000\005*\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\000\000\004\001\004\001\000\000\000\000\004\206\0022\000\000\000\000\000\000\004\210\001\"\002:\000\000\000\000\005.\004\214\004\218\000\000\003J\004\222\002J\004\001\004\001\000\000\004\001\000\000\000\000\000\000\000\000\000\000\004\001\004\001\000\000\000\000\015!\004\001\000\000\004\226\000\000\000\000\000\000\000\000\004\230\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\238\000\000\000\000\000\000\000\000\000\000\015!\015!\000\000\000\000\000\000\0052\000\000\000\000\007Z\000\000\000\000\000\000\000\000\000\000\000\000\015!\000\000\000\000\004\242\000\000\000\000\015!\015!\000\000\004\250\007b\000\000\b\181\007n\000\000\000\000\015!\000\000\004\254\015!\000\000\015!\000\000\005\006\002~\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\015!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\001\242\007z\000\190\000\000\000\000\002\n\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015!\000\000\000\000\002\002\000\000\007~\002\006\015!\000\000\000\000\000\000\000\000\002\162\004\146\000\000\002\030\007\134\000\000\005*\000\000\000\000\015!\002&\000\000\002*\000\000\000\000\001\162\015!\000\000\000\000\000\000\000\000\004\206\0022\000\000\015!\015!\004\210\001\"\002:\000\000\000\000\005.\004\214\004\218\000\000\000\000\004\222\002J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\241\000\000\000\000\000\241\000\000\000\000\000\000\000\000\004\226\000\000\000\000\000\000\000\000\004\230\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\238\000\241\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0052\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\000\241\000\000\000\241\000\241\004\242\000\000\000\000\000\000\000\000\000\000\004\250\000\000\000\241\002a\000\000\003\002\000\000\003\018\000\000\004\254\000\000\000\000\000\000\000\000\005\006\002~\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\241\000\186\001\146\001\150\000z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\002\n\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\241\000\000\000\000\000\241\000\000\000\000\000\000\003\n\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\162\004\146\000\000\002\030\000\241\000\000\005:\000\000\000\241\000\241\002&\000\000\002*\000\000\000\000\001\162\000\000\000\000\000\000\000\241\000\241\004\206\0022\000\000\000\000\000\000\004\210\001\"\002:\000\000\000\000\005.\004\214\004\218\000\000\000\000\004\222\002J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\226\000\000\000\000\000\000\000\000\004\230\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000R\000V\000Z\000\146\004\238\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000\000\000\000\004\242\000\000\000\000\000\000\000\000\000\000\004\250\000\000\000\000\b\197\001\154\000\000\000\000\000\000\001\242\004\254\000\190\000\000\000\000\001\246\005\006\002~\001\250\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\026\002\022\000\000\002\030\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\000\000\000\000\000\000\000\000\000\000\002.\0022\000\000\000\000\000\000\0026\001\"\002:\000\000\000\000\000\000\002>\002B\000\000\000\000\002F\002J\000\000\000V\004^\000\146\000\000\000\150\000\000\000\154\000\158\004b\000^\000\000\000\170\000\174\000\000\000v\002N\000\182\000\000\000\186\001\146\002R\000z\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Z\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\002^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000~\000\000\002b\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\002v\002~\001\149\001\149\001\149\001\149\000\000\001\149\005\233\001\149\001\149\001\149\001\149\001\162\001\149\001\149\000\000\001\149\000\000\001\149\005\233\001\149\001\149\001\149\001\149\000\000\000\000\000\000\000\000\020Z\000\000\005\233\000\000\005\233\000\000\000\000\000\000\005\233\005\233\001\149\001\149\001\149\000\000\005\233\000\000\020^\000\000\000\000\000\000\005\233\000\000\001\149\005\233\000\000\000\000\000\000\005\233\001\149\000\000\000\000\001\149\000\000\005\233\000\000\001\149\000\000\000\000\020j\000\000\000\000\001\149\000\000\000\000\005\233\000\000\000\000\000\000\001\149\005\233\011\006\000\000\000\000\001\149\000\000\005\233\000\000\000\000\000\000\000\000\000\000\000\000\001\149\001\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\233\000\000\000\000\005\233\000\000\000\000\005\233\000\000\001\149\000\000\000\000\001\149\000\000\000\000\001\149\000\000\000\000\000\000\000\000\005\233\000\000\000\000\000\000\000\000\005\233\005\233\005\233\001\149\005\233\005\233\000\000\005\233\001\149\000\000\001\149\000\000\000\000\001\149\005\233\020n\000\000\005\233\000\000\000\000\001\149\000\000\001\149\000\000\000\000\001\149\000\000\000\000\000\000\000\000\000\000\000\000\005\233\000\000\000\000\000\000\000\000\005\233\005\233\000\000\001\149\001\149\000\000\000\000\000\000\001\149\001\149\000\000\000\000\000\000\000R\000V\004^\000\146\000\000\000\150\021B\000\154\000\158\004b\000^\000\000\000\170\000\174\020v\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\001\154\020\130\000\000\000\000\000\000\020\134\000\000\000\000\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\024\146\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\n\166\000\000\000\000\000\000\000\000\022.\000\000\000\000\000\000\020\162\023\154\000\000\000\000\011*\000\000\001\162\000\000\000\000\000\000\000\000\011:\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\011B\000\000\012F\000\000\000\000\012J\000\000\000\000\n\210\000\000\000\000\020\166\012^\000\000\020\170\t\253\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\020\174\000\000\000\000\014V\012\162\020\178\000\n\020\182\014&\020\186\020\190\000\000\020\194\002&\000\000\002*\000\000\000\000\000\000\020\198\014.\000\000\020\202\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\020\206\000\000\012\202\0146\000\000\020\210\020\214\000\000\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\000\000\000\000\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\011*\000\000\000\000\000\000\012\222\000\000\015v\011:\000\000\000\000\012\230\000\000\000\000\001\242\000\000\000\190\011B\015~\012F\012\234\000\000\012J\011\026\000\000\012\242\002~\000\000\011\030\012^\000\000\000\000\t\253\025n\000\000\011\"\000\000\000\000\002\002\000\000\011&\025r\000\000\000\000\000\000\000\000\000\000\012\182\012\162\000\000\000\000\000\000\014&\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\190\000\000\000\000\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\016J\000\000\012\194\012\198\000\000\000\000\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\198\016N\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\011\194\000\000\000\000\014f\012\218\000\202\011\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\000\000\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\n\015~\000\000\012\234\000\000\004\165\000\000\000\000\012\242\002~\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\ni\ni\001\242\000\000\000\190\ni\000\000\012F\000\000\000\000\012J\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\218\012\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\197\000\000\000\000\015\197\000\000\012\186\0022\000\000\000\000\000\000\012\190\001\"\002:\000\000\000\000\000\000\012\194\012\198\000\000\012\149\012\202\000\000\000\000\000\000\000\000\000\000\015\197\015\197\000\000\000\000\000\000\015\197\000\000\000\000\015\197\015\197\000\000\006\254\012\206\000\000\000\000\015\197\000\000\012\210\015\197\015\197\000\n\015\197\015\197\000\000\012\149\015\197\000\000\015\197\015\197\012\218\000\000\015\197\000\000\000\000\015\197\000\000\015\197\015\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\149\000\000\012\222\000\000\000\000\000\000\000\000\000\000\012\230\000\000\012\149\000\000\015\197\000\000\015\197\000\000\000\000\012\234\000\000\000\000\000\000\000\000\012\242\002~\000\000\015\197\000\000\000\000\000\000\000\000\000\000\000\000\015\197\000\000\000\000\012\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\197\015\197\000\000\015\197\015\197\015\197\000\000\015\197\000\000\000\000\000\000\000\000\000\000\000\000\005\t\000\000\015\197\005\t\000\000\000\000\005\t\015\197\000\000\005\t\015\197\000\000\015\197\000\000\000\000\000\000\000\000\000\000\015\197\015\197\015\197\000\000\015\197\015\197\015\197\012\145\005\t\005\t\000\000\000\000\000\000\000\000\005\t\005\t\005\t\005\t\000\000\005\t\000\000\000\000\005\t\005\t\000\000\000\000\000\000\000\000\000\000\005\t\005\t\000\000\005\t\005\t\000\000\005\t\005\t\000\000\012\145\005\t\000\000\005\t\005\t\000\000\005\t\005\t\000\000\000\000\005\t\000\000\005\t\005\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\145\000\000\000\000\000\000\000\000\000\000\005\t\000\000\000\000\000\000\012\145\000\000\005\t\000\000\005\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\t\005\t\000\000\000\000\000\000\000\000\000\000\005\t\000\000\000\000\012\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\t\005\t\000\000\000\000\007\137\005\t\005\t\005\t\000\000\005\t\007\137\005\t\000\000\005\t\000\000\000\000\005\t\000\000\000\000\000\000\000\000\005\t\005\t\000\000\005\t\000\000\000\000\005\t\005\t\000\000\005\t\000\000\005\t\000\000\000\000\000\000\005\t\005\t\005\t\005\t\005\t\000\000\005\t\005\t\005\t\012\001\012\001\012\001\012\001\000\000\012\001\000\000\012\001\012\001\012\001\012\001\000\000\012\001\012\001\000\000\012\001\000\000\012\001\000\000\012\001\012\001\012\001\012\001\000\000\000\000\015u\000\000\000\000\015u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\001\012\001\012\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\001\000\000\015u\015u\000\000\000\000\012\001\015u\000\000\021R\002\150\015u\000\000\021Z\000\000\000\000\000\000\015u\000\000\012\001\015u\015u\000\000\015u\015u\000\000\012\001\002\158\000\000\015u\002\178\012\001\000\000\015u\000\000\000\000\015u\000\000\015u\015u\012\001\012\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\001\000\000\015u\012\001\015u\000\000\012\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015u\000\000\000\000\000\000\012\001\000\000\000\000\004\014\000\000\012\001\000\000\012\001\000\000\000\000\012\001\000\000\000\000\000\000\000\000\000\000\000\000\012\001\000\000\012\001\000\000\000\000\012\001\015u\015u\000\000\015u\015u\004\018\000\000\015u\000\000\000\000\000\000\000\000\000\000\000\000\012\001\012\001\004\026\000\000\000\000\021\174\012\001\015u\000\000\000\000\015u\015u\015u\015u\015u\000\000\000\000\000\000\015u\015u\015u\000\000\015u\015u\015u\015\005\000\000\000\000\015\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\005\015\005\000\000\000\000\000\000\015\005\000\000\000\000\002\150\015\005\000\000\000\000\000\000\000\000\000\000\015\005\000\000\000\000\015\005\015\005\000\000\015\005\015\005\000\000\000\000\002\158\000\000\015\005\002\178\000\000\000\000\015\005\000\000\000\000\015\005\000\000\015\005\015\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\005\000\000\015\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\005\011\241\011\241\011\241\011\241\000\000\011\241\004\014\011\241\011\241\011\241\011\241\000\000\011\241\011\241\000\000\011\241\000\000\011\241\000\000\011\241\011\241\011\241\011\241\000\000\000\000\000\000\015\005\015\005\000\000\015\005\015\005\004\018\000\000\015\005\000\000\000\000\000\000\011\241\011\241\011\241\000\000\000\000\004\026\000\000\000\000\000\000\000\000\015\005\000\000\011\241\015\005\015\005\015\005\015\005\015\005\011\241\000\000\000\000\015\005\015\005\015\005\000\000\015\005\015\005\015\005\000V\004^\000\146\011\241\000\150\000\000\000\154\000\158\004b\000^\011\241\000\170\000\174\000\000\000v\011\241\000\182\000\000\000\186\001\146\000\000\000z\000\000\000\000\011\241\011\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\001\170\000\000\000\000\000\000\011\241\000\000\000\000\011\241\000\000\000\000\011\241\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\241\000\000\000\000\000\000\000\000\011\241\000\000\011\241\000\000\000\000\011\241\000\000\000\000\000\000\000\000\000\000\000\000\011\241\000\000\011\241\000\000\000\000\011\241\001\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\241\011\241\000\000\000\000\000\000\021V\011\241\011\245\011\245\011\245\011\245\000\000\011\245\000\000\011\245\011\245\011\245\011\245\000\000\011\245\011\245\000\000\011\245\000\000\011\245\000\000\011\245\011\245\011\245\011\245\000\000\000\000\005\017\000\n\000\000\005\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\245\011\245\011\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\245\000\000\005\017\005\017\000\000\000\000\011\245\005\017\000\000\021\178\005\017\005\017\000\000\000\000\000\000\000\000\000\000\005\017\000\000\011\245\005\017\005\017\000\000\005\017\005\017\000\000\011\245\005\017\000\000\005\017\005\017\011\245\000\000\005\017\000\000\000\000\005\017\000\000\005\017\005\017\011\245\011\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\245\000\000\005\017\011\245\005\017\000\000\011\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\017\000\000\000\000\000\000\011\245\000\000\000\000\005\017\000\000\011\245\000\000\011\245\000\000\000\000\011\245\000\000\000\000\000\000\000\000\000\000\000\000\011\245\000\000\011\245\000\000\000\000\011\245\005\017\005\017\000\000\005\017\007\149\005\017\000\000\005\017\000\000\000\000\000\000\000\000\000\000\000\000\011\245\011\245\005\017\000\000\000\000\005\r\011\245\005\017\005\r\000\000\005\017\000\000\005\017\000\000\005\017\000\000\000\000\000\000\005\017\005\017\005\017\000\000\005\017\005\017\005\017\000\000\000\000\000\000\000\000\000\000\000\000\005\r\005\r\000\000\000\000\000\000\005\r\000\000\000\000\005\r\005\r\000\000\000\000\000\000\0159\000\000\005\r\000\000\000\000\005\r\005\r\000\000\005\r\005\r\000\000\000\000\005\r\000\000\005\r\005\r\000\000\000\000\005\r\000\000\000\000\005\r\000\000\005\r\005\r\000\000\0159\0159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0159\000\000\000\000\000\000\000\000\000\000\0159\0159\000\000\005\r\000\000\005\r\000\000\000\000\004\198\000\000\0159\000\000\000\000\0159\000\000\0159\005\r\000R\000V\004^\000\146\000\000\000\150\005\r\000\154\000\158\004b\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\0159\005\r\005\r\000\000\005\r\007\141\005\r\000\000\005\r\000\000\000\000\000\000\021\186\001\154\021\214\000\000\000\000\005\r\000\000\000\000\000\000\000\000\005\r\000\000\021\226\005\r\000\000\005\r\000\000\005\r\000~\000\000\000\000\005\r\005\r\005\r\000\000\005\r\005\r\005\r\0159\000\000\000\000\021\250\000\000\000\000\000\000\0159\000\000\000\000\n\166\000\000\000\000\000\000\000\000\022.\000\000\000\000\000\000\000\000\000\000\0159\000\000\000\000\022N\001\162\000\000\000\000\0159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0159\0159\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\004\170\n\210\000\000\004\174\022Z\000\000\000\000\022\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\022\202\000\000\004\202\000\000\000\000\022\246\000\000\t\229\006\142\006\154\023&\006\178\006\190\006\214\006\218\000\000\000\000\0232\002&\023^\002*\000\000\024^\000\000\000\000\000\000\000\000\000\000\000\000\006\222\0022\000\000\006\226\006\230\006\234\006\238\002:\024j\024\130\000\000\006\242\006\246\000\000\024\142\006\250\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\011\026\000\000\000\000\007\006\000\000\011\030\000\n\000\000\000\000\000\000\025n\000\000\011\"\000\000\000\000\007\014\000\000\011&\025r\000\000\000\000\000\000\000\000\000\000\006\t\000\000\007\018\000\000\007\"\001\242\000\000\000\190\000\000\000\000\004\170\000\000\000\000\004\174\000\190\007*\000\000\000\000\000\000\000\000\000\000\0072\000\000\000\000\000\000\000\000\000\000\004\025\000\000\002\002\0076\000\000\004\202\000\000\000\000\007>\002~\000\000\006\142\006\154\000\000\006\178\006\190\006\214\006\218\000\198\011\150\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\222\0022\000\000\006\226\006\230\006\234\006\238\002:\011\194\000\000\000\000\006\242\006\246\000\202\011\198\006\250\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\000\000\000\000\000\000\007\006\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\007\014\000\000\000\000\004\165\000\000\000\000\000\000\000\000\000\000\006\t\000\000\007\018\000\000\007\"\001\242\000\000\000\190\000\000\000\000\004\170\000\000\000\000\004\174\000\000\007*\000\000\000\000\000\000\000\000\000\000\0072\000\000\000\000\000\000\000\000\000\000\t\t\000\000\002\002\0076\000\000\004\202\000\000\000\000\007>\002~\000\000\006\142\006\154\000\000\006\178\006\190\006\214\006\218\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\222\0022\000\000\006\226\006\230\006\234\006\238\002:\000\000\000\000\000\000\006\242\006\246\000\000\000\000\006\250\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\000\000\000\000\000\000\007\006\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\t\000\000\007\018\000\000\007\"\001\242\000\000\000\190\000\000\000\000\004\170\000\000\000\000\004\174\000\000\007*\000\000\000\000\000\000\000\000\000\000\0072\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\002\0076\000\000\004\202\000\000\000\000\007>\002~\000\000\006\142\006\154\000\000\006\178\006\190\006\214\bV\000\000\003\146\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\222\0022\000\000\006\226\006\230\006\234\006\238\002:\000\000\000\000\000\000\006\242\006\246\002\242\003\026\006\250\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\006\254\007\002\000\213\003\154\000\000\000\000\007\006\000\000\000\000\000\n\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\007\014\000\000\015\141\000\000\000\000\015\141\000\000\000\000\000\000\006\t\000\000\000\000\000\000\007\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007*\000\000\003*\000\000\015\141\015\141\0072\000\000\000\000\015\141\000\000\000\000\t\025\015\141\000\000\0076\000\000\000\000\000\000\015\141\007>\002~\015\141\015\141\000\000\015\141\015\141\000\000\000\000\000\000\000\000\015\141\000\000\004\198\000\000\015\141\000\000\000\000\015\141\000\000\015\141\015\141\0032\000\000\000\000\000\000\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\000\015\141\000\000\015\141\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\162\003:\015\141\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\025Z\000\182\011\"\000\186\001\146\001\150\000z\011&\025^\000\000\015\141\015\141\000\000\015\141\015\141\000\000\000\000\015\141\000\000\000\000\000\000\000\000\001\154\015\029\000\000\000\000\015\029\000\000\001\170\000\000\000\000\015\141\000\000\000\000\015\141\015\141\015\141\015\141\015\141\000~\000\000\000\000\015\141\015\141\015\141\000\000\015\141\015\141\015\141\015\029\015\029\000\000\000\000\000\000\015\029\000\000\000\000\000\000\015\029\001\158\000\000\000\000\000\000\000\000\015\029\000\000\000\000\015\029\015\029\000\000\015\029\015\029\000\000\000\000\001\162\000\000\015\029\000\000\004\198\000\000\015\029\000\000\000\000\015\029\000\000\015\029\015\029\000\000\000\000\000\000\000\000\000\000\000\000\011V\011Z\000\000\n\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\029\000\000\015\029\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\015\029\004\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\001\011^\015\029\015\029\000\000\015\029\015\029\000\000\000\000\015\029\000\000\006\001\000\000\000\000\000\000\015Y\006\001\000\000\015Y\000\000\000\000\000\000\000\000\015\029\000\000\000\000\015\029\015\029\015\029\015\029\015\029\000\000\000\000\000\000\015\029\015\029\015\029\000\000\015\029\015\029\015\029\015Y\015Y\000\000\000\000\000\000\015Y\000\000\000\000\r\n\015Y\000\000\000\000\000\000\000\000\000\000\015Y\000\000\000\000\015Y\015Y\000\000\015Y\015Y\000\000\000\000\r\018\000\000\015Y\r\030\000\000\000\000\015Y\000\000\000\000\015Y\000\000\015Y\015Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\225\000\000\000\000\001\225\000\000\000\000\000\000\000\000\000\000\015Y\000\000\015Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Y\000\000\000\000\000\000\001\225\001\225\000\000\r*\000\000\001\225\000\000\000\000\000\000\001\225\000\000\000\000\000\000\000\000\000\000\001\225\000\000\000\000\001\225\001\225\000\000\001\225\001\225\015Y\015Y\000\000\015Y\001\225\r.\000\000\015Y\001\225\000\000\000\000\001\225\000\000\001\225\001\225\000\000\r6\001\225\000\000\000\000\000\000\000\000\000\000\000\000\015Y\000\000\015Y\000\000\000\000\000\000\000\000\000\000\015Y\015Y\015Y\000\000\015Y\015Y\015Y\000\000\001\225\001\225\001\225\000\000\000\000\001\225\000\000\000\000\000\000\001\225\000\000\000\000\000\000\001\225\000\000\001\225\000\000\000\000\001\225\001\225\000\000\001\225\001\225\000\000\000\000\000\000\000\000\001\225\000\000\000\000\000\000\001\225\000\000\000\000\001\225\000\000\001\225\001\225\000\000\000\000\001\225\002\186\000\000\001\225\001\225\000\000\000\000\001\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\225\000\000\001\225\001\225\001\225\001\225\001\225\000\000\000\000\000\000\000\000\003\254\001\225\001\225\000\000\001\225\001\225\001\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\225\002\194\000\000\001\225\001\225\000\000\000\000\001\225\000\000\000\000\000\000\000\000\000\000\001i\000\000\000\000\001i\000\000\000\000\000\000\000\000\001\225\000\000\000\000\001\225\001\225\001\225\001\225\000\000\000\000\000\000\000\000\003\242\001\225\001\225\000\000\001\225\001\225\001\225\001i\001i\000\000\000\000\000\000\001i\000\000\000\000\000\000\001i\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001i\001i\000\000\001i\001i\000\000\000\000\000\000\000\000\001i\000\000\000\000\000\000\001i\000\000\000\000\003\002\000\000\003\018\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001i\000\000\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001i\003\249\003\249\003\249\003\249\000\000\003\249\000\000\003\249\003\249\003\249\003\249\000\000\003\249\003\249\000\000\003\249\000\000\003\249\000\000\003\249\003\249\003\249\003\249\000\000\000\000\000\000\001i\000\000\000\000\001i\001i\000\000\001\210\003\n\000\000\000\000\000\000\000\000\003\249\001]\000\000\000\000\001]\000\000\003\249\000\000\000\000\001i\000\000\000\000\001i\001i\001i\001i\001i\003\249\000\000\000\000\000\000\001i\001i\000\000\001i\001i\001i\001]\001]\000\000\000\000\000\000\001]\000\000\000\000\000\000\001]\003\249\000\000\000\000\000\000\000\000\001]\003\249\000\000\001]\001]\000\000\001]\001]\000\000\000\000\003\249\000\000\001]\000\000\000\000\000\000\001]\000\000\000\000\003\002\000\000\001]\001]\000\000\003\249\003\249\000\000\000\000\000\000\000\000\000\000\000\000\003\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001]\000\000\001]\000\000\000\000\000\000\000\000\000\000\000\000\003\249\000\000\000\000\000\000\001]\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\001]\000\000\000\000\001]\001]\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\001a\003\249\000\000\001a\000\000\001\170\000\000\000\000\001]\000\000\000\000\001]\001]\001]\001]\001]\000~\000\000\000\000\000\000\001]\001]\000\000\001]\001]\001]\001a\001a\000\000\000\000\000\000\001a\000\000\000\000\000\000\001a\001\174\000\000\000\000\000\000\000\000\001a\001\202\000\000\001a\001a\000\000\001a\001a\000\000\000\000\001\162\000\000\001a\000\000\000\000\000\000\001a\000\000\000\000\003\002\000\000\001a\001a\000\000\001\178\001\182\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001a\000\000\001a\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\001a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001a\000\000\000\000\001a\001a\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\001e\014E\000\000\001e\000\000\000\000\000\000\000\000\001a\000\000\000\000\001a\001a\001a\001a\001a\000\000\000\000\000\000\000\000\001a\001a\000\000\001a\001a\001a\001e\001e\000\000\000\000\000\000\001e\000\000\000\000\000\000\001e\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001e\001e\000\000\001e\001e\000\000\000\000\000\000\000\000\001e\000\000\000\000\000\000\001e\000\000\000\000\003\002\000\000\003\018\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001e\000\000\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001e\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\001e\000\000\000\000\001e\001e\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\001u\000\000\000\000\001u\000\000\001\170\000\000\000\000\001e\000\000\000\000\001e\001e\001e\001e\001e\000~\000\000\000\000\000\000\001e\001e\000\000\001e\001e\001e\002\242\003\026\000\000\000\000\000\000\001u\000\000\000\000\000\000\001u\001\174\000\000\000\000\000\000\000\000\002\250\001\202\000\000\001u\001u\000\000\001u\001u\000\000\000\000\001\162\000\000\001u\000\000\000\000\000\000\001u\000\000\000\000\003\002\000\000\003\018\001u\000\000\001\178\001\182\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001u\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\001u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001u\000\000\000\000\001u\001u\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\001m\002\197\000\000\001m\000\000\000\000\000\000\000\000\001u\000\000\000\000\001u\001u\001u\001u\001u\000\000\000\000\000\000\000\000\001u\001u\000\000\001u\001u\001u\002\242\003\026\000\000\000\000\000\000\001m\000\000\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001m\001m\000\000\001m\001m\000\000\000\000\000\000\000\000\001m\000\000\000\000\000\000\001m\000\000\000\000\003\002\000\000\003\018\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001m\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001m\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\001m\000\000\000\000\001m\001m\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\001q\000\000\000\000\001q\000\000\001\170\000\000\000\000\001m\000\000\000\000\001m\001m\001m\001m\001m\000~\000\000\000\000\000\000\001m\001m\000\000\001m\001m\001m\002\242\003\026\000\000\000\000\000\000\001q\000\000\000\000\000\000\001q\001\174\000\000\000\000\000\000\000\000\002\250\001\202\000\000\001q\001q\000\000\001q\001q\000\000\000\000\001\162\000\000\001q\000\000\000\000\000\000\001q\000\000\000\000\003\002\000\000\003\018\001q\000\000\001\178\001\182\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001q\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\001q\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\001q\000\000\000\000\001q\001q\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\001y\002\189\000\000\001y\000\000\000\000\000\000\000\000\001q\000\000\000\000\001q\001q\001q\001q\001q\000~\000\000\000\000\000\000\001q\001q\000\000\001q\001q\001q\002\242\003\026\000\000\000\000\000\000\001y\000\000\000\000\000\000\001y\001\158\000\000\000\000\000\000\000\000\002\250\tf\000\000\001y\001y\000\000\001y\001y\000\000\000\000\001\162\000\000\001y\000\000\tj\tn\003\"\000\000\000\000\003\002\000\000\003\018\001y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tv\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001y\001y\000\000\000\000\003\n\000\000\000\000\000\000\004)\000\000\001\129\000\000\000\000\001\129\000\000\000\000\000\000\000\000\001y\000\000\000\000\001y\001y\001y\001y\001y\000\000\000\000\000\000\000\000\001y\001y\000\000\001y\001y\001y\002\242\003\026\000\000\000\000\000\000\001\129\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001\129\001\129\000\000\001\129\001\129\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\129\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\0032\000\000\000\000\001\129\001\129\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\003\146\000\000\000\000\001}\000\000\000\000\000\000\000\000\001\129\000\000\000\000\001\129\001\129\001\129\001\129\001\129\000~\000\000\000\000\000\000\001\129\001\129\000\000\001\129\003:\001\129\002\242\003\026\000\000\000\000\000\000\001}\000\000\000\000\000\000\001}\001\158\000\000\000\000\000\000\000\000\002\250\tf\000\000\001}\001}\000\000\001}\001}\000\000\000\000\001\162\000\000\001}\000\000\tj\tn\003\"\000\000\000\000\003\002\000\000\003\018\001}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tv\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001}\001}\000\000\000\000\003\n\000\000\000\000\000\000\tA\000\000\003\146\000\000\000\000\001\133\000\000\000\000\000\000\000\000\001}\000\000\000\000\001}\001}\001}\001}\001}\000\000\000\000\000\000\000\000\001}\001}\000\000\001}\003:\001}\002\242\003\026\000\000\000\000\000\000\001\133\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001\133\001\133\000\000\001\133\003\154\000\237\000\000\000\000\000\237\001\133\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\002\250\001\133\000\000\000\000\000\237\000\000\000\237\000\237\000\000\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\237\000\000\000\000\003\002\002\213\003\018\000\000\000\000\000^\002\213\000\000\000f\000\000\000v\002\213\000\000\002\213\000\000\000\000\000\000\000z\002\213\002\213\0032\000\000\000\000\001\133\001\133\000\000\000\000\003\n\000\000\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\001\133\000\000\000\000\001\133\001\133\001\133\001\133\001\133\000\000\000~\002\213\000\000\001\133\001\133\002\213\001\133\003:\001\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\237\002\213\002\213\000\237\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\000\138\000\000\000\000\000\000\000\000\000\237\000\000\002\213\000\000\000\237\000\237\000\000\002\213\002\213\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\237\002\213\000\000\002\209\000\000\002\213\000\000\000^\002\209\000\000\000f\000\000\000v\002\209\000\000\002\209\002\213\000\000\000\000\000z\002\209\002\209\000\000\000\000\000\000\000\000\002\213\000\000\000\000\000\000\000\000\002\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000~\002\209\000\000\000\000\000\000\002\209\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\000\000\002\213\002\213\000\000\000\000\002\213\002\209\002\209\000\000\002\230\002\213\002\213\003B\000\000\000\000\002\213\000\000\000\000\000\000\002\209\000\000\000\138\000\000\000\000\000\000\000\000\000\000\000\000\002\209\000\000\000\000\000\000\000\000\002\209\002\209\003r\003z\003\146\000\000\000\000\002=\000\000\000\000\002\209\002=\000\000\000\000\002\209\000\000\000\000\003\130\000\000\000\000\002=\002=\000\193\003\138\003\170\002\209\000\000\000\000\000\000\002=\002\242\003\026\000\000\003\178\000\000\002\209\003\186\000\000\003\194\002=\002\209\000\000\000\000\000\000\000\000\002\250\000\000\000\000\002\242\003\026\000\000\000\201\000\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\"\000\000\002\250\003\002\003\202\003\018\002=\000\000\000\193\000\193\000\000\000\000\002\209\000\000\000\000\002\209\002\209\002=\000\193\002\209\000\000\003\002\000\000\003\018\002\209\002\209\000\000\000\000\000\000\002\209\000\000\000\000\003*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\210\000\000\000\000\002=\002=\000\000\003*\003\218\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\145\000\000\000\000\000\000\000\000\002=\000\000\000\000\002=\002=\002=\002=\0032\000\000\000\000\000\000\000\000\002=\002=\003\n\003\226\003\234\002=\002\242\003\026\000\000\000\000\000\000\000\145\000\000\000\193\000\000\000\145\000\201\000\000\000\000\000\000\003\n\002\250\000\000\000\201\000\145\000\145\000\000\000\145\000\145\000\000\000\000\000\201\003:\000\145\000\193\000\000\000\000\003\"\000\000\000\000\003\002\000\193\003\018\000\145\000\000\000\000\000\000\000\000\000y\000\193\000\193\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\145\000\000\000\000\000y\000y\000\000\000\000\000\000\000y\000\000\000\000\000\145\000y\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000y\000y\000\000\000y\000y\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\000y\000\000\000\000\003\002\0032\003\018\000y\000\145\000\145\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\145\000\145\000\145\000\145\000y\000\000\000y\000\000\000\000\000\145\000\145\000\000\000\145\003:\000\145\000\000\000\000\000y\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000y\000\000\000\000\000y\000y\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\000u\000\000\000\000\000u\000\000\000\000\000\000\000\000\000y\000\000\000\000\000y\000y\000y\000y\000\000\000~\000\000\000\000\000\000\000y\000y\000\000\000y\000y\000y\000u\000u\000\000\000\000\000\000\000u\000\000\000\000\000\000\000u\001\158\000\000\000\000\000\000\000\000\002\250\tf\000\000\000u\000u\000\000\000u\000u\000\000\000\000\001\162\000\000\000u\000\000\tj\tn\000u\000\000\000\000\003\002\000\000\003\018\000u\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\000\000\000u\000\000\000\000\000m\000m\000\000\000\000\000\000\000m\000\000\000\000\000u\000m\000\000\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000\000\000m\000m\000\000\tv\000\000\000\000\000m\000\000\000\000\000\000\000m\000\000\000\000\003\002\000u\000m\000m\000u\000u\000\000\000\000\003\n\000\000\000\000\000\000\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\000\000\000\000\000u\000u\000u\000u\000m\000\000\000m\000\000\000\000\000u\000u\000\000\000u\000u\000u\000\000\000\000\000m\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\003\146\000\000\000\000\000\153\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000m\000m\000\000\000~\000\000\000\000\000\000\000m\000m\000\000\000m\000m\000m\002\242\003\026\000\000\000\000\000\000\000\153\000\000\000\000\000\000\000\153\001\158\000\000\000\000\000\000\000\000\002\250\026\022\000\000\000\153\000\153\000\000\000\153\003\154\000\000\000\000\001\162\000\000\000\153\000\000\026\026\tn\003\"\000\000\000\000\003\002\000\000\003\018\000\153\000\000\000\000\000\000\000\000\003\146\000\000\000\000\000\141\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\153\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\141\000\000\000\000\000\153\000\141\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\141\000\141\000\000\000\141\000\141\000\000\026\030\000\000\000\000\000\141\000\000\000\000\000\000\003\"\000\000\000\000\003\002\0032\003\018\000\141\000\153\000\153\000\000\000\000\003\n\000\000\000\000\000\000\004!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\153\000\000\000\000\000\153\000\153\000\153\000\153\003*\000\000\000\141\000\000\000\000\000\153\000\153\000\000\003\162\003:\000\153\000\000\000\000\000\141\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\0032\000\000\000\000\000\141\000\141\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\000\133\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\141\000\000\000\000\000\141\000\141\000\141\000\141\000\000\000~\000\000\000\000\000\000\000\141\000\141\000\000\000\141\003:\000\141\002\242\003\026\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\133\001\158\000\000\000\000\000\000\000\000\002\250\026\022\000\000\000\133\000\133\000\000\000\133\000\133\000\000\000\000\001\162\000\000\000\133\000\000\026\026\tn\000\133\000\000\000\000\003\002\000\000\003\018\000\133\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\133\000\000\000\000\000q\000q\000\000\000\000\000\000\000q\000\000\000\000\000\133\000q\000\000\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000\000\000q\000q\000\000\026\030\000\000\000\000\000q\000\000\000\000\000\000\000q\000\000\000\000\003\002\000\133\000q\000q\000\133\000\133\000\000\000\000\003\n\000\000\000\000\000\000\t%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\133\000\133\000\133\000\133\000q\000\000\000q\000\000\000\000\000\133\000\133\000\000\000\133\000\133\000\133\000\000\000\000\000q\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\000}\000\000\000\000\000}\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000q\000q\000\000\000~\000\000\000\000\000\000\000q\000q\000\000\000q\000q\000q\002\242\003\026\000\000\000\000\000\000\000}\000\000\000\000\000\000\000}\001\158\000\000\000\000\000\000\000\000\002\250\026\022\000\000\000}\000}\000\000\000}\000}\000\000\000\000\001\162\000\000\000}\000\000\026\026\tn\000}\000\000\000\000\003\002\000\000\003\018\000}\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\129\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000}\000\000\000}\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\129\000\000\000\000\000}\000\129\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\129\000\129\000\000\000\129\000\129\000\000\026\030\000\000\000\000\000\129\000\000\000\000\000\000\000\129\000\000\000\000\003\002\000}\003\018\000\129\000}\000}\000\000\000\000\003\n\000\000\000\000\000\000\002\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000}\000\000\000\000\000}\000}\000}\000}\003*\000\000\000\129\000\000\000\000\000}\000}\000\000\000}\000}\000}\000\000\000\000\000\129\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000\129\000\000\000\000\000\129\000\129\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\003\146\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\129\000\129\000\129\000\129\000\000\000~\000\000\000\000\000\000\000\129\000\129\000\000\000\129\000\129\000\129\002\242\003\026\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\149\001\158\000\000\000\000\000\000\000\000\002\250\t~\000\000\000\149\000\149\000\000\000\149\003\154\000\000\000\000\001\162\000\000\000\149\000\000\tj\tn\003\"\000\000\000\000\003\002\000\000\003\018\000\149\000\000\000\000\000\000\000\000\000\137\000\000\000\000\000\137\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\149\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\137\000\000\000\000\000\149\000\137\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\137\000\137\000\000\000\137\000\137\000\000\000\000\000\000\000\000\000\137\000\000\000\000\000\000\003\"\000\000\000\000\003\002\0032\003\018\000\137\000\149\000\149\000\000\000\000\003\n\000\000\000\000\000\000\tQ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\149\000\149\000\149\000\149\003*\000\000\000\137\000\000\000\000\000\149\000\149\000\000\000\149\003:\000\149\000\000\000\000\000\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\181\0032\000\000\000\000\000\137\000\137\000\000\000\000\003\n\000\000\000\000\r\181\000\000\r\181\012\005\012\005\000\000\r\181\000\000\000\000\012\005\000\000\000\137\r\181\000\173\000\137\000\137\000\137\000\137\r\181\000\000\000\000\r\181\000\000\000\137\000\137\r\181\000\137\000\137\000\137\000\000\000\000\r\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\173\000\000\r\181\000\000\000\000\012\005\000\000\r\181\r\181\000\000\000\000\000\000\000\000\000\000\000\173\000\000\000\000\000\000\000\000\000\000\000\173\000\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\000\000\000\003\002\000\000\000\173\012\005\000\000\r\181\000\000\000\000\r\181\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\r\181\000\000\000\000\000\000\000\000\r\181\r\181\r\181\000\173\r\181\r\181\000\000\r\181\000\000\000\000\002\002\000\000\000\000\002\006\r\181\000\000\000\000\r\181\000\000\002\018\002\022\000\000\002\030\000\000\007\030\000\000\000\000\000\000\000\000\002&\000\000\002*\r\181\000\000\000\000\000\000\000\000\r\181\r\181\012\005\002.\0022\000\000\000\173\br\0026\001\"\002:\000\000\000\000\003\n\002>\002B\000\000\000\000\002F\002J\000\000\000\000\000\000\000\000\000\000\015q\000\000\000\173\015q\000\000\000\000\000\000\000\000\000\000\000\173\000\000\002N\000\000\000\000\000\000\000\000\002R\000\173\000\173\000\n\000\000\000\000\000\000\000\000\000\000\000\000\015q\015q\002Z\000\000\000\000\015q\000\000\000\000\000\000\015q\000\000\000\000\000\000\002^\t\245\015q\000\000\000\000\015q\015q\000\000\015q\015q\000\000\000\000\000\000\002b\015q\000\000\004\198\000\000\015q\002n\000\000\015q\t\245\015q\015q\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\002v\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015q\000\000\015q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000\000\000\000\015q\015q\000\000\015q\000\000\000\000\000\000\015q\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\018\002\022\000\000\002\030\000\000\004\198\015q\000\000\015q\000\000\002&\000\000\002*\000\000\015q\015q\015q\000\000\015q\015q\015q\002.\0022\000\000\000\000\000\000\0026\001\"\002:\000\000\000\000\000\000\002>\002B\000\000\000\000\002F\002J\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\000\000\000\000\002N\000\000\000\000\000\000\000\000\002R\000\000\012b\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\002\022\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002b\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\t\245\000\000\002>\002B\002\134\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\249\000\000\000\000\001\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002N\000\000\000\000\000\000\000\000\002R\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\001\249\001\249\002Z\000\000\000\000\001\249\000\000\000\000\000\000\001\249\000\000\000\000\000\000\002^\000\000\001\249\000\000\000\000\001\249\001\249\000\000\001\249\001\249\000\000\000\000\000\000\002b\001\249\000\000\000\000\000\000\001\249\002n\000\000\001\249\000\000\001\249\001\249\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\002v\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\249\000\000\001\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000\000\001\249\rJ\000\000\001\249\t\245\000\000\000\000\001\249\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\018\002\022\000\000\002\030\000\000\001\249\000\000\001\249\000\000\000\000\002&\000\000\002*\rR\001\249\001\249\000\000\001\249\001\249\001\249\000\000\002.\0022\000\000\000\000\000\000\0026\001\"\002:\000\000\000\000\000\000\002>\002B\000\000\000\000\002F\002J\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\000\000\000\000\002N\000\000\000\000\000\000\000\000\002R\000\000\018\202\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\002\022\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002b\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002\134\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\002N\000\000\000\000\000\000\000\000\002R\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\t\030\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002b\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002\134\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\t\014\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002j\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002r\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\b\246\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002j\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002r\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\002V\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002j\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002r\000\000\002F\002J\000\000\002v\002~\000\000\000R\000\000\000\000\000\000\000\000\000\000\007\241\020v\000\000\000\000\000\000\007\241\002N\000\000\000\000\000\000\007\241\002f\007\241\020z\000\n\001\150\000\000\007\241\007\241\000\000\022\250\000\000\000\000\002Z\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\000\000\000\000\000\002^\000\000\020\138\000\000\007\241\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\000\002j\000\000\020\154\007\241\000\000\000\000\002n\007\241\020\158\000\000\000\000\000\000\000\000\000\000\000\000\002r\000\000\000\000\000\000\022\002\002v\002~\007\241\007\241\020\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\241\000\000\000\000\007\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\241\000\000\000\000\000\000\000\000\007\241\007\241\000\000\000\000\012-\000\000\020\166\000\000\000\000\020\170\007\241\000\000\000\000\000\000\007\241\000\000\000\000\000\000\000\000\000\000\022\006\000\000\020\174\000\000\000\000\007\241\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\007\241\000\000\000\000\000\000\000\000\007\241\020\198\000\000\000\000\020\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\020\206\002\n\000\000\000\000\002\014\020\210\020\214\012-\000\000\000\000\000\000\000\000\000\000\000\000\007\241\000\000\000\000\007\241\007\241\000\000\002\002\007\241\000\000\002\006\000\000\000\000\007\241\007\241\000\000\002\"\004\146\007\241\002\030\000\000\004\166\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\206\0022\000\000\000\000\000\000\004\210\001\"\002:\000\185\000\000\000\000\004\214\004\218\000\000\000\000\004\222\002J\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\000\000\000\000\000\000\000\000\004\226\002\242\003\026\000\000\000\000\004\230\000\000\000\000\000\n\002\002\000\000\000\000\002\006\000\000\000\000\000\000\002\250\004\238\002\018\004\178\000\000\002\030\000\185\000\185\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\185\000\000\000\000\003\002\000\000\003\018\000\000\002.\0022\004\242\000\000\000\000\0026\001\"\002:\004\250\000\000\000\000\002>\002B\000\000\000\000\002F\002J\004\254\000\000\000\000\000\000\000\000\005\006\002~\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\n\000\000\000\000\006j\000\000\000\000\000\000\000\000\000\000\002Z\000\000\000\000\000\000\003\225\000\000\003\225\000\000\000\000\003\225\000\000\002^\003\225\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\003\n\000\000\002j\000\000\000\000\000\000\003\225\000\000\002n\003\225\000\000\000\000\000\000\000\000\000\185\003\225\003\225\002r\003\225\000\000\000\000\000\185\002v\002~\000\000\003\225\000\000\003\225\000\000\000\185\000\185\000\000\000\000\000\000\000\000\000\000\003\225\003\225\000\000\000\000\000\000\003\225\003\225\003\225\000\000\000\000\000\000\003\225\003\225\000\000\000\000\003\225\003\225\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\000\000\000\000\000\000\000\000\003\225\000\000\000\000\000\000\000\000\003\225\000\000\000\000\003\225\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\003\225\002\018\012N\000\000\002\030\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002.\0022\003\225\000\000\000\000\0026\001\"\002:\003\225\000\000\000\000\002>\002B\000\000\000\000\002F\002J\003\225\000\000\000\000\000\000\000\000\003\225\003\225\000\000\000\000\000\000\000\000\020v\000\000\000\000\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\020z\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Z\020~\000\000\020\130\012Y\012Y\000\000\020\134\000\000\000\000\000\000\002^\000\000\020\138\000\000\000\000\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\189\002j\000\000\020\154\000\000\000\000\000\000\002n\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\002r\000\000\000\000\000\000\020v\002v\002~\012Y\000\000\020\162\002\242\003\026\000\000\000\000\000\000\000\000\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\250\000\000\020~\000\000\020\130\000\000\000\189\000\189\020\134\000\000\000\000\012-\000\000\012Y\020\138\020\166\000\189\000\000\020\170\003\002\020\142\003\018\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\020\174\000\000\020\158\000\000\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\023v\022\138\000\000\012-\003*\020\162\020\198\000\000\000\000\020\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\000\000\000\000\000\000\020\210\020\214\012Y\000\000\000\000\012-\000\000\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\000\000\000\003\n\020\174\000\000\000\000\000\000\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\189\r~\000\000\000\000\r\134\000\000\020\198\000\189\000\000\020\202\000\000\000\000\000\000\000\000\000\000\000\189\000\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\000\000\r\150\r\158\020\210\020\214\012-\002M\000\000\000\000\000\000\002M\000\000\000\000\000\000\000\000\000\000\r\166\000\000\000\000\002M\002M\000\000\r\174\r\182\000\000\000\000\000\000\001E\002M\000\000\001E\000\000\r\190\000\000\000\000\r\198\000\000\r\206\002M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\001E\000\000\000\000\000\000\001E\000\000\r\214\000\000\002M\000\000\002\250\000\000\000\000\001E\001E\000\000\001E\001E\000\000\002M\000\000\000\000\001E\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001E\000\000\000\000\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\r\222\000\170\000\174\002M\000v\000\000\000\182\r\230\000\186\001\146\001\150\000z\003*\000\000\001E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002M\001E\002M\001\154\000\000\000\000\000\000\000\000\000\000\002M\002M\000\000\r\238\r\246\002M\000\000\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001E\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\158\001-\000\000\000\000\001-\000\000\026&\000\000\000\000\000\000\000\000\000\000\001E\000\000\001E\001\162\000\000\000\000\000\000\026\026\tn\001E\001E\000\000\001E\003:\001E\001-\001-\000\000\000\000\000\000\001-\000\000\000\000\000\000\001-\tr\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001-\001-\000\000\001-\001-\000\000\000\000\000\000\001)\001-\000\000\001)\000\000\001-\000\000\000\000\003\002\000\000\003\018\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\001)\000\000\000\000\000\000\001)\000\000\000\000\000\000\001)\000\000\001-\000\000\001-\000\000\002\250\000\000\000\000\001)\001)\000\000\001)\001)\000\000\001-\t5\000\000\001)\000\000\000\000\000\000\001)\000\000\000\000\003\002\000\000\003\018\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001-\000\000\000\000\001-\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001)\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001-\001)\001-\000\000\000\000\000\000\000\000\000\000\000\000\001-\001-\000\000\001-\001-\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\001)\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\001!\000\000\000\000\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\001)\001)\000\000\001)\001)\001)\001!\001!\000\000\000\000\000\000\001!\000\000\000\000\000\000\001!\000\000\000\000\000\000\000\000\000\000\001!\000\000\000\000\001!\001!\000\000\001!\001!\000\000\000\000\000\000\003\146\001!\000\000\001M\000\000\001!\000\000\000\000\003\002\000\000\001!\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\001M\000\000\000\000\000\000\001M\000\000\001!\000\000\001!\000\000\002\250\000\000\000\000\001M\001M\000\000\001M\003\154\000\000\001!\000\000\000\000\001M\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000\000\000\000\001!\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\003*\000\000\001M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\001M\001!\000\000\000\000\000\000\000\000\000\000\000\000\001!\001!\000\000\001!\001!\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001M\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\003\146\000\000\000\000\001A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001M\000\000\001M\000\000\000\000\000\000\000\000\000\000\000\000\001M\001M\000\000\003\162\003:\001M\002\242\003\026\000\000\000\000\000\000\001A\000\000\000\000\000\000\001A\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001A\001A\000\000\001A\001A\000\000\000\000\000\000\0019\001A\000\000\0019\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\0019\000\000\000\000\000\000\0019\000\000\003*\000\000\001A\000\000\002\250\000\000\000\000\0019\0019\000\000\0019\0019\000\000\001A\000\000\000\000\0019\000\000\000\000\000\000\0019\000\000\000\000\003\002\000\000\003\018\0019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001A\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\003*\000\000\0019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001A\0019\001A\000\000\000\000\000\000\000\000\000\000\000\000\001A\001A\000\000\001A\003:\001A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0019\000\000\000\000\0019\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0019\000\000\0019\000\000\000\000\000\000\000\000\000\000\000\000\0019\0019\000\000\0019\0019\0019\001%\001%\000\000\000\000\000\000\001%\000\000\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\001%\001%\000\000\001%\001%\000\000\000\000\000\000\0011\001%\000\000\0011\000\000\001%\000\000\000\000\003\002\000\000\001%\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\0011\000\000\000\000\000\000\0011\000\000\001%\000\000\001%\000\000\002\250\000\000\000\000\0011\0011\000\000\0011\0011\000\000\001%\000\000\000\000\0011\000\000\000\000\000\000\0011\000\000\000\000\003\002\000\000\003\018\0011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\001%\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\0011\000\000\0011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\0011\001%\000\000\000\000\000\000\000\000\000\000\000\000\001%\001%\000\000\001%\001%\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0011\000\000\000\000\0011\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\0015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0011\000\000\0011\000\000\000\000\000\000\000\000\000\000\000\000\0011\0011\000\000\0011\0011\0011\002\242\003\026\000\000\000\000\000\000\0015\000\000\000\000\000\000\0015\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\0015\0015\000\000\0015\0015\000\000\000\000\000\000\003\146\0015\000\000\001I\000\000\0015\000\000\000\000\003\002\000\000\003\018\0015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\003\146\000\000\000\000\001I\000\000\000\000\000\000\001I\000\000\003*\000\000\0015\000\000\002\250\000\000\000\000\001I\001I\000\000\001I\003\154\000\000\0015\000\000\000\000\001I\002\242\003\026\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001I\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\000\000\000\000\000\209\003\154\0015\000\000\000\000\0015\000\000\000\000\000\000\003\n\003\"\000\000\000\000\003\002\003*\003\018\001I\000\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\001I\0015\000\000\000\000\000\000\000\000\000\000\000\000\0015\0015\000\000\0015\0015\0015\000\000\003*\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001I\002\250\000\000\000\000\003\n\000\000\000\000\000\197\000\197\000\000\001=\000\000\000\000\001=\000\000\000\000\000\000\003\"\000\000\000\000\003\002\001I\003\018\001I\000\000\0032\000\000\000\000\000\000\000\000\001I\001I\003\n\001I\003:\001I\002\242\003\026\000\000\000\000\000\000\001=\000\000\000\000\000\000\001=\000\209\000\000\000\000\003*\000\000\002\250\000\000\000\209\001=\001=\000\000\001=\001=\000\000\000\000\000\209\003:\001=\000\000\000\000\000\000\003\"\000\000\023b\003\002\023j\003\018\001=\000\000\000\000\000\000\000\000\000\000\000\000\023r\000\000\000\000\000\000\000\000\023\146\000\000\000\000\000\000\0032\000\000\000\000\020z\000\000\000\000\000\000\003\n\000\000\000\000\003*\000\000\001=\000\000\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\197\000\000\001=\000\000\000\000\020\138\000\000\000\197\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\197\000\197\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\0032\000\000\000\000\001=\000\000\000\000\000\000\003\n\000\000\000\000\000\000\020\162\023\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001=\000\000\001=\000\000\000\000\000\000\000\000\000\000\000\000\001=\001=\000\000\001=\001=\001=\000\000\000\000\000\000\020\166\006A\000\000\020\170\000\000\000\000\006A\000\000\000\000\000\000\000\000\006A\000\000\006A\000\000\000\000\020\174\000\000\006A\006A\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\006A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006A\000\000\020\206\000\000\006A\000\000\000\000\020\210\020\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015=\006A\006A\015=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004j\000\000\000\000\006A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006A\000\000\000\000\015=\015=\006A\006A\000\000\000\000\000\000\000\000\005\030\000\000\000\000\000\000\006A\000\000\000\000\015=\006A\000\000\000\000\015=\000\000\015=\015=\000\000\000\000\005&\000\000\006A\006*\000\000\000\000\015=\000\000\000\000\015=\000\000\015=\006A\000\000\000\000\000\000\000\000\006A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\004\170\015=\000\000\004\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006A\000\000\000\000\006A\006A\000\000\002\002\006A\0066\000\000\000\000\000\000\006A\006A\000\000\006\142\006\154\006A\000\000\000\000\006\174\000\000\000\000\000\000\000\000\002&\000\000\002*\015=\015=\000\000\015=\000\000\006:\000\000\015=\006\222\0022\000\000\000\000\000\000\006\234\001\"\002:\006B\000\000\000\000\006\242\006\246\015=\000\000\006\250\000\000\015=\015=\000\000\000\000\000\000\000\000\000\000\015=\000\000\000\000\000\000\015=\015=\000\000\000\000\006\254\007\002\000\000\000\000\000\000\000\000\007\006\000\000\000\000\000\n\000\000\001\242\000\000\000\190\000\000\000\000\012F\000\000\007\014\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\007*\000\000\012\182\012\162\000\000\000\000\0072\r\254\000\000\000\000\000\000\000\000\002&\000\000\002*\0076\000\000\000\000\000\000\000\000\007>\002~\000\000\012\186\0022\000\000\000\000\000\000\012\190\001\"\002:\000\000\000\000\000\000\012\194\012\198\000\000\020v\012\202\000\000\000\000\000\000\000\000\000\000\000\000\020v\000\000\000\000\000\000\020z\000\000\000\000\000\000\000\000\000\000\006\254\012\206\020z\000\000\000\000\020~\012\210\020\130\000\000\000\n\000\000\020\134\000\000\020~\000\000\020\130\000\000\020\138\012\218\020\134\000\000\000\000\000\000\020\142\000\000\020\138\020\150\000\000\000\000\000\000\020\154\020\142\000\000\000\000\020\150\000\000\020\158\000\000\020\154\000\000\000\000\000\000\012\222\000\000\020\158\000\000\000\000\022\210\012\230\000\000\000\000\000\000\020\162\000\000\000\000\023:\000\000\012\234\000\000\000\000\020\162\000\000\012\242\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012-\000\000\020\166\000\000\000\000\020\170\000\000\000\000\012-\000\000\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\020\174\000\000\000\000\000\000\000\000\020\178\000\n\020\182\020\174\020\186\020\190\000\000\020\194\020\178\000\n\020\182\000\000\020\186\020\190\020\198\020\194\000\000\020\202\000\000\t\237\000\000\000\000\020\198\000\000\000\000\020\202\000\000\000\000\000\000\000\000\000\000\t\237\020\206\000\000\000\000\000\000\000\000\020\210\020\214\012-\020\206\000\000\t\237\000\000\t\237\020\210\020\214\012-\t\237\000\000\000\000\000\000\000\000\000\000\t\237\000\000\000\000\000\000\b\169\000\000\t\237\000\000\000\000\t\237\000\000\000\000\000\000\t\237\021^\000\000\b\169\000\000\000\000\t\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\169\000\000\b\169\000\000\000\000\000\000\b\169\000\000\t\237\000\000\000\000\000\000\b\169\000\000\000\000\000\000\000\000\000\000\b\169\000\000\000\000\b\169\000\000\000\000\000\000\b\169\000\000\000\000\000\000\000\000\000\000\b\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\237\000\000\000\000\t\237\000\000\000\000\000\000\000\000\b\169\023\154\000\000\000\000\000\000\000\000\000\000\000\000\t\237\000\000\000\000\000\000\000\000\t\237\t\237\t\237\000\000\t\237\t\237\000\000\t\237\000\000\000\000\000\000\000\000\000\000\000\000\t\237\000\000\000\000\t\237\b\169\000\000\000\000\b\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\237\000\000\b\169\000\000\000\000\t\237\t\237\b\169\b\169\b\169\000\000\b\169\b\169\006\225\b\169\000\000\000\000\000\000\000\000\000\000\000\000\b\169\000\000\000\000\b\169\006\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\225\000\000\006\225\b\169\000\000\000\000\006\225\000\000\b\169\b\169\000\000\000\000\006\225\000\000\000\000\000\000\021\230\000\000\006\225\000\000\000\000\006\225\000\000\000\000\000\000\006\225\000\000\000\000\020z\000\000\000\000\006\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\024\162\000\000\000\000\020\134\000\000\006\225\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\225\000\000\000\000\006\225\000\000\000\000\000\000\000\000\020\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\225\000\000\000\000\000\000\000\000\006\225\006\225\006\225\000\000\006\225\006\225\000\000\006\225\000\000\000\000\000\000\000\000\000\000\000\000\006\225\000\000\000\000\006\225\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\225\000\000\020\174\000\000\000\000\006\225\006\225\020\178\000\n\020\182\000\000\020\186\020\190\021\254\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\020\206\000\000\000\000\020\134\000\000\020\210\020\214\000\000\000\000\020\138\000\000\000\000\000\000\020v\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\020z\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\000\020\162\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\022\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\174\000\000\000\000\000\000\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\020\174\000\000\000\000\020\210\020\214\020\178\000\n\020\182\000\000\020\186\020\190\022\206\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\020\206\000\000\000\000\020\134\000\000\020\210\020\214\000\000\000\000\020\138\000\000\000\000\000\000\0236\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\020z\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\000\020\162\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\020\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\174\000\000\000\000\000\000\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\020\174\000\000\000\000\020\210\020\214\020\178\000\n\020\182\000\000\020\186\020\190\020v\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\020\206\000\000\000\000\020\134\000\000\020\210\020\214\000\000\000\000\020\138\000\000\000\000\000\000\020v\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\020z\000\000\000\000\020\158\000\000\000\000\000\000\015U\000\000\000\000\015U\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\000\024n\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\150\015U\015U\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\015U\000\000\020\166\000\000\015U\020\170\015U\015U\000\000\000\000\020\162\000\000\000\000\000\000\004\198\000\000\015U\000\000\020\174\015U\000\000\015U\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020\166\000\000\000\000\020\170\000\000\000\000\000\000\015U\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\020\174\000\000\000\000\020\210\020\214\020\178\024\154\020\182\000\000\020\186\020\190\000\000\020\194\000\229\000\000\000\000\000\229\000\000\000\000\020\198\000\000\000\000\020\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015U\015U\000\000\015U\000\000\000\000\020\206\015U\000\229\000\229\000\000\020\210\020\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015U\000\000\000\229\000\000\015U\015U\000\229\003\146\000\229\000\229\001\017\015U\000\000\000\000\000\000\015U\015U\000\000\000\229\000\000\000\000\003\002\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\229\000\000\001\017\000\000\001\017\003\154\000\000\003\146\000\000\000\000\001\005\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\229\000\000\000\000\000\229\000\000\000\000\003*\003\n\002\250\000\000\000\000\000\000\001\005\000\253\001\005\001\005\000\253\000\000\000\000\000\000\000\000\000\229\000\000\000\000\003\"\000\229\000\229\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\229\000\229\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001\017\000\000\000\000\000\000\003\n\002\250\000\000\003*\000\000\000\253\000\000\000\253\000\253\000\000\000\233\000\000\000\000\000\233\001\017\000\000\000\000\000\253\001\017\001\017\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\003\162\003:\000\000\000\000\000\000\000\000\000\000\000\233\000\233\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001\005\000\000\000\000\003*\003\n\000\233\000\000\000\000\000\000\000\233\000\245\000\233\000\233\000\245\000\000\000\000\000\000\000\000\001\005\000\000\000\000\000\233\001\005\001\005\003\002\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\000\001\005\003:\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\253\000\000\000\000\000\253\000\000\000\000\000\000\003\n\002\250\000\000\000\233\000\000\000\245\000\000\000\245\000\245\000\000\000\249\000\000\000\000\000\249\000\253\000\000\000\000\000\245\000\253\000\253\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\253\000\253\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\233\000\000\000\000\000\245\003\n\002\250\000\000\000\000\000\000\000\249\003\146\000\249\000\249\001\r\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\249\000\233\000\233\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\233\000\233\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\245\000\000\000\000\000\245\000\000\000\000\000\000\003\n\002\250\000\000\003*\000\000\001\r\000\000\001\r\003\154\000\000\001\001\000\000\000\000\001\001\000\245\000\000\000\000\003\"\000\245\000\245\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\245\000\245\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\249\000\000\000\000\003*\003\n\002\250\000\000\000\000\000\000\001\001\000\000\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\003\"\000\249\000\249\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\249\000\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001\r\000\000\000\000\000\000\003\n\000\000\000\000\003*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\r\000\000\000\000\000\000\001\r\001\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\r\003:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001\001\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\000\000\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\001\001"))
+    ((16, "\002\130\000\185\000\000\000\000\022\134\000\185\000\000\000\000\000\026\000\000\000\000\000\000\000\213\000\000\000\000\000\000\002\130\000\000\000\005:*\000\000\000\000I\182\026P\000\000\025,\027t\000\000\000\000\000\000\000\000\000\213\0002\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\142\000\000\000\000\025,\000\000\000\000\000\006\000\000\000\017\000\017\000\000\000\000\000\000\000\000\000\r\000\000\000\000\000\144\000\017\000\000\000\144\000\000\000\000\000\017\000\162\001\244\000\017\001\242\000\000\003\000\000R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\223\000\017\000\000\000I\002\220\000\017\000\000\000\005\001f\000\000\000\000\000\000\002\016\000\000\028\152\000\017\002\028\000\000\000\000\000\000\000\000:*\029\188?\184\000\000?\184\000\000\000\000\000\000\000\017\000\000?\184\000\000>\156\003\028?\184\003P\000\000\000\000\000\017\007fW\234\000\000\000\000[0[\200\000\000^\200\000\000\\`Vn%\254%\254^\200Vn\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\248%\254\000\000\000\000\\\248\\\248\\\248\000\000\\\248\000\006\000\000\000\000Vn\\\248\000\000\000\000/\026\000\017\000\000 b%\254Vn\000\0000jVn<\002Vn<\128Vn\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\248Vn\000\000L\020Vn=\156Vn>\184Vn\000\000Vn\000\000Vn?\212Vn@\240VnB\012VnC(VnDDVnE`Vn!`Vn\000\000\000\000\000\000\003dVn\000\000\000\000\000\000\000\000VnL\156VnM\184VnN@VnO\\VnF|VnG\152VnH\180VnO\228VnQ\000Vn\000\000VnQ\136VnR\164VnS,Vn\000\000VnTHVnT\208Vn\000\000\000\000Vn\000\000\003\202\000\000\000\000\000\017\000\000\000\000\000\000\000\000\003\242\000\000\004\020\000\000\000\020Vn\000\000\000\020\000\000\000\000\000\194:*\000\000&\224\0032\0032m\164]\226\000\000m\164\000\000\000\000m\164\000\000\000\194\000\000\000\000%\254\004V\000\000\004x^\2005p\000\000_X%\254\004z\000\000\004\1384>5p^\200\000\000\000\000\000\000\000\000\000\000\000\000\\\248\000\000\000\000\\\248\000\000\000\000\\\248\000\000\000\006\000\000^\200\000\000\000\000n\006\000\017\000\000 b b\000\000\000\227$\226 b \230Vn\000\000Vn\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\028Vn\024\132Vn\005\nVn\000\000Vn$\"VnI\022Vnw\154Vnw\246VnxZVnx\182Vn\000\000Vny\026VnyvVny\218Vn\000\000Vnz6Vnz\154\000\175!\226\000\000\000\000\001X#b\000\000\000\000\000\000\000\000\004\228\000\000Vn\004\252\000\000\000\000\000\017\000\000\000\000\000\000\002\184^\200\000\000\000\000\006\000\000\000\000[`0\005\242Vn\005\240\000\000\000\000^\200\000[\000\000\000\000Vn\005v\000\000%\254\005\130\000\000\005\132n\1385p^\200\005\134\000\000Vn\000|Vn\005\138\000\000\000\0005p5p\000\000\000\000\000\000\000\0002\200\000\000\000\000\000\000\000\000\000\000\\\248\000\000\000\000\000\164\006\136Vn5p\000\017\000\000\\\248\000\000\000\000\\\248\000\000\000\006\000\0003\240n\138\000\000\000\000\"\172\000\017\000\000 b\005\208\000\000Vn\005\212\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000-\140\000\000\000\000\006\0165p\006&5p\000\000\000\003\000\000\000\000\025\168Vn\026\204Vn\027\240Vn\029\020Vn\0308Vn8\168VnK0VnKTVn\000\000VnV\000Vn_fVna\224Vn\000\000VnkBVnk\194\000\000\006\004\000\000\001(6\\\000\000\002x845p\000\000\003\n7H\000\000\000\000\000\000\000\000\006\152\000\000\000\000\000\000\0068\000\000\006N\000\000\000\000\006T\000\000\000\000\006X\000\000\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\006d\007,\000\000\006j\000\000\006r\000\000\006rW\234\000\000%\254\006tv\188\000\000\007X\000\000%\254\006\1309*\000\000%\254\006\132:F\000\000\006\132\000\000\000\000\007f\000\000\007x\000\000\000\000\001f\007H\000\017\006\142\007`EDED\000\000\000\000\000\000\003\\T,ED\003hG|\000\000\000\000\000\000\006h\007R\002\162\007fED\000\000\000\000\006\156\000\000\006\160\007pED\006\164\000\000\001N\000\000\000\000\003\196M\156\000\000\000\000\000\000\006\168\007\156\000\000\007\158\000\0001\234\000\017\007\160\000\000\000\000\000\000\006\174\000\000?\184\000\000D(A\240\000\000\000\000\030\224?\184\006\176\000\000\000\000\001\140?\184\000\000\001\140\000\000\000\000\006\194\000\000\002\162\006\192\000\000\001V:*\000\000:*\000\000\006\174\000\000\001V\000\000\019\1524\240:*\000\000\006\208\000\000\002\000:*\000\000\000\000\002\000\000\000\000\000\000\000\000\026\000\000\000\000\001<\000\026\000\000\000\000\000\000\007\194\000\000&\224'n'n\000\000\000\000'n\000\000\000\000\000\000\000\000\000\000\007\170Vn\006\222)X\007^\000\000\007\192Vn\006\244\007\188:*\000\000\000\000\000\000:*\000\017\000\000\000\017Vn\007\242\000\000\000\017\000\000\000\017\007\244\000\000\t.\007\196\000\017\007\014\007\222ED\007\018\001\154\000\000Vn\b\004\000\000\000\000\000\000\007\230ED\007\026\b\n\000\000\003\186\004>Vn\b\020\000\000\b\022\000\0001\234\000\017\004lVn\b(\000\000\b*\000\000\000\017\004\140Vn\b.\000\000\b6\000\000\0013\007t\t\n,n\000\000`\192%\254\007LW(\000\000X\130\000\000\b<\000\000\003\002\b\018Vn\007\208\000\000\b\022Vn\007\212\000\000\001p\000\000\t\n\t\n%\254\007X\000\000\007ZoLoL\000\000\000\000\000\000\000\000\000\000\000\000\\\248\000\000\000\000\\\248\000\000\000\000\\\248\000\000\000\006\000\000oL\000\000\000\000;b\000\017\000\000 b\007`\000\000Vn\007d\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000Y<Vn\000\000Vn\000\000\007p\000\000\000\020\000\000\000\000\000\000\000\000\000\000c\014VncvVn\007\156Vn\000\000Vnd\146Vnd\250Vnf\022Vnf~Vng\154Vnh\002Vn\000\000Vni\030Vni\134Vnj\162Vn\000\000Vnk\nVnl&5p\007n\000\000\000\000\003\002\000\000\003\002\000\000\019\152\t\n\t\n\000\000\000\000\000\000\000\003\000\000\000\000\000\000\bFVn\007|)X*j\000\017\bl\000\000\bN\022\152\000\000:*\000\017\001\166\000\000Vn\br\000\000\n&\bD\000\017\007\138\bZED\007\142\004H\000\000Vn\b\128\000\000\004L\000\000Vn\b\132\000\0001\234\000\017\004\158\000\000Vn\b\174\000\000\000\017\005 \000\000Vn\b\196\000\000-\152\b\198Z\000\b\206Vn\007\226)X)X\001\022\001\022\003\228\001\226\001\022\000\000\000\000\004\012\004\026\000\000\004Z\n\"\000\000\000\000\000\000\000\000\000\000\007\228\000\000\000\000\b\214\000\000\b\216\000\000\000\000\t\026\b\196Vn\007\250\b\238\000\000\b\242\000\000\b0\000\000\b\218 b\b\014)X\000\000\000\000\000\000\007\136\000\000\000\000\003\002\000\000\b\146\000\000\015\018\0012\000\000\015\018\000\000\000\000-\152\000\000\011\182\000\000\000\000\012\014\000\000\015\018\000\000\b\230 b\b\026\005b\000\000Vn\t\016\000\000\0032\000\000\b\226\000\017\b0\t\000ED\b4\005n\000\000Vn\t$\000\000\t\006ED\bF\t6\000\000\0056Vn\t8\000\000\t:\000\0001\234\000\017\005<Vn\t>\000\000\tP\000\000\000\000\000\000\012\014\000\000\000\000\001:\000\000\t\n\000\000\0032\000\000\000\000Z\000\tXVn\bl)X\000\000\000\000\tB b\bx\005t\000\000Vn\tt\000\000\007\184\000\000\tD\000\017\b\144\t`ED\b\152\005v\000\000Vn\t\136\000\000\005|\000\000Vn\t\138\000\0001\234\000\017\005\198\000\000Vn\t\140\000\000\002\200*j\000\000\002\200\000\000\000\000\b\162\000\000\000\020\001\128)X\000\000\006\006\0007\006\006\000\000\0007\000\000\t\n\000\000\t\n\000\000\000\000\000\000\b\174\000\000\000\000\b\186\000\000\004V\007\136\0007\006\006\000\000\000\000\000\000\0007\000\000\t\n\000\000\004V\000\000\000\000\022|\020R\019\152\000\000\020R\000\000\n\140\019\152\000\000\000\000\n\140\000\000\000\000\b\186\000\000\000\000\b\192\000\000\004\244\t\n\000\000\004\244\000\000\000\000\t@\000\000\001:\000\000\t\n\000\000\000\000\000\000\024\024Z\152\000\000\t\178\000\000\024\024\t\184\000\000\t\186\000\000\005\146\024\024\000\000\t\188\000\000\000\000\005\146\000\000\000\000\b\210\000\000\023@\tP\000\000\000\000\000\000\tR\000\000\000\165\000\178\000\000\019\152\t\176\000\000\000\000Vn\t\002\t\n\000\000\b\214\000\000\0013\000\000:*\000\000\000\000\003\236\019\152\000\000\019\152\000\000\b\198\000\000\003\236\000\000Vn\003\240Vn\000\000Vn\000\000\b\200\000\000\003\240\000\000Vn\003\240\b\204\000\000\021\024+\234\000\000\003\250\021\024\000\000\000\000\021\024\000\000\b\206\000\000\003\250\000\000Vn\003\240\b\208\000\000:*\005\216:*\000\000:*\000\000\b\218\000\000\005\216\000\000Vn\003\240\b\220\000\000\000\000'~\000\000\000\185\t~\000\000\000\000\tT]\212\000\000\000\000\000\000\000\000\000\000\000\000\t(\006\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004]\212\000\000\001\b\003P\t*\000\185\000\000\000\000\t2\000\185\000\000\000\000\000\000\000\000\001\024\003P\000\000\000\000\000\000\000\000\t\144\000\000\000\000\000\000\000\000/\0261j\000\000q&\000\000]\212\000\000\002v]\212\000\000\002\196\001\218\001\218\000\000\003\224\001\218\000\000\t\b\000\000\000\000\000\000\000\000\t\162\000\0002\200\000\0004\240]\212\000\000\000\029]\212\000\000\t\198\000\000]\212\t\202\000\000r\194]\212\t\222\000\000\t\224\000\000s\194]\212]\212\t\138\000\185\000\000\000\000\000\000\t`]\212\t\234\000\000\t\236\000\000\t\240\000\000:*\000\000\004\n:*\000\000\tj'n\000\000]\212\t\248\000\000\002\220]\212\000\000\004\154]\212\000\000\004\132\n~\000\000\n\128\000\000b\030]\212\tv\000\000\000\000\000\000\000\000\000\000\000\000\n\n\000\000t\016a\156\n\020\000\000\n\030\000\000u\016p\012]\212\t\158]\212\n(\000\000\n*\000\000\n,\000\000a\156\t\212\000\185\000\000\000\000\005\154a\156\000\000\004\132\000\000\n2\000\000]\212\n8\000\000u^p\028]\212\t\178]\212\n<\000\000\n>\000\000\nD\000\000l\200'n\000\000'n\000\000b\030]\212\t\192]\212\nL\000\000\nN\000\000'n\000\000qt\000\000\000\000\005\166]\212\000\000\001\128\003\142\001\218\t\198\000\000\000\000\0032\0032\000\000\000\000\000\000\000\000\005\024\0032\000\000\t\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\212\000\000\005\236]\212\000\000\005Z\001f\000\185\t\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nd\000\000\nf\000\000]\212\nh\000\000v^a\156\np\000\000\nr\000\000]\212\n|\000\000(\226\n\"v\172U\206rt\n\004\000\000]\212\n\142\000\000\n\144\000\000\nd(\226]\212\n\152\000\000]\212\n\154\000\000\n\156\000\000]\212\n\158\000\000\000\185\n\n\000\000\000\000'~\000\000\000\000\0044\011\004\000\000\000\000\001C\000\000\000\000\000\000Vn\000\000\000\000\000\000\004\132\000\000\000J\000\000\000\000\000\000\006\006:*:*:*\000\000\003`\003`\003`\003`\000\000\000\000\000\000\000\000\000\000\000\000\003\002\019\152\n\250\016\148\0012\000\000\000\000\004P\000\000\012\014\000\0005p\n&\000\000\003\002\019\152\n4\018\022\000\000\003\002\016\148\000\000\000\000\000\000:*6j\000\000\000\000\000\000\n\132\0032\011\014O@O@\000\000\004\230d,O@\005\164P\228\000\000\000\000\b\170\n\254\000\017\000\000\005\200R\136\000\000\000\000\000\000\000\000\000\000\nD\011\020\t\n\nP\000\000\000\000\004P\000\000\012\014\000\000\021r\000\027\000\000\000\000\011\004\000\000\000\000\0044\000\000\002\030\000\000\000\000\000\000Vn\000\000\004\132\000\000\002\198\000\000\000\000\000\000\007\136\000\000\r\144\005L\r\144\000\000\t\n\r\144\000\000\005\246\000\000\t\n\000\000\t\n\000\000\t\n\000\000\019\242\000\000\000\000\000\000\000\000\000\000\t\n\000\000\005\246\000\000\t\n\000\000*\196\000\000\000\000\n\140\n\134\000\185\002$\0110\005\202\000\000\005\202\011Z\000\000\011\\\000\000\006\204\000\000\005\202\002\196\005\202\0110\005\202\000\000\000\000\003\170\000\000\0144\002$\nV\000\000\n`\000\000\n\160\000\185\002$\nf\000\000\n\140\011t\000\000\014\234\bd\011\136\000\225\011\136\000\000\000\000\b,\000\185\000\000\001D\000\000\000\000\000p\000\000\np\000\000\000\000\000\000\n\174\000\185\002$\nv\000\000\000\000\n\140\014\234\bd\b,\001D\000p\nx\000\000\014\234\bd\b,\001D\000p\nz\000\000\006\170\002\012\n\152\000\185\n\146\006\220\003\230\n\190\000\185\000\000\n\194\000\185\000\000\011 \000\000\n\168\004\140\n\196\006\220\011\\\000\000\n\220\006\220\011b\000\000\000\000\006\220\000\000\011d\000\000"), (16, "\r\217\r\217\r\217\r\217\r\217\r\217\r\217\r\217\r\217\r\217\r\217\r\217\r\217\r\217\012:\r\217\r\217\r\217\r\217\r\217\r\217\r\217\r\217\r\217\r\217\019N\006\145\025/\0253\r\217\005\249\001\194\0257\r%\n\005\r-\r\217\000\190\r\217\r%\r%\026\163\r\217\012n\r\217\r\217\000\n\r\217\000\190\026\167\r\217\r%\014\014\r=\000\130\r\217\r\217\r\217\001\170\026\170\r\217\000&\004\217\0056\028\018\001N\r\217\b\197\000\198\r\217\r\217\n\005\b\237\001\198\000\254\r\217\r\217\r%\r\217\006\190\r\217\000*\0007\000;\000\194\r\217\000\190\r\217\r\217\005\254\r\217\r\217\r\217\b\181\0196\000\202\r\217\r\217\r\217\004:\r]\r\217\r\217\r\217\n\218\000\206\001\"\r\217\r\217\r\217\r\217\r\217\r\217\006f\001\006\007\022\r\217\r\217\000N\n\158\019\158\019\198\019\214\020\n\020\026\020B\n\222\r\217\r\217\r\217\000\n\015\218\r\217\r\217\r\217\r\217\006\145\r\217\012\150\r\217\001Z\000\n\r\217\001\030\001\"\r\217\r\217\b\253\011r\001&\001\002\000\n\004\217\001*\001.\006\t\r\217\r\217\007\149\007\"\r\217\000\234\021\198\000\134\r\217\r\217\r\217\r\217\011~\r]\r\217\0012\r\217\000\222\001j\b\241\r\217\r\217\r\217\000\n\r\217\002}\r\217\r\217\000\190\r\217\004R\r\217\r\217\006Y\r\217\r\217\r\217\r\229\r\229\r\229\r\229\r\229\r\229\r\229\r\229\r\229\r\229\r\229\r\229\r\229\r\229\028:\r\229\r\229\r\229\r\229\r\229\r\229\r\229\r\229\r\229\r\229\n\005\r\149\006\198\015*\r\229\012n\000\190\025W\025[\012n\n~\r\229\025_\r\229\014\014\012\150\018\186\r\229\014\014\r\229\r\229\023\194\r\229\018\190\000\202\r\229\006\210\005\129\012\137\001\238\r\229\r\229\r\229\006Q\000\206\r\229\r\157\000\198\tR\003\233\003\241\r\229\0246\000\254\r\229\r\229\003\233\003\241\011\178\012\154\r\229\r\229\014\169\r\229\014~\r\229\014\169\023\214\006I\000\n\r\229\019\"\r\229\r\229\000\202\r\229\r\229\r\229\000\190\nR\020\246\r\229\r\229\r\229\000\206\020\142\r\229\r\229\r\229\015.\028\170\n\134\r\229\r\229\r\229\r\229\r\229\r\229\n\t\028.\012\137\r\229\r\229\015\218\021&\004]\0282\015\218\r\157\000\n\021~\004\017\r\229\r\229\r\229\0156\bF\r\229\r\229\r\229\r\229\018\186\r\229\t\t\r\229\001\n\n\230\r\229\018\190\001\002\r\229\r\229\018\194\014\169\014\169\005\241\000\202\n\186\014\169\005\241\006\014\017\190\r\229\004]\002]\r\229\000\206\000\006\000\"\r\229\r\229\r\229\r\229\011\182\002\129\r\229\006\025\r\229\001\018\014\130\n\t\r\229\r\229\r\229\r\133\r\229\019\"\r\229\r\229\006\137\r\229\000\n\r\229\r\229\000\190\r\229\r\229\r\229\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\000\n\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\006\153\000\190\000\n\000\198\tR\006\153\012r\012\130\012\146\003\193\000^\b\229\006\153\000f\006\153\000v\004R\027\174\006\153\r\141\006\153\006\153\000z\006\153\020\234\006q\006\153\021z\027~\011\026\000\202\006\153\000\198\006\153\011\030\017\154\006\153\001~\001^\025z\000\206\011\"\006\153\001\142\000\190\000.\011&\025~\020\250\026\195\026\199\006\153\006\153\003\173\026\203\000~\006\153\006\153\006\205\000\202\016J\006\153\021\006\006\153\006\153\000\n\006\153\006\153\006\153\000\206\021\n\001\214\006\153\006\153\006\153\000\198\016N\006\153\006\153\006\153\023\218\021n\bR\006\153\006\153\006\153\006\153\006\153\006\153\t\025\000\138\0045\006\153\006\153\000\n\t\237\003\193\011\194\022j\006\017\006\017\020\142\000\202\011\198\006\153\006\153\006I\t\162\006\153\006\153\006\153\006\153\000\206\006\153\006N\006\153\016\238\021\022\006\153\003\193\006\205\006\153\006\153\028\190\027\190\006\129\023\198\021\026\005\241\023\222\001\026\001\222\027\174\026\227\026\231\027\182\006\153\000\n\026\235\t\001\006\153\006\153\006\153\006\153\004\133\028\202\006\153\001\238\006\153\019~\0045\019\166\006\153\006\153\006\153\bb\019\230\0045\006\153\006\153\000\190\006\153\002\141\006\153\006\153\004\165\006\153\006\153\006\153\006\189\006\189\006\189\006\189\006\189\006\189\006\189\006\189\006\189\006\189\006\189\006\189\006\189\006\189\003^\006\189\006\189\006\189\006\189\006\189\006\189\006\189\006\189\006\189\006\189\r=\006\189\tz\015*\006\189\014\174\tQ\014\194\t\134\n\005\006\189\006\189\tA\006\189\028\230\022\130\022\138\006\189\012n\006\189\006\189\025\030\006\189\r=\000\202\006\189\019\134\014\014\019\174\005\241\006\189\006\189\006\189\019\242\000\206\006\189\006\189\006\189\006\189\r=\018\014\006\189\006\189\006\189\006\189\027\198\006\189\006\189\014\222\005\241\006\189\006\189\006\189\006\189\t\222\006\189\027\182\022\146\002\173\000\n\006\189\025\030\006\189\004\n\006\189\006\189\006\189\006\189\021\138\006\189\0152\006\189\006\189\006\189\b\225\rM\006\189\006\189\006\189\015.\004*\006\189\006\189\006\189\006\189\006\189\006\189\006\189\n\025\022F\015F\0069\006\189\006)\b\209\011\230\r5\0042\0061\ru\014\178\b\213\014\198\006\189\006\189\006\189\015\218\006\189\006\189\006\189\006\189\006\189\006\189\014\246\006\189\011~\000\n\006\189\012\006\018\142\006\189\006\189\022\130\022\138\r=\006\189\006\189\r=\023\194\015R\006a\004\154\006\189\002m\012\"\006\189\014\169\014\169\011~\006\189\006\189\014\169\006\189\014\226\012n\006\189\0166\006\189\004\162\004\186\n\025\006\189\016j\014\014\011~\017\"\017V\004\194\006\189\017j\006\189\022v\006\189\006\189\0242\006\189\006\189\006\189\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\020v\000v\025f\000\182\011\"\000\186\001\146\001\150\000z\011&\025j\027\134\020z\n\017\017\134\011*\018\238\026.\005\138\020\"\006&\t5\011:\020~\001\154\020\130\014\250\006i\001\242\020\134\012B\011B\027\138\012F\0062\020\138\012J\016\146\n\005\027\142\016\178\000~\023\242\012^\020\150\r}\n\001\012n\020\154\rE\015\218\re\002\002\006^\020\158\025\158\014\014\011~\006n\016:\011~\014\"\012\162\025\202\025\214\016n\014&\017\202\017&\017Z\020\162\002&\017n\002*\004\181\n\017\001\162\015\210\014.\000\190\n5\n5\012\186\0022\0142\n5\rm\012\190\006\238\002:\020*\006v\006\150\012\194\012\198\011V\011Z\012\202\0146\006\162\006\170\020\166\006\186\014:\020\170\006\206\006y\023\026\027\150\017\138\000\198\t\154\026:\023\182\006\254\012\206\t%\020\174\014>\014B\012\210\014F\020\178\000\n\020\182\014Z\020\186\020\190\004\145\020\194\026Z\014f\012\218\007\026\002\157\015\218\020\198\000\202\007j\020\202\027\162\027\158\007v\025\234\028\166\028\186\015\"\000\206\024&\007\166\015&\015r\004\181\011^\020\206\006!\012\222\007\174\015v\020\210\020\214\027\166\012\230\004\181\004\181\n5\n5\b>\004\181\015~\n5\012\234\000\n\006\197\006\197\bz\012\242\002~\006\197\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\b\138\000v\025f\000\182\011\"\000\186\001\146\001\150\000z\011&\025j\b\146\000\n\029\015\b\158\011*\b\170\002\233\b\182\b\210\004\198\002\233\011:\b\222\001\154\b\230\b\238\b\254\001\242\005\241\012B\011B\t\n\012F\t\022\t&\012J\t2\tF\tV\t^\000~\tb\012^\t\158\t\166\n\001\t\182\001\238\t\190\t\194\t\202\002\002\t\242\000\190\012n\t\246\t\254\n\014\n\030\nF\014\"\012\162\025\202\014\014\nj\014&\018\018\nv\n\147\0176\002&\n\178\002*\004\197\n\250\001\162\015\210\014.\011.\0116\011>\012\186\0022\0142\000\198\017:\012\190\006\238\002:\011F\011N\011R\012\194\012\198\011V\011Z\012\202\0146\011z\011\142\011\154\015\214\014:\011\162\011\166\011\174\011\194\011\190\011\206\011\214\011\218\000\202\011\198\006\254\012\206\011\238\011\246\014>\014B\012\210\014F\000\206\000\n\005\241\014Z\012\014\012\022\004\145\012*\028\n\014f\012\218\0122\012>\012V\012j\012v\012~\012\134\012\142\012\170\012\178\015\218\005\241\r\026\015\"\000\n\005\241\r&\015&\015r\r^\011^\r\142\014\006\012\222\014J\015v\014R\014b\014j\012\230\014\138\004\197\014\150\014\158\014\162\014\170\015~\014\186\012\234\014\206\006\213\006\213\000\190\012\242\002~\006\213\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\014\234\000v\025f\000\182\011\"\000\186\001\146\001\150\000z\011&\025j\015\002\015\014\000\198\026J\011*\015\022\015\030\015n\006\181\015z\015\130\011:\015\142\001\154\006\181\006\181\015\146\001\242\015\154\012B\011B\015\158\012F\015\166\015\174\012J\028\"\015\182\015\190\000\202\000~\015\230\012^\016*\0162\n\001\006\173\000\190\016B\000\206\016R\002\002\006\173\006\173\012n\016Z\016^\016f\016v\016~\012\158\012\162\006\181\014\014\006\173\014&\016\134\016\138\016\154\016\162\002&\016\186\002*\004\225\000\n\001\162\014*\014.\000\198\011\150\016\194\012\186\0022\0142\016\254\017\006\012\190\006\238\002:\017\022\006\173\017\030\012\194\012\198\011V\011Z\012\202\0146\017.\017>\011\194\014\177\014:\017F\017J\000\202\011\198\017R\017b\017v\017\146\017\178\002\233\006\254\012\206\000\206\002\233\014>\014B\012\210\014F\017\250\000\n\018\006\014Z\018z\018\134\004\145\018\166\018\210\014f\012\218\018\222\018\230\018\250\019\018\019\030\019.\019F\019V\000\n\019b\015\218\019\147\019\187\015\"\019\211\019\255\020\023\015&\015r\004\225\011^\0207\020O\012\222\020g\015v\020r\020\146\020\254\012\230\004\225\004\225\021\014\021?\021\150\004\225\015~\000\190\012\234\000\190\n=\n=\021\171\012\242\002~\n=\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\021\211\000v\021\223\000\182\011\"\000\186\001\146\001\150\000z\011&\000\198\014\146\021\239\021\247\015*\011*\022\n\022\030\022'\022/\004y\0227\011:\022R\001\154\022c\022\134\022\142\001\242\022\158\012B\011B\011\194\012F\022\187\000\202\012J\000\202\011\198\022\203\027r\000~\b=\012^\022\211\000\206\n\001\000\206\022\230\022\239\022\247\022\255\002\002\023\n\023/\012n\b=\023;\023N\023W\023_\012\158\012\162\023g\014\014\023\138\014&\023\147\023\155\023\206\000\n\002&\000\n\002*\023\254\024>\001\162\014*\014.\024_\024g\024s\012\186\0022\0142\024\131\024\139\012\190\006\238\002:\015.\024\151\024\162\012\194\012\198\011V\011Z\012\202\0146\024\178\024\191\024\199\003\165\014:\024\206\024\219\024\231\024\239\024\251\025\007\025\"\025\170\002q\b=\006\254\012\206\027\226\025\210\014>\014B\012\210\014F\025\226\000\n\026\022\014Z\027\246\026\030\026N\026v\004y\014f\012\218\028N\026z\027\250\004y\004y\026\130\026\175\003\165\027v\027\130\015\218\027\146\027\154\015\"\027\215\004y\004y\015&\015r\027\223\011^\027\230\027\243\012\222\027\254\015v\028\014\028C\028R\012\230\028_\028\131\028\159\b=\028\174\028\182\015~\028\194\012\234\028\206\028\219\004y\028\226\012\242\002~\b=\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\028\234\000v\n\005\000\182\011\"\000\186\001\146\001\150\000z\011&\028\243\012n\028\250\029\003\029\023\011*\000\000\000\000\000\000\003\165\014\014\000\000\011:\000\000\001\154\003\165\003\165\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\003\165\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\n\001\000\000\000\000\000\000\000\000\000\000\002\002\000\000\003\165\012n\000\000\000\000\014\169\000\000\000\000\012\158\012\162\003\165\014\014\027\182\014&\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\014*\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\015\218\000\000\000\000\014\177\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\000\000\014\169\014\169\014f\012\218\000\000\014\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\218\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\014\177\014\177\000\000\012\242\002~\014\177\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\025f\000\182\011\"\000\186\001\146\001\150\000z\011&\025j\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\000\000\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\n\001\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\"\012\162\000\000\000\000\000\000\014&\026\250\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\003\177\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\004\145\000\000\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\027\174\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\n!\n!\000\000\012\242\002~\n!\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\003\173\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\003\177\000\000\000\000\011:\000\000\001\154\003\177\003\177\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\003\177\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\n\001\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\"\012\162\003\177\000\000\027\182\014&\015\238\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\014\141\014:\000\000\000\000\000\000\000\000\000\000\000\000\003\173\000\000\000\000\000\000\006\254\012\206\003\173\003\173\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\003\173\027~\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\003\173\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\014\141\014\141\000\000\012\242\002~\014\141\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\000\000\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\n\001\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\"\012\162\000\000\000\000\000\000\014&\025\174\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\000\000\000\000\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\014\217\014\217\000\000\012\242\002~\014\217\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\000\000\000\000\000\000\000\000\000~\000\000\012^\000\000\000\000\n\001\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\"\012\162\000\000\000\000\000\000\014&\025\174\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\000\000\000\000\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\000\015~\000\000\012\234\000\000\014\213\014\213\000\000\012\242\002~\014\213\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\000\000\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\011\026\000\000\000\000\000\000\000~\011\030\012^\000\000\000\000\n\001\025z\000\000\011\"\000\000\000\000\002\002\000\000\011&\025~\000\000\000\000\000\000\000\000\000\000\014\"\012\162\000\000\000\000\000\000\014&\018F\000\000\000\000\000\000\002&\000\000\002*\000\000\000\190\001\162\015\210\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\016J\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\198\016N\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\011\194\000\000\000\000\014f\012\218\000\202\011\198\b5\000\000\000\000\000\000\n\005\000\000\000\000\000\000\000\206\000\000\000\000\015\"\000\000\012n\b5\015&\015r\000\000\011^\000\000\000\000\012\222\014\014\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\n\015~\000\000\012\234\000\000\004\165\000\000\000\000\012\242\002~\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\b5\011*\000\000\000\000\000\000\000\000\000\000\000\000\011:\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\011B\000\000\012F\000\000\000\000\012J\011\026\000\000\000\000\000\000\000~\011\030\012^\015\218\000\000\n\001\025z\000\000\011\"\000\000\000\000\002\002\000\000\011&\025~\000\000\000\000\000\000\000\000\000\000\019\218\012\162\000\000\000\000\000\000\014&\b5\000\000\000\000\000\000\002&\000\000\002*\000\000\000\190\001\162\000\000\014.\b5\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\016J\000\000\012\194\012\198\011V\011Z\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\198\016N\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\011\194\000\000\000\000\014f\012\218\000\202\011\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\011^\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\n\015~\000\000\012\234\000\000\004\165\000\000\000\000\012\242\002~\000R\000V\000Z\000\146\000\000\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\rU\rU\000\000\000\000\000\000\000\000\000\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\007\233\007\233\001\242\000\000\012B\007\233\016J\001\246\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\t\249\000\198\016N\000\000\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\004R\002\026\002\022\000\000\002\030\000\000\000\000\000\000\000\000\011\194\000\000\002&\000\000\002*\000\202\011\198\001\162\005z\000\000\000\000\005\130\000\000\002.\0022\000\206\000\000\000\000\0026\001\"\002:\rU\000\000\000\000\002>\002B\011V\014n\002F\002J\000\000\000\000\000\000\000\000\005\146\005\154\000\000\000\000\000\000\000\000\000\n\rU\000\000\000\000\000\000\000\190\002N\000\000\000\000\005\162\000\000\002R\rU\002E\000\n\005\170\005\178\000\000\rU\rU\000\000\0176\000\000\002Z\000\000\005\186\000\000\000\000\005\194\000\000\005\202\000\000\000\000\000\000\002^\000\000\000\198\017:\000\000\000\000\000\000\006I\000\000\000\022\011^\000\000\000\000\002b\000\000\004R\rU\000\000\000\000\002n\000\000\rU\rU\005\210\011\194\000\000\000\000\000\000\002\134\000\202\011\198\000\000\000\000\002v\002~\000R\000V\000Z\000\146\000\206\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\000\000\000\182\011\"\000\186\001\146\001\150\000z\011&\000\000\000\000\000\000\000\000\005\218\000\n\000\000\002E\000\000\000\000\000\000\005\226\000\000\000\000\001\154\000\000\000\000\000\000\001\242\000\000\012B\000\000\000\000\012F\000\000\002E\012J\000\000\000\000\002E\002E\000~\000\000\018\198\000\000\000\000\n\001\000\000\000\000\000\000\005\234\005\242\002\002\000\000\000\000\000\000\006I\000\000\000\000\000\000\000\000\018\214\012\162\000\000\000\000\001\t\000\000\000\000\001\t\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\000\000\000\000\000\000\000\000\000\000\012\186\0022\000\000\000\000\000\000\012\190\001\"\002:\000\000\002\242\003\026\012\194\012\198\011V\014n\012\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\001\t\000\000\001\t\001\t\006\254\012\206\000\000\000\000\000\000\000\000\012\210\000\000\003\"\000\n\000\000\003\002\000\000\003\018\000\000\000\000\r\189\000\000\012\218\000\000\000\000\r\189\000\000\000j\r\189\000r\r\189\000\000\r\189\000\000\000\178\000\000\000\000\r\189\r\189\000\000\r\189\000\000\000\000\011^\003*\000\000\012\222\000\000\018\218\000\000\000\000\r\189\012\230\r\189\000\000\000\000\000\000\r\189\r\189\018\226\000\000\012\234\000\000\r\189\000\000\000\000\012\242\002~\000\000\r\189\r\189\000\000\r\189\000\000\r\189\000\000\r\189\000\000\000\000\000\000\000\000\000\000\r\189\000\000\0032\000\000\000\000\001\t\000\000\r\189\r\189\003\n\000\000\r\189\000\000\000\000\000\000\000\000\r\189\r\189\000\000\007\198\r\189\000\000\r\189\001\t\000\000\000\000\000\000\001\t\001\t\r\189\000\000\000\000\000\000\000\000\r\189\r\189\000\000\000\000\001\t\003:\000\000\000\000\000\000\000\000\r\189\007\206\007\214\r\189\r\189\000\000\r\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\189\007\222\000\000\000\000\r\189\000\000\000\000\007\230\007\238\r\189\r\189\r\189\000\000\r\189\r\189\r\189\r\189\007\246\000\000\000\000\007\254\000\000\b\006\r\189\000\000\r\169\r\189\000\000\000\000\000\000\r\169\000\000\000\000\r\169\000b\r\169\000\000\r\169\000\000\000\000\000\000\r\189\r\169\r\169\000\000\r\169\r\189\r\189\r\189\b\014\000\000\r\189\r\189\000\000\000\000\r\189\r\169\000\000\r\169\000\000\r\189\r\189\r\169\r\169\000\000\r\189\000\000\000\000\r\169\000\000\000\000\000\000\000\000\000\000\r\169\r\169\000\000\r\169\000\000\r\169\000\000\r\169\000\000\000\000\000\000\000\000\000\000\r\169\000\000\b\022\000\000\000\000\000\000\000\000\r\169\r\169\b\030\000\000\r\169\000\000\000\000\000\000\000\000\r\169\r\169\000\000\000\205\r\169\000\000\r\169\005]\000\000\000\000\000\000\000\000\000\000\r\169\005]\000\000\000\000\000\000\r\169\r\169\000\000\000\000\b&\b.\000\000\000\000\000\000\000\000\r\169\002\242\003\026\r\169\r\169\000\000\r\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\169\002\250\000\000\000\000\r\169\000\000\000\000\000\205\000\205\r\169\r\169\r\169\000\000\r\169\r\169\r\169\r\169\003\"\000\000\000\000\003\002\000\000\003\018\r\169\000\000\r\197\r\169\000\000\000\000\000\000\r\197\000\000\000\000\r\197\000n\r\197\000\000\r\197\000\000\000\000\000\000\r\169\r\197\r\197\000\000\r\197\r\169\r\169\r\169\003*\000\000\r\169\r\169\000\000\000\000\r\169\r\197\000\000\r\197\000\000\r\169\r\169\r\197\r\197\000\000\r\169\000\000\000\000\r\197\000\000\000\000\000\000\000\000\000\000\r\197\r\197\000\000\r\197\000\000\r\197\000\000\r\197\000\000\000\000\000\000\000\000\000\000\r\197\000\000\0032\000\000\000\000\000\000\000\000\r\197\r\197\003\n\000\000\r\197\000\000\000\000\000\000\000\000\r\197\r\197\000\000\000\181\r\197\000\000\r\197\000\205\000\000\000\000\000\000\000\000\000\000\r\197\000\205\000\000\000\000\000\000\r\197\r\197\000\000\000\000\000\205\003:\000\000\000\000\000\000\000\000\r\197\000\181\000\181\r\197\r\197\000\000\r\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\197\002\250\000\000\000\000\r\197\000\000\000\000\000\181\000\181\r\197\r\197\r\197\000\000\r\197\r\197\r\197\r\197\000\181\000\000\000\000\003\002\000\000\003\018\r\197\000\000\b\141\r\197\000\000\000\000\000\000\b\141\000\000\000\000\b\141\000\000\b\141\000\000\b\141\000\000\000\000\000\000\r\197\b\141\b\141\000\000\b\141\r\197\r\197\r\197\000\181\000\000\r\197\r\197\000\000\000\000\r\197\b\141\000\000\b\141\000\000\r\197\r\197\b\141\b\141\000\000\r\197\000\000\000\000\b\141\000\000\000\000\000\000\000\000\000\000\b\141\b\141\000\000\b\141\000\000\b\141\000\000\b\141\000\000\000\000\000\000\000\000\000\000\b\141\000\000\000\181\000\000\000\000\000\000\000\000\b\141\b\141\003\n\000\000\b\141\001\134\000\000\000\000\000\000\b\141\b\141\000\000\000\177\b\141\000\000\b\141\000\181\000\000\000\000\000\000\000\000\000\000\b\141\000\181\000\000\000\000\000\000\b\141\b\141\000\000\000\000\000\181\000\181\000\000\000\000\000\000\000\000\b\141\000\177\000\177\b\141\b\141\000\000\b\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\141\002\250\000\000\000\000\b\141\000\000\000\000\000\177\000\177\b\141\b\141\b\141\000\000\b\141\b\141\b\141\b\141\000\177\000\000\000\000\003\002\000\000\003\018\b\141\000\000\r\181\b\141\000\000\000\000\000\000\r\181\000\000\000\000\r\181\000\000\r\181\000\000\r\181\000\000\000\000\000\000\b\141\r\181\r\181\000\000\r\181\b\141\b\141\b\141\000\177\000\000\b\141\b\141\000\000\000\000\b\141\r\181\000\000\r\181\000\000\b\141\b\141\r\181\r\181\000\000\b\141\000\000\000\000\r\181\000\000\000\000\000\000\000\000\000\000\r\181\r\181\000\000\r\181\000\000\r\181\000\000\r\181\000\000\000\000\000\000\000\000\000\000\r\181\000\000\000\177\000\000\000\000\000\000\000\000\r\181\r\181\003\n\000\000\r\181\001\166\000\000\000\000\000\000\r\181\r\181\000\000\000\169\r\181\000\000\r\181\000\177\000\000\000\000\000\000\000\000\000\000\r\181\000\177\000\000\000\000\000\000\r\181\r\181\000\000\000\000\000\177\000\177\000\000\000\000\000\000\000\000\r\181\000\169\000\169\r\181\r\181\000\000\r\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\181\000\169\000\000\000\000\r\181\000\000\000\000\000\169\000\169\r\181\r\181\r\181\000\000\r\181\r\181\r\181\r\181\000\169\000\000\000\000\003\002\000\000\000\169\r\181\000\000\b\153\r\181\000\000\000\000\000\000\b\153\000\000\000\000\b\153\000\000\b\153\000\000\b\153\000\000\000\000\000\000\r\181\b\153\b\153\000\000\b\153\r\181\r\181\r\181\000\169\000\000\r\181\r\181\000\000\000\000\r\181\b\153\000\000\b\153\000\000\r\181\r\181\b\153\b\153\000\000\r\181\000\000\000\000\b\153\000\000\000\000\000\000\000\000\000\000\b\153\b\153\000\000\b\153\000\000\b\153\000\000\b\153\000\000\000\000\000\000\000\000\000\000\b\153\000\000\000\169\000\000\000\000\000\000\000\000\b\153\b\153\003\n\000\000\b\153\n>\000\000\000\000\000\000\b\153\b\153\000\000\000\000\b\153\000\000\b\153\000\169\000\000\000\000\000\000\000\000\000\000\b\153\000\169\000\000\000\000\000\000\b\153\b\153\000\000\000\000\000\169\000\169\000\000\000\000\000\000\000\000\b\153\000\000\000\000\b\153\b\153\000\000\b\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\153\000\000\000\000\000\000\b\153\000\000\000\000\000\000\000\000\b\153\b\153\b\153\000\000\b\153\b\153\b\153\b\153\000\000\000\000\000\000\000\000\000\000\000\000\b\153\000\000\000\000\b\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\153\000\000\000\000\000\000\000\000\b\153\b\153\b\153\000\000\000\000\b\153\b\153\000\000\000\000\b\153\000\000\000\000\000\000\000\000\b\153\b\153\000\000\000\000\000\000\b\153\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\002\n\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\162\004\146\000\000\002\030\000\000\000\000\005*\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\001\241\000\000\000\000\001\241\000\000\004\206\0022\000\000\000\000\000\000\004\210\001\"\002:\000\000\000\000\005.\004\214\004\218\000\000\000\000\004\222\002J\000\000\000\000\000\000\000\000\001\241\001\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\226\000\000\000\000\001\241\000\000\004\230\000\000\001\241\000\n\001\241\001\241\000\000\000\000\000\000\000\000\000\000\000\000\004\238\000\000\001\241\000\000\000\000\001\241\000\000\001\241\000\000\000\000\000\000\0052\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\242\000\000\000\000\000\000\000\000\000\000\004\250\000\000\000\000\004\t\001\241\000\000\000\000\004\001\000\000\004\254\000\000\004\001\000\000\000\000\005\006\002~\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\004\001\000\000\000\000\000\000\000\000\001\241\005B\000\000\001\241\000\000\000\000\000\000\001\241\000\000\000\000\001\154\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\002\n\000\000\001\241\002\014\004\001\000\000\001\241\001\241\000~\000\000\000\000\000\000\000\000\005J\000\000\004\001\000\000\001\241\001\241\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\162\004\146\000\000\002\030\000\000\000\000\005*\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\000\000\004\001\004\001\000\000\000\000\004\206\0022\000\000\000\000\000\000\004\210\001\"\002:\000\000\000\000\005.\004\214\004\218\000\000\003J\004\222\002J\004\001\004\001\000\000\004\001\000\000\000\000\000\000\000\000\000\000\004\001\004\001\000\000\000\000\015%\004\001\000\000\004\226\000\000\000\000\000\000\000\000\004\230\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\238\000\000\000\000\000\000\000\000\000\000\015%\015%\000\000\000\000\000\000\0052\000\000\000\000\007Z\000\000\000\000\000\000\000\000\000\000\000\000\015%\000\000\000\000\004\242\000\000\000\000\015%\015%\000\000\004\250\007b\000\000\b\185\007n\000\000\000\000\015%\000\000\004\254\015%\000\000\015%\000\000\005\006\002~\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\015%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\001\242\007z\000\190\000\000\000\000\002\n\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015%\000\000\000\000\002\002\000\000\007~\002\006\015%\000\000\000\000\000\000\000\000\002\162\004\146\000\000\002\030\007\134\000\000\005*\000\000\000\000\015%\002&\000\000\002*\000\000\000\000\001\162\015%\000\000\000\000\000\000\000\000\004\206\0022\000\000\015%\015%\004\210\001\"\002:\000\000\000\000\005.\004\214\004\218\000\000\000\000\004\222\002J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\241\000\000\000\000\000\241\000\000\000\000\000\000\000\000\004\226\000\000\000\000\000\000\000\000\004\230\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\238\000\241\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0052\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\000\241\000\000\000\241\000\241\004\242\000\000\000\000\000\000\000\000\000\000\004\250\000\000\000\241\002a\000\000\003\002\000\000\003\018\000\000\004\254\000\000\000\000\000\000\000\000\005\006\002~\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\241\000\186\001\146\001\150\000z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\002\n\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\241\000\000\000\000\000\241\000\000\000\000\000\000\003\n\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\162\004\146\000\000\002\030\000\241\000\000\005:\000\000\000\241\000\241\002&\000\000\002*\000\000\000\000\001\162\000\000\000\000\000\000\000\241\000\241\004\206\0022\000\000\000\000\000\000\004\210\001\"\002:\000\000\000\000\005.\004\214\004\218\000\000\000\000\004\222\002J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\226\000\000\000\000\000\000\000\000\004\230\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000R\000V\000Z\000\146\004\238\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000\000\000\000\004\242\000\000\000\000\000\000\000\000\000\000\004\250\000\000\000\000\b\201\001\154\000\000\000\000\000\000\001\242\004\254\000\190\000\000\000\000\001\246\005\006\002~\001\250\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\026\002\022\000\000\002\030\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\000\000\000\000\000\000\000\000\000\000\002.\0022\000\000\000\000\000\000\0026\001\"\002:\000\000\000\000\000\000\002>\002B\000\000\000\000\002F\002J\000\000\000V\004^\000\146\000\000\000\150\000\000\000\154\000\158\004b\000^\000\000\000\170\000\174\000\000\000v\002N\000\182\000\000\000\186\001\146\002R\000z\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Z\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\002^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000~\000\000\002b\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\002v\002~\001\149\001\149\001\149\001\149\000\000\001\149\005\233\001\149\001\149\001\149\001\149\001\162\001\149\001\149\000\000\001\149\000\000\001\149\005\233\001\149\001\149\001\149\001\149\000\000\000\000\000\000\000\000\020Z\000\000\005\233\000\000\005\233\000\000\000\000\000\000\005\233\005\233\001\149\001\149\001\149\000\000\005\233\000\000\020^\000\000\000\000\000\000\005\233\000\000\001\149\005\233\000\000\000\000\000\000\005\233\001\149\000\000\000\000\001\149\000\000\005\233\000\000\001\149\000\000\000\000\020j\000\000\000\000\001\149\000\000\000\000\005\233\000\000\000\000\000\000\001\149\005\233\011\006\000\000\000\000\001\149\000\000\005\233\000\000\000\000\000\000\000\000\000\000\000\000\001\149\001\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\233\000\000\000\000\005\233\000\000\000\000\005\233\000\000\001\149\000\000\000\000\001\149\000\000\000\000\001\149\000\000\000\000\000\000\000\000\005\233\000\000\000\000\000\000\000\000\005\233\005\233\005\233\001\149\005\233\005\233\000\000\005\233\001\149\000\000\001\149\000\000\000\000\001\149\005\233\020n\000\000\005\233\000\000\000\000\001\149\000\000\001\149\000\000\000\000\001\149\000\000\000\000\000\000\000\000\000\000\000\000\005\233\000\000\000\000\000\000\000\000\005\233\005\233\000\000\001\149\001\149\000\000\000\000\000\000\001\149\001\149\000\000\000\000\000\000\000R\000V\004^\000\146\000\000\000\150\021B\000\154\000\158\004b\000^\000\000\000\170\000\174\020v\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\001\154\020\130\000\000\000\000\000\000\020\134\000\000\000\000\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\024\158\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\n\166\000\000\000\000\000\000\000\000\022:\000\000\000\000\000\000\020\162\023\166\000\000\000\000\011*\000\000\001\162\000\000\000\000\000\000\000\000\011:\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\011B\000\000\012F\000\000\000\000\012J\000\000\000\000\n\210\000\000\000\000\020\166\012^\000\000\020\170\n\001\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\020\174\000\000\000\000\014V\012\162\020\178\000\n\020\182\014&\020\186\020\190\000\000\020\194\002&\000\000\002*\000\000\000\000\000\000\020\198\014.\000\000\020\202\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\000\000\000\000\012\194\012\198\020\206\000\000\012\202\0146\000\000\020\210\020\214\000\000\014:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\000\000\000\000\000\000\014f\012\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\011*\000\000\000\000\000\000\012\222\000\000\015v\011:\000\000\000\000\012\230\000\000\000\000\001\242\000\000\000\190\011B\015~\012F\012\234\000\000\012J\011\026\000\000\012\242\002~\000\000\011\030\012^\000\000\000\000\n\001\025z\000\000\011\"\000\000\000\000\002\002\000\000\011&\025~\000\000\000\000\000\000\000\000\000\000\012\182\012\162\000\000\000\000\000\000\014&\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\190\000\000\000\000\014.\000\000\000\000\000\000\012\186\0022\0142\000\000\000\000\012\190\006\238\002:\000\000\016J\000\000\012\194\012\198\000\000\000\000\012\202\0146\000\000\000\000\000\000\000\000\014:\000\000\000\000\000\198\016N\000\000\000\000\000\000\000\000\000\000\000\000\006\254\012\206\000\000\000\000\014>\014B\012\210\014F\000\000\000\n\000\000\014Z\000\000\000\000\011\194\000\000\000\000\014f\012\218\000\202\011\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\015\"\000\000\000\000\000\000\015&\015r\000\000\000\000\000\000\000\000\012\222\000\000\015v\000\000\000\000\000\000\012\230\000\000\000\000\000\000\000\000\000\000\000\n\015~\000\000\012\234\000\000\004\165\000\000\000\000\012\242\002~\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\nm\nm\001\242\000\000\000\190\nm\000\000\012F\000\000\000\000\012J\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\218\012\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\001\162\015\201\000\000\000\000\015\201\000\000\012\186\0022\000\000\000\000\000\000\012\190\001\"\002:\000\000\000\000\000\000\012\194\012\198\000\000\012\153\012\202\000\000\000\000\000\000\000\000\000\000\015\201\015\201\000\000\000\000\000\000\015\201\000\000\000\000\015\201\015\201\000\000\006\254\012\206\000\000\000\000\015\201\000\000\012\210\015\201\015\201\000\n\015\201\015\201\000\000\012\153\015\201\000\000\015\201\015\201\012\218\000\000\015\201\000\000\000\000\015\201\000\000\015\201\015\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\153\000\000\012\222\000\000\000\000\000\000\000\000\000\000\012\230\000\000\012\153\000\000\015\201\000\000\015\201\000\000\000\000\012\234\000\000\000\000\000\000\000\000\012\242\002~\000\000\015\201\000\000\000\000\000\000\000\000\000\000\000\000\015\201\000\000\000\000\012\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\201\015\201\000\000\015\201\015\201\015\201\000\000\015\201\000\000\000\000\000\000\000\000\000\000\000\000\005\t\000\000\015\201\005\t\000\000\000\000\005\t\015\201\000\000\005\t\015\201\000\000\015\201\000\000\000\000\000\000\000\000\000\000\015\201\015\201\015\201\000\000\015\201\015\201\015\201\012\149\005\t\005\t\000\000\000\000\000\000\000\000\005\t\005\t\005\t\005\t\000\000\005\t\000\000\000\000\005\t\005\t\000\000\000\000\000\000\000\000\000\000\005\t\005\t\000\000\005\t\005\t\000\000\005\t\005\t\000\000\012\149\005\t\000\000\005\t\005\t\000\000\005\t\005\t\000\000\000\000\005\t\000\000\005\t\005\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\149\000\000\000\000\000\000\000\000\000\000\005\t\000\000\000\000\000\000\012\149\000\000\005\t\000\000\005\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\t\005\t\000\000\000\000\000\000\000\000\000\000\005\t\000\000\000\000\012\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\t\005\t\000\000\000\000\007\141\005\t\005\t\005\t\000\000\005\t\007\141\005\t\000\000\005\t\000\000\000\000\005\t\000\000\000\000\000\000\000\000\005\t\005\t\000\000\005\t\000\000\000\000\005\t\005\t\000\000\005\t\000\000\005\t\000\000\000\000\000\000\005\t\005\t\005\t\005\t\005\t\000\000\005\t\005\t\005\t\012\005\012\005\012\005\012\005\000\000\012\005\000\000\012\005\012\005\012\005\012\005\000\000\012\005\012\005\000\000\012\005\000\000\012\005\000\000\012\005\012\005\012\005\012\005\000\000\000\000\015y\000\000\000\000\015y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\005\012\005\012\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\005\000\000\015y\015y\000\000\000\000\012\005\015y\000\000\021R\002\150\015y\000\000\021Z\000\000\000\000\000\000\015y\000\000\012\005\015y\015y\000\000\015y\015y\000\000\012\005\002\158\000\000\015y\002\178\012\005\000\000\015y\000\000\000\000\015y\000\000\015y\015y\012\005\012\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\005\000\000\015y\012\005\015y\000\000\012\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015y\000\000\000\000\000\000\012\005\000\000\000\000\004\014\000\000\012\005\000\000\012\005\000\000\000\000\012\005\000\000\000\000\000\000\000\000\000\000\000\000\012\005\000\000\012\005\000\000\000\000\012\005\015y\015y\000\000\015y\015y\004\018\000\000\015y\000\000\000\000\000\000\000\000\000\000\000\000\012\005\012\005\004\026\000\000\000\000\021\174\012\005\015y\000\000\000\000\015y\015y\015y\015y\015y\000\000\000\000\000\000\015y\015y\015y\000\000\015y\015y\015y\015\t\000\000\000\000\015\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\t\015\t\000\000\000\000\000\000\015\t\000\000\000\000\002\150\015\t\000\000\000\000\000\000\000\000\000\000\015\t\000\000\000\000\015\t\015\t\000\000\015\t\015\t\000\000\000\000\002\158\000\000\015\t\002\178\000\000\000\000\015\t\000\000\000\000\015\t\000\000\015\t\015\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\t\000\000\015\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\t\011\245\011\245\011\245\011\245\000\000\011\245\004\014\011\245\011\245\011\245\011\245\000\000\011\245\011\245\000\000\011\245\000\000\011\245\000\000\011\245\011\245\011\245\011\245\000\000\000\000\000\000\015\t\015\t\000\000\015\t\015\t\004\018\000\000\015\t\000\000\000\000\000\000\011\245\011\245\011\245\000\000\000\000\004\026\000\000\000\000\000\000\000\000\015\t\000\000\011\245\015\t\015\t\015\t\015\t\015\t\011\245\000\000\000\000\015\t\015\t\015\t\000\000\015\t\015\t\015\t\000V\004^\000\146\011\245\000\150\000\000\000\154\000\158\004b\000^\011\245\000\170\000\174\000\000\000v\011\245\000\182\000\000\000\186\001\146\000\000\000z\000\000\000\000\011\245\011\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\001\170\000\000\000\000\000\000\011\245\000\000\000\000\011\245\000\000\000\000\011\245\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\245\000\000\000\000\000\000\000\000\011\245\000\000\011\245\000\000\000\000\011\245\000\000\000\000\000\000\000\000\000\000\000\000\011\245\000\000\011\245\000\000\000\000\011\245\001\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\245\011\245\000\000\000\000\000\000\021V\011\245\011\249\011\249\011\249\011\249\000\000\011\249\000\000\011\249\011\249\011\249\011\249\000\000\011\249\011\249\000\000\011\249\000\000\011\249\000\000\011\249\011\249\011\249\011\249\000\000\000\000\005\017\000\n\000\000\005\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\249\011\249\011\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\249\000\000\005\017\005\017\000\000\000\000\011\249\005\017\000\000\021\178\005\017\005\017\000\000\000\000\000\000\000\000\000\000\005\017\000\000\011\249\005\017\005\017\000\000\005\017\005\017\000\000\011\249\005\017\000\000\005\017\005\017\011\249\000\000\005\017\000\000\000\000\005\017\000\000\005\017\005\017\011\249\011\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\249\000\000\005\017\011\249\005\017\000\000\011\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\017\000\000\000\000\000\000\011\249\000\000\000\000\005\017\000\000\011\249\000\000\011\249\000\000\000\000\011\249\000\000\000\000\000\000\000\000\000\000\000\000\011\249\000\000\011\249\000\000\000\000\011\249\005\017\005\017\000\000\005\017\007\153\005\017\000\000\005\017\000\000\000\000\000\000\000\000\000\000\000\000\011\249\011\249\005\017\000\000\000\000\005\r\011\249\005\017\005\r\000\000\005\017\000\000\005\017\000\000\005\017\000\000\000\000\000\000\005\017\005\017\005\017\000\000\005\017\005\017\005\017\000\000\000\000\000\000\000\000\000\000\000\000\005\r\005\r\000\000\000\000\000\000\005\r\000\000\000\000\005\r\005\r\000\000\000\000\000\000\015=\000\000\005\r\000\000\000\000\005\r\005\r\000\000\005\r\005\r\000\000\000\000\005\r\000\000\005\r\005\r\000\000\000\000\005\r\000\000\000\000\005\r\000\000\005\r\005\r\000\000\015=\015=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015=\000\000\000\000\000\000\000\000\000\000\015=\015=\000\000\005\r\000\000\005\r\000\000\000\000\004\198\000\000\015=\000\000\000\000\015=\000\000\015=\005\r\000R\000V\004^\000\146\000\000\000\150\005\r\000\154\000\158\004b\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\015=\005\r\005\r\000\000\005\r\007\145\005\r\000\000\005\r\000\000\000\000\000\000\021\186\001\154\021\214\000\000\000\000\005\r\000\000\000\000\000\000\000\000\005\r\000\000\021\226\005\r\000\000\005\r\000\000\005\r\000~\000\000\000\000\005\r\005\r\005\r\000\000\005\r\005\r\005\r\015=\000\000\000\000\021\250\000\000\000\000\000\000\015=\000\000\000\000\n\166\000\000\000\000\000\000\000\000\022:\000\000\000\000\000\000\000\000\000\000\015=\000\000\000\000\022Z\001\162\000\000\000\000\015=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015=\015=\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\004\170\n\210\000\000\004\174\022f\000\000\000\000\022\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\022\214\000\000\004\202\000\000\000\000\023\002\000\000\t\233\006\142\006\154\0232\006\178\006\190\006\214\006\218\000\000\000\000\023>\002&\023j\002*\000\000\024j\000\000\000\000\000\000\000\000\000\000\000\000\006\222\0022\000\000\006\226\006\230\006\234\006\238\002:\024v\024\142\000\000\006\242\006\246\000\000\024\154\006\250\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\011\026\000\000\000\000\007\006\000\000\011\030\000\n\000\000\000\000\000\000\025z\000\000\011\"\000\000\000\000\007\014\000\000\011&\025~\000\000\000\000\000\000\000\000\000\000\006\t\000\000\007\018\000\000\007\"\001\242\000\000\000\190\000\000\000\000\004\170\000\000\000\000\004\174\000\190\007*\000\000\000\000\000\000\000\000\000\000\0072\000\000\000\000\000\000\000\000\000\000\004\025\000\000\002\002\0076\000\000\004\202\000\000\000\000\007>\002~\000\000\006\142\006\154\000\000\006\178\006\190\006\214\006\218\000\198\011\150\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\222\0022\000\000\006\226\006\230\006\234\006\238\002:\011\194\000\000\000\000\006\242\006\246\000\202\011\198\006\250\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\000\000\000\000\000\000\007\006\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\007\014\000\000\000\000\004\165\000\000\000\000\000\000\000\000\000\000\006\t\000\000\007\018\000\000\007\"\001\242\000\000\000\190\000\000\000\000\004\170\000\000\000\000\004\174\000\000\007*\000\000\000\000\000\000\000\000\000\000\0072\000\000\000\000\000\000\000\000\000\000\t\r\000\000\002\002\0076\000\000\004\202\000\000\000\000\007>\002~\000\000\006\142\006\154\000\000\006\178\006\190\006\214\006\218\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\222\0022\000\000\006\226\006\230\006\234\006\238\002:\000\000\000\000\000\000\006\242\006\246\000\000\000\000\006\250\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\000\000\000\000\000\000\007\006\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\t\000\000\007\018\000\000\007\"\001\242\000\000\000\190\000\000\000\000\004\170\000\000\000\000\004\174\000\000\007*\000\000\000\000\000\000\000\000\000\000\0072\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\002\0076\000\000\004\202\000\000\000\000\007>\002~\000\000\006\142\006\154\000\000\006\178\006\190\006\214\bV\000\000\003\146\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\222\0022\000\000\006\226\006\230\006\234\006\238\002:\000\000\000\000\000\000\006\242\006\246\002\242\003\026\006\250\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\006\254\007\002\000\213\003\154\000\000\000\000\007\006\000\000\000\000\000\n\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\007\014\000\000\015\145\000\000\000\000\015\145\000\000\000\000\000\000\006\t\000\000\000\000\000\000\007\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007*\000\000\003*\000\000\015\145\015\145\0072\000\000\000\000\015\145\000\000\000\000\t\029\015\145\000\000\0076\000\000\000\000\000\000\015\145\007>\002~\015\145\015\145\000\000\015\145\015\145\000\000\000\000\000\000\000\000\015\145\000\000\004\198\000\000\015\145\000\000\000\000\015\145\000\000\015\145\015\145\0032\000\000\000\000\000\000\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\000\015\145\000\000\015\145\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\162\003:\015\145\000R\000V\000Z\000\146\n\162\000\150\011\026\000\154\000\158\000\162\000^\011\030\000\170\000\174\000\000\000v\025f\000\182\011\"\000\186\001\146\001\150\000z\011&\025j\000\000\015\145\015\145\000\000\015\145\015\145\000\000\000\000\015\145\000\000\000\000\000\000\000\000\001\154\015!\000\000\000\000\015!\000\000\001\170\000\000\000\000\015\145\000\000\000\000\015\145\015\145\015\145\015\145\015\145\000~\000\000\000\000\015\145\015\145\015\145\000\000\015\145\015\145\015\145\015!\015!\000\000\000\000\000\000\015!\000\000\000\000\000\000\015!\001\158\000\000\000\000\000\000\000\000\015!\000\000\000\000\015!\015!\000\000\015!\015!\000\000\000\000\001\162\000\000\015!\000\000\004\198\000\000\015!\000\000\000\000\015!\000\000\015!\015!\000\000\000\000\000\000\000\000\000\000\000\000\011V\011Z\000\000\n\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015!\000\000\015!\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\015!\004\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\001\011^\015!\015!\000\000\015!\015!\000\000\000\000\015!\000\000\006\001\000\000\000\000\000\000\015]\006\001\000\000\015]\000\000\000\000\000\000\000\000\015!\000\000\000\000\015!\015!\015!\015!\015!\000\000\000\000\000\000\015!\015!\015!\000\000\015!\015!\015!\015]\015]\000\000\000\000\000\000\015]\000\000\000\000\r\n\015]\000\000\000\000\000\000\000\000\000\000\015]\000\000\000\000\015]\015]\000\000\015]\015]\000\000\000\000\r\018\000\000\015]\r\030\000\000\000\000\015]\000\000\000\000\015]\000\000\015]\015]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\225\000\000\000\000\001\225\000\000\000\000\000\000\000\000\000\000\015]\000\000\015]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015]\000\000\000\000\000\000\001\225\001\225\000\000\r*\000\000\001\225\000\000\000\000\000\000\001\225\000\000\000\000\000\000\000\000\000\000\001\225\000\000\000\000\001\225\001\225\000\000\001\225\001\225\015]\015]\000\000\015]\001\225\r.\000\000\015]\001\225\000\000\000\000\001\225\000\000\001\225\001\225\000\000\r6\001\225\000\000\000\000\000\000\000\000\000\000\000\000\015]\000\000\015]\000\000\000\000\000\000\000\000\000\000\015]\015]\015]\000\000\015]\015]\015]\000\000\001\225\001\225\001\225\000\000\000\000\001\225\000\000\000\000\000\000\001\225\000\000\000\000\000\000\001\225\000\000\001\225\000\000\000\000\001\225\001\225\000\000\001\225\001\225\000\000\000\000\000\000\000\000\001\225\000\000\000\000\000\000\001\225\000\000\000\000\001\225\000\000\001\225\001\225\000\000\000\000\001\225\002\186\000\000\001\225\001\225\000\000\000\000\001\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\225\000\000\001\225\001\225\001\225\001\225\001\225\000\000\000\000\000\000\000\000\003\254\001\225\001\225\000\000\001\225\001\225\001\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\225\002\194\000\000\001\225\001\225\000\000\000\000\001\225\000\000\000\000\000\000\000\000\000\000\001i\000\000\000\000\001i\000\000\000\000\000\000\000\000\001\225\000\000\000\000\001\225\001\225\001\225\001\225\000\000\000\000\000\000\000\000\003\242\001\225\001\225\000\000\001\225\001\225\001\225\001i\001i\000\000\000\000\000\000\001i\000\000\000\000\000\000\001i\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001i\001i\000\000\001i\001i\000\000\000\000\000\000\000\000\001i\000\000\000\000\000\000\001i\000\000\000\000\003\002\000\000\003\018\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001i\000\000\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001i\003\249\003\249\003\249\003\249\000\000\003\249\000\000\003\249\003\249\003\249\003\249\000\000\003\249\003\249\000\000\003\249\000\000\003\249\000\000\003\249\003\249\003\249\003\249\000\000\000\000\000\000\001i\000\000\000\000\001i\001i\000\000\001\210\003\n\000\000\000\000\000\000\000\000\003\249\001]\000\000\000\000\001]\000\000\003\249\000\000\000\000\001i\000\000\000\000\001i\001i\001i\001i\001i\003\249\000\000\000\000\000\000\001i\001i\000\000\001i\001i\001i\001]\001]\000\000\000\000\000\000\001]\000\000\000\000\000\000\001]\003\249\000\000\000\000\000\000\000\000\001]\003\249\000\000\001]\001]\000\000\001]\001]\000\000\000\000\003\249\000\000\001]\000\000\000\000\000\000\001]\000\000\000\000\003\002\000\000\001]\001]\000\000\003\249\003\249\000\000\000\000\000\000\000\000\000\000\000\000\003\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001]\000\000\001]\000\000\000\000\000\000\000\000\000\000\000\000\003\249\000\000\000\000\000\000\001]\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\001]\000\000\000\000\001]\001]\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\001a\003\249\000\000\001a\000\000\001\170\000\000\000\000\001]\000\000\000\000\001]\001]\001]\001]\001]\000~\000\000\000\000\000\000\001]\001]\000\000\001]\001]\001]\001a\001a\000\000\000\000\000\000\001a\000\000\000\000\000\000\001a\001\174\000\000\000\000\000\000\000\000\001a\001\202\000\000\001a\001a\000\000\001a\001a\000\000\000\000\001\162\000\000\001a\000\000\000\000\000\000\001a\000\000\000\000\003\002\000\000\001a\001a\000\000\001\178\001\182\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001a\000\000\001a\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\001a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001a\000\000\000\000\001a\001a\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\001e\014I\000\000\001e\000\000\000\000\000\000\000\000\001a\000\000\000\000\001a\001a\001a\001a\001a\000\000\000\000\000\000\000\000\001a\001a\000\000\001a\001a\001a\001e\001e\000\000\000\000\000\000\001e\000\000\000\000\000\000\001e\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001e\001e\000\000\001e\001e\000\000\000\000\000\000\000\000\001e\000\000\000\000\000\000\001e\000\000\000\000\003\002\000\000\003\018\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001e\000\000\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001e\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\001e\000\000\000\000\001e\001e\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\001u\000\000\000\000\001u\000\000\001\170\000\000\000\000\001e\000\000\000\000\001e\001e\001e\001e\001e\000~\000\000\000\000\000\000\001e\001e\000\000\001e\001e\001e\002\242\003\026\000\000\000\000\000\000\001u\000\000\000\000\000\000\001u\001\174\000\000\000\000\000\000\000\000\002\250\001\202\000\000\001u\001u\000\000\001u\001u\000\000\000\000\001\162\000\000\001u\000\000\000\000\000\000\001u\000\000\000\000\003\002\000\000\003\018\001u\000\000\001\178\001\182\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001u\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\001u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001u\000\000\000\000\001u\001u\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\001m\002\197\000\000\001m\000\000\000\000\000\000\000\000\001u\000\000\000\000\001u\001u\001u\001u\001u\000\000\000\000\000\000\000\000\001u\001u\000\000\001u\001u\001u\002\242\003\026\000\000\000\000\000\000\001m\000\000\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001m\001m\000\000\001m\001m\000\000\000\000\000\000\000\000\001m\000\000\000\000\000\000\001m\000\000\000\000\003\002\000\000\003\018\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001m\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001m\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\001m\000\000\000\000\001m\001m\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\001q\000\000\000\000\001q\000\000\001\170\000\000\000\000\001m\000\000\000\000\001m\001m\001m\001m\001m\000~\000\000\000\000\000\000\001m\001m\000\000\001m\001m\001m\002\242\003\026\000\000\000\000\000\000\001q\000\000\000\000\000\000\001q\001\174\000\000\000\000\000\000\000\000\002\250\001\202\000\000\001q\001q\000\000\001q\001q\000\000\000\000\001\162\000\000\001q\000\000\000\000\000\000\001q\000\000\000\000\003\002\000\000\003\018\001q\000\000\001\178\001\182\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001q\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\001q\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\001q\000\000\000\000\001q\001q\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\001y\002\189\000\000\001y\000\000\000\000\000\000\000\000\001q\000\000\000\000\001q\001q\001q\001q\001q\000~\000\000\000\000\000\000\001q\001q\000\000\001q\001q\001q\002\242\003\026\000\000\000\000\000\000\001y\000\000\000\000\000\000\001y\001\158\000\000\000\000\000\000\000\000\002\250\tf\000\000\001y\001y\000\000\001y\001y\000\000\000\000\001\162\000\000\001y\000\000\tj\tn\003\"\000\000\000\000\003\002\000\000\003\018\001y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tv\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001y\001y\000\000\000\000\003\n\000\000\000\000\000\000\004)\000\000\001\129\000\000\000\000\001\129\000\000\000\000\000\000\000\000\001y\000\000\000\000\001y\001y\001y\001y\001y\000\000\000\000\000\000\000\000\001y\001y\000\000\001y\001y\001y\002\242\003\026\000\000\000\000\000\000\001\129\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001\129\001\129\000\000\001\129\001\129\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\129\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\0032\000\000\000\000\001\129\001\129\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\003\146\000\000\000\000\001}\000\000\000\000\000\000\000\000\001\129\000\000\000\000\001\129\001\129\001\129\001\129\001\129\000~\000\000\000\000\000\000\001\129\001\129\000\000\001\129\003:\001\129\002\242\003\026\000\000\000\000\000\000\001}\000\000\000\000\000\000\001}\001\158\000\000\000\000\000\000\000\000\002\250\tf\000\000\001}\001}\000\000\001}\001}\000\000\000\000\001\162\000\000\001}\000\000\tj\tn\003\"\000\000\000\000\003\002\000\000\003\018\001}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\001}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tv\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001}\001}\000\000\000\000\003\n\000\000\000\000\000\000\tE\000\000\003\146\000\000\000\000\001\133\000\000\000\000\000\000\000\000\001}\000\000\000\000\001}\001}\001}\001}\001}\000\000\000\000\000\000\000\000\001}\001}\000\000\001}\003:\001}\002\242\003\026\000\000\000\000\000\000\001\133\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001\133\001\133\000\000\001\133\003\154\000\237\000\000\000\000\000\237\001\133\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\002\250\001\133\000\000\000\000\000\237\000\000\000\237\000\237\000\000\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\237\000\000\000\000\003\002\002\213\003\018\000\000\000\000\000^\002\213\000\000\000f\000\000\000v\002\213\000\000\002\213\000\000\000\000\000\000\000z\002\213\002\213\0032\000\000\000\000\001\133\001\133\000\000\000\000\003\n\000\000\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\001\133\000\000\000\000\001\133\001\133\001\133\001\133\001\133\000\000\000~\002\213\000\000\001\133\001\133\002\213\001\133\003:\001\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\237\002\213\002\213\000\237\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\000\138\000\000\000\000\000\000\000\000\000\237\000\000\002\213\000\000\000\237\000\237\000\000\002\213\002\213\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\237\002\213\000\000\002\209\000\000\002\213\000\000\000^\002\209\000\000\000f\000\000\000v\002\209\000\000\002\209\002\213\000\000\000\000\000z\002\209\002\209\000\000\000\000\000\000\000\000\002\213\000\000\000\000\000\000\000\000\002\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000~\002\209\000\000\000\000\000\000\002\209\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\000\000\002\213\002\213\000\000\000\000\002\213\002\209\002\209\000\000\002\230\002\213\002\213\003B\000\000\000\000\002\213\000\000\000\000\000\000\002\209\000\000\000\138\000\000\000\000\000\000\000\000\000\000\000\000\002\209\000\000\000\000\000\000\000\000\002\209\002\209\003r\003z\003\146\000\000\000\000\002=\000\000\000\000\002\209\002=\000\000\000\000\002\209\000\000\000\000\003\130\000\000\000\000\002=\002=\000\193\003\138\003\170\002\209\000\000\000\000\000\000\002=\002\242\003\026\000\000\003\178\000\000\002\209\003\186\000\000\003\194\002=\002\209\000\000\000\000\000\000\000\000\002\250\000\000\000\000\002\242\003\026\000\000\000\201\000\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\"\000\000\002\250\003\002\003\202\003\018\002=\000\000\000\193\000\193\000\000\000\000\002\209\000\000\000\000\002\209\002\209\002=\000\193\002\209\000\000\003\002\000\000\003\018\002\209\002\209\000\000\000\000\000\000\002\209\000\000\000\000\003*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\210\000\000\000\000\002=\002=\000\000\003*\003\218\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\145\000\000\000\000\000\000\000\000\002=\000\000\000\000\002=\002=\002=\002=\0032\000\000\000\000\000\000\000\000\002=\002=\003\n\003\226\003\234\002=\002\242\003\026\000\000\000\000\000\000\000\145\000\000\000\193\000\000\000\145\000\201\000\000\000\000\000\000\003\n\002\250\000\000\000\201\000\145\000\145\000\000\000\145\000\145\000\000\000\000\000\201\003:\000\145\000\193\000\000\000\000\003\"\000\000\000\000\003\002\000\193\003\018\000\145\000\000\000\000\000\000\000\000\000y\000\193\000\193\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\145\000\000\000\000\000y\000y\000\000\000\000\000\000\000y\000\000\000\000\000\145\000y\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000y\000y\000\000\000y\000y\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\000y\000\000\000\000\003\002\0032\003\018\000y\000\145\000\145\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\145\000\145\000\145\000\145\000y\000\000\000y\000\000\000\000\000\145\000\145\000\000\000\145\003:\000\145\000\000\000\000\000y\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000y\000\000\000\000\000y\000y\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\000u\000\000\000\000\000u\000\000\000\000\000\000\000\000\000y\000\000\000\000\000y\000y\000y\000y\000\000\000~\000\000\000\000\000\000\000y\000y\000\000\000y\000y\000y\000u\000u\000\000\000\000\000\000\000u\000\000\000\000\000\000\000u\001\158\000\000\000\000\000\000\000\000\002\250\tf\000\000\000u\000u\000\000\000u\000u\000\000\000\000\001\162\000\000\000u\000\000\tj\tn\000u\000\000\000\000\003\002\000\000\003\018\000u\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\000\000\000u\000\000\000\000\000m\000m\000\000\000\000\000\000\000m\000\000\000\000\000u\000m\000\000\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000\000\000m\000m\000\000\tv\000\000\000\000\000m\000\000\000\000\000\000\000m\000\000\000\000\003\002\000u\000m\000m\000u\000u\000\000\000\000\003\n\000\000\000\000\000\000\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\000\000\000\000\000u\000u\000u\000u\000m\000\000\000m\000\000\000\000\000u\000u\000\000\000u\000u\000u\000\000\000\000\000m\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\003\146\000\000\000\000\000\153\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000m\000m\000\000\000~\000\000\000\000\000\000\000m\000m\000\000\000m\000m\000m\002\242\003\026\000\000\000\000\000\000\000\153\000\000\000\000\000\000\000\153\001\158\000\000\000\000\000\000\000\000\002\250\026\"\000\000\000\153\000\153\000\000\000\153\003\154\000\000\000\000\001\162\000\000\000\153\000\000\026&\tn\003\"\000\000\000\000\003\002\000\000\003\018\000\153\000\000\000\000\000\000\000\000\003\146\000\000\000\000\000\141\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\153\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\141\000\000\000\000\000\153\000\141\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\141\000\141\000\000\000\141\000\141\000\000\026*\000\000\000\000\000\141\000\000\000\000\000\000\003\"\000\000\000\000\003\002\0032\003\018\000\141\000\153\000\153\000\000\000\000\003\n\000\000\000\000\000\000\004!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\153\000\000\000\000\000\153\000\153\000\153\000\153\003*\000\000\000\141\000\000\000\000\000\153\000\153\000\000\003\162\003:\000\153\000\000\000\000\000\141\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\0032\000\000\000\000\000\141\000\141\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\000\133\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\141\000\000\000\000\000\141\000\141\000\141\000\141\000\000\000~\000\000\000\000\000\000\000\141\000\141\000\000\000\141\003:\000\141\002\242\003\026\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\133\001\158\000\000\000\000\000\000\000\000\002\250\026\"\000\000\000\133\000\133\000\000\000\133\000\133\000\000\000\000\001\162\000\000\000\133\000\000\026&\tn\000\133\000\000\000\000\003\002\000\000\003\018\000\133\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\133\000\000\000\000\000q\000q\000\000\000\000\000\000\000q\000\000\000\000\000\133\000q\000\000\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000\000\000q\000q\000\000\026*\000\000\000\000\000q\000\000\000\000\000\000\000q\000\000\000\000\003\002\000\133\000q\000q\000\133\000\133\000\000\000\000\003\n\000\000\000\000\000\000\t)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\133\000\133\000\133\000\133\000q\000\000\000q\000\000\000\000\000\133\000\133\000\000\000\133\000\133\000\133\000\000\000\000\000q\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\000}\000\000\000\000\000}\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000q\000q\000\000\000~\000\000\000\000\000\000\000q\000q\000\000\000q\000q\000q\002\242\003\026\000\000\000\000\000\000\000}\000\000\000\000\000\000\000}\001\158\000\000\000\000\000\000\000\000\002\250\026\"\000\000\000}\000}\000\000\000}\000}\000\000\000\000\001\162\000\000\000}\000\000\026&\tn\000}\000\000\000\000\003\002\000\000\003\018\000}\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\129\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000}\000\000\000}\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\129\000\000\000\000\000}\000\129\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\129\000\129\000\000\000\129\000\129\000\000\026*\000\000\000\000\000\129\000\000\000\000\000\000\000\129\000\000\000\000\003\002\000}\003\018\000\129\000}\000}\000\000\000\000\003\n\000\000\000\000\000\000\002\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000}\000\000\000\000\000}\000}\000}\000}\003*\000\000\000\129\000\000\000\000\000}\000}\000\000\000}\000}\000}\000\000\000\000\000\129\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\000\000\000\170\000\174\000\000\000v\000\000\000\182\000\000\000\186\001\146\001\150\000z\000\000\000\000\000\000\000\129\000\000\000\000\000\129\000\129\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\154\003\146\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\129\000\129\000\129\000\129\000\000\000~\000\000\000\000\000\000\000\129\000\129\000\000\000\129\000\129\000\129\002\242\003\026\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\149\001\158\000\000\000\000\000\000\000\000\002\250\t~\000\000\000\149\000\149\000\000\000\149\003\154\000\000\000\000\001\162\000\000\000\149\000\000\tj\tn\003\"\000\000\000\000\003\002\000\000\003\018\000\149\000\000\000\000\000\000\000\000\000\137\000\000\000\000\000\137\000\000\tr\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\149\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\137\000\000\000\000\000\149\000\137\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\137\000\137\000\000\000\137\000\137\000\000\000\000\000\000\000\000\000\137\000\000\000\000\000\000\003\"\000\000\000\000\003\002\0032\003\018\000\137\000\149\000\149\000\000\000\000\003\n\000\000\000\000\000\000\tU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\149\000\149\000\149\000\149\003*\000\000\000\137\000\000\000\000\000\149\000\149\000\000\000\149\003:\000\149\000\000\000\000\000\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\185\0032\000\000\000\000\000\137\000\137\000\000\000\000\003\n\000\000\000\000\r\185\000\000\r\185\012\t\012\t\000\000\r\185\000\000\000\000\012\t\000\000\000\137\r\185\000\173\000\137\000\137\000\137\000\137\r\185\000\000\000\000\r\185\000\000\000\137\000\137\r\185\000\137\000\137\000\137\000\000\000\000\r\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\173\000\000\r\185\000\000\000\000\012\t\000\000\r\185\r\185\000\000\000\000\000\000\000\000\000\000\000\173\000\000\000\000\000\000\000\000\000\000\000\173\000\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\000\000\000\003\002\000\000\000\173\012\t\000\000\r\185\000\000\000\000\r\185\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\r\185\000\000\000\000\000\000\000\000\r\185\r\185\r\185\000\173\r\185\r\185\000\000\r\185\000\000\000\000\002\002\000\000\000\000\002\006\r\185\000\000\000\000\r\185\000\000\002\018\002\022\000\000\002\030\000\000\007\030\000\000\000\000\000\000\000\000\002&\000\000\002*\r\185\000\000\000\000\000\000\000\000\r\185\r\185\012\t\002.\0022\000\000\000\173\br\0026\001\"\002:\000\000\000\000\003\n\002>\002B\000\000\000\000\002F\002J\000\000\000\000\000\000\000\000\000\000\015u\000\000\000\173\015u\000\000\000\000\000\000\000\000\000\000\000\173\000\000\002N\000\000\000\000\000\000\000\000\002R\000\173\000\173\000\n\000\000\000\000\000\000\000\000\000\000\000\000\015u\015u\002Z\000\000\000\000\015u\000\000\000\000\000\000\015u\000\000\000\000\000\000\002^\t\249\015u\000\000\000\000\015u\015u\000\000\015u\015u\000\000\000\000\000\000\002b\015u\000\000\004\198\000\000\015u\002n\000\000\015u\t\249\015u\015u\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\002v\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015u\000\000\015u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000\000\000\000\015u\015u\000\000\015u\000\000\000\000\000\000\015u\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\018\002\022\000\000\002\030\000\000\004\198\015u\000\000\015u\000\000\002&\000\000\002*\000\000\015u\015u\015u\000\000\015u\015u\015u\002.\0022\000\000\000\000\000\000\0026\001\"\002:\000\000\000\000\000\000\002>\002B\000\000\000\000\002F\002J\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\000\000\000\000\002N\000\000\000\000\000\000\000\000\002R\000\000\012b\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\002\022\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002b\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\t\249\000\000\002>\002B\002\134\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\249\000\000\000\000\001\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002N\000\000\000\000\000\000\000\000\002R\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\001\249\001\249\002Z\000\000\000\000\001\249\000\000\000\000\000\000\001\249\000\000\000\000\000\000\002^\000\000\001\249\000\000\000\000\001\249\001\249\000\000\001\249\001\249\000\000\000\000\000\000\002b\001\249\000\000\000\000\000\000\001\249\002n\000\000\001\249\000\000\001\249\001\249\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\002v\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\249\000\000\001\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000\000\001\249\rJ\000\000\001\249\t\249\000\000\000\000\001\249\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\002\018\002\022\000\000\002\030\000\000\001\249\000\000\001\249\000\000\000\000\002&\000\000\002*\rR\001\249\001\249\000\000\001\249\001\249\001\249\000\000\002.\0022\000\000\000\000\000\000\0026\001\"\002:\000\000\000\000\000\000\002>\002B\000\000\000\000\002F\002J\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\250\000\000\000\000\002N\000\000\000\000\000\000\000\000\002R\000\000\018\202\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\002\022\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002b\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002\134\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\002N\000\000\000\000\000\000\000\000\002R\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\t\030\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002b\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002\134\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\t\014\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002j\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002r\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\b\246\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002j\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002r\000\000\002F\002J\000\000\002v\002~\000\000\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\n\000\000\000\000\000\000\000\000\002\002\000\000\000\000\002\006\002Z\000\000\000\000\000\000\000\000\002\018\002V\000\000\002\030\000\000\000\000\002^\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\002j\000\000\002.\0022\000\000\000\000\002n\0026\001\"\002:\000\000\000\000\000\000\002>\002B\002r\000\000\002F\002J\000\000\002v\002~\000\000\000R\000\000\000\000\000\000\000\000\000\000\007\245\020v\000\000\000\000\000\000\007\245\002N\000\000\000\000\000\000\007\245\002f\007\245\020z\000\n\001\150\000\000\007\245\007\245\000\000\022\006\000\000\000\000\002Z\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\000\000\000\000\000\002^\000\000\020\138\000\000\007\245\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\000\002j\000\000\020\154\007\245\000\000\000\000\002n\007\245\020\158\000\000\000\000\000\000\000\000\000\000\000\000\002r\000\000\000\000\000\000\022\002\002v\002~\007\245\007\245\020\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\245\000\000\000\000\007\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\245\000\000\000\000\000\000\000\000\007\245\007\245\000\000\000\000\0121\000\000\020\166\000\000\000\000\020\170\007\245\000\000\000\000\000\000\007\245\000\000\000\000\000\000\000\000\000\000\022\018\000\000\020\174\000\000\000\000\007\245\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\007\245\000\000\000\000\000\000\000\000\007\245\020\198\000\000\000\000\020\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\020\206\002\n\000\000\000\000\002\014\020\210\020\214\0121\000\000\000\000\000\000\000\000\000\000\000\000\007\245\000\000\000\000\007\245\007\245\000\000\002\002\007\245\000\000\002\006\000\000\000\000\007\245\007\245\000\000\002\"\004\146\007\245\002\030\000\000\004\166\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\206\0022\000\000\000\000\000\000\004\210\001\"\002:\000\185\000\000\000\000\004\214\004\218\000\000\000\000\004\222\002J\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\000\000\000\000\000\000\000\000\004\226\002\242\003\026\000\000\000\000\004\230\000\000\000\000\000\n\002\002\000\000\000\000\002\006\000\000\000\000\000\000\002\250\004\238\002\018\004\178\000\000\002\030\000\185\000\185\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\185\000\000\000\000\003\002\000\000\003\018\000\000\002.\0022\004\242\000\000\000\000\0026\001\"\002:\004\250\000\000\000\000\002>\002B\000\000\000\000\002F\002J\004\254\000\000\000\000\000\000\000\000\005\006\002~\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\n\000\000\000\000\006j\000\000\000\000\000\000\000\000\000\000\002Z\000\000\000\000\000\000\003\225\000\000\003\225\000\000\000\000\003\225\000\000\002^\003\225\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\003\n\000\000\002j\000\000\000\000\000\000\003\225\000\000\002n\003\225\000\000\000\000\000\000\000\000\000\185\003\225\003\225\002r\003\225\000\000\000\000\000\185\002v\002~\000\000\003\225\000\000\003\225\000\000\000\185\000\185\000\000\000\000\000\000\000\000\000\000\003\225\003\225\000\000\000\000\000\000\003\225\003\225\003\225\000\000\000\000\000\000\003\225\003\225\000\000\000\000\003\225\003\225\000\000\001\242\000\000\000\190\000\000\000\000\001\246\000\000\000\000\001\254\000\000\000\000\000\000\000\000\000\000\000\000\003\225\000\000\000\000\000\000\000\000\003\225\000\000\000\000\003\225\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\003\225\002\018\012N\000\000\002\030\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\000\002*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002.\0022\003\225\000\000\000\000\0026\001\"\002:\003\225\000\000\000\000\002>\002B\000\000\000\000\002F\002J\003\225\000\000\000\000\000\000\000\000\003\225\003\225\000\000\000\000\000\000\000\000\020v\000\000\000\000\000\000\000\000\002N\000\000\000\000\000\000\000\000\002f\000\000\020z\000\n\000\000\000\000\000\000\000\000\000\000\023\006\000\000\000\000\002Z\020~\000\000\020\130\012]\012]\000\000\020\134\000\000\000\000\000\000\002^\000\000\020\138\000\000\000\000\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\189\002j\000\000\020\154\000\000\000\000\000\000\002n\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\002r\000\000\000\000\000\000\020v\002v\002~\012]\000\000\020\162\002\242\003\026\000\000\000\000\000\000\000\000\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\250\000\000\020~\000\000\020\130\000\000\000\189\000\189\020\134\000\000\000\000\0121\000\000\012]\020\138\020\166\000\189\000\000\020\170\003\002\020\142\003\018\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\020\174\000\000\020\158\000\000\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\023\130\022\150\000\000\0121\003*\020\162\020\198\000\000\000\000\020\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\000\000\000\000\000\000\020\210\020\214\012]\000\000\000\000\0121\000\000\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\000\000\000\003\n\020\174\000\000\000\000\000\000\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\189\r~\000\000\000\000\r\134\000\000\020\198\000\189\000\000\020\202\000\000\000\000\000\000\000\000\000\000\000\189\000\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\000\000\r\150\r\158\020\210\020\214\0121\002M\000\000\000\000\000\000\002M\000\000\000\000\000\000\000\000\000\000\r\166\000\000\000\000\002M\002M\000\000\r\174\r\182\000\000\000\000\000\000\001E\002M\000\000\001E\000\000\r\190\000\000\000\000\r\198\000\000\r\206\002M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\001E\000\000\000\000\000\000\001E\000\000\r\214\000\000\002M\000\000\002\250\000\000\000\000\001E\001E\000\000\001E\001E\000\000\002M\000\000\000\000\001E\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001E\000\000\000\000\000R\000V\000Z\000\146\000\000\000\150\000\000\000\154\000\158\000\162\000^\r\222\000\170\000\174\002M\000v\000\000\000\182\r\230\000\186\001\146\001\150\000z\003*\000\000\001E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002M\001E\002M\001\154\000\000\000\000\000\000\000\000\000\000\002M\002M\000\000\r\238\r\246\002M\000\000\000\000\000\000\000\000\000\000\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001E\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001\158\001-\000\000\000\000\001-\000\000\0262\000\000\000\000\000\000\000\000\000\000\001E\000\000\001E\001\162\000\000\000\000\000\000\026&\tn\001E\001E\000\000\001E\003:\001E\001-\001-\000\000\000\000\000\000\001-\000\000\000\000\000\000\001-\tr\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001-\001-\000\000\001-\001-\000\000\000\000\000\000\001)\001-\000\000\001)\000\000\001-\000\000\000\000\003\002\000\000\003\018\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\001)\000\000\000\000\000\000\001)\000\000\000\000\000\000\001)\000\000\001-\000\000\001-\000\000\002\250\000\000\000\000\001)\001)\000\000\001)\001)\000\000\001-\t9\000\000\001)\000\000\000\000\000\000\001)\000\000\000\000\003\002\000\000\003\018\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001-\000\000\000\000\001-\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\001)\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001-\001)\001-\000\000\000\000\000\000\000\000\000\000\000\000\001-\001-\000\000\001-\001-\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\001)\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\001!\000\000\000\000\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\001)\001)\000\000\001)\001)\001)\001!\001!\000\000\000\000\000\000\001!\000\000\000\000\000\000\001!\000\000\000\000\000\000\000\000\000\000\001!\000\000\000\000\001!\001!\000\000\001!\001!\000\000\000\000\000\000\003\146\001!\000\000\001M\000\000\001!\000\000\000\000\003\002\000\000\001!\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\001M\000\000\000\000\000\000\001M\000\000\001!\000\000\001!\000\000\002\250\000\000\000\000\001M\001M\000\000\001M\003\154\000\000\001!\000\000\000\000\001M\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000\000\000\000\001!\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\003*\000\000\001M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\001M\001!\000\000\000\000\000\000\000\000\000\000\000\000\001!\001!\000\000\001!\001!\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001M\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\003\146\000\000\000\000\001A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001M\000\000\001M\000\000\000\000\000\000\000\000\000\000\000\000\001M\001M\000\000\003\162\003:\001M\002\242\003\026\000\000\000\000\000\000\001A\000\000\000\000\000\000\001A\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\001A\001A\000\000\001A\001A\000\000\000\000\000\000\0019\001A\000\000\0019\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\0019\000\000\000\000\000\000\0019\000\000\003*\000\000\001A\000\000\002\250\000\000\000\000\0019\0019\000\000\0019\0019\000\000\001A\000\000\000\000\0019\000\000\000\000\000\000\0019\000\000\000\000\003\002\000\000\003\018\0019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001A\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\003*\000\000\0019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001A\0019\001A\000\000\000\000\000\000\000\000\000\000\000\000\001A\001A\000\000\001A\003:\001A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0019\000\000\000\000\0019\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0019\000\000\0019\000\000\000\000\000\000\000\000\000\000\000\000\0019\0019\000\000\0019\0019\0019\001%\001%\000\000\000\000\000\000\001%\000\000\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\001%\001%\000\000\001%\001%\000\000\000\000\000\000\0011\001%\000\000\0011\000\000\001%\000\000\000\000\003\002\000\000\001%\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\0011\000\000\000\000\000\000\0011\000\000\001%\000\000\001%\000\000\002\250\000\000\000\000\0011\0011\000\000\0011\0011\000\000\001%\000\000\000\000\0011\000\000\000\000\000\000\0011\000\000\000\000\003\002\000\000\003\018\0011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\001%\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\0011\000\000\0011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\0011\001%\000\000\000\000\000\000\000\000\000\000\000\000\001%\001%\000\000\001%\001%\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0011\000\000\000\000\0011\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\0015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0011\000\000\0011\000\000\000\000\000\000\000\000\000\000\000\000\0011\0011\000\000\0011\0011\0011\002\242\003\026\000\000\000\000\000\000\0015\000\000\000\000\000\000\0015\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\0015\0015\000\000\0015\0015\000\000\000\000\000\000\003\146\0015\000\000\001I\000\000\0015\000\000\000\000\003\002\000\000\003\018\0015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\003\146\000\000\000\000\001I\000\000\000\000\000\000\001I\000\000\003*\000\000\0015\000\000\002\250\000\000\000\000\001I\001I\000\000\001I\003\154\000\000\0015\000\000\000\000\001I\002\242\003\026\000\000\003\"\000\000\000\000\003\002\000\000\003\018\001I\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\000\000\000\000\000\000\000\000\209\003\154\0015\000\000\000\000\0015\000\000\000\000\000\000\003\n\003\"\000\000\000\000\003\002\003*\003\018\001I\000\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\001I\0015\000\000\000\000\000\000\000\000\000\000\000\000\0015\0015\000\000\0015\0015\0015\000\000\003*\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001I\002\250\000\000\000\000\003\n\000\000\000\000\000\197\000\197\000\000\001=\000\000\000\000\001=\000\000\000\000\000\000\003\"\000\000\000\000\003\002\001I\003\018\001I\000\000\0032\000\000\000\000\000\000\000\000\001I\001I\003\n\001I\003:\001I\002\242\003\026\000\000\000\000\000\000\001=\000\000\000\000\000\000\001=\000\209\000\000\000\000\003*\000\000\002\250\000\000\000\209\001=\001=\000\000\001=\001=\000\000\000\000\000\209\003:\001=\000\000\000\000\000\000\003\"\000\000\023n\003\002\023v\003\018\001=\000\000\000\000\000\000\000\000\000\000\000\000\023~\000\000\000\000\000\000\000\000\023\158\000\000\000\000\000\000\0032\000\000\000\000\020z\000\000\000\000\000\000\003\n\000\000\000\000\003*\000\000\001=\000\000\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\197\000\000\001=\000\000\000\000\020\138\000\000\000\197\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\197\000\197\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\0032\000\000\000\000\001=\000\000\000\000\000\000\003\n\000\000\000\000\000\000\020\162\023\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001=\000\000\001=\000\000\000\000\000\000\000\000\000\000\000\000\001=\001=\000\000\001=\001=\001=\000\000\000\000\000\000\020\166\006A\000\000\020\170\000\000\000\000\006A\000\000\000\000\000\000\000\000\006A\000\000\006A\000\000\000\000\020\174\000\000\006A\006A\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\006A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006A\000\000\020\206\000\000\006A\000\000\000\000\020\210\020\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015A\006A\006A\015A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004j\000\000\000\000\006A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006A\000\000\000\000\015A\015A\006A\006A\000\000\000\000\000\000\000\000\005\030\000\000\000\000\000\000\006A\000\000\000\000\015A\006A\000\000\000\000\015A\000\000\015A\015A\000\000\000\000\005&\000\000\006A\006*\000\000\000\000\015A\000\000\000\000\015A\000\000\015A\006A\000\000\000\000\000\000\000\000\006A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\190\000\000\000\000\004\170\015A\000\000\004\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006A\000\000\000\000\006A\006A\000\000\002\002\006A\0066\000\000\000\000\000\000\006A\006A\000\000\006\142\006\154\006A\000\000\000\000\006\174\000\000\000\000\000\000\000\000\002&\000\000\002*\015A\015A\000\000\015A\000\000\006:\000\000\015A\006\222\0022\000\000\000\000\000\000\006\234\001\"\002:\006B\000\000\000\000\006\242\006\246\015A\000\000\006\250\000\000\015A\015A\000\000\000\000\000\000\000\000\000\000\015A\000\000\000\000\000\000\015A\015A\000\000\000\000\006\254\007\002\000\000\000\000\000\000\000\000\007\006\000\000\000\000\000\n\000\000\001\242\000\000\000\190\000\000\000\000\012F\000\000\007\014\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\007*\000\000\012\182\012\162\000\000\000\000\0072\r\254\000\000\000\000\000\000\000\000\002&\000\000\002*\0076\000\000\000\000\000\000\000\000\007>\002~\000\000\012\186\0022\000\000\000\000\000\000\012\190\001\"\002:\000\000\000\000\000\000\012\194\012\198\000\000\020v\012\202\000\000\000\000\000\000\000\000\000\000\000\000\020v\000\000\000\000\000\000\020z\000\000\000\000\000\000\000\000\000\000\006\254\012\206\020z\000\000\000\000\020~\012\210\020\130\000\000\000\n\000\000\020\134\000\000\020~\000\000\020\130\000\000\020\138\012\218\020\134\000\000\000\000\000\000\020\142\000\000\020\138\020\150\000\000\000\000\000\000\020\154\020\142\000\000\000\000\020\150\000\000\020\158\000\000\020\154\000\000\000\000\000\000\012\222\000\000\020\158\000\000\000\000\022\222\012\230\000\000\000\000\000\000\020\162\000\000\000\000\023F\000\000\012\234\000\000\000\000\020\162\000\000\012\242\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0121\000\000\020\166\000\000\000\000\020\170\000\000\000\000\0121\000\000\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\020\174\000\000\000\000\000\000\000\000\020\178\000\n\020\182\020\174\020\186\020\190\000\000\020\194\020\178\000\n\020\182\000\000\020\186\020\190\020\198\020\194\000\000\020\202\000\000\t\241\000\000\000\000\020\198\000\000\000\000\020\202\000\000\000\000\000\000\000\000\000\000\t\241\020\206\000\000\000\000\000\000\000\000\020\210\020\214\0121\020\206\000\000\t\241\000\000\t\241\020\210\020\214\0121\t\241\000\000\000\000\000\000\000\000\000\000\t\241\000\000\000\000\000\000\b\173\000\000\t\241\000\000\000\000\t\241\000\000\000\000\000\000\t\241\021^\000\000\b\173\000\000\000\000\t\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\173\000\000\b\173\000\000\000\000\000\000\b\173\000\000\t\241\000\000\000\000\000\000\b\173\000\000\000\000\000\000\000\000\000\000\b\173\000\000\000\000\b\173\000\000\000\000\000\000\b\173\000\000\000\000\000\000\000\000\000\000\b\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\241\000\000\000\000\t\241\000\000\000\000\000\000\000\000\b\173\023\166\000\000\000\000\000\000\000\000\000\000\000\000\t\241\000\000\000\000\000\000\000\000\t\241\t\241\t\241\000\000\t\241\t\241\000\000\t\241\000\000\000\000\000\000\000\000\000\000\000\000\t\241\000\000\000\000\t\241\b\173\000\000\000\000\b\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\241\000\000\b\173\000\000\000\000\t\241\t\241\b\173\b\173\b\173\000\000\b\173\b\173\006\229\b\173\000\000\000\000\000\000\000\000\000\000\000\000\b\173\000\000\000\000\b\173\006\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\229\000\000\006\229\b\173\000\000\000\000\006\229\000\000\b\173\b\173\000\000\000\000\006\229\000\000\000\000\000\000\021\230\000\000\006\229\000\000\000\000\006\229\000\000\000\000\000\000\006\229\000\000\000\000\020z\000\000\000\000\006\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\024\174\000\000\000\000\020\134\000\000\006\229\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\229\000\000\000\000\006\229\000\000\000\000\000\000\000\000\020\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\229\000\000\000\000\000\000\000\000\006\229\006\229\006\229\000\000\006\229\006\229\000\000\006\229\000\000\000\000\000\000\000\000\000\000\000\000\006\229\000\000\000\000\006\229\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\229\000\000\020\174\000\000\000\000\006\229\006\229\020\178\000\n\020\182\000\000\020\186\020\190\021\254\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\020\206\000\000\000\000\020\134\000\000\020\210\020\214\000\000\000\000\020\138\000\000\000\000\000\000\020v\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\020z\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\000\020\162\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\022\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\174\000\000\000\000\000\000\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\020\174\000\000\000\000\020\210\020\214\020\178\000\n\020\182\000\000\020\186\020\190\022\218\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\020\206\000\000\000\000\020\134\000\000\020\210\020\214\000\000\000\000\020\138\000\000\000\000\000\000\023B\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\020z\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\000\020\162\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\020\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\174\000\000\000\000\000\000\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020\166\000\000\000\000\020\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\020\174\000\000\000\000\020\210\020\214\020\178\000\n\020\182\000\000\020\186\020\190\020v\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020~\000\000\020\130\020\206\000\000\000\000\020\134\000\000\020\210\020\214\000\000\000\000\020\138\000\000\000\000\000\000\020v\000\000\020\142\000\000\000\000\020\150\000\000\000\000\000\000\020\154\000\000\000\000\020z\000\000\000\000\020\158\000\000\000\000\000\000\015Y\000\000\000\000\015Y\020~\000\000\020\130\000\000\000\000\000\000\020\134\000\000\024z\000\000\000\000\000\000\020\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\150\015Y\015Y\000\000\020\154\000\000\000\000\000\000\000\000\000\000\020\158\000\000\000\000\000\000\000\000\000\000\015Y\000\000\020\166\000\000\015Y\020\170\015Y\015Y\000\000\000\000\020\162\000\000\000\000\000\000\004\198\000\000\015Y\000\000\020\174\015Y\000\000\015Y\000\000\020\178\000\n\020\182\000\000\020\186\020\190\000\000\020\194\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\000\000\000\020\202\020\166\000\000\000\000\020\170\000\000\000\000\000\000\015Y\000\000\000\000\000\000\000\000\000\000\000\000\020\206\000\000\020\174\000\000\000\000\020\210\020\214\020\178\024\166\020\182\000\000\020\186\020\190\000\000\020\194\000\229\000\000\000\000\000\229\000\000\000\000\020\198\000\000\000\000\020\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Y\015Y\000\000\015Y\000\000\000\000\020\206\015Y\000\229\000\229\000\000\020\210\020\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Y\000\000\000\229\000\000\015Y\015Y\000\229\003\146\000\229\000\229\001\017\015Y\000\000\000\000\000\000\015Y\015Y\000\000\000\229\000\000\000\000\003\002\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\250\000\000\000\229\000\000\001\017\000\000\001\017\003\154\000\000\003\146\000\000\000\000\001\005\000\000\000\000\000\000\003\"\000\000\000\000\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\229\000\000\000\000\000\229\000\000\000\000\003*\003\n\002\250\000\000\000\000\000\000\001\005\000\253\001\005\001\005\000\253\000\000\000\000\000\000\000\000\000\229\000\000\000\000\003\"\000\229\000\229\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\229\000\229\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001\017\000\000\000\000\000\000\003\n\002\250\000\000\003*\000\000\000\253\000\000\000\253\000\253\000\000\000\233\000\000\000\000\000\233\001\017\000\000\000\000\000\253\001\017\001\017\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\003\162\003:\000\000\000\000\000\000\000\000\000\000\000\233\000\233\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001\005\000\000\000\000\003*\003\n\000\233\000\000\000\000\000\000\000\233\000\245\000\233\000\233\000\245\000\000\000\000\000\000\000\000\001\005\000\000\000\000\000\233\001\005\001\005\003\002\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\000\001\005\003:\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\253\000\000\000\000\000\253\000\000\000\000\000\000\003\n\002\250\000\000\000\233\000\000\000\245\000\000\000\245\000\245\000\000\000\249\000\000\000\000\000\249\000\253\000\000\000\000\000\245\000\253\000\253\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\253\000\253\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\233\000\000\000\000\000\245\003\n\002\250\000\000\000\000\000\000\000\249\003\146\000\249\000\249\001\r\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\249\000\233\000\233\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\233\000\233\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\245\000\000\000\000\000\245\000\000\000\000\000\000\003\n\002\250\000\000\003*\000\000\001\r\000\000\001\r\003\154\000\000\001\001\000\000\000\000\001\001\000\245\000\000\000\000\003\"\000\245\000\245\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\245\000\245\000\000\000\000\000\000\000\000\000\000\002\242\003\026\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\249\000\000\000\000\003*\003\n\002\250\000\000\000\000\000\000\001\001\000\000\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\003\"\000\249\000\249\003\002\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\249\000\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001\r\000\000\000\000\000\000\003\n\000\000\000\000\003*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\r\000\000\000\000\000\000\001\r\001\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\r\003:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\001\001\000\000\000\000\000\000\003\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\000\000\001\001\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\001\001"))
   
   let lhs =
-    (16, "\000\012\000\011\000\n\000\t\000\b\000\007\000\006\000\005\000\004\000\003\000\002\000\001\000\000\0018\0018\0018\0017\0017\0017\0017\0016\0016\0016\0016\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0010\0010\0010\0010\001/\001.\001.\001.\001-\001-\001-\001,\001,\001,\001+\001+\001+\001*\001)\001(\001'\001'\001&\001&\001%\001%\001$\001$\001#\001#\001\"\001!\001 \001\031\001\030\001\029\001\028\001\027\001\026\001\025\001\024\001\023\001\022\001\021\001\020\001\019\001\019\001\018\001\018\001\017\001\017\001\016\001\016\001\015\001\015\001\015\001\015\001\014\001\014\001\014\001\014\001\r\001\r\001\r\001\r\001\012\001\012\001\012\001\012\001\011\001\011\001\011\001\011\001\n\001\n\001\n\001\n\001\t\001\t\001\t\001\b\001\b\001\b\001\b\001\b\001\007\001\006\001\005\001\005\001\005\001\005\001\005\001\004\001\004\001\003\001\002\001\001\001\001\001\001\001\001\001\000\001\000\001\000\001\000\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\254\000\253\000\253\000\252\000\252\000\252\000\252\000\252\000\252\000\252\000\252\000\251\000\251\000\250\000\250\000\250\000\249\000\248\000\247\000\247\000\246\000\246\000\245\000\244\000\243\000\243\000\242\000\242\000\241\000\241\000\240\000\240\000\239\000\238\000\237\000\237\000\236\000\236\000\235\000\235\000\234\000\234\000\233\000\233\000\232\000\231\000\231\000\230\000\230\000\230\000\230\000\230\000\230\000\229\000\229\000\229\000\228\000\227\000\226\000\226\000\226\000\226\000\225\000\225\000\224\000\223\000\223\000\223\000\222\000\222\000\222\000\222\000\222\000\221\000\221\000\221\000\221\000\220\000\220\000\220\000\220\000\219\000\219\000\219\000\219\000\218\000\217\000\217\000\216\000\216\000\216\000\215\000\214\000\214\000\214\000\213\000\212\000\212\000\211\000\211\000\211\000\210\000\210\000\210\000\209\000\209\000\209\000\209\000\208\000\208\000\207\000\207\000\207\000\207\000\207\000\207\000\206\000\206\000\206\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\204\000\203\000\202\000\202\000\201\000\201\000\200\000\200\000\199\000\199\000\198\000\198\000\197\000\197\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\195\000\194\000\193\000\193\000\192\000\192\000\191\000\191\000\190\000\190\000\189\000\189\000\188\000\188\000\187\000\187\000\186\000\186\000\185\000\185\000\184\000\184\000\183\000\183\000\182\000\182\000\181\000\181\000\180\000\180\000\179\000\179\000\178\000\178\000\177\000\177\000\176\000\176\000\175\000\175\000\174\000\174\000\173\000\173\000\172\000\172\000\171\000\171\000\170\000\170\000\169\000\169\000\168\000\168\000\167\000\167\000\166\000\166\000\165\000\165\000\164\000\164\000\163\000\163\000\162\000\162\000\161\000\161\000\160\000\160\000\160\000\159\000\159\000\158\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\156\000\156\000\156\000\156\000\155\000\154\000\153\000\152\000\151\000\150\000\149\000\148\000\147\000\146\000\145\000\144\000\143\000\143\000\143\000\142\000\142\000\142\000\141\000\141\000\141\000\141\000\140\000\140\000\139\000\138\000\137\000\136\000\135\000\134\000\133\000\132\000\131\000\130\000\130\000\129\000\129\000\129\000\128\000\128\000\127\000\127\000\127\000~\000~\000~\000}\000}\000|\000{\000{\000{\000z\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000x\000x\000w\000w\000w\000w\000w\000w\000w\000v\000v\000v\000v\000v\000v\000v\000u\000u\000u\000u\000u\000u\000u\000t\000t\000t\000t\000t\000t\000t\000s\000s\000s\000s\000s\000s\000s\000r\000r\000r\000r\000r\000r\000r\000q\000q\000p\000p\000o\000o\000n\000n\000m\000m\000l\000l\000k\000k\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000i\000i\000h\000h\000g\000g\000f\000f\000e\000e\000d\000d\000c\000c\000b\000b\000b\000b\000b\000a\000a\000`\000`\000`\000`\000_\000^\000]\000]\000]\000\\\000\\\000\\\000[\000[\000[\000[\000[\000[\000Z\000Z\000Z\000Z\000Z\000Z\000Z\000Z\000Y\000Y\000Y\000Y\000Y\000Y\000Y\000Y\000X\000X\000X\000X\000X\000X\000X\000X\000W\000W\000W\000W\000W\000W\000W\000W\000V\000V\000U\000U\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000P\000P\000P\000P\000P\000O\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000M\000M\000M\000L\000K\000J\000I\000I\000H\000H\000G\000F\000F\000E\000E\000E\000D\000D\000C\000C\000B\000A\000A\000A\000A\000A\000A\000A\000@\000@\000@\000@\000@\000@\000@\000?\000?\000?\000?\000?\000>\000>\000=\000=\000=\000=\000=\000<\000<\000;\000;\000:\000:\0009\0009\0008\0008\0007\0007\0006\0006\0005\0005\0004\0004\0003\0003\0002\0002\0001\0001\0000\0000\000/\000/\000.\000.\000-\000-\000,\000,\000,\000,\000,\000,\000,\000,\000,\000,\000+\000+\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000)\000)\000)\000(\000(\000(\000(\000'\000'\000&\000%\000%\000%\000$\000$\000$\000$\000$\000$\000$\000$\000#\000#\000\"\000\"\000!\000 \000\031\000\031\000\031\000\031\000\030\000\030\000\030\000\029\000\029\000\028\000\028\000\028\000\027\000\027\000\027\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\025\000\025\000\024\000\024\000\024\000\024\000\023\000\023\000\023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\017\000\017\000\017\000\017\000\017\000\016\000\016\000\015\000\014\000\014\000\014\000\014\000\014\000\r")
+    (16, "\000\012\000\011\000\n\000\t\000\b\000\007\000\006\000\005\000\004\000\003\000\002\000\001\000\000\0018\0018\0018\0017\0017\0017\0017\0016\0016\0016\0016\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0015\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0014\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0013\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0012\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0011\0010\0010\0010\0010\001/\001.\001.\001.\001-\001-\001-\001,\001,\001,\001+\001+\001+\001*\001)\001(\001'\001'\001&\001&\001%\001%\001$\001$\001#\001#\001\"\001!\001 \001\031\001\030\001\029\001\028\001\027\001\026\001\025\001\024\001\023\001\022\001\021\001\020\001\019\001\019\001\018\001\018\001\017\001\017\001\016\001\016\001\015\001\015\001\015\001\015\001\014\001\014\001\014\001\014\001\r\001\r\001\r\001\r\001\012\001\012\001\012\001\012\001\011\001\011\001\011\001\011\001\n\001\n\001\n\001\n\001\t\001\t\001\t\001\b\001\b\001\b\001\b\001\b\001\007\001\006\001\005\001\005\001\005\001\005\001\005\001\004\001\004\001\003\001\002\001\001\001\001\001\001\001\001\001\000\001\000\001\000\001\000\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\254\000\253\000\253\000\252\000\252\000\252\000\252\000\252\000\252\000\252\000\252\000\251\000\251\000\250\000\250\000\250\000\249\000\248\000\247\000\247\000\246\000\246\000\245\000\244\000\243\000\243\000\242\000\242\000\241\000\241\000\240\000\240\000\239\000\238\000\237\000\237\000\236\000\236\000\235\000\235\000\234\000\234\000\233\000\233\000\232\000\231\000\231\000\230\000\230\000\230\000\230\000\230\000\230\000\229\000\229\000\229\000\228\000\227\000\226\000\226\000\226\000\226\000\225\000\225\000\224\000\223\000\223\000\223\000\222\000\222\000\222\000\222\000\222\000\221\000\221\000\221\000\221\000\220\000\220\000\220\000\220\000\219\000\219\000\219\000\219\000\218\000\217\000\217\000\216\000\216\000\216\000\215\000\214\000\214\000\214\000\213\000\212\000\212\000\211\000\211\000\211\000\210\000\210\000\210\000\209\000\209\000\209\000\209\000\208\000\208\000\207\000\207\000\207\000\207\000\207\000\207\000\206\000\206\000\206\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\204\000\203\000\202\000\202\000\201\000\201\000\200\000\200\000\199\000\199\000\198\000\198\000\197\000\197\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\195\000\194\000\193\000\193\000\192\000\192\000\191\000\191\000\190\000\190\000\189\000\189\000\188\000\188\000\187\000\187\000\186\000\186\000\185\000\185\000\184\000\184\000\183\000\183\000\182\000\182\000\181\000\181\000\180\000\180\000\179\000\179\000\178\000\178\000\177\000\177\000\176\000\176\000\175\000\175\000\174\000\174\000\173\000\173\000\172\000\172\000\171\000\171\000\170\000\170\000\169\000\169\000\168\000\168\000\168\000\167\000\167\000\166\000\166\000\165\000\165\000\164\000\164\000\163\000\163\000\162\000\162\000\161\000\161\000\160\000\160\000\160\000\159\000\159\000\158\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\156\000\156\000\156\000\156\000\155\000\154\000\153\000\152\000\151\000\150\000\149\000\148\000\147\000\146\000\145\000\144\000\143\000\143\000\143\000\142\000\142\000\142\000\141\000\141\000\141\000\141\000\140\000\140\000\139\000\138\000\137\000\136\000\135\000\134\000\133\000\132\000\131\000\130\000\130\000\129\000\129\000\129\000\128\000\128\000\127\000\127\000\127\000~\000~\000~\000}\000}\000|\000{\000{\000{\000z\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000y\000x\000x\000w\000w\000w\000w\000w\000w\000w\000v\000v\000v\000v\000v\000v\000v\000u\000u\000u\000u\000u\000u\000u\000t\000t\000t\000t\000t\000t\000t\000s\000s\000s\000s\000s\000s\000s\000r\000r\000r\000r\000r\000r\000r\000q\000q\000p\000p\000o\000o\000n\000n\000m\000m\000l\000l\000k\000k\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000j\000i\000i\000h\000h\000g\000g\000f\000f\000e\000e\000d\000d\000c\000c\000b\000b\000b\000b\000b\000a\000a\000`\000`\000`\000`\000_\000^\000]\000]\000]\000\\\000\\\000\\\000[\000[\000[\000[\000[\000[\000Z\000Z\000Z\000Z\000Z\000Z\000Z\000Z\000Y\000Y\000Y\000Y\000Y\000Y\000Y\000Y\000X\000X\000X\000X\000X\000X\000X\000X\000W\000W\000W\000W\000W\000W\000W\000W\000V\000V\000U\000U\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000S\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000R\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000Q\000P\000P\000P\000P\000P\000O\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000N\000M\000M\000M\000L\000K\000J\000I\000I\000H\000H\000G\000F\000F\000E\000E\000E\000D\000D\000C\000C\000B\000A\000A\000A\000A\000A\000A\000A\000@\000@\000@\000@\000@\000@\000@\000?\000?\000?\000?\000?\000>\000>\000=\000=\000=\000=\000=\000<\000<\000;\000;\000:\000:\0009\0009\0008\0008\0007\0007\0006\0006\0005\0005\0004\0004\0003\0003\0002\0002\0001\0001\0000\0000\000/\000/\000.\000.\000-\000-\000,\000,\000,\000,\000,\000,\000,\000,\000,\000,\000+\000+\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000*\000)\000)\000)\000(\000(\000(\000(\000'\000'\000&\000%\000%\000%\000$\000$\000$\000$\000$\000$\000$\000$\000#\000#\000\"\000\"\000!\000 \000\031\000\031\000\031\000\031\000\030\000\030\000\030\000\029\000\029\000\028\000\028\000\028\000\027\000\027\000\027\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\025\000\025\000\024\000\024\000\024\000\024\000\023\000\023\000\023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\017\000\017\000\017\000\017\000\017\000\016\000\016\000\015\000\014\000\014\000\014\000\014\000\014\000\r")
   
   let goto =
-    ((16, "\002\128\0020\000\000\000\000\000\000\000M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001q\000\000\001G\006H\000\000\000\000\000\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\003v\000\000\005\172\003\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000l\000\000\000\255\000\000\000\000\003\\\000\000\000\000\005*\000\000\000\000\000\000\000R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003x\000\000\000\000\001\246\019X\000\000\000\000\020\178\000\000\000\000\000\000\000\000\000\000\000\000\014\212\000\000\000\000\000\000\000\000\000\000\005\202\000\000\000\018\000\000\000\142\000\000\000\000\000\000\005\206\000\000\b\228\000\000\000\000\000\000\b\172\000\000\000\000\000\000\016\212\001O,\152\000\000\000\000\027\246\028\"\000\000\000N\000\000\030t1H6J1H\016\"1\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\1607 \000\000\000\000!\030)\0180\134\000\0002R\003~\000\000\000\000*\0185\228\000\000\000\000\000\000\001\022\000\000\000\1302\004+\b\000\000\000\000Ml\000\000\004>\000\000\006:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\170\000\000\000\000\006\160\000\000\018*\000\000\023\160\000\000\024\172\000\000!\028\000\000\"\164\000\000#\154\000\000%\"\000\000&\012\000\000&\170\000\0004z\000\000\017\196\000\000\000\000\000\000\000\000\t\130\000\000\000\000\000\000\000\000'\160\000\000(\138\000\000.\186\000\0004\168\000\0007x\000\0008:\000\000;F\000\000DJ\000\000H\224\000\000J\152\000\000L\234\000\000S\022\000\000U\168\000\000V&\000\000VV\000\000V\144\000\000\0070\000\000\000\000\b&\000\000\000\000\000\000\000\000\002\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000gM\210\000\000\000+\000\000\000\000\000d\t\176\000\000\000b\000\r\000 \000\166\001{\000\000\001$\000\000\000\000\001\146\000\000\001\156\000\000\000\00074\000\000\000\000\000\000\000,\nz\000\000;&7\236\000\000\000\000\000\000\000\000\011p\018\014\000\000\000\000\000\000\000\000\000\000\000\000;\128\000\000\000\000<\n\000\000\000\000=\178\000\000\004\026\000\000\b(\000\000\000\000\000\000\003@\000\0002\2428&\000\000\000\0008j9\018\000\000\t\028\000\000\n\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000V\168\000\0004\188\000\000Uz\000\000V\188\000\000V\234\000\000W\156\000\000W\198\000\000W\254\000\000X\002\000\000X\030\000\000X\146\000\000X\192\000\000X\226\000\000Y\018\000\000Y0\000\000Y>\000\000\000\000:\006\000\000\000\000\000\000:J\000\000\000\000\000\000\000\000\000\000\000\000N$\000\000\000\000\000\000\b\236\000\000\000\000\000\000\000\000#\232\000\000\000\000\000\000\000\000\001G\000\000\000\000N>\000\000\000\000\000\000\020,\000\197\000\000\000\000A\238\000\000\000\000:\234\000\000\000\000\000\000\000\026\012f+\022\000\000\000\000On\000\000O\152\000\000\000\000\000\000\r\\B<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=\216\000\000\000\000\000\000\000\000BZ\014R\016\182\000\000?\244\000\000\000\000I\018\000\000\006V\000\000\000\000\024|\000\000\000\000\000\000\018\248\000\0003x\000\000\000\000O\154\000\000\000\000\000\000\021\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028 \000\000\030\158\000\000\000}\000\000\000\000\000\000Yz\000\000Y\174\000\000Y\242\000\000ZZ\000\000Z|\000\000Z\148\000\000Z\198\000\000[ \000\000[0\000\000[j\000\000[\136\000\000[\210\000\000[\234\000\000\\v\000\000\000\000\000\000\000\000\000\000C2\000\000\000\000\003\146D\012\000\000\000\000D4\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\\\000\000;\156\000\000\000\000\000\000\000\000\000\000<2\000\000\000\000\000\000<\200\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\000\000\000\014H\000\000\021@\000\000\000\000\0022\005\238\000\000\000\000\000\000\000\000\020N\014\252\000\000\016\232\000\000\000\000\000\000\021\174\000\000\023\"\000\000&B\000\000\000\000\000\000\000\000\000\000\000\000(\192\000\000\000\000\000\183\000\000\000\000\000\000\0226\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000b\022&\000\000\000\000\000\000\000\000\000\000\000\000\000\254\000\000\016\018\r\140\000\000\000\000\000\000\017:\000\000\000\000\000\000\002v\rT\000\000\002\184\000\000\000\000\000\000\000\000\014H\000\000\000\000\000D\nr\000\000\n\166\000\000\000\000\000\000\000\246\000\000\017\228\000\158\0007\000\000\000\000\000\000\002\208\000\222\000\000\000\000\003`\000\000\000\000\000\000\005H\000\000\000\000\000\000\000\252\000\000\000\000\000\000\000\000\000\000\003 \000\203\000w\000\000\000\000\000k\000\000\000\000\000\000\000\000\000\000\000\000O\186\000\000>\158\000\000\000\000\000\000P.\000\000\000\000\003b\000\000\000\000\000\000\003j\020*\000\000\000\000Db\000\000\000\000\004L\000\000\000\000\000\000\000\000\016p\000\000\023\204\000\000\000\000->\000\000\000\000\000\000D\180\000\000\000\000\000\000\000\000\000\0009\248\000\000\000\000\000\000\001O\000\000E\014\000\000\000\000\000\000\000\000\002\178\020\218\000\000E(\000\000\000\000\000\000\000\000\022\214\000\000E\218\000\000\000\000\000\000\000\000\003\168\000\000\n4\000\000\000\000J\190<\242\000\000\000\000\000\000PR\000\000\000\000\000\000\000\012\000\000P\226\000\000\000\000\000\000Q\004\000\000\000\000\000\230\000\000!\206\000\027=\136\000\000\000\000\000\000\021(\021~\000\000\000\000\000\000\000\000\000\000\000\000Kv\000\000\000\000O$\000\000\000\000O\220\000\000\006\130\000\000\0224\000\000\000\000\000\000\024\164\000\0003\146\000\000\000\000Q\154\000\000\000\000\000\000\025D\000\000\000\000\000\000\000\000\000\000\000\000\011\b\000\000\025\162\000\000\000\000\000\000\004\128\000\000\000\000\000\000\000\000\000\000\000\000\\\146\000\000E\242\000\000U\142\000\000]\000\000\000]\030\000\000]>\000\000]\192\000\000]\230\000\000]\234\000\000^(\000\000^T\000\000^~\000\000^\212\000\000^\246\000\000_\018\000\000_\022\000\000,\196\000\000\000\000\000\000\001F\000\000\004\252\000\000\018\218\003N\011*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R*\000\000>\228\0044\027N\000\000\000\000\000\00000\000\000\003\128\024\134\000\000\000\000F\198\000\000\000\000\000h\000\000\025T\000\000\000\000EF\000\000\000\000\000\000G\002\000\000\000\000\000\000\000\000Gh\000\000\000\000\012\b\026\174\000\000\000\000G\204\000\000\000\000\027@\000\000\000\000G\224\000\000\000\000\000\000\000\000H.\000\000IB\000\000?f?\214\001N\0062\000\000\006\158\007\210\000\000\000\000\000\000\014\202\000\000\000\000\0200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0004\024\000\000@\020\000\000\000\000\000\000\019l\000\000\000\000\007\020\000\000\000\000\000\000\"`\002\152\000\000#V\000\000\000\000\000\000\000\000\004h\000\000\000\000\020b\000\000$L\000\000\000\0004\158\000\000\000\000\000\000Iv\000\000\000\000\0180\000\000\000\000\029\230\000\000\000\000Z\238\000\000\000\000\000\000I\196\000\000\000\000\000\000]N\000\000\000\000\000\000\000\000J*\000\000\000\000\000\000\000\000\r\178\022\222\000\000JT\000\000\000\000\000\000\000\000\000\000\000\000\021X\000\000\000\000\004\150\000\000\021\234\000\000\0180\000\000\000\000J|\000\000K\016\000\000@\250\000\000\000\000\000\0005\146\000\000\000\000\000\000KZ\000\000\000\000\012\222\000\000\000\000\030\030\000\000\000\000]\228\000\000\000\000\000\000K\240\000\000\000\000\000\000\000\000LV\000\000\000\000\015\234\030@\000\000\000\000M\018\000\000\000\000\004\166A\208\000\000\004\186\000\000\000\000\000\000\000\000\004\128\000\000A8\000\000$\222\000I%\212\000\000\001L\000\000\022\224\000\000\023\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\020&\202\002\006'\\\000\000\000\000\000\000\003.\000\000\024h\000\000\005&\000\000\000\000\018\208\001$(R\000\000\002\226\000\000\025^)H\000\000\000\000\026T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\140\012 \000\000\005\164\000\000\000\000\000\000\000\000\005\238\000\000\026\230\000\000\000\000\000\000/\166RZ\000\000\000\000\000\000/:\000\000\000\000\000\000\000\000\005\1881\014\000\000\000\000\000\000\000\000\005\192\000\000\000\000\000\000\000\000\016R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\000\000\027\220\000\000\000\000\000\000R\240\000\000\r\022\000\000\000\000\000\000\0050\000\000\005\178\000\000\000\000\002\212\028\210\000\000\029d\000\000\000\000\000\000\003\156\000\000Sr\004\250S\134\000\000S\162\000\000\000\000\000\000\005h\000\000T2\005\190\000\000\000\000,X=z\000\000\005\204-\232\000\000\000\000.z\000\000\000\000\000\000\006\006\000\000TF\006\018\000\000\000\000\b\208\006\030\014p\000\000\0272\000\000\000\000\000\000\0068\000\000T\200\006\156\000\000\000\000\000\000\002H\000\000\002\192\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\022\000\000\000\000\007\186\000\000\000\160\000\000\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\007\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\026\000\000\000\000\001\150\000\000\t\196\000\000\000\000\000D\000\000\002\188\001R\002x\000\000\000\000\000\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0034\004\254\000\000\000\000\b\166\000\000\000\000\000\000\012\002\000\000\000\000\012\248\rR\000\000\000\000\000\000\000\000\r\238\015>\002\186\000\000\000\000\000\000\018\156\000\000\000\000\000\000\000\000\000\000\000\000\000E\000\000\000\000\007\202\000\000\000\000\001\194\000\000\019\002\000\000\000\000\000\000\b\020\000\000\000\000\019\200\000\000\000c\000\000\000\000\000\000\000\000\000\129\019`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\200\021V\000\000\000\000\000\000\000\000\024\162\024\250\b\206\000\000\026\022\000\000\000\000\000\000\000\000\000\000\000\000\018\178\000\000\002\176\000\000\000\000\000\000\n\012\000\000\000<\000\000\000\000\000\000\023\212\000\000\000\000\0266\027\002\n\186\000\000\027x\000\000\000\000\000\000\000\000\000\000\000\000\002\170\002b\000\000\002\128\000\000\028r\011\002\000\000\028\202\000\000\000\000\000\000\000\000\002\202\000\000\003\170\000\000\000\000\000\000\001f\000\000\001f\003`\003\246\000\000\000\000\000\000\001l\014\176\000\000\000\000\000\000\000\000\000\000\002\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\016\000\000\000\000\000\005\000\000\014\248\004:\004\164\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\142\000\000\000\000\024\244\029$\000\000\000\000\000\000\000\000\029\128\000\000\000\0006\132\000\000\005\130\000\000\000\000\000\000\000\000\014\250\000\000\000\000\000\000\000\000\000\000\001|\024\204\000\000\000\000\026~\000\000\000\000\000\000\000\000\r\012\000\000\000\000\003\144\000\000\000\000\000\000\000\191\000\000\000\000\000\215\000\000\000\000\000\000\000\000\000\000\000\000\000\000M.\000\000\000\000\000\000\001\011\000\000\000\000\000\000\000\000\000\000\001\026\012\152\017\b\017\132\000\000\006\184\007\014\007\022\007d\000\000\000\000\000\000\000\000\000\000\000\000\007$\030Z\000\000)\218\007~\000\000\000\000\007\224\000\000\031P\000\000B\022\000\000\000\000\007(\031\226\000\000*\208\000\000\007f+\198\000\000\000\000\000\000\002\148\025\130\000\000\000\000\000\000\000\000\016\222\000\000\021\206!$\000\000\000\000\027\200\"\026\000\000\"L\000\000\000\000\021\174\000\000\023\"\000\000\000\000$\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\012\000\000\000\000\000\000\b\002\000\000 \216\000\000\026t\004\\\000\000\000\000\000\000\000\000\000\000\0044\000\000\000\000\000\000\000\000\000\000M\134\000\000\004\014\000\000\000\000\000\000\000\000\000\000\002*\000\000\015\002\0022\015\248\000\000\004p\016\238\000\000\004\178\000\000\005f\000\000\006\\\000\000\007R\000\000\026t\000\000\000\000\000\000\000\000\000\000\bH\000\000\004\186\000\000\t>\000\000\026t\005\018\000\000\001\194\000\000\005\018\006\236\000\000\003\230\000\000\004\020\000\000\000\000\000\000\000\000\000\000\000\000\004L\000\000\004h\000\000\004\132\000\000\000\000\000\000\000\000\000\000\004\228\000\000\000\000\000\000\000\000\000\000\006v\005.\000\000\000\000\005d\000\000\000\000\005l\005\128\007:\000\000\007H\000\000\000\000\003\136\006R\000\000\005\252\000\000\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\007J\006D\000\000\000\000\000\000\006\178\006\138\005\158\006@\006\184\006\240\000\000\000\000\006\160\006P\006\162\006\212\007\018\000\000\000\000\007\176\b\012\000\000\b$\000\000\bb\000\000\000\000\bB\000\000\000\000\bF\000\000\000\000\000\000\000\000\bP\000\000\b\132\000\000\000\000\000\000\b\144\000\000\000\000\000\000\b\150\000\000\000\000\000\000"), (16, "\001\210\000p\000\018\000=\003?\004t\003R\001\159\000p\006Q\000y\000=\006R\005\166\005L\005M\000\007\000y\005\167\005\168\003\133\003\134\000p\002N\005\141\000\017\000N\002\217\004r\0042\001\211\000y\006V\005\021\001\212\000N\006G\006H\000$\001D\0059\000\005\001E\000?\000p\002\133\002\134\002\157\002\137\006\b\005\169\000>\000N\000y\000N\002P\001D\003\007\006L\001P\000*\005\170\006B\006C\005:\0005\004\001\0005\003A\005=\005L\005M\001\162\006\006\003B\006\t\005L\005M\000N\000z\001\160\005]\001D\001\028\000p\001P\001\017\001\t\002S\003\233\002\196\006O\000O\000y\001\t\005N\001\213\005\167\005\168\002u\000p\000O\001\214\002\182\001F\005[\000p\002\148\001\t\000y\001G\005^\005L\005M\000p\000y\001\017\006O\000O\002\130\000O\001F\002\172\000y\001\147\001\239\001\019\001G\002S\005\199\001\t\0006\002\195\0006\002\174\005d\002O\004\161\002\198\003W\005\170\000z\001\012\003\235\000O\001\160\000p\001F\001V\002\185\002S\005N\0005\001G\001\210\000y\001\018\005N\003?\005A\003R\001\150\000p\002\133\002\138\001V\002\137\006{\002O\005E\001\t\000y\002\187\006|\004\202\004\208\000p\003\133\003\134\003\237\0005\006}\004|\004\000\001\135\000y\001\t\004\147\001\238\001\"\003O\001V\001\t\005N\003\242\005\246\002\188\000z\000\179\004\002\001\t\003P\004\163\004\128\004\207\002S\002S\004t\0009\005T\0009\003\007\002O\005\255\006(\004n\001\227\002\154\0006\002\164\004\001\005n\003A\001\029\000\179\000p\001\012\001\228\003B\001$\005\142\005\236\001\t\000\179\000y\002\166\001W\002\177\001\023\005b\003\244\006\005\0043\003\233\004z\001\023\0006\004\n\001\t\002\139\000\179\004\145\000P\001W\005\145\005\234\005\237\005L\005M\004*\003[\005\248\001\t\001\031\0005\006\006\002B\006\t\005L\005M\005O\000Q\002\176\002T\004\157\002\243\000\179\001 \003\\\001W\006\000\002\129\006\127\003]\001 \003\217\001\029\003^\001\153\007\022\001\210\006\001\006\002\003_\003?\0009\003R\003\235\001 \002\248\004\134\000<\001\136\002-\007\023\006\128\002&\005Y\002\167\006\186\0062\001\t\000p\001Z\002,\003\176\000p\006}\006\187\004\000\001 \000y\006\189\003\208\002\166\000y\001\030\001X\005g\001Y\0006\001[\003\136\003\237\000\004\002\156\001\163\001\023\005N\001Z\001]\001\029\0005\002\129\003O\001\"\001^\003\007\003\242\005N\0065\002\192\000\179\004\002\006\129\003P\004\001\001[\003A\000\005\001\026\003\253\001\\\006\130\003B\000p\001]\002\139\006\206\006\160\006Y\005a\001^\003\254\000y\002\177\001 \001\127\006\204\003\233\000p\001!\001 \001\023\004w\001#\000\167\005\246\002a\000y\002\197\002T\005\254\005\233\003\244\002k\004\005\006\162\001\t\002\129\002\218\004\n\001\t\003\218\004\203\006\164\000\004\0009\0006\002S\004\147\002d\003\209\004*\003[\003\000\005\147\005\234\005\237\005L\005M\003\219\001 \005\193\002S\004\205\005\131\005L\005M\0005\005\251\000\005\003\\\003\235\006(\000p\001\210\003]\001 \006\207\003?\003^\003R\0005\000y\000p\002\151\003_\004\134\005R\007\031\001\t\001 \005\248\000y\004\205\000N\0005\000p\005h\000N\006\003\002\192\002\217\004r\0042\001\t\000y\000p\003\237\001\210\0068\000p\002\217\001\211\005b\004\136\000y\001\212\002\151\003O\000y\000Z\000p\003\242\0009\002\153\005S\000\179\004\002\006\208\003P\000y\003\007\002\178\0006\005\218\004\150\000F\006\130\005N\002\197\004\001\003\007\003A\006\210\000\r\002\218\005N\0006\003B\005\220\002S\005i\002l\0060\002S\005\132\003\158\002\152\000]\001\t\000O\0006\0005\003\233\000O\002S\000\016\000\017\003\244\001\t\004\005\006\212\002\180\006>\001\230\004\n\000N\002|\001\213\006\214\002e\004\228\001\t\002f\001\214\000R\005\230\004*\003[\001\210\006Z\001\023\001\t\003?\000N\003R\001\t\004\230\000\170\000U\005a\0005\000\b\000\176\002\178\006\004\003\\\001\t\006:\006\005\0009\003]\004\129\003W\001\006\003^\001\012\003\235\004f\001\210\001\232\003_\005\249\003?\0009\003R\001 \005\232\0006\005\242\001 \004\004\006~\006\006\005T\006\t\005L\005M\0009\005e\002\255\000p\000O\003\254\002\179\002\225\006}\006\192\0042\006\180\000y\001\233\006\181\003\237\0048\001\230\007\b\003A\006\014\003\014\000O\006\022\004\139\003B\003O\000\164\003\254\0006\003\242\006\172\006\173\000\172\000\179\004\002\005\025\003P\003\007\004\131\003\233\001 \006\189\004\231\001\235\004\002\006\189\004\001\000\004\003A\006@\004n\003\133\003\134\000a\003B\001\026\004\216\000\159\004\230\001\227\000S\002\024\001I\006\203\0007\005b\0009\000\179\000\178\003\233\001\228\000V\000\005\0005\000S\003\244\000F\0043\005N\004z\006\170\002\192\004\n\006\185\004l\000V\004\145\004\220\001\t\003W\000F\005p\004\n\003\235\004*\003[\004\018\006\195\002\185\007\015\002\229\006\211\006\177\001\210\004*\0009\001\238\003?\002\255\003R\002\193\003\164\001\017\003\\\006\216\005q\005L\005M\003]\003\181\002\197\002\189\003^\003\235\002\027\000p\004i\006\220\003_\003\237\006}\006\192\0042\001 \000y\001C\004i\000N\0005\0006\003O\000\170\006O\001 \003\242\002\188\000\171\001 \000\179\001\240\006\240\003P\003Z\000\179\002S\0005\000\180\000:\001 \003\237\003\007\006O\004\218\000p\001\241\004n\004k\002\143\002\217\004\001\003O\003A\000y\006\238\003\242\000p\004j\003B\000\179\004\002\006\198\003P\0057\0058\000y\004\142\006\197\004\172\000\181\006\130\003\244\005\240\003\233\000p\004\142\003\243\000{\005N\003\007\003\254\006\020\006\232\000y\000O\0006\0005\003\135\002S\000\164\000N\003[\001\t\002\226\000\170\000\172\006\234\0009\000\182\000\176\004\238\003\244\0006\0043\000N\006\200\004\144\001\210\004\n\003\\\006\236\003?\006\202\003R\003]\004\143\004\240\000\183\003^\000p\004*\003[\000\255\000^\003_\004\166\000N\003\235\000y\000p\001\t\000\178\000\185\004\219\006}\006\192\0042\004\166\000y\003\\\0005\000N\001\t\007\007\003]\000\170\002a\004\193\003^\004\193\000\171\007\005\0006\002{\003_\004\241\000O\006\242\006\012\001 \001\t\000\164\0009\003\237\003\007\004\168\007\026\000\172\000\005\002d\000O\004\240\000D\004\001\003O\003A\001\012\004\167\003\242\0009\006^\003B\000\179\004\002\006\198\003P\006\248\004\195\000F\004\194\006\199\003\216\000O\006\130\006\249\006\254\003\233\004\221\004\244\003\243\003\133\003\134\005t\000\178\004\255\001\t\0006\000O\003\133\003\134\003\133\003\134\000\164\000N\004\240\001\t\000\179\000\170\000\172\000\180\005\001\004\002\000\176\006^\003\244\006\255\0043\006^\006\200\003\208\001\210\004\n\002\190\005\002\003?\006\202\003R\000S\000_\004\218\005\005\003\133\003\134\004*\003[\006\241\007\027\005\r\000V\005\001\003\235\000\181\000p\000F\000\178\007!\004\240\006}\006\192\0042\005\016\000y\003\\\005\015\004\220\007\004\006^\003]\006j\004\n\002\147\003^\007\003\004\018\007\016\007\011\005\015\003_\007\r\000O\003\254\004*\001 \003\208\000\164\001\020\003\237\003\007\000\179\007\016\000\172\000\180\007\019\001\023\0005\007\"\004\001\003O\003A\000\187\002e\003\242\001\209\002f\003B\000\179\004\002\006\198\003P\005\019\000\188\001\023\000p\006\201\005H\005K\006\130\006m\003\209\003\233\001 \000y\003\243\000\181\003>\004\240\000\178\007?\007\015\003\254\005I\005I\001 \007\020\006\161\005\144\000N\000N\001\t\000\179\000\170\001D\000\180\007@\001E\000\176\003\254\003\244\002\159\0043\001 \006\200\000\182\001\210\004\n\003\248\001\023\003?\006\202\003R\0006\006b\007\024\006f\005\153\006t\004*\003[\007\025\007\028\007\029\000\183\003\212\003\235\000\181\000p\000\184\007\015\007\016\007 \006}\006\192\0042\007#\000y\003\\\000\185\007$\005\154\0075\003]\005\157\005L\005M\003^\001 \006y\003\215\001\t\003\207\003_\007*\000O\000O\006a\001 \001F\000\164\006`\003\237\003\007\000\179\001G\000\172\000\180\0073\007/\006\244\0072\004\001\003O\003A\000\187\007;\003\242\000p\000w\003B\000\179\004\002\006\198\003P\0079\000\190\000y\0005\006\209\003\208\007=\006\130\005s\007B\003\233\000p\000\000\003\243\000\181\006_\002\217\000\178\001V\000\000\000y\000p\002\133\002\134\002\135\002\137\000\000\000N\000z\001\t\000y\000\170\005q\005L\005M\000\000\000\176\002S\003\244\000\000\0043\005N\006\200\000\182\001\210\004\n\003\007\000\000\003?\006\202\003R\000\000\005\131\005L\005M\002S\000z\004*\003[\005<\000\000\000\000\000\183\000\000\003\235\002S\000p\000\254\000\000\0006\000\000\006}\006\192\0042\000\000\000y\003\\\000\185\000N\001\t\000\000\003]\000\170\005:\000\000\003^\000\000\000\174\005=\005L\005M\003_\000\000\000O\003\209\000\000\001 \001\t\000\164\000\000\003\237\003\007\000\179\000\179\000\172\000\180\001W\001\t\000\000\005\142\004\001\003O\003A\000\000\005N\003\242\000\000\001\023\003B\000\179\004\002\006\198\003P\000p\000\000\000\000\000\000\006\213\000\000\000\000\006\130\000\000\000y\003\233\005N\000\000\003\243\000\181\000\000\000\000\000\178\000\000\000\000\005\182\000O\005Z\0009\000\000\000\000\000\164\000N\000\000\001\t\000\000\000\170\000\172\001 \000\000\000\000\000\176\000\000\003\244\005\171\0043\000\000\006\200\000\182\001\210\004\n\005[\005N\003?\006\202\003R\000\000\005^\005L\005M\000\000\000\000\004*\003[\000\000\005\197\001\146\000\183\000\000\003\235\004\002\000p\001\001\000\178\000\000\000\000\002\217\004r\0042\000\000\000y\003\\\000\185\000\000\001\210\000\000\003]\000\000\001\211\005\195\003^\001\t\001\212\005\198\005L\005M\003_\000\000\000O\000\000\000\000\001 \000p\000\164\002T\003\237\003\007\000\179\002\139\000\172\000\180\000y\002\129\005\b\000\000\004\001\003O\003A\004\n\001\144\003\242\000\000\004\018\003B\000\179\004\002\006\198\003P\000p\000\000\004*\000\000\002T\000\000\000\000\006\130\000\000\000y\003\233\005N\002\129\003\243\000\181\000\000\000\000\000\178\000\000\000\000\000\000\000\000\001\230\001 \000\000\000\000\001\213\000N\000\000\001\t\000\179\000\170\001\214\000\180\000\000\000\000\000\176\000\000\003\244\000\000\0043\001 \006\200\000\182\001\210\004\n\000\000\005N\003?\006\202\003R\001 \005\131\005L\005M\000\000\000\000\004*\003[\001\231\001\t\000\000\000\183\000\217\003\235\000\181\000p\001R\001\232\000\000\000\000\002\217\004r\0042\000\000\000y\003\\\000\185\000\000\001\210\000\000\003]\000\000\001\211\000\000\003^\001\t\001\212\005\131\005L\005M\003_\000\000\000O\000\212\000\000\001 \000\000\000\164\001\233\003\237\003\007\000\179\000\000\000\172\000\180\001\022\000\000\000\000\000\000\004\001\003O\003A\000\183\001\023\003\242\000\000\000\218\003B\000\179\004\002\000\214\003P\004\211\004\128\000\000\000\000\000\000\000\185\005j\001\235\000\000\006\005\003\233\005N\000\000\003\243\000\181\000\000\000\000\000\178\000\000\000\000\005\208\000\000\001\230\001\227\002*\002\017\001\213\000\000\000\000\001\t\001 \000\179\001\214\006\006\001\228\006\t\005L\005M\003\244\000\000\0043\000\000\004z\000\182\001\210\004\n\000\000\005N\003?\004\018\003R\000\000\000\000\000\000\000p\002\028\005\223\004*\003[\001\231\000\000\002\020\000\183\000y\003\235\000\000\000p\001T\001\232\005p\001\238\002\217\004r\0042\000\000\000y\003\\\000\185\000\000\001\210\002\161\003]\000\000\001\211\000\000\003^\000\000\001\212\001\023\003\182\000\000\003_\000\000\005q\005L\005M\001 \000\000\002S\001\233\003\237\003\007\000\179\000\000\000\000\000\180\002\163\000\000\000\000\000\000\004\001\003O\003A\001\240\001\023\003\242\000\000\005N\003B\000\179\004\002\000\000\003P\004~\004\128\000\000\000p\001 \001\241\000\000\001\235\006Y\000\000\003\233\000\000\000y\003\243\000\181\000\000\0005\001\t\000\000\000\000\000\000\000\000\001\230\001\227\002'\002\017\001\213\000\000\000\000\001\t\001 \000\179\001\214\000\000\001\228\000\000\000\000\000\000\003\244\000\000\0043\000\000\004z\000\182\001\210\004\n\000\000\000\000\003?\004\018\003R\000\000\005N\000\000\000\000\002\028\000\000\004*\003[\001\231\000\000\002\020\000\183\000\000\003\235\000\000\000p\003T\001\232\005p\001\238\002\217\004r\0042\000\000\000y\003\\\000\185\005\233\001\210\000\000\003]\0006\001\211\000\000\003^\000\000\001\212\000\000\001\t\000\000\003_\000\000\005q\005L\005M\001 \000p\002\150\001\233\003\237\003\007\005\234\005\237\005L\005M\000y\000\000\000\000\000\000\004\001\003O\003A\001\240\005p\003\242\006\025\000\000\003B\000\179\004\002\000\000\003P\004\165\004\128\000p\002\133\002\141\001\241\002\137\001\235\000\000\000z\003\233\000y\000\000\003\243\000\000\005q\005L\005M\002S\000\000\000\000\000p\001\230\001\227\002$\002\017\001\213\000\000\000\000\001\t\000y\000\179\001\214\000\000\001\228\000\000\0009\000z\003\244\000\000\0043\000\000\004z\000\000\001\210\004\n\002S\000\000\003?\004\018\003R\000\000\005N\005w\000\000\002\028\004+\004*\003[\001\231\001\t\002\020\005N\000\000\003\235\002S\000p\006d\001\232\005p\001\238\002\217\004r\0042\0005\000y\003\\\000\000\000\000\001\210\000\000\003]\000\000\001\211\001\026\003^\000\000\001\212\001\t\000\000\000\000\003_\000\000\005q\005L\005M\001 \005N\000\000\001\233\003\237\003\007\000\000\004\031\000\000\000\000\000\000\001\t\000\000\006[\004\001\003O\003A\001\240\000\000\003\242\000p\001\023\003B\000\179\004\002\002\217\003P\004\215\004\128\000y\005\246\002\248\001\241\000\000\001\235\000\000\000\000\003\233\000\000\000\000\003\243\000\000\000\000\0005\0006\000\000\000\000\004Z\0005\001\230\001\227\002\"\002\017\001\213\000\000\003\007\001\t\000\000\000\179\001\214\001 \001\228\000\000\000\000\002S\003\244\000\000\0043\000\000\004z\000\000\001\210\004\n\005\247\000\000\003?\004\018\003R\000\000\005N\005}\000\000\002\028\000\000\004*\003[\001\231\006\015\002\020\006;\000p\003\235\000\000\000p\000\000\001\232\005\248\001\238\006}\000y\004\000\000\000\000y\003\\\001\"\006\005\001\t\002T\003]\0006\000\000\002\139\003^\000\000\0006\002\129\000\000\000\000\003_\000\000\006\016\0009\006\017\001 \000\000\005{\001\233\003\237\003\007\006\006\000\000\006\t\005L\005M\000\000\002T\000\000\004\001\003O\003A\001\240\005p\003\242\002\129\001$\003B\000\179\004\002\003\211\003P\006\157\004\128\000^\006\018\001 \001\241\006\205\001\235\000\000\000\000\003\233\000\000\002a\003\243\006\019\005q\005L\005M\000\000\002v\000\000\000\000\000\000\001\227\002\015\002\017\001\t\000\000\000\000\001\t\000\000\000\179\001 \000\000\001\228\002d\003\208\000\000\003\244\000\000\0043\0009\004z\000\000\001\210\004\n\000\000\004\002\003?\004\018\003R\001\026\000\000\005\138\000\000\002\028\000\000\004*\003[\000p\000\000\002\020\000{\005N\003\235\000N\000p\000\000\000y\001D\001\238\006}\001P\004\000\000\000\000y\003\\\005\249\002\127\000p\002\133\003]\000\000\002\140\000\000\003^\000\000\000\000\000y\0005\005\n\003_\000\000\000\000\004`\004\n\001 \005N\000\000\004\018\003\237\003\007\000\000\002S\0005\000\000\000\000\004*\000\000\000\000\004\001\003O\003A\001\240\000z\003\242\000S\000c\003B\000\179\004\002\006\191\003P\002S\000\000\003\209\000\000\000V\001\241\006\190\006\130\000O\000F\003\233\001F\000\000\006\194\001\147\000\000\0005\001G\000\000\000\000\000\000\000\000\001\t\001 \000\000\002\219\000\000\000\000\000\000\001\t\005\252\0005\0006\000\000\000\000\000\000\0005\000\000\003\244\000\000\004\005\006\196\001\t\002e\001\210\004\n\002f\0006\003?\006\202\003R\001\150\000\000\000\000\001\023\001V\000\000\004*\003[\000\000\000\000\000\000\006,\000p\003\235\000\000\000p\000\000\000\000\000\000\000\000\006}\000y\004\000\000\000\000y\003\\\000\000\000\000\000p\000\000\003]\0006\000\000\006Y\003^\000\000\000\000\000y\000\000\000\000\003_\001\"\001 \000\000\000\000\001 \0006\005\136\000\000\003\237\003\007\0006\000\000\000p\002\133\002\134\002\145\002\137\0009\004\001\003O\003A\000y\000\000\003\242\000\000\000\000\003B\000\179\004\002\006\191\003P\000\000\0009\000\000\000\000\000\000\000\000\006\193\006\130\000\000\001$\003\233\000\000\002a\006\194\000\000\000\000\000z\000\179\000p\002c\001W\000\000\000\000\006Y\000\000\002S\001\t\000y\000N\001\t\000\000\000\000\000\170\0027\000\000\002d\0009\000\174\003\244\000\000\004\005\006\196\001\t\000\000\001\210\004\n\000\000\000\000\003?\006\202\003R\0009\000\000\004\031\000\000\001\153\0009\004*\003[\000\000\000\000\000\000\002T\002\142\003\235\000N\000p\001\t\002\243\001D\002\129\002\217\001P\004\000\000\000\000y\003\\\002\248\000\000\000N\001Z\003]\0005\000\170\000\000\003^\000\000\000\000\000\171\001\026\000\000\003_\002\248\004Z\000O\000\000\001 \000\000\001[\000\164\003\237\003\007\000\000\001\163\001\t\000\172\000\000\001]\002\249\001 \004\001\003O\003A\001^\000\000\003\242\000\000\000\000\003B\000\179\004\002\006\191\003P\006\132\000\000\000\000\002\219\001\202\000\000\000\000\006\130\000O\002\253\003\233\001F\000\000\006\194\001\147\000\000\000\000\001G\000\178\000{\006c\000\000\000O\000\000\006\159\0006\000\000\000\164\000\000\001\t\000\000\000\000\004\223\000\172\000\000\002Q\000\000\004\160\003\244\0005\004\005\006\196\000\000\002e\001\210\004\n\002f\000\000\003?\006\202\003R\001\150\000\000\005p\001\023\001V\000\000\004*\003[\0005\005\194\000\000\006[\002\139\003\235\000\000\000p\000\000\000\000\000\178\001\023\002\217\000\000\004\000\000\000\000y\003\\\005q\005L\005M\000\000\003]\006Z\002\219\005\195\003^\000\000\002T\005\198\005L\005M\003_\000\000\001 \000\000\002\129\001 \000\000\000\000\000\000\003\237\003\007\0009\000\179\005p\0006\000\180\0005\000\000\001 \004\001\003O\003A\000\000\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\006[\0006\000\000\000\000\005q\005L\005M\003\249\001\023\003\233\001 \000\000\004\149\000\000\000\181\000p\000\179\000\000\000\000\001W\002\217\003\251\004\000\000\000\000y\000\000\000\000\005p\001\t\000\000\000\179\004\158\001\151\000\180\000\000\005N\004\160\003\244\000\000\004\005\004\151\001\"\000\000\000\212\004\n\004\031\005N\001 \004\018\0006\003\007\005q\005L\005M\001\153\000\000\004*\003[\0009\004\001\000\000\003A\000\183\003\235\000\000\000\181\000\213\003B\000\000\002\248\000\214\000\000\000\000\000\000\000\000\003\\\005\156\000\185\0009\001Z\003]\001$\003\233\000\000\003^\004$\005N\000Y\0005\000N\003_\0005\000\000\001D\000\000\001 \001P\001[\000\000\003\237\005\154\001\t\001\163\005\157\005L\005M\001]\000\000\000\000\004(\003O\000\000\001^\000\187\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\000\000\192\004\031\0009\000\000\000p\000\000\000\000\004\007\002\219\005N\000\000\004\149\003\235\000y\000p\000\000\000\000\000\000\000\000\002\217\004\b\0042\000\000\000y\000\000\002\248\000\000\000\000\000\000\000\000\0006\000O\0005\0006\001F\005\134\003\244\001\147\004\005\004\151\001G\004$\005\200\004\n\000\000\001\216\000\000\004\018\003\237\003\007\000\000\000\000\0005\000\000\000\000\004*\003[\000\000\004\001\003O\003A\005N\000\000\003\242\000\000\004(\003B\000\179\004\002\000\000\003P\000\000\003\214\000\000\003\\\000\000\002w\000S\001V\003]\000\000\003\233\000\000\003^\0047\0005\005\149\000\000\000V\003_\001\t\000N\000\000\000F\001 \003?\002\219\003@\0006\002d\001\t\000\000\000\000\0005\000\000\000\000\000\000\0009\000\000\003\244\003\208\004\005\0049\000\000\000\000\001\210\004\n\000\000\0006\003?\004;\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\0045\000\000\000\000\005\164\000N\003\235\000\\\000p\003?\000\000\003R\000\000\002\217\004\b\0042\000\000\000y\003\\\000\000\000\000\000\000\0006\003]\000\000\005p\000\000\003^\000O\0005\003A\000\000\000\000\003_\000\179\000\000\003B\001W\001 \000\000\0006\000\000\003\237\003\007\000\000\000\000\0009\000\000\000\000\005q\005L\005M\004\001\003O\003A\000\000\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\0009\000p\000\000\000{\003\209\000O\001\161\003A\004:\003\233\000y\000\000\003\243\003B\000\000\000p\000\000\000\000\000\000\002\220\002\217\004\b\0042\0005\000y\000\000\000\000\000\000\001\t\0006\000N\001Z\000\000\0009\003?\002e\003@\003\244\002f\0043\002z\0044\000\000\002\227\004\n\000\000\001\023\000\000\004\018\001[\003\007\0009\000\000\000p\001\163\000S\004*\003[\001]\004\001\000\000\003A\000y\003\235\001^\005N\000V\003B\000\000\000\000\000\000\000F\000\000\000\000\006\139\003\\\000\000\000\000\003W\000\000\003]\006\152\003\233\000\000\003^\001 \003O\001\t\000\000\0006\003_\000{\000\000\000\000\000\179\001 \000O\003P\003A\003\237\000\000\001\t\000\000\000\000\003B\000\000\0009\003\001\000\000\000\000\003O\0005\000\000\000\000\003\242\0005\001\210\000\000\000\179\004\002\003?\003P\003R\000\000\001\225\002a\000\000\000\000\000\000\003O\000\000\003\005\002y\000\000\000\000\003\243\003\235\000\179\000p\001\t\003P\005\153\000{\002\217\004r\0042\000\000\000y\002d\0005\000\000\000\000\000\000\000\000\003Y\002\219\000\000\000\000\002W\002\219\003\244\000\000\0043\000\000\0044\005\154\0009\004\n\005\157\005L\005M\004\018\003\237\003\007\003\131\000\000\000\000\0006\000\000\004*\003[\0006\004\001\003O\003A\000\000\000\000\003\242\000\000\005\175\003B\000\179\004\002\000\000\003P\000\000\000\000\002t\003\\\003[\006\153\000\000\000\000\003]\000\000\003\233\000\000\003^\003\243\000\000\000\000\000\000\000N\003_\000\000\0006\000\170\003\\\001 \000\000\003O\000\171\003]\000\000\001\t\006\154\003^\006\142\000\179\000\000\006\143\003P\003_\003\244\0005\0043\000\000\0044\001\023\001\210\004\n\000\000\000\000\003?\004\018\003R\000\000\000\000\000\000\000\000\005N\000\000\004*\003[\0009\000\000\000\000\000{\0009\003\235\000\000\000p\000\000\000\000\000\000\000\000\002\217\004r\0042\000\000\000y\003\\\000\000\002\131\000\000\005\153\003]\001 \000O\002e\003^\000\000\002f\000\164\000\000\000\000\003_\000\000\000\000\000\172\001\023\001 \0009\000\000\000\000\003\237\003\007\000\000\000\000\005\154\0006\000\000\005\157\005L\005M\004\001\003O\003A\003Q\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\004y\000\000\000\000\000N\000\000\000\000\000\178\001\211\0005\003\233\001 \001\212\003\243\000\000\000\000\000p\000\000\000\000\000\000\000\000\002\217\004r\0042\0005\000y\000\000\000{\000N\001\t\000\000\000{\000\170\000\000\000\000\000\000\000\000\000\171\003\244\000\000\0043\000\000\004z\003\b\000\000\004\n\000\000\004,\000\000\004\018\000\000\003\007\000\000\005\177\000\000\000\000\000\000\004*\003[\0009\004\001\000\000\003A\005p\003\235\002o\005N\003\012\003B\000\000\000O\0040\000\000\000\000\001\213\0006\003\\\000\000\000\000\000\000\001\214\003]\006\005\003\233\000\000\003^\000\000\005q\005L\005M\0006\003_\000\179\000\000\000O\000\180\001 \000\000\000\000\000\164\003\237\005\153\001\t\000\000\0005\000\172\006\006\005p\006\t\005L\005M\003O\0005\000\000\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\004{\005\154\000\000\000\181\005\157\005L\005M\005q\005L\005M\000\000\0005\003\243\003\235\000\000\000p\000\000\000\178\000\000\000\000\002\217\004\152\0042\000\000\000y\000\000\000{\000N\0009\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\176\003\244\006^\0043\000\000\004z\002\232\0009\004\n\005N\0006\000\000\004\018\003\237\003\007\000\187\000\000\000\000\0006\002\219\004*\003[\000\000\004\001\003O\003A\000\194\005\203\003\242\000\000\005N\003B\000\179\004\002\001\227\003P\000\000\004\141\000\000\003\\\000\000\0006\000\179\000\000\003]\001\228\003\233\000\000\003^\003\243\005N\000\000\000\000\005N\003_\000\000\000\000\000O\000\000\001 \000\000\000\000\000\164\000\000\000\000\001\t\000\179\000\000\000\172\000\180\000\000\004\154\000\000\000\000\003\244\000\000\0043\000\000\004z\000\000\001\210\004\n\000\000\000{\003?\004\018\003R\0009\000\000\005p\000\000\000\000\000\000\004*\003[\0009\0005\000\000\003D\003\159\003\235\000\181\000p\000\000\000\178\005p\000\000\002\217\004\152\0042\000\000\000y\003\\\005q\005L\005M\000\000\003]\0009\000\000\000\000\003^\000\000\006^\001\229\0005\000\000\003_\000\000\005q\005L\005M\001 \005\188\000\000\000\000\003\237\003\007\000\000\006\005\002\219\000\000\000\000\000\000\000\000\000\000\004\001\003O\003A\000\187\000\000\003\242\0063\001\210\003B\000\179\004\002\003?\003P\003R\000\196\000\000\0006\006\006\000\000\006\t\005L\005M\004\174\003\233\000\000\006\031\003\243\000\000\000\000\000p\000\000\005\186\003M\000\000\002\217\004\b\0042\006b\000y\002\243\000{\000\000\001\t\000\179\000\000\0006\000\180\000\000\004\156\005N\000\000\003\244\0005\0043\000\000\004\155\003\167\000\000\004\n\0005\000\000\005p\004\018\002\248\003\007\005N\000\000\000p\000\000\000\000\004*\003[\002\217\004\001\000\000\003A\000y\003\235\000\181\002\249\000\000\003B\000\000\000\000\000\000\005q\005L\005M\000\000\003\\\000\000\000\000\000\000\0009\003]\000\000\003\233\000\000\003^\000\000\000\000\005N\003\007\002\253\003_\000\000\000\000\000\182\000\000\001 \000\000\002S\000\000\003\237\000\000\001\t\000\000\000\000\0006\000\000\005p\000\000\0009\000\000\003O\0006\000\183\000\000\003\242\000\000\001\210\003V\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\000\000\000\185\000p\000N\005q\005L\005M\000\161\002K\003\243\003\235\000y\000p\001\t\000\000\000\000\000\000\002\217\006b\004\000\004\031\000y\000\000\000\000\001\210\000N\000\000\005N\001\211\000\161\002G\000\000\001\212\005\184\003\244\000\000\0043\000\000\004\155\000\000\000\000\004\n\000\000\000\000\002\248\004\018\003\237\003\007\000\000\005\214\000\000\000\000\000\000\004*\003[\0009\004\001\003O\003A\000\000\004$\003\242\0009\000\000\003B\000\179\004\002\000\000\003P\000O\000\000\000\000\003\\\000{\000\164\006\147\000\000\003]\000\000\003\233\000\165\003^\003\243\0066\004(\000\000\005N\003_\001\t\003\183\001\230\000O\001 \000\000\001\213\000\000\000\164\000\000\001\t\000\000\001\214\004\209\000\165\000\000\004\002\005p\004\160\003\244\000\000\0043\000\000\0044\000\000\001\210\004\n\000\000\000\178\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\005q\005L\005M\000\000\003\235\000\000\000p\001\232\000\000\000\178\000\000\002\217\000\000\004\000\000\000\000y\003\\\000{\005\012\000\000\005p\003]\005\212\004\n\003\152\003^\000\000\004\018\000\000\000\000\000\000\003_\000\000\003\189\000\000\004*\001 \000\000\001\233\000\000\003\237\003\007\000\000\000\000\005q\005L\005M\000\000\000\000\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\000\005p\000\000\000\000\000\000\001\235\000\000\000\000\000\179\003\233\001 \000\180\004\149\000\000\000\000\000p\000\000\005\210\005N\000\000\002\217\001\227\004\000\002\014\000y\005q\005L\005M\001\t\000\179\000\179\004\225\001\228\000\180\000\000\006\142\004\160\003\244\006\143\004\005\004\151\006\150\000\000\000\181\004\n\000\000\001\023\005p\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\0005\004\001\000\000\003A\005N\003\235\000\000\000\181\000\000\003B\001\238\000\000\000\000\005q\005L\005M\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\001 \0005\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\000\000\001\t\000\000\0005\004\227\000\000\000\000\005N\000\000\004\160\003O\001\240\000\000\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\000\0006\000\000\001\241\000\000\000\000\000N\000\000\000\000\000\000\000\161\002A\004\149\003\235\000\000\000p\000\000\000\000\000\000\005\227\002\217\000\000\004\000\000\000\000y\000\000\000\000\001\210\000N\0006\005N\001\211\000\161\0026\000\000\001\212\000\000\003\244\000\000\004\005\004\151\000\000\000\000\000\000\004\n\000\000\0006\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\000\005\225\003\242\000\000\000\000\003B\000\179\004\002\000\000\003P\000O\000\000\000\000\003\\\000\000\000\164\0009\000\000\003]\000\000\003\233\000\165\003^\004\149\000\000\000\000\000\000\000\000\003_\000\000\000\000\001\230\000O\001 \000\000\001\213\000\000\000\164\000\000\001\t\000\000\001\214\006g\000\165\0009\000\000\006\029\004\160\003\244\000\000\004\005\004\151\000\000\000\000\001\210\004\n\000\000\000\178\003?\004\018\003R\0009\000\000\000\000\000\000\000\000\000\000\004*\003[\006o\000\000\000\000\000\000\000\000\003\235\000\000\000p\001\232\000\000\000\178\000\000\002\217\004\b\0042\000\000\000y\003\\\000\000\000\000\000\000\000\000\003]\006\"\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000{\001\233\000\000\003\237\003\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\003O\003A\004\022\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\000\000{\000\000\000\000\000\000\001\235\000\000\000\000\000\179\003\233\000\000\000\180\004\149\000\000\000\000\000p\000\000\004Q\000{\000\000\002\217\001\227\004\000\001\237\000y\000\000\000\000\000\000\001\t\000\179\000\179\000\000\001\228\000\180\004a\000\000\000\000\003\244\000\000\004\005\004\151\000\000\000\000\000\181\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\000\000\003A\000\000\003\235\000\000\000\181\000\000\003B\001\238\000\000\000\000\000\000\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\000\000\001\t\000\000\000\000\006u\000\000\000\000\000\000\000\000\004\160\003O\001\240\000\000\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\001\241\000\000\000\000\000\000\000\000\006\163\000\000\000\000\000\000\003\243\003\235\000\000\000p\000\000\000\000\000\000\000\000\002\217\004\b\0042\000\000\000y\000\000\000\000\000N\000N\000\000\000\000\000\170\000\161\0023\000\000\000\000\000\171\003\244\000\000\0043\000\000\0044\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000p\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000y\000\000\003\242\000\000\000\000\003B\000\179\004\002\000\000\003P\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\004\149\000\000\000\000\000\000\000\000\003_\000\000\000\000\000O\000O\001 \000\000\000\000\000\164\000\164\000\000\001\t\000\000\000\000\000\172\000\165\000\000\000\000\000\000\000\000\003\244\000\000\004\005\004\151\000\000\000\000\001\210\004\n\000\000\004\169\003?\004\018\003R\000\000\000\000\000\000\006\139\000\000\000\000\004*\003[\000\000\000\000\006\151\000\000\000\000\003\235\000\000\000p\001\t\000\178\000\178\000\000\002\217\000\000\0042\000\000\000y\003\\\000\000\000\000\000\000\000\000\003]\000\000\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\003\007\000\000\000\000\000p\000\000\000\000\000\000\000\000\000\000\004\001\003O\003A\000y\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\000\000\000\000\000p\000\000\000\000\000\000\003\233\000\000\0046\003\243\000\000\000y\000p\000\000\000\000\000\000\000\000\002\217\000\000\004\000\000\000\000y\000\000\000\000\000N\001\t\000\179\000\179\000\170\000\180\000\180\000\000\000\000\000\171\003\244\000\000\0043\000\000\0044\000\000\000\000\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\006\139\000\000\000\000\004*\003[\000\000\004\001\006\146\003A\000\000\003\235\000\181\000\181\001\t\003B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\\\000\000\000\000\006\139\000\000\003]\000\000\003\233\006\142\003^\006\141\006\143\000\000\000\000\000\000\003_\001\t\000\000\000O\001\023\001 \000\000\000\000\000\164\003\237\000\000\001\t\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\000\003O\000\000\000\187\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \003\255\004\171\003\235\000\000\000p\000\000\000\178\000\000\000\000\002\217\000\000\004\000\000\000\000y\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\171\003\244\000\000\0043\000\000\004\173\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\000N\003B\000\179\004\002\001D\003P\000\000\001P\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\006\142\003^\004\003\006\143\000\000\000\000\000\000\003_\000\000\000\000\000O\001\023\001 \000\000\000\000\000\164\000\000\000\000\001\t\000\179\000\000\000\172\000\180\000\000\000\000\006\142\000\000\003\244\006\143\004\005\004\006\000\000\000\000\001\210\004\n\000\000\001\023\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\000O\001 \004\t\001F\003\235\000\181\000p\000\000\000\178\001G\000\000\002\217\000\000\004\000\000\000\000y\003\\\000\000\000\000\000\000\000\000\003]\000\000\000\000\000\000\003^\001 \000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\003\007\000\000\000\000\000\000\000\000\000\000\001V\000\000\000\000\004\001\003O\003A\000\187\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\200\000\000\000\000\000\000\000\000\000p\000\000\000\000\000\000\003\233\000\000\000\000\004\003\000\000\000y\000p\000\000\000\000\000\000\000\000\002\217\000\000\004\000\000\000\000y\000\000\000\000\000N\001\t\000\179\000\000\000\170\000\180\000\000\000\000\000\000\000\171\003\244\000\000\004\005\004\006\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\000\000\003A\000\000\003\235\000\181\000\000\000\000\003B\000\179\000\000\000\000\001W\000\000\000\000\000\000\003\\\000\000\000\000\006\139\000\000\003]\000\000\003\233\000\000\003^\006\149\000\000\000\000\000\000\000\000\003_\001\t\000\000\000O\000\000\001 \000\000\000\000\000\164\003\237\000\000\001\t\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\000\003O\000\000\000\187\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\000\000\000\000\004\003\003\235\000\000\000p\000\000\000\178\000\000\000\000\002\217\000N\004\000\000\000\000y\000\170\001[\000\000\000\000\000\000\000\171\001\149\000\000\000\000\000\000\001]\000\000\003\244\000\000\004\005\004\006\001^\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\000\000\003B\000\179\004\002\000p\003P\000\000\000\000\000\000\003\\\000\000\004}\000\000\000y\003]\000\000\003\233\000\000\003^\004v\000\000\000O\000\000\000\000\003_\000\000\000\164\000\000\000\000\001 \000\000\000\000\000\172\000\000\000N\001\t\000\179\000\000\000\170\000\180\000\000\000\000\006\142\000\171\003\244\006\143\004\005\004x\000\000\000\000\001\210\004\n\000\000\001\023\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\000\000\000\000\000\178\000\000\003\235\000\181\000p\000\000\000\000\000\000\002a\002\217\000\000\004\000\000\000\000y\003\\\002k\000\000\000\000\000\000\003]\000\000\000\000\001\t\003^\001 \000\000\000\000\000\000\000\000\003_\000\000\002d\000O\000\000\001 \000\000\000\000\000\164\003\237\003\007\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\004\001\003O\003A\000\187\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\204\000\000\000\000\000\000\004u\000\000\000\000\000\000\000\000\003\233\000\000\000\000\004v\000\000\000\000\000p\000\000\000\178\000\000\000\000\002\217\000\000\004\000\000\179\000y\000\000\000\180\000N\001\t\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\171\003\244\000\000\004\005\004x\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\181\004\001\000\000\003A\000\000\003\235\000\000\000\000\000\000\003B\000\000\000\000\000\000\000\000\002l\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000O\000\000\001 \000\000\002m\000\164\003\237\002e\001\t\000\179\002f\000\172\000\180\000\187\000\000\000\000\000\000\003O\001\023\000\000\000\000\003\242\000\000\001\210\000\206\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\004\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\003\235\000\181\000p\000\000\000\178\000\000\000\000\002\217\000N\004\000\000\000\000y\000\170\000\000\001 \000\000\000\000\000\171\000\000\000\000\000\000\000\000\000\000\000\000\003\244\000\000\004\005\004\140\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\187\000\000\003\242\000\000\000\000\003B\000\179\004\002\000p\003P\000\000\000\208\000\000\003\\\000\000\004\135\000\000\000y\003]\000\000\003\233\000\000\003^\004v\000\000\000O\000\000\000N\003_\000\000\000\164\000\161\0022\001 \000\000\000\000\000\172\000\000\000\000\001\t\000\179\000\000\000\000\000\180\000\000\000\000\000\000\004\148\003\244\000\000\004\005\004x\000\000\000\000\001\210\004\n\000\000\000\000\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\000\000\000\000\000\178\000\000\003\235\000\181\000p\000\000\000\000\000\000\002a\002\217\000\000\004\000\000\000\000y\003\\\002k\000\000\000\000\000\000\003]\000\000\000O\001\t\003^\000\000\000\000\000\164\000\000\000\000\003_\000\000\002d\000\165\000\000\001 \000\000\000\000\000\000\003\237\003\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\003O\003A\000\187\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\222\000\000\000\000\000\000\000\000\000\000\000\178\000\000\000\000\003\233\006k\000\000\004\149\000\000\000\000\000p\000\000\000\000\000\000\000\000\002\217\000N\004\000\000\179\000y\000\170\000\180\000\000\001\t\000\000\000\171\000\000\000\000\000\000\000\000\000\000\004\153\003\244\000\000\004\005\004\151\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\181\004\001\000\000\003A\000\000\003\235\000\000\000\000\000\000\003B\000\000\000\000\000\000\000\000\002l\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\000\000\000\000\000O\000\000\000\000\003_\000\179\000\164\000\000\000\180\001 \000\000\002r\000\172\003\237\002e\001\t\000\000\002f\000\000\000\000\000\187\000\000\000\000\000\000\003O\001\023\000\000\000\000\003\242\000\000\001\210\000\224\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\006w\000\178\004\149\003\235\000\000\000p\000\000\000\000\000\000\000\000\002\217\000N\004\000\000\000\000y\000\170\000\000\001 \000N\000\000\000\171\000\000\001D\000\000\000\000\001P\000\000\003\244\000\000\004\005\004\151\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\000\000\003B\000\179\004\002\000\000\003P\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\006l\000\000\000O\000\000\000\000\003_\000\000\000\164\000\000\000O\001 \000\179\001F\000\172\000\180\001\147\001\t\000\000\001G\000\000\000\000\000\000\000\000\000\000\000\000\003\244\000\000\004\005\006n\000\000\000\000\001\210\004\n\000\000\000\000\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\181\000\000\006z\000\178\000\000\003\235\001\150\000p\000\000\000\000\001V\000\000\002\217\000\000\004\000\000\000\000y\003\\\000\000\000\000\000\000\000\000\003]\000\000\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\003\007\000\000\000\000\000\000\000\000\000\000\002/\000\000\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\233\000\000\000\000\006l\000\000\000\000\000p\000\000\000\000\000\000\000\000\002\217\000\000\004\248\000\179\000y\000N\000\180\000\000\001\t\000\170\000\179\000\000\000\000\001W\000\174\000\000\000\000\003\244\000\000\004\005\006n\000\000\000\000\000\000\004\n\000\000\001\174\001\210\004\018\000\000\003\007\001\211\000\000\000\000\000\000\001\212\004*\003[\000\181\004\001\000\000\003A\000\000\003\235\000\000\000\000\000\000\003B\001\153\000\000\000\000\000\000\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000O\000\000\001Z\000\000\001 \000\164\000\000\000\210\003\237\000\000\001\t\000\172\000\000\000\000\000\000\001\b\000\000\000\000\000\000\003O\001[\000\000\001\230\003\242\002L\001\163\001\213\000\179\004\002\001]\003P\000\000\001\214\000\000\000\000\001^\000\000\000\000\000\000\000p\000\000\000\000\000\000\000\000\006l\003\235\000\000\000\178\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\232\003\244\000\000\004\005\006n\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\004\249\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\000\000\003O\000\000\000\000\000\000\003\242\000\000\000\000\001\233\000\179\004\002\001\210\003P\000\000\000\000\003?\003\\\003R\000\000\000\000\002a\003]\000\000\000\000\000\000\003^\003\243\002k\000\000\000\000\000\000\003_\000\000\000p\001\t\000\000\001 \000\000\002\217\001\235\004\248\000\179\000y\002d\000\180\000\000\000\000\000\000\000\000\000\000\000\000\003\244\000\000\004\252\000\000\001\227\003\129\002\017\004\n\000\000\000\000\000\000\004\018\000\179\000\000\000\000\001\228\000\000\003\007\000\219\004*\003[\000\000\000\000\000\000\000\000\000\181\004\001\000\000\003A\000\000\000\000\000\000\000\000\001\210\003B\000\000\002\028\003?\003\\\003R\000\000\000\000\002\020\003]\000\000\000\000\000\000\003^\000\000\003\233\000\000\001\238\000\000\003_\000\212\000p\000\000\000\000\001 \000\000\002\217\000\000\004\248\000\000\000y\000N\000\000\000\000\001\t\000\170\000\000\000\000\000\000\000\183\000\171\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\003\007\000\000\000\000\000\000\001\240\002l\000\000\000\000\000\000\004\001\000\000\003A\000\000\003\235\000\000\000\000\000\000\003B\000\000\001\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\235\000\000\003\233\002e\000\000\000\000\002f\000\000\000\000\000N\000\000\000O\000\000\003?\001\023\003R\000\164\000\000\000\000\003\237\004\251\001\t\000\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003O\000p\000\000\000\000\003\242\000\000\003\157\000\000\000\179\004\002\000y\003P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\003\243\003\235\000\000\000\178\000\000\000\000\004\187\000\000\000N\000\000\000\000\003\188\003?\000\000\003R\000\000\000\000\000\000\000\000\000\000\003\194\000\000\003A\000\000\000\000\003\244\000\000\004\252\003B\000\000\000p\000\000\004\n\000\000\000\000\003\157\004\018\003\237\004\254\000y\000\000\000\000\000\000\004\190\004*\003[\000\000\004\192\003O\000\000\000\000\000\000\003\242\000\000\000\000\000\000\000\179\004\002\000\000\003P\004\199\000\000\001\t\003\\\000\000\003\188\000\000\000\000\003]\000\000\000\000\000\000\003^\003\243\003\194\000\000\003A\000N\003_\000\000\000\000\000\170\003B\001 \000\000\000\000\000\174\000\000\000\179\004\196\000\000\000\180\000\000\003W\000\000\000\000\001\012\004\190\003\244\000p\004\252\004\192\000\000\000\000\003\157\004\n\000\000\000\000\000y\004\018\000\000\000\000\000\000\000\000\000\000\000\000\001\t\004*\003[\000\000\000N\000\000\000\000\000\181\000\161\0021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\188\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\194\003O\003^\000\000\000\000\000\164\000\000\000\210\003_\000\179\004D\000\172\003P\001 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\195\000\000\004n\004>\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\226\000\000\000\000\001\t\000O\000\000\000N\000\000\000\178\000\164\003?\000\000\003R\000\000\000\000\000\165\003O\000\000\000\000\004E\000\000\000\000\000\000\004\198\000\179\004D\000\000\003P\000p\000\000\000\000\004_\003[\003\157\000\000\000N\000\000\000y\000\000\000\170\000\000\003\243\000\000\000\000\000\174\000N\000\000\000\000\000\000\000\170\003\\\000\178\000\000\000\000\000\171\003]\000\000\000p\004\189\003^\000\000\000\000\000\000\003\188\000\000\003_\000y\000\000\000\000\000\000\001 \000\000\003\194\004E\003A\000\000\000\000\004M\000\000\000N\003B\000\000\000\000\000\170\000\000\004_\003[\000\000\000\174\000\000\000\000\000\000\000\000\000\179\004D\004\190\000\180\000\000\000\000\004\192\000\000\000O\000\000\000\000\003\\\000\000\000\164\000\000\000\210\003]\000\000\000O\000\172\003^\001\t\000\000\000\164\000\000\000\000\003_\000\000\000\219\000\172\000\000\001 \000\000\000\000\000\000\000\181\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\179\000\000\000\174\000\180\000\000\000\000\004E\001\t\000\000\000O\004M\000\000\000\178\000\000\000\164\000p\000\210\000\000\004_\000\000\000\172\000\212\000\178\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\181\000\161\0020\000\000\0029\000\183\001\012\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\178\001 \000\000\000O\003O\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\179\004D\000\172\003P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\n\000\000\003\243\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000O\000\000\000\180\001\t\000\000\000\164\000\000\000\000\000\178\000\179\000\000\000\165\000\180\000\000\000N\000\000\000\000\000\000\001D\004E\000\000\001P\000\000\004M\000\000\000\000\000\000\001\014\000\000\000\000\000\000\004_\003[\000\000\000\181\001\n\000p\001\012\000\000\000\000\000\000\000\000\000\000\000\179\000\181\000y\000\180\000\178\000\000\000\000\003\\\000\000\001\020\000\000\000\000\003]\000\000\000\000\000\000\003^\001\023\000\000\000\000\000\212\000\000\003_\000\000\000\000\000\000\000\000\001 \001\014\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000O\000N\000\183\001F\000\000\001D\000\220\000\000\001P\001G\000\214\000\000\002=\000\179\000N\000\000\000\180\000\185\001D\001 \000\000\001P\000\000\000p\000\000\000\000\000\000\000\212\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\000p\000\000\000\000\000\000\001\135\001\014\001\t\000\000\000\000\000y\000\183\001V\000\181\000\000\000\220\000\000\000\179\000\000\000\214\000\180\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\001\020\000O\000\000\000\000\001F\000\000\000\000\000\000\001\023\000\000\001G\000\212\000\000\000\000\000O\000N\000\000\001F\000\000\001D\000\000\000\181\001P\001G\000\000\000\000\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\000\000\000p\000\214\000\000\000\000\001\135\000\000\001\t\000\000\000\185\000y\001 \001V\000\000\000\000\000\000\000\000\000\000\001\135\000\000\001\t\000\000\000\000\000\000\000\000\001V\000\000\000\000\000N\000\000\000\179\000\000\000\170\001W\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000O\000N\000\000\001F\000\000\001D\000N\000\000\001P\001G\000\170\001\136\001\137\000\000\000\000\000\171\000N\000\000\000\000\000\000\000\170\000\000\000\000\000p\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\001X\000\000\001Y\000\000\001\135\000\000\001\t\000\000\000\000\000\000\001\023\001V\001Z\000O\000\000\000\000\000\179\000\000\000\164\001W\000\210\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\179\001[\000O\001W\000\000\001F\001\\\000O\000\215\000\000\001]\001G\000\164\001\136\001\218\000\000\001^\000O\000\172\000\000\001 \001\127\000\164\000\000\000\210\000\000\001\136\003F\000\172\000\000\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\000\001X\000\000\001Y\001b\001\135\000\000\001\t\000\000\000\000\000\000\001\023\001V\001Z\001X\000\000\001Y\000\178\000\000\000\000\000\000\000N\000\000\000\000\001\023\001D\001Z\000\178\001P\000\000\000\179\001[\000\000\001W\000\000\000\000\001\\\000\000\000\000\000\000\001]\000\000\000\000\000p\001[\000\000\001^\000\000\000\000\001\\\001 \001\127\000y\001]\000\000\000\000\001\136\003\239\000\000\001^\000\000\000\000\000N\001 \001\127\000\000\000\161\000\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\000\001X\000\180\001Y\000\000\000\000\000\000\000O\000\000\000\000\001F\001\023\000\000\001Z\000\000\000\000\001G\000\179\000\000\000\000\001W\000\000\000\179\000\000\000\000\000\180\000\000\000\219\000\000\000\000\000\000\001[\000\179\000N\000\181\000\180\001\\\000\170\000\000\000\000\001]\000\000\000\174\001\136\004\012\000\000\001^\001\135\000O\001\t\001 \001\127\000\000\000\164\001V\000p\000\000\000\181\000\000\000\165\000\219\000\000\000\000\000\212\000y\000\000\000\000\000\181\001X\000\000\001Y\000\000\000\000\006(\000\000\000\000\000\000\000\000\001\023\000\000\001Z\000\000\000\183\000\000\000p\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000y\000\000\000\178\000\212\000\185\001[\000O\006\005\000\000\000\000\001\\\000\164\000\187\000\210\001]\000\000\000\000\000\172\000\000\000\000\001^\000\000\000\183\000\228\001 \001\127\000\220\000\000\000\000\000\000\000\214\006\006\000\000\006\t\005L\005M\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000N\001\t\001W\000\000\000\170\000\000\000\178\000\000\000\000\000\174\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000p\000\000\000\000\001\136\004G\000\000\000\000\000\000\001\t\000y\000p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000y\000\000\000\180\000N\000\000\000\000\000\000\000\170\000\000\001X\000\000\001Y\000\171\000\000\000\000\000\000\000\000\000\000\000\000\001\023\000\000\001Z\000\000\000\000\000\000\000O\000\000\005N\006+\000\000\000\164\000\000\000\210\000\000\000\181\000O\000\172\000\000\000\000\001[\000\164\000\000\000\210\000\000\001\\\000\000\000\172\000\000\001]\000\000\000\179\000\000\000\000\000\180\001^\000\000\000\000\000\000\001 \001\127\000\000\000N\000\000\000\000\000\000\000\170\000\000\001\t\000\000\000O\000\174\000\000\000\178\000\000\000\164\000\000\000\000\001\t\001.\000\000\000\172\000\000\000\178\000p\000\000\000\181\000\000\000\000\000\000\000\000\000N\000\000\000y\000\000\001D\000\000\000\000\001P\000\000\000\000\000N\000\000\000\000\002;\000\170\000\000\000\000\000\000\000\000\000\171\000\000\001\023\000p\000\000\000\212\000\000\000\178\000\000\000\000\000\000\000\000\000y\000\000\000\000\000N\000\000\000\000\000O\001D\000\000\000\000\001P\000\164\000\183\000\210\000\000\000\000\000\220\000\172\000\000\002\192\000\214\000\000\000\000\000\000\000\000\000p\000\000\000\185\006.\001 \000\000\000\000\000\000\000\000\000y\000O\000\179\000\000\001F\000\180\000\000\000\000\000\000\000\000\001G\000O\000\179\000\000\001\t\000\180\000\164\000\000\000\000\000\178\000\000\000\000\000\172\000\000\002\197\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\000\000\000\000\000O\000\000\000\181\001F\000\000\001&\001\134\000\000\001\t\001G\000\000\000\179\000\181\001V\000\180\000\000\000\000\000\000\000N\000\000\0024\000\000\001D\000\178\000\000\001P\000\000\000\000\001\023\000\000\001(\000\212\000\000\000\000\000\000\000\000\000\000\000\000\001\023\000\000\000p\000\212\001\t\000\000\000\000\000\000\000\181\001V\000\000\000y\000\183\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\183\000\000\000\000\000\000\000\220\000\185\000\000\001 \000\214\000\179\000\000\000\000\000\180\000\000\000\000\000\185\000\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\001F\000\000\000\000\000\000\000\000\000\000\001G\000\187\000\000\000\000\001.\000\179\000\000\000\000\001W\000\000\000\000\000\181\000\230\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0010\000\000\001U\000\000\001\t\000\000\000\000\000\000\001\023\001V\000\179\000\212\000\000\001W\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\181\001D\000\000\000\000\001P\000\000\001X\000\000\001Y\000\183\000\000\000\000\000p\000\220\000\000\000\000\001\023\000\214\001Z\000p\000\000\000y\000\000\000\000\000\185\000\000\001 \000\000\000y\000\000\000\000\000N\000\000\000\000\000\000\001D\001[\000\000\001P\000\000\001X\001\\\001Y\000\000\000\000\001]\000\000\000\000\000\187\001\130\001\023\001^\001Z\000p\000\000\001 \001\127\000\000\000\000\000\232\000\000\000\000\000y\000O\000\000\000\000\001F\000\000\000\000\000\000\001[\000\000\001G\000\179\000\000\001\\\001W\000\000\000\000\001]\000\000\000\000\000\000\000\000\002a\001^\000\000\000\000\000\000\001 \001\131\002k\000\000\000\000\000\000\000\000\000\000\000O\001\t\000\000\001F\000\000\000\000\001\129\000\000\001\t\001G\002d\000\000\000\000\001V\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\001X\000\000\001Y\000\000\000\000\000\000\000\000\000\000\000\000\000p\001\023\000\000\001Z\001\133\000\000\001\t\000\000\000N\000y\000\000\001V\000\161\002)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001[\000\000\000\000\000N\000\000\001\\\000\000\000\170\000\000\001]\000\000\000\000\000\171\000\000\000\000\001^\000\000\000\000\000\000\001 \001\127\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000N\000\000\000\172\000\000\000\161\001;\000\000\000\000\000\000\000\179\000\000\000\000\001W\000\000\000N\000\000\000\000\000\000\000\170\000\000\000\000\000O\000\000\000\174\002l\000\000\000\164\000\000\000\000\000\000\000\000\000\000\000\165\001\t\000\000\000\000\000p\000O\000\178\000\000\000\000\000\000\000\164\000\179\000\000\000y\001W\000\000\000\172\002\245\000\000\000\000\002e\000\000\000\000\002f\000\000\000\000\000\000\000\000\001X\000\000\001Y\001\023\000\000\000\000\000O\000\000\000\178\000N\001\023\000\164\001Z\000\161\001>\000\000\000\000\000\165\000\000\000\000\000O\000\000\000\000\000\000\000\178\000\164\000\000\000\210\000\000\000N\001[\000\172\000\000\000\170\001X\001\\\001Y\000\000\000\174\001]\000\000\000\000\001 \000\000\001\023\001^\001Z\000\000\000\000\001 \001\127\000p\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\001\t\000\179\001[\000\000\000\180\000\178\000\000\001\\\000\000\000\000\000\000\001]\000\000\000O\000\000\000\000\000\000\001^\000\164\000\000\000\000\001 \001\127\000\000\000\165\000\000\000\000\000\000\000\000\001\168\000\000\000\179\000\000\000O\000\180\000\000\000\181\000\000\000\164\000\000\000\210\000\000\000N\000\000\000\172\000\000\000\170\000\179\000\000\000\000\000\180\000\174\000\000\000\000\001\170\000\000\000\000\000\000\000\000\000\000\000\178\000\000\001\023\000N\000p\000\212\000\181\000\170\000\000\000\000\000\000\000\000\000\174\000y\000\000\001\t\000\179\000\000\000\000\000\180\000\178\000\000\000\181\000\000\000\183\000p\000\000\000\000\000\220\000\000\000\179\000\000\000\214\000\180\000y\000\000\000\000\000\000\000\000\000\185\000\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\000\000\000\210\000\000\000\000\001.\000\172\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000O\000\187\000N\000\000\000\000\000\164\003?\000\210\003R\000N\000\000\000\172\000\234\000\170\002?\000\000\000\179\000\000\000\174\000\180\000\000\001\t\001\023\000\000\000p\000\212\000\178\000\000\000\000\000\000\000N\000p\000\000\000y\000\161\001A\000\179\000\000\000\000\000\180\000y\000\000\001\t\000\000\000\183\000\000\000\000\000\178\000\220\000N\000\000\000\181\000\214\000\161\001\195\000\000\000\000\000\000\000\000\000\185\000\000\001 \000\000\000\000\001.\000\000\000\000\000\000\000O\000\000\003A\000\181\000\000\000\000\000\000\000O\003B\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\000\000\000\000\172\000\000\000\000\002E\000\000\000\000\000\000\000\000\000\000\000\000\000O\001\023\000\000\000\000\000\212\000\164\000\000\000\000\000\000\000\000\000\000\000\165\000\000\000\000\001\t\000\179\000\000\000\000\000\180\000O\000\000\001\t\000\000\000\183\000\164\000\000\000\178\000\220\000\000\000\000\000\165\000\214\000\000\000\000\000\000\000\000\000\179\000\000\000\185\000\180\001 \000\000\000\000\001.\000\000\003W\000\000\000\178\001\012\000\000\000\181\000\000\001\210\000\000\000\000\000\000\003?\000\000\003R\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\178\000\000\002I\000\000\000\000\000\181\000\000\000\000\000\000\000\000\001\023\000\000\000\000\000\212\000\000\003\226\004\222\000\000\000\000\000\000\000\000\001\210\000\000\003\021\000\000\003?\000\000\003R\000\000\000\000\003O\001\023\000\183\000\000\000\212\000\000\000\220\000\000\000\179\000\000\000\214\003P\000\000\000\000\000\000\000\179\000\000\000\185\000\180\001 \003\226\004o\001\230\000\183\003A\003Y\000\000\000\220\000\000\000\000\003B\000\214\000\000\000\000\000\000\000\000\000\179\000\000\000\185\000\180\001 \000\000\000\000\003*\000\000\003\233\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\179\001\210\001\230\000\180\003A\003?\001\020\003R\000\000\000\000\003B\000\000\000\000\003,\001\023\003[\000\181\000\000\000\000\000\000\000\000\001\023\000\000\000\000\000\212\003\233\000\000\000\000\000\000\000\000\003\226\004=\000\000\003\\\000\000\000\181\000\000\000\000\003]\000\000\000\000\000\000\003^\000\183\003\235\000\000\000\000\000\220\003_\000\000\000\000\000\214\000\000\001 \000\000\000\000\000\000\001\210\000\185\000\000\001 \003?\000\000\003R\000\000\000\000\000\000\001\230\000\000\003A\000\000\000\000\000N\000\000\000\000\003B\000\161\001\204\000\000\003\235\003\237\000\000\000\000\000\000\000\000\000\000\003\226\003\227\001\210\000\000\003\233\003O\003?\000\000\003R\003\242\000\000\000\000\000\000\000\179\000\000\000\000\003P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\237\003\243\003\226\003\241\000\000\000\000\000\000\000\000\001\230\000\000\003A\003O\000\000\000\000\000\000\003\242\003B\000\000\000\000\000\179\000\000\000\000\003P\000O\000\000\000\000\003\244\000\000\000\164\003\235\000\000\003\233\000\000\000\000\000\165\000\000\003\243\000\000\000\000\001\230\000\000\003A\000\000\000\000\000\000\000\000\003[\003B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\244\003\233\000\000\003\\\003\237\000\000\000\000\000\000\003]\000\178\000\000\000\000\003^\000\000\000\000\003O\000\000\000\000\003_\003\242\003[\000\000\000\000\000\179\003\235\000\000\003P\001\210\000\000\000\000\000\000\003?\000\000\003R\000\000\000\000\000\000\000\000\003\\\000\000\003\243\000\000\000\000\003]\000\000\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\003\235\003\226\004C\001\210\000\000\003\237\000\000\003?\000\000\003R\003\244\000\000\000\000\000\000\000\000\000\000\003O\000\000\000\000\000\000\003\242\000\000\000\000\000\000\000\179\000\000\000\000\003P\000\000\000\000\003[\000\000\003\226\004q\000\000\000\000\003\237\000\000\001\230\000\179\003A\003\243\000\180\000\000\000\000\000\000\003B\003O\003\\\000\000\000\000\003\242\000\000\003]\000\000\000\179\000\000\003^\003P\000\000\000\000\003\233\000\000\003_\000\000\000\000\003\244\000\000\000\000\001\230\000\000\003A\003\243\000\000\000\181\000\000\000\000\003B\000\000\001\210\000\000\000\000\000\000\003?\000\000\003R\003[\000\000\000\000\000\000\000\000\000\000\003\233\000\000\000N\000\000\000\000\003\244\000\170\000\000\000\000\000\000\000\000\000\174\003\\\000\000\000\000\000\000\004h\003]\000\000\000\000\000\000\003^\001\210\003\235\000\000\003[\001\211\003_\000\000\000\000\001\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\003\\\000\000\001\211\000\000\000\000\003]\001\212\000\000\000\000\003^\001\230\003\235\003A\000N\000\000\003_\003\237\000\170\003B\000\000\000\000\000\000\000\174\000\000\000\000\000O\000\000\003O\000\000\000\000\000\164\003\242\000\210\003\233\000\000\000\179\000\172\000\000\003P\000\000\000\000\000\000\000\000\000\000\000\000\001\230\000\000\003\237\000\000\001\213\000\000\000\000\003\243\000\000\000\000\001\214\000\000\000\000\003O\000\000\000\000\000\000\003\242\000\000\001\230\000\000\000\179\000\000\001\213\003P\000\000\000\000\000\178\000\000\001\214\000\000\000\000\003\244\000\000\000O\000\000\000\000\001\231\003\243\000\164\000\000\000\210\003\235\000\000\000\000\000\172\001\232\000\000\000\000\000\000\000\000\000\000\003[\000\000\001\165\000\000\002!\000\000\000\000\000\000\000\000\000\000\000\000\003\244\000\000\001\232\000\000\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\001\210\001\233\003\237\003^\001\211\000\178\000\000\003[\001\212\003_\000\000\000\000\000\000\003O\000\000\000\000\000\000\003\242\000\000\000\000\001\233\000\179\000\000\000\000\003P\003\\\000\000\000\000\000\000\000\000\003]\000\000\001\235\000\000\003^\000\000\000\179\000\000\003\243\000\180\003_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\227\006q\002\017\001\235\000\000\000\000\000\000\000\000\000\179\000\000\000\000\001\228\000\000\000\000\000\000\003\244\001\014\000\000\001\230\001\227\000\000\002\017\001\213\000\181\000\000\000\000\000\000\000\179\001\214\000\000\001\228\000\000\002\028\000\000\000\000\003[\000\000\002\030\002\020\000\000\000\000\000\000\000\179\000\000\000\000\000\180\000\000\001\238\000\000\000\000\000\000\000\000\000\212\003\\\000\000\002\019\000\000\002\020\003]\000\000\000\000\001\210\003^\000\000\001\232\001\211\001\238\000\000\003_\001\212\002 \000\183\000\000\000\000\000\000\000\220\000\000\000\181\000\000\000\214\000\000\001\210\000\000\000\000\000\000\001\211\000\185\000\000\000\000\001\212\001\240\000\000\000N\000\000\000\000\001\233\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000N\001\241\000\212\000\000\000\170\001\240\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\241\000\183\001\235\001\230\000\000\000\220\000\000\001\213\000\000\000\214\000\000\000\000\000\000\001\214\000\000\000\000\000\185\000\000\001\227\000\000\002\017\000N\000\000\001\230\000\000\000\170\000\179\001\213\000\000\001\228\000\174\000\000\000\000\001\214\000O\000\000\000\000\000\000\000\000\000\164\002\023\000\000\000\000\000\000\000\000\000\172\000O\000\000\000\000\001\232\000\000\000\164\000\000\000\210\000\000\000\000\002\020\000\172\000\000\000\000\002\026\000\000\000\000\000\000\000\000\001\238\000N\000\000\000\000\001\232\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000N\001\233\000\178\000\000\000\170\000\000\000\000\000\000\000O\000\174\000\000\000\000\000\000\000\164\000\178\000\210\000\000\000\000\000\000\000\172\000\000\001\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\240\000\000\000\000\001\235\000\000\000\000\000\000\000\000\000p\000\000\000\000\000\000\000\000\000\000\000\000\001\241\000\000\000y\000\000\001\227\000\000\002\017\000\000\001\235\000O\000\000\000\178\000\179\000\000\000\164\001\228\000\210\000\000\000\000\000\000\000\172\000\000\000O\000\000\001\227\000\000\002\017\000\164\000\000\000\210\000\000\000\000\000\179\000\172\000\000\001\228\000\000\000\000\000\000\000\000\000\000\000\000\002\020\000\179\000\000\000N\000\180\000\000\000\000\000\170\002\222\001\238\000\000\000\000\000\174\000\179\000\178\000N\000\180\000\000\000\000\000\170\002\020\000\000\000\000\002a\000\174\000\000\000\000\000\178\000\000\001\238\002k\000\000\000\000\000\000\000\000\000\000\000\181\001\t\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\002d\000\000\000\181\002\239\000\000\000\000\001\240\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\241\000\000\000O\000\000\000\000\001\240\000\000\000\164\000\000\000\210\000\212\000\000\000\000\000\172\000O\002 \000\000\000\187\000\000\000\164\001\241\000\210\000\181\000\000\000\000\000\172\000\000\002\251\000\236\000\183\000\000\000\000\000\179\000\220\000\000\000\180\000\000\000\214\003c\000\000\003\003\000\000\000\000\000\000\000\185\000\179\000\000\000\000\000\180\000\178\000\000\000\212\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\000\002 \000\178\000\000\000\174\000\000\000\000\000\000\000\181\000\000\000\000\000\183\000\000\000\000\002 \000\220\000\000\000\000\000\000\000\214\000\000\000\181\000\000\002l\000\000\000N\000\185\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\170\000\000\000\212\002e\000\000\000\000\002f\000\000\000\183\000\000\000\000\000\000\000\220\000O\001\023\000\000\000\214\000\000\000\164\000\000\000\210\000\183\003\n\000\185\000\172\000\220\000\000\000\179\000N\000\214\000\180\000\000\000\170\000\000\000\000\000\000\000\185\000\174\000\000\000\179\000\000\000\000\000\180\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\000\001 \000\172\002 \000\000\000\000\000\000\000\000\000\178\000\000\000\181\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000N\000\000\000\178\000\212\000\170\000\000\000O\000\000\000\000\000\174\000\000\000\164\000\000\000\210\000\000\000\212\000\000\000\172\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\183\000\000\000\000\000\185\000\220\000N\000\000\000\000\000\214\000\170\000\000\000\000\000\000\000\000\000\174\000\185\000\000\000\000\003\162\000\178\000\000\000\000\000O\000\179\000\000\000\000\000\180\000\164\000\000\000\210\000\000\000\000\000O\000\172\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\003\174\000\000\000\000\002 \000\000\000\179\000\000\000\000\000\180\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\178\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\178\000\000\002 \000\172\000\000\000\000\000\000\000\000\000\212\000\181\000\000\000\000\000\000\000\000\000\000\000N\003\197\000\000\000\000\000\170\003\179\000\000\000\000\000\000\000\171\000\179\000\000\000\183\000\180\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\212\000\178\000N\000\000\000\185\000\000\000\161\001\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\183\000\000\000\000\000\181\000\220\000\000\000\000\000N\000\214\000\000\000\000\000\170\000\000\003\186\000\000\000\185\000\174\000\000\000\179\000\000\000\000\000\180\000\000\003\192\000O\000\000\000\000\000\000\000\179\000\164\000\000\000\180\000\212\000N\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\002 \000\000\000\000\000O\000\000\000\183\000\000\000\181\000\164\000\220\002 \000\000\000\000\000\214\000\165\000\000\000\000\000\181\000\000\000\000\000\185\000\179\000\000\000\000\000\180\000\178\000N\000O\000\000\000\000\000\170\000\000\000\164\000\000\000\210\000\174\000\212\000\000\000\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000\000\000\000\000\219\000\178\003\199\000\000\000O\000\000\000\183\000\181\000\000\000\164\000\220\000\210\000\000\000\000\000\214\000\172\000\183\000\000\000\000\000\000\000\220\000\185\000\000\000\000\000\214\000\178\000\000\000\000\000N\000\000\000\000\000\185\000\170\000\000\000\000\000\000\000\212\000\174\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000N\000\210\000\178\000\000\000\170\000\172\000\183\000\000\000\000\000\174\000\220\000\000\000\179\000\000\000\214\000\180\000\000\000\000\000\000\000\000\000N\000\185\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\179\000\170\000\000\000\180\000\178\000\000\000\171\000\000\000O\000\000\000\181\000\000\000\000\000\164\000\000\000\210\000N\000\000\000\000\000\172\000\161\003\023\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\181\000\210\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\004\016\000\000\000\000\000\000\000O\000\179\000\000\000\219\000\180\000\164\000\178\000\210\000N\000\187\000\181\000\172\000\170\000\000\000O\000\000\000\000\000\174\000\000\000\164\000\238\000\000\000\000\000\000\004?\000\172\000\000\000\178\000\000\002 \000\000\000\000\000\000\000O\000\000\004\029\000\181\000\000\000\164\000\212\000\179\000\000\000\000\000\180\000\165\000N\000\000\000\178\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\183\000N\000\000\000\178\000\220\000\161\0036\000\212\000\214\000\000\002 \000\000\000\000\000\000\000\000\000\185\000O\000\181\000\000\000\000\000\000\000\164\000\178\000\210\000\000\000\000\000\183\000\172\004&\000\000\000\220\000\000\000\000\000\179\000\214\000\000\000\180\000\000\000\000\000\000\004A\000\185\000\000\000\000\000\000\000\000\000\212\000\000\000\000\004.\000\000\000\000\000\000\000O\000\179\000\000\000\000\000\180\000\164\000\000\000\210\002 \000N\000\178\000\172\000\183\000\170\000O\000\181\000\220\000\000\000\174\000\164\000\214\000\179\000\000\000\000\000\180\000\165\000\000\000\185\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\179\000\181\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\212\000\000\000\000\000\178\000\000\000\219\000\000\000\000\000\000\000\000\000\179\000\000\000\181\000\180\000\000\000\000\000N\000\178\000\000\000\183\000\170\000\212\000\000\000\220\000\000\000\174\000\181\000\214\000\000\000\000\000\000\000O\000\000\000\000\000\185\000\000\000\164\000\000\000\210\000\000\000\183\000\212\000\172\000\000\000\220\000\181\000\000\000\000\000\214\000\000\000\000\000\179\000\000\000\000\000\180\000\185\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\187\000\185\000\000\000\000\000\178\000\219\000\000\000\000\000O\004K\000\000\000\240\000\181\000\164\000\179\000\210\000N\000\180\000\000\000\172\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\212\002 \000\000\000\000\000\174\000\000\000\000\000\000\000\181\000N\000\000\000\000\000\000\000\170\000\178\000\000\000\000\000\000\000\174\000\183\000\000\000\000\000\181\000\220\000\000\000\000\000\000\000\214\000\000\006M\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\212\000\000\000\000\000N\000O\000\000\004X\000\170\000\000\000\164\000\000\000\179\000\174\000\000\000\180\000\172\000N\000\000\000\000\000\183\000\170\000\000\000\000\000\220\000O\000\174\000\000\000\214\000\000\000\164\000\000\000\210\000\000\000\000\000\185\000\172\006\178\000\000\000O\002 \000\000\000\000\000\000\000\164\000\000\000\210\000\181\000\000\000\000\000\172\000\000\000\178\000\000\000\000\000N\000\000\000\000\004]\000\170\000\000\000\000\000\000\000\179\000\174\000\000\000\180\000\000\000\000\000\000\000O\000\000\000\178\000\000\000\000\000\164\000\212\000\210\000\000\000\000\000\000\000\172\000\000\000O\000\000\000\000\000\178\000\000\000\164\000\000\000\210\002 \000\000\000\000\000\172\000\183\000N\000\000\000\181\000\220\000\170\000\000\000\000\000\214\000\000\000\174\000\000\000\000\000\000\000N\000\185\000\000\000\000\000\170\000\000\000\000\000\000\000\178\000\174\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\212\000\210\000\000\000\178\000\000\000\172\000\000\000\000\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\004d\000\000\000\214\000\000\000\000\000\179\000\000\000\000\000\180\000\185\000O\000\000\000\000\000\000\000\000\000\164\000\178\000\210\000\000\000\179\000\181\000\172\000\180\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\000\002 \000\172\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\006N\000\000\000\000\000\179\000\000\000\000\000\180\000\181\000\000\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\187\000\212\000\178\000\000\000N\000\000\000\000\000\000\000\161\0039\001\002\000\242\000\000\000\000\000\000\000\212\000\000\000\181\000\000\000\000\000\183\000\000\000\000\006N\000\220\000\000\000\000\000\000\000\214\000\000\000\181\000\000\000\000\000\179\000\183\000\185\000\180\000\000\000\220\000\000\000\000\000N\000\214\000\000\000\000\000\170\000\212\000\000\000\000\000\185\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000\000\001\016\000N\000N\000\000\000\183\000\170\000\170\000\181\000\220\000O\000\174\000\174\000\214\000\179\000\164\000\000\000\180\000\183\000N\000\185\000\165\000\220\000\170\000\000\000\000\000\214\000\179\000\174\000\000\000\180\000\000\000\000\000\185\000\000\000\000\000N\000\212\000\000\000\000\000\161\003<\001\140\000\000\000\000\000\000\000\000\000O\000\000\000\181\000\000\000\000\000\164\000\000\000\210\001\157\000\183\000\178\000\172\000\000\000\220\000\000\000\181\000\000\000\214\000\000\000\000\000\000\000O\000O\000\000\000\185\000\000\000\164\000\164\000\210\000\210\000N\000\212\000\172\000\172\000\170\000\000\000\000\000\000\000O\000\174\000\000\000\000\000\000\000\164\000\212\000\210\000\000\000\178\000N\000\172\000\183\000\000\000\170\000\000\000\220\000O\000\000\000\174\000\214\000\000\000\164\000\000\000\000\000\183\000\000\000\185\000\165\000\220\000\178\000\178\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000O\000\000\000\180\000\000\000\000\000\164\000\178\000\210\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000N\000\210\000\000\000\000\000\170\000\172\000\000\000\000\000\000\000\174\000\181\000\000\000\179\000\000\000\000\000\180\000\000\000N\000\000\000\000\000\000\000\170\000\000\000\178\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\179\000\000\000\180\000\180\000\000\000\000\001\177\000\178\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\179\001\221\000\000\000\000\000\000\000O\000\179\000\181\000\181\000\180\000\164\000\000\000\210\000\000\000\000\000\212\000\172\002\205\000\000\000\000\000\000\000\000\000O\000\000\000\181\000\000\000\000\000\164\000\000\000\210\000\000\000N\000\000\000\172\000\183\000\170\000\212\000\212\000\220\000\000\000\174\000\181\000\214\000\000\000\000\000\000\000\000\000\179\000\000\000\185\000\180\000\000\000\178\000\212\000\000\000\183\000\183\000\000\000\000\000\220\000\220\000\000\000\000\000\214\000\214\000\179\000\000\000\000\000\180\000\178\000\185\000\185\000\183\000\000\000\000\002\211\000\220\000\000\000\000\000\000\000\214\000\000\000\181\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\003\026\000\000\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\000N\000\210\000\000\000\000\000\170\000\172\000\000\000\000\000\212\000\174\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000N\000\000\000\212\000\183\000\170\000\000\000\000\000\220\000\000\000\174\000\179\000\214\000\000\000\180\000\000\000\000\000\000\000\178\000\185\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\000\179\000\000\000\214\000\180\000\000\000\000\000\000\000\000\000\000\000\185\000\000\003\031\000\000\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\000\000\000\210\000\000\000\000\000O\000\172\000\000\003#\000\000\000\164\000\000\000\210\000\000\000\000\000\181\000\172\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\212\000N\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\178\000\000\000\212\000\000\000\183\000N\000\000\000\000\000\220\000\170\000\178\000\000\000\214\000\179\000\171\000\000\000\180\000\000\000\000\000\185\000\000\000\183\000\000\000\000\000\178\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\003I\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000N\000O\000\000\000\000\000\170\000\000\000\164\000\000\000\210\000\174\000N\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000O\000\000\000\000\000\000\000N\000\164\000\212\000\000\000\170\000\000\000\000\000\172\000\000\000\174\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\183\000\000\000\180\000\178\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\179\000\000\000\185\000\180\003\148\000\000\000\000\000\000\000O\000\178\000\000\000\181\000\000\000\164\003\230\000\210\000\000\000\000\000O\000\172\000\000\000\181\000\000\000\164\000\000\000\210\000\000\000\000\004\180\000\172\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\000N\000\210\000\212\000\000\000\170\000\172\000\000\000\000\000\000\000\174\000N\000\000\000\212\000\000\000\170\000\000\000\000\000\178\000\000\000\174\000\000\000\183\000\000\000\000\000\000\000\220\000\212\000\178\000\000\000\214\000\000\000\183\000\000\000\000\000\000\000\220\000\185\000\179\000\000\000\214\000\180\000\178\000\000\000\000\000\000\000\183\000\185\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\179\000\000\000\000\000\180\000\185\000\000\000\000\000\000\000\000\004\213\000O\000\000\000\000\000\000\000\000\000\164\000\181\000\210\000\000\000N\000O\000\172\000\000\000\170\000\000\000\164\000\000\000\210\000\174\000\000\000\000\000\172\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\178\000\000\000\180\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\178\000\220\000\000\000\179\000\000\000\214\000\180\004\233\000\000\000\000\000\000\000\000\000\185\000\000\000\181\000\000\000\187\004\235\000O\000\000\000\000\000\000\000\000\000\164\000\181\000\210\000\000\000\244\000\000\000\172\000\000\004\237\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000N\000\000\000\212\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000N\000\000\000\212\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\183\000\000\000N\000\178\000\220\000\212\000\170\000\000\000\214\000\000\000\183\000\171\000\000\000\179\000\220\000\185\000\180\000\000\000\214\000\000\000\000\000\000\000\000\000\179\000\183\000\185\000\180\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\004\243\000\000\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\005\004\000\000\000\000\000\000\000O\000\172\000\000\000\181\000\000\000\164\000\000\000\000\000\000\000\000\000N\000\172\000\000\000O\000\170\000\000\000\000\000\000\000\164\000\171\000\000\000\000\000\212\000\000\000\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000\179\000N\000\000\000\180\000\178\000\170\000\000\000\000\000\183\000\000\000\171\000\000\000\220\000\000\000\178\000\000\000\214\000\000\000\183\000\000\000\000\000\000\000\220\000\185\000\000\000\000\000\214\000\178\005\018\000\000\000N\000\000\000\000\000\185\000\170\000\181\000\000\000\000\000\000\000\171\000\000\000\000\000N\000O\000\000\000\000\000\170\000\000\000\164\000\000\000\000\000\171\000N\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\212\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\000\000N\000\000\000\000\000\172\000\170\000\000\000\000\000\000\000\183\000\171\000\000\000\000\000\220\000\000\000\179\000\178\000\214\000\180\000\000\000\000\000\000\000O\000\000\000\185\000\179\000\000\000\164\000\180\000\000\000\000\000\000\000\000\000\172\000O\000\000\000\000\000\000\000\179\000\164\000\178\000\180\000\000\000\000\000O\000\172\000\000\000\000\001d\000\164\000\181\000\000\000\000\000\000\000\000\000\172\000\000\000\000\003e\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\178\000\000\000\000\000\164\000\181\000\000\000\000\000\000\000\000\000\172\000\212\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000N\000\178\000\000\000\000\000\170\000\000\000\000\000\000\000\183\000\171\000\000\000\179\000\218\000\000\000\180\000\000\000\214\000\000\000\183\000\000\000\000\000N\000\218\000\185\000\178\000\170\000\214\000\000\000\000\000\000\000\171\000\187\000\000\000\185\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\246\000\000\000\000\000\000\000\181\000\000\000\000\000N\000\000\000N\000\000\000\170\000\000\000\170\000\000\000\000\000\171\000\000\000\171\000\000\000\000\000\000\000\179\000N\000O\000\180\000\000\000\170\000\181\000\164\000\000\000\000\000\171\000\000\000\179\000\172\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000O\000\000\000\180\000\000\000\000\000\164\000\000\000\187\000\000\000\000\000\000\000\172\000\181\000\000\000\000\000\000\000\000\000\000\000\248\000\000\000\000\000\000\000\179\000\000\000\181\000\180\000\178\000\000\000O\000\000\000O\000\187\000\000\000\164\000\181\000\164\000N\000\000\000\000\000\172\000\170\000\172\000\250\000\000\000O\000\171\000\000\000\178\000\000\000\164\000\000\000\000\000\000\000\000\000\000\000\172\000\000\000\181\000\000\000N\000\187\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\252\000\187\000\000\000\000\000\178\000N\000\178\000\000\000\000\000\170\000\000\000\187\001`\000\000\000\171\000\000\000\000\000\000\000\000\000\000\000\178\000\000\001f\000\000\000\000\000\000\000\000\000\000\000\000\000N\000\000\000O\000\000\000\170\000\187\000\000\000\164\000\000\000\171\000\000\000\179\000\000\000\172\000\180\000N\001h\000\000\000\000\000\170\000\000\000\000\000N\000\000\000\171\000O\000\170\000\000\000\000\000\000\000\164\000\171\000\179\000\000\000\000\000\180\000\172\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\000\000\181\000\164\000\000\000\178\000\000\000\000\000N\000\172\000\000\000\000\000\170\000\000\000\000\000\000\000\179\000\171\000\179\000\180\000\000\000\180\000O\000\181\000\000\000\000\000\000\000\164\000\178\000\000\000\000\000\000\000\179\000\172\000N\000\180\000\000\000O\000\170\000\000\000\000\000\000\000\164\000\171\000O\000\178\000\000\000\000\000\172\000\164\000\187\000\181\000\000\000\181\000\000\000\172\000\000\000\000\000\000\000\000\000\000\001j\000\000\000\000\000\000\000\000\000\000\000\181\000N\000\178\000\000\000\187\000\170\000\000\000O\000\000\000\000\000\171\000\000\000\164\000\000\000\000\001l\000\000\000\178\000\172\000\000\000\000\000\000\000\000\000\179\000\178\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\187\000O\000\187\000\000\000\000\000\000\000\164\000\000\000\000\000\000\000\000\001n\000\172\001p\000\179\000\000\000\187\000\180\000\000\000\000\000\000\000N\000\178\000\000\000\000\000\170\000\181\001r\000\000\000\000\000\171\000\179\000\000\000\000\000\180\000O\000\000\000\000\000N\000\000\000\164\000\000\000\170\000\000\000\000\000\000\000\172\000\171\000\178\000\181\000N\000\000\000\000\000\000\000\170\000\179\000\000\000\000\000\180\000\171\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\179\000\000\000\000\000\180\000\187\000N\000\000\000\179\000\000\000\170\000\180\000\000\000\178\000\000\000\171\001t\000\000\000O\000\000\000\000\000\181\000\000\000\164\000\000\000\000\000\000\000\000\000\187\000\172\000\000\000\000\000\000\000\000\000\000\000O\000\181\000\000\000\179\001v\000\164\000\180\000\000\000\181\000\000\000\187\000\172\000O\000p\000\000\000\000\000N\000\164\000\000\000\000\000\170\001x\000y\000\172\000N\000\171\000\000\000\000\000\170\000\179\000\178\000\000\000\180\000\171\000\187\000\000\000\000\000O\000\181\000\000\000\000\000\000\000\164\000\000\000\000\001z\000\000\000\178\000\172\000\187\000\000\000\000\000\000\000N\000\000\000\000\000\187\000\170\000\000\000\178\001|\000\000\000\171\000\179\000\181\000\000\000\180\001~\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\000\000\000\000O\000\000\000\178\002a\000\187\000\164\000\000\000\000\000O\000\000\002k\000\172\000\000\000\164\000\000\001\243\000\181\001\t\000\000\000\172\000\000\000\000\000\000\000N\000\000\000\000\002d\000\170\000\000\000\000\000\187\000\000\000\171\000\179\000\000\000N\000\180\000O\000\000\000\170\000\000\001\245\000\164\000\000\000\171\000\000\000\000\000\178\000\172\000\000\000\179\000\000\000O\000\180\000\000\000\178\000\000\000\164\000\000\000\000\000\000\000\000\000\179\000\172\000\187\000\180\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\001\247\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\178\000\181\000\000\000\179\000\000\000O\000\180\000\000\000\000\000\000\000\164\000\000\000\000\000\181\000\000\000\178\000\172\000O\000\000\000\000\000\000\000N\000\164\000\000\000\000\000\170\000\000\000\000\000\172\000\000\000\171\000\000\000\187\000\000\000\000\000N\000\000\000\000\000\181\000\170\000\000\000\000\000\000\001\249\000\171\002l\000\000\000\000\000\179\000\187\000\000\000\180\000\178\000\000\000\000\000\000\000\179\000\000\000\000\000\180\001\251\000\187\000\000\000\000\000\178\000\000\000\000\000\000\000\000\000\000\004\025\000\000\001\253\002e\000\000\000\000\002f\000\000\000\000\000\000\000\000\000\000\000\000\000\181\001\023\000\179\000\187\000O\000\180\000\000\000N\000\181\000\164\000\000\000\170\000\000\000\000\001\255\000\172\000\171\000\179\000O\000\000\000\180\000\000\000N\000\164\000\000\000\000\000\170\000\000\000\000\000\172\000\000\000\171\000\000\000\000\000\000\000\000\000\000\000\181\000N\000\000\001 \000\000\000\170\000\000\000\000\000\000\000\000\000\171\000\187\000\000\000\000\000\178\000\181\000\000\000\179\000\000\000\187\000\180\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\178\000\179\002\003\000p\000\180\000\000\000\000\000\000\000O\000\000\000\000\000\000\000y\000\164\000\000\000\000\000\000\000\000\000\000\000\172\000\187\000\000\000\000\000O\000\181\000\000\000\000\000\000\000\164\000\000\000\000\002\005\000\000\000\000\000\172\000\187\000\181\000\000\000N\000O\000\000\000\000\000\170\000\000\000\164\000\000\002\007\000\171\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\178\000\000\000N\000\000\000N\000\000\000\170\000\000\000\170\000\000\000\000\000\171\000\000\000\171\000\000\000\178\000\179\000\187\000\000\000\180\002a\000\000\000\000\000p\000\000\000\000\000\000\002k\002\t\000\187\000\179\000\178\000y\000\180\001\t\000N\000\000\000\000\000\000\000\170\002\011\000\000\000\000\002d\000\171\000\000\000\000\000\000\000\000\000O\000\000\000\181\000\000\000\000\000\164\000\000\000\000\000N\000\000\000\000\000\172\000\170\000\000\000\000\000\000\000\181\000\171\000\000\000O\000\000\000O\000\000\000\000\000\164\000\000\000\164\000\000\000\000\000N\000\172\000\000\000\172\000\170\000\000\000\000\000\179\000\000\000\171\000\180\000\000\000\000\000\000\000\000\000\000\000\000\002a\000\178\000\000\000\000\000\187\000\179\000O\002k\000\180\000\000\000\000\000\164\000\000\000\000\001\t\002\r\000\000\000\172\000\187\000\000\000\178\000\179\000\178\002d\000\180\000\181\000N\000\000\000O\003a\000\170\000\000\000\000\000\164\000\000\000\171\000\000\000\000\000\000\000\172\000\181\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\000\000O\000\000\002l\000\171\000\178\000\164\000\000\000\181\000N\000\000\000N\000\172\000\170\000\000\000\170\000\000\000\000\000\171\000\000\000\171\000\000\000\000\000\000\000\000\000\187\000\000\000\178\004!\000\000\000\000\002e\000\000\000\000\002f\000\000\003g\000\000\000\179\000\000\000\187\000\180\001\023\000\000\000O\000\000\000\000\000\000\000\178\000\164\000\000\003i\000\000\000\000\000\000\000\172\000\187\000\179\000\000\000\179\000\180\000O\000\180\000\000\000\000\000\000\000\164\003k\000\000\000\000\000\000\000\000\000\172\000\181\000\000\000O\000\000\000O\002l\000\000\000\164\001 \000\164\000\000\000\000\000\000\000\172\000\000\000\172\000\000\000\179\000\178\000\181\000\180\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004T\000\000\000\000\002e\000\000\000\178\002f\000\000\000\000\000\179\000\000\000\000\000\180\000\000\001\023\000\000\000\000\000\000\000\187\000\178\000\000\000\178\000\181\000\000\000\000\000\000\000\000\000\000\000\000\003m\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\187\000\000\000\187\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\003o\000\000\003q\000\000\000\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\187\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\003s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\000\000\187\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003u\000\179\000\000\000\179\000\180\000\181\000\180\000\000\000\000\000\000\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003y\000\000\000\000\000\000\000\000\000\000\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003{\000\000\000\000\000\187\000\000\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003}\000\000\003\127"))
+    ((16, "\002\128\0020\000\000\000\000\000\000\000M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001q\000\000\001G\006H\000\000\000\000\000\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\003v\000\000\005\172\003\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000l\000\000\000\255\000\000\000\000\003\\\000\000\000\000\005*\000\000\000\000\000\000\000R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003x\000\000\000\000\001\246\019X\000\000\000\000\020\178\000\000\000\000\000\000\000\000\000\000\000\000\014\212\000\000\000\000\000\000\000\000\000\000\005\202\000\000\000\018\000\000\000\142\000\000\000\000\000\000\005\206\000\000\b\228\000\000\000\000\000\000\b\172\000\000\000\000\000\000\016\212\001O,\152\000\000\000\000\027\246\028\"\000\000\000N\000\000\030t1H6J1H\016\"1\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\1607 \000\000\000\000!\030)\0180\134\000\0002R\003~\000\000\000\000*\0185\228\000\000\000\000\000\000\001\022\000\000\000\1302\004+\b\000\000\000\000Ml\000\000\004>\000\000\006:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\170\000\000\000\000\006\160\000\000\018*\000\000\023\160\000\000\024\172\000\000!\028\000\000\"\164\000\000#\154\000\000%\"\000\000&\012\000\000&\170\000\0004z\000\000\017\196\000\000\000\000\000\000\000\000\t\130\000\000\000\000\000\000\000\000'\160\000\000(\138\000\000.\186\000\0004\168\000\0007x\000\0008:\000\000;F\000\000DJ\000\000H\224\000\000J\152\000\000L\234\000\000S\022\000\000U\168\000\000V&\000\000VV\000\000V\144\000\000\0070\000\000\000\000\b&\000\000\000\000\000\000\000\000\002\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000gM\210\000\000\000+\000\000\000\000\000d\t\176\000\000\000b\000\r\000 \000\166\001{\000\000\001$\000\000\000\000\001\146\000\000\001\156\000\000\000\00074\000\000\000\000\000\000\000,\nz\000\000;&7\236\000\000\000\000\000\000\000\000\011p\018\014\000\000\000\000\000\000\000\000\000\000\000\000;\128\000\000\000\000<\n\000\000\000\000=\178\000\000\004\026\000\000\b(\000\000\000\000\000\000\003@\000\0002\2428&\000\000\000\0008j9\018\000\000\t\028\000\000\n\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000V\168\000\0004\188\000\000Uz\000\000V\188\000\000V\234\000\000W\156\000\000W\198\000\000W\254\000\000X\002\000\000X\030\000\000X\146\000\000X\192\000\000X\226\000\000Y\018\000\000Y0\000\000Y>\000\000\000\000:\006\000\000\000\000\000\000:J\000\000\000\000\000\000\000\000\000\000\000\000N$\000\000\000\000\000\000\b\236\000\000\000\000\000\000\000\000#\232\000\000\000\000\000\000\000\000\001G\000\000\000\000N>\000\000\000\000\000\000\020,\000\197\000\000\000\000A\238\000\000\000\000:\234\000\000\000\000\000\000\000\026\012f+\022\000\000\000\000On\000\000O\152\000\000\000\000\000\000\r\\B<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=\216\000\000\000\000\000\000\000\000BZ\014R\016\182\000\000?\244\000\000\000\000I\018\000\000\006V\000\000\000\000\024|\000\000\000\000\000\000\018\248\000\0003x\000\000\000\000O\154\000\000\000\000\000\000\021\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028 \000\000\030\158\000\000\000}\000\000\000\000\000\000Yz\000\000Y\174\000\000Y\242\000\000ZZ\000\000Z|\000\000Z\148\000\000Z\198\000\000[ \000\000[0\000\000[j\000\000[\136\000\000[\210\000\000[\234\000\000\\v\000\000\000\000\000\000\000\000\000\000C2\000\000\000\000\003\146D\012\000\000\000\000D4\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\\\000\000;\156\000\000\000\000\000\000\000\000\000\000<2\000\000\000\000\000\000<\200\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\000\000\000\014H\000\000\021@\000\000\000\000\0022\005\238\000\000\000\000\000\000\000\000\020N\014\252\000\000\016\232\000\000\000\000\000\000\021\174\000\000\023\"\000\000&B\000\000\000\000\000\000\000\000\000\000\000\000(\192\000\000\000\000\000\183\000\000\000\000\000\000\0226\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000b\022&\000\000\000\000\000\000\000\000\000\000\000\000\000\254\000\000\016\018\r\140\000\000\000\000\000\000\017:\000\000\000\000\000\000\002v\rT\000\000\002\184\000\000\000\000\000\000\000\000\014H\000\000\000\000\000D\nr\000\000\n\166\000\000\000\000\000\000\000\246\000\000\017\228\000\158\0007\000\000\000\000\000\000\002\208\000\222\000\000\000\000\003`\000\000\000\000\000\000\005H\000\000\000\000\000\000\000\252\000\000\000\000\000\000\000\000\000\000\003 \000\203\000w\000\000\000\000\000k\000\000\000\000\000\000\000\000\000\000\000\000O\186\000\000>\158\000\000\000\000\000\000P.\000\000\000\000\003b\000\000\000\000\000\000\003j\020*\000\000\000\000Db\000\000\000\000\004L\000\000\000\000\000\000\000\000\016p\000\000\023\204\000\000\000\000->\000\000\000\000\000\000D\180\000\000\000\000\000\000\000\000\000\0009\248\000\000\000\000\000\000\001O\000\000E\014\000\000\000\000\000\000\000\000\002\178\020\218\000\000E(\000\000\000\000\000\000\000\000\022\214\000\000E\218\000\000\000\000\000\000\000\000\003\168\000\000\n4\000\000\000\000J\190<\242\000\000\000\000\000\000PR\000\000\000\000\000\000\000\012\000\000P\226\000\000\000\000\000\000Q\004\000\000\000\000\000\230\000\000!\206\000\027=\136\000\000\000\000\000\000\021(\021~\000\000\000\000\000\000\000\000\000\000\000\000Kv\000\000\000\000O$\000\000\000\000O\220\000\000\006\130\000\000\0224\000\000\000\000\000\000\024\164\000\0003\146\000\000\000\000Q\154\000\000\000\000\000\000\025D\000\000\000\000\000\000\000\000\000\000\000\000\011\b\000\000\025\162\000\000\000\000\000\000\004\128\000\000\000\000\000\000\000\000\000\000\000\000\\\146\000\000E\242\000\000U\142\000\000]\000\000\000]\030\000\000]>\000\000]\192\000\000]\230\000\000]\234\000\000^(\000\000^T\000\000^~\000\000^\212\000\000^\246\000\000_\018\000\000_\022\000\000,\196\000\000\000\000\000\000\001F\000\000\004\252\000\000\018\218\003N\011*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R*\000\000>\228\0044\027N\000\000\000\000\000\00000\000\000\003\128\024\134\000\000\000\000F\198\000\000\000\000\000h\000\000\025T\000\000\000\000EF\000\000\000\000\000\000G\002\000\000\000\000\000\000\000\000Gh\000\000\000\000\012\b\026\174\000\000\000\000G\204\000\000\000\000\027@\000\000\000\000G\224\000\000\000\000\000\000\000\000H.\000\000IB\000\000?f?\214\001N\0062\000\000\006\158\007\210\000\000\000\000\000\000\014\202\000\000\000\000\0200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0004\024\000\000@\020\000\000\000\000\000\000\019l\000\000\000\000\007\020\000\000\000\000\000\000\"`\002\152\000\000#V\000\000\000\000\000\000\000\000\004h\000\000\000\000\020b\000\000$L\000\000\000\0004\158\000\000\000\000\000\000Iv\000\000\000\000\0180\000\000\000\000\029\230\000\000\000\000Z\238\000\000\000\000\000\000I\196\000\000\000\000\000\000]N\000\000\000\000\000\000\000\000J*\000\000\000\000\000\000\000\000\r\178\022\222\000\000JT\000\000\000\000\000\000\000\000\000\000\000\000\021X\000\000\000\000\004\150\000\000\021\234\000\000\0180\000\000\000\000J|\000\000K\016\000\000@\250\000\000\000\000\000\0005\146\000\000\000\000\000\000KZ\000\000\000\000\012\222\000\000\000\000\030\030\000\000\000\000]\228\000\000\000\000\000\000K\240\000\000\000\000\000\000\000\000LV\000\000\000\000\015\234\030@\000\000\000\000M\018\000\000\000\000\004\166A\208\000\000\004\186\000\000\000\000\000\000\000\000\004\128\000\000A8\000\000$\222\000I%\212\000\000\001L\000\000\022\224\000\000\023\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\020&\202\002\006'\\\000\000\000\000\000\000\003.\000\000\024h\000\000\005&\000\000\000\000\018\208\001$(R\000\000\002\226\000\000\025^)H\000\000\000\000\026T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\140\012 \000\000\005\164\000\000\000\000\000\000\000\000\005\238\000\000\026\230\000\000\000\000\000\000/\166RZ\000\000\000\000\000\000/:\000\000\000\000\000\000\000\000\005\1881\014\000\000\000\000\000\000\000\000\005\192\000\000\000\000\000\000\000\000\016R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\000\000\027\220\000\000\000\000\000\000R\240\000\000\r\022\000\000\000\000\000\000\0050\000\000\005\178\000\000\000\000\002\212\028\210\000\000\029d\000\000\000\000\000\000\003\156\000\000Sr\004\250S\134\000\000S\162\000\000\000\000\000\000\005h\000\000T2\005\190\000\000\000\000,X=z\000\000\005\204-\232\000\000\000\000.z\000\000\000\000\000\000\006\006\000\000TF\006\018\000\000\000\000\b\208\006\030\014p\000\000\0272\000\000\000\000\000\000\0068\000\000T\200\006\156\000\000\000\000\000\000\002H\000\000\002\192\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\022\000\000\000\000\007\186\000\000\000\160\000\000\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\007\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\026\000\000\000\000\001\150\000\000\t\196\000\000\000\000\000D\000\000\002\188\001R\002x\000\000\000\000\000\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0034\004\254\000\000\000\000\b\166\000\000\000\000\000\000\012\002\000\000\000\000\012\248\rR\000\000\000\000\000\000\000\000\r\238\015>\002\186\000\000\002\162\000\000\000\000\000\000\000\000\018\156\000\000\000\000\000\000\000\000\000\000\000\000\000E\000\000\000\000\007\202\000\000\000\000\001\208\000\000\019\002\000\000\000\000\000\000\b\020\000\000\000\000\019\200\000\000\000c\000\000\000\000\000\000\000\000\000\129\019`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\200\021V\000\000\000\000\000\000\000\000\024\162\024\250\b\206\000\000\026\022\000\000\000\000\000\000\000\000\000\000\000\000\018\178\000\000\003B\000\000\000\000\000\000\n\012\000\000\000<\000\000\000\000\000\000\023\212\000\000\000\000\0266\027\002\n\186\000\000\027x\000\000\000\000\000\000\000\000\000\000\000\000\002\170\002\128\000\000\002\202\000\000\028r\011\002\000\000\028\202\000\000\000\000\000\000\000\000\003\028\000\000\003\174\000\000\000\000\000\000\001f\000\000\001f\003\154\003\246\000\000\000\000\000\000\001l\014\176\000\000\000\000\000\000\000\000\000\000\002\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\016\000\000\000\000\000\005\000\000\014\248\004\180\004\164\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\142\000\000\000\000\024\244\029$\000\000\000\000\000\000\000\000\029\128\000\000\000\0006\132\000\000\005\130\000\000\000\000\000\000\000\000\014\250\000\000\000\000\000\000\000\000\000\000\001|\024\204\000\000\000\000\026~\000\000\000\000\000\000\000\000\r\012\000\000\000\000\003\144\000\000\000\000\000\000\000\191\000\000\000\000\000\215\000\000\000\000\000\000\000\000\000\000\000\000\000\000M.\000\000\000\000\000\000\001\011\000\000\000\000\000\000\000\000\000\000\001\026\012\152\017\b\017\132\000\000\006\184\007\014\007\022\007d\000\000\000\000\000\000\000\000\000\000\000\000\007$\030Z\000\000)\218\007~\000\000\000\000\007\224\000\000\031P\000\000B\022\000\000\000\000\007(\031\226\000\000*\208\000\000\007f+\198\000\000\000\000\000\000\002\148\025\130\000\000\000\000\000\000\000\000\016\222\000\000\021\206!$\000\000\000\000\027\200\"\026\000\000\"L\000\000\000\000\021\174\000\000\023\"\000\000\000\000$\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\012\000\000\000\000\000\000\b\002\000\000 \216\000\000\026t\004\160\000\000\000\000\000\000\000\000\000\000\0044\000\000\000\000\000\000\000\000\000\000M\134\000\000\004\014\000\000\000\000\000\000\000\000\000\000\002*\000\000\015\002\0022\015\248\000\000\004p\016\238\000\000\004\178\000\000\005f\000\000\006\\\000\000\007R\000\000\026t\000\000\000\000\000\000\000\000\000\000\bH\000\000\004\186\000\000\t>\000\000\026t\005,\000\000\001\194\000\000\005@\006\236\000\000\004\020\000\000\004L\000\000\000\000\000\000\000\000\000\000\000\000\004h\000\000\004\132\000\000\004\226\000\000\000\000\000\000\000\000\000\000\005\030\000\000\000\000\000\000\000\000\000\000\006\134\0050\000\000\000\000\005\160\000\000\000\000\005\188\005\128\007H\000\000\007N\000\000\000\000\003\136\006R\000\000\006\002\000\000\000\000\006T\000\000\000\000\000\000\000\000\000\000\000\000\007\156\006~\000\000\000\000\000\000\006\190\006\140\005\158\006@\006\186\007\002\000\000\000\000\006\168\006P\006\162\006\220\007\022\000\000\000\000\007\176\b$\000\000\b@\000\000\bd\000\000\000\000\bF\000\000\000\000\bP\000\000\000\000\000\000\000\000\bb\000\000\b\144\000\000\000\000\000\000\b\150\000\000\000\000\000\000\b\156\000\000\000\000\000\000"), (16, "\001\210\000p\000\018\000=\003?\004t\003R\001\159\000p\006T\000y\000=\006U\005\169\005L\005M\000\007\000y\005\170\005\171\003\133\003\134\000p\002N\005\144\000\017\000N\002\217\004r\0042\001\211\000y\006Y\005\021\001\212\000N\006J\006K\000$\001D\0059\000\005\001E\000?\000p\002\133\002\134\002\157\002\137\006\011\005\172\000>\000N\000y\000N\002P\001D\003\007\006O\001P\000*\005\173\006E\006F\005:\0005\004\001\0005\003A\005=\005L\005M\001\162\006\t\003B\006\012\005L\005M\000N\000z\001\160\005]\001D\001\028\000p\001P\001\017\001\t\002S\003\233\002\196\006R\000O\000y\001\t\005N\001\213\005\170\005\171\002u\000p\000O\001\214\002\182\001F\005[\000p\002\148\001\t\000y\001G\005^\005L\005M\000p\000y\001\017\006R\000O\002\130\000O\001F\002\172\000y\001\147\001\239\001\019\001G\002S\005\202\001\t\0006\002\195\0006\002\174\005d\002O\004\161\002\198\003W\005\173\000z\001\012\003\235\000O\001\160\000p\001F\001V\002\185\002S\005N\0005\001G\001\210\000y\001\018\005N\003?\005A\003R\001\150\000p\002\133\002\138\001V\002\137\006~\002O\005E\001\t\000y\002\187\006\127\004\202\004\208\000p\003\133\003\134\003\237\0005\006\128\004|\004\000\001\135\000y\001\t\004\147\001\238\001\"\003O\001V\001\t\005N\003\242\005\249\002\188\000z\000\179\004\002\001\t\003P\004\163\004\128\004\207\002S\002S\004t\0009\005T\0009\003\007\002O\006\002\006+\004n\001\227\002\154\0006\002\164\004\001\005n\003A\001\029\000\179\000p\001\012\001\228\003B\001$\005\145\005\239\001\t\000\179\000y\002\166\001W\002\177\001\023\005b\003\244\006\b\0043\003\233\004z\001\023\0006\004\n\001\t\002\139\000\179\004\145\000P\001W\005\148\005\237\005\240\005L\005M\004*\003[\005\251\001\t\001\031\0005\006\t\002B\006\012\005L\005M\005O\000Q\002\176\002T\004\157\002\243\000\179\001 \003\\\001W\006\003\002\129\006\130\003]\001 \003\217\001\029\003^\001\153\007\025\001\210\006\004\006\005\003_\003?\0009\003R\003\235\001 \002\248\004\134\000<\001\136\002-\007\026\006\131\002&\005Y\002\167\006\189\0065\001\t\000p\001Z\002,\003\176\000p\006\128\006\190\004\000\001 \000y\006\192\003\208\002\166\000y\001\030\001X\005g\001Y\0006\001[\003\136\003\237\000\004\002\156\001\163\001\023\005N\001Z\001]\001\029\0005\002\129\003O\001\"\001^\003\007\003\242\005N\0068\002\192\000\179\004\002\006\132\003P\004\001\001[\003A\000\005\001\026\003\253\001\\\006\133\003B\000p\001]\002\139\006\209\006\163\006\\\005a\001^\003\254\000y\002\177\001 \001\127\006\207\003\233\000p\001!\001 \001\023\004w\001#\000\167\005\249\002a\000y\002\197\002T\006\001\005\236\003\244\002k\004\005\006\165\001\t\002\129\002\218\004\n\001\t\003\218\004\203\006\167\000\004\0009\0006\002S\004\147\002d\003\209\004*\003[\003\000\005\132\005\237\005\240\005L\005M\003\219\001 \005\150\002S\004\205\005\134\005L\005M\0005\005\254\000\005\003\\\003\235\006+\000p\001\210\003]\001 \006\210\003?\003^\003R\0005\000y\000p\002\151\003_\004\134\005R\007\"\001\t\001 \005\251\000y\004\205\000N\0005\000p\005h\000N\006\006\002\192\002\217\004r\0042\001\t\000y\000p\003\237\001\210\006;\000p\002\217\001\211\005b\004\136\000y\001\212\002\151\003O\000y\000Z\000p\003\242\0009\002\153\005S\000\179\004\002\006\211\003P\000y\003\007\002\178\0006\005\196\004\150\000F\006\133\005N\002\197\004\001\003\007\003A\006\213\000\r\002\218\005N\0006\003B\005\221\002S\005i\002l\0063\002S\005\135\003\158\002\152\000]\001\t\000O\0006\0005\003\233\000O\002S\000\016\000\017\003\244\001\t\004\005\006\215\002\180\006A\001\230\004\n\000N\002|\001\213\006\217\002e\004\228\001\t\002f\001\214\000R\005\223\004*\003[\001\210\006]\001\023\001\t\003?\000N\003R\001\t\004\230\000\170\000U\005a\0005\000\b\000\176\002\178\006\007\003\\\001\t\006=\006\b\0009\003]\004\129\003W\001\006\003^\001\012\003\235\004f\001\210\001\232\003_\005\252\003?\0009\003R\001 \005\233\0006\005\235\001 \004\004\006\129\006\t\005T\006\012\005L\005M\0009\005e\002\255\000p\000O\003\254\002\179\002\225\006\128\006\195\0042\006\183\000y\001\233\006\184\003\237\0048\001\230\007\011\003A\005\245\003\014\000O\006\025\004\139\003B\003O\000\164\003\254\0006\003\242\006\175\006\176\000\172\000\179\004\002\005\025\003P\003\007\004\131\003\233\001 \006\192\004\231\001\235\004\002\006\192\004\001\000\004\003A\006C\004n\003\133\003\134\000a\003B\001\026\004\216\000\159\004\230\001\227\000S\002\024\001I\006\206\0007\005b\0009\000\179\000\178\003\233\001\228\000V\000\005\0005\000S\003\244\000F\0043\005N\004z\006\017\002\192\004\n\006\188\004l\000V\004\145\004\220\001\t\003W\000F\005p\004\n\003\235\004*\003[\004\018\006\198\002\185\007\018\002\229\006\214\006\180\001\210\004*\0009\001\238\003?\002\255\003R\002\193\003\164\001\017\003\\\006\173\005q\005L\005M\003]\003\181\002\197\002\189\003^\003\235\002\027\000p\004i\006\219\003_\003\237\006\128\006\195\0042\001 \000y\001C\004i\000N\0005\0006\003O\000\170\006R\001 \003\242\002\188\000\171\001 \000\179\001\240\006\223\003P\003Z\000\179\002S\0005\000\180\000:\001 \003\237\003\007\006R\004\218\000p\001\241\004n\004k\002\143\002\217\004\001\003O\003A\000y\006\243\003\242\000p\004j\003B\000\179\004\002\006\201\003P\0057\0058\000y\004\142\006\200\004\172\000\181\006\133\003\244\005\243\003\233\000p\004\142\003\243\000{\005N\003\007\003\254\006\023\006\241\000y\000O\0006\0005\003\135\002S\000\164\000N\003[\001\t\002\226\000\170\000\172\006\235\0009\000\182\000\176\004\238\003\244\0006\0043\000N\006\203\004\144\001\210\004\n\003\\\006\237\003?\006\205\003R\003]\004\143\004\240\000\183\003^\000p\004*\003[\000\255\000^\003_\004\166\000N\003\235\000y\000p\001\t\000\178\000\185\004\219\006\128\006\195\0042\004\166\000y\003\\\0005\000N\001\t\007\n\003]\000\170\002a\004\193\003^\004\193\000\171\007\b\0006\002{\003_\004\241\000O\006\239\006\015\001 \001\t\000\164\0009\003\237\003\007\004\168\007\029\000\172\000\005\002d\000O\004\240\000D\004\001\003O\003A\001\012\004\167\003\242\0009\006a\003B\000\179\004\002\006\201\003P\006\245\004\195\000F\004\194\006\202\003\216\000O\006\133\006\251\006\252\003\233\004\221\004\244\003\243\003\133\003\134\005t\000\178\004\255\001\t\0006\000O\003\133\003\134\003\133\003\134\000\164\000N\004\240\001\t\000\179\000\170\000\172\000\180\005\001\004\002\000\176\006a\003\244\007\001\0043\006a\006\203\003\208\001\210\004\n\002\190\005\002\003?\006\205\003R\000S\000_\004\218\005\005\003\133\003\134\004*\003[\006\244\007\030\005\r\000V\005\001\003\235\000\181\000p\000F\000\178\007$\004\240\006\128\006\195\0042\005\016\000y\003\\\005\015\004\220\007\002\006a\003]\006m\004\n\002\147\003^\007\007\004\018\007\019\007\006\005\015\003_\007\014\000O\003\254\004*\001 \003\208\000\164\001\020\003\237\003\007\000\179\007\019\000\172\000\180\007\016\001\023\0005\007%\004\001\003O\003A\000\187\002e\003\242\001\209\002f\003B\000\179\004\002\006\201\003P\005\019\000\188\001\023\000p\006\204\005H\005K\006\133\006p\003\209\003\233\001 \000y\003\243\000\181\003>\004\240\000\178\007B\007\018\003\254\005I\005I\001 \007\022\006\164\005\147\000N\000N\001\t\000\179\000\170\001D\000\180\007C\001E\000\176\003\254\003\244\002\159\0043\001 \006\203\000\182\001\210\004\n\003\248\001\023\003?\006\205\003R\0006\006e\007\023\006i\005\156\006w\004*\003[\007\027\007\028\007\031\000\183\003\212\003\235\000\181\000p\000\184\007\018\007\019\007 \006\128\006\195\0042\007#\000y\003\\\000\185\007&\005\157\007'\003]\005\160\005L\005M\003^\001 \006|\003\215\001\t\003\207\003_\0078\000O\000O\006d\001 \001F\000\164\006c\003\237\003\007\000\179\001G\000\172\000\180\007-\0076\006\247\0072\004\001\003O\003A\000\187\0075\003\242\000p\000w\003B\000\179\004\002\006\201\003P\007>\000\190\000y\0005\006\212\003\208\007<\006\133\005s\007@\003\233\000p\007E\003\243\000\181\006b\002\217\000\178\001V\000\000\000y\000p\002\133\002\134\002\135\002\137\000\000\000N\000z\001\t\000y\000\170\005q\005L\005M\000\000\000\176\002S\003\244\000\000\0043\005N\006\203\000\182\001\210\004\n\003\007\000\000\003?\006\205\003R\000\000\005\134\005L\005M\002S\000z\004*\003[\005<\000\000\000\000\000\183\000\000\003\235\002S\000p\000\254\000\000\0006\000\000\006\128\006\195\0042\000\000\000y\003\\\000\185\000N\001\t\000\000\003]\000\170\005:\000\000\003^\000\000\000\174\005=\005L\005M\003_\000\000\000O\003\209\000\000\001 \001\t\000\164\000\000\003\237\003\007\000\179\000\179\000\172\000\180\001W\001\t\000\000\005\145\004\001\003O\003A\000\000\005N\003\242\000\000\001\023\003B\000\179\004\002\006\201\003P\000p\000\000\000\000\000\000\006\216\000\000\000\000\006\133\000\000\000y\003\233\005N\000\000\003\243\000\181\000\000\000\000\000\178\000\000\000\000\005\185\000O\005Z\0009\000\000\000\000\000\164\000N\000\000\001\t\000\000\000\170\000\172\001 \000\000\000\000\000\176\000\000\003\244\005\174\0043\000\000\006\203\000\182\001\210\004\n\005[\005N\003?\006\205\003R\000\000\005^\005L\005M\000\000\000\000\004*\003[\000\000\005\200\001\146\000\183\000\000\003\235\004\002\000p\001\001\000\178\000\000\000\000\002\217\004r\0042\000\000\000y\003\\\000\185\000\000\001\210\000\000\003]\000\000\001\211\005\198\003^\001\t\001\212\005\201\005L\005M\003_\000\000\000O\000\000\000\000\001 \000p\000\164\002T\003\237\003\007\000\179\002\139\000\172\000\180\000y\002\129\005\b\000\000\004\001\003O\003A\004\n\001\144\003\242\000\000\004\018\003B\000\179\004\002\006\201\003P\000p\000\000\004*\000\000\002T\000\000\000\000\006\133\000\000\000y\003\233\005N\002\129\003\243\000\181\000\000\000\000\000\178\000\000\000\000\000\000\000\000\001\230\001 \000\000\000\000\001\213\000N\000\000\001\t\000\179\000\170\001\214\000\180\000\000\000\000\000\176\000\000\003\244\000\000\0043\001 \006\203\000\182\001\210\004\n\000\000\005N\003?\006\205\003R\001 \005\134\005L\005M\000\000\000\000\004*\003[\001\231\001\t\000\000\000\183\000\217\003\235\000\181\000p\001R\001\232\000\000\000\000\002\217\004r\0042\000\000\000y\003\\\000\185\000\000\001\210\000\000\003]\000\000\001\211\000\000\003^\001\t\001\212\005\134\005L\005M\003_\000\000\000O\000\212\000\000\001 \000\000\000\164\001\233\003\237\003\007\000\179\000\000\000\172\000\180\001\022\000\000\000\000\000\000\004\001\003O\003A\000\183\001\023\003\242\000\000\000\218\003B\000\179\004\002\000\214\003P\004\211\004\128\000\000\000\000\000\000\000\185\005j\001\235\000\000\006\b\003\233\005N\000\000\003\243\000\181\000\000\000\000\000\178\000\000\000\000\005\211\000\000\001\230\001\227\002*\002\017\001\213\000\000\000\000\001\t\001 \000\179\001\214\006\t\001\228\006\012\005L\005M\003\244\000\000\0043\000\000\004z\000\182\001\210\004\n\000\000\005N\003?\004\018\003R\000\000\000\000\000\000\000p\002\028\005\226\004*\003[\001\231\000\000\002\020\000\183\000y\003\235\000\000\000p\001T\001\232\005p\001\238\002\217\004r\0042\000\000\000y\003\\\000\185\000\000\001\210\002\161\003]\000\000\001\211\000\000\003^\000\000\001\212\001\023\003\182\000\000\003_\000\000\005q\005L\005M\001 \000\000\002S\001\233\003\237\003\007\000\179\000\000\000\000\000\180\002\163\000\000\000\000\000\000\004\001\003O\003A\001\240\001\023\003\242\000\000\005N\003B\000\179\004\002\000\000\003P\004~\004\128\000\000\000p\001 \001\241\000\000\001\235\006\\\000\000\003\233\000\000\000y\003\243\000\181\000\000\0005\001\t\000\000\000\000\000\000\000\000\001\230\001\227\002'\002\017\001\213\000\000\000\000\001\t\001 \000\179\001\214\000\000\001\228\000\000\000\000\000\000\003\244\000\000\0043\000\000\004z\000\182\001\210\004\n\000\000\000\000\003?\004\018\003R\000\000\005N\000\000\000\000\002\028\000\000\004*\003[\001\231\000\000\002\020\000\183\000\000\003\235\000\000\000p\003T\001\232\005p\001\238\002\217\004r\0042\000\000\000y\003\\\000\185\005\236\001\210\000\000\003]\0006\001\211\000\000\003^\000\000\001\212\000\000\001\t\000\000\003_\000\000\005q\005L\005M\001 \000p\002\150\001\233\003\237\003\007\005\237\005\240\005L\005M\000y\000\000\000\000\000\000\004\001\003O\003A\001\240\005p\003\242\006\028\000\000\003B\000\179\004\002\000\000\003P\004\165\004\128\000p\002\133\002\141\001\241\002\137\001\235\000\000\000z\003\233\000y\000\000\003\243\000\000\005q\005L\005M\002S\000\000\000\000\000p\001\230\001\227\002$\002\017\001\213\000\000\000\000\001\t\000y\000\179\001\214\000\000\001\228\000\000\0009\000z\003\244\000\000\0043\000\000\004z\000\000\001\210\004\n\002S\000\000\003?\004\018\003R\000\000\005N\005w\000\000\002\028\004+\004*\003[\001\231\001\t\002\020\005N\000\000\003\235\002S\000p\006g\001\232\005p\001\238\002\217\004r\0042\0005\000y\003\\\000\000\000\000\001\210\000\000\003]\000\000\001\211\001\026\003^\000\000\001\212\001\t\000\000\000\000\003_\000\000\005q\005L\005M\001 \005N\000\000\001\233\003\237\003\007\000\000\004\031\000\000\000\000\000\000\001\t\000\000\006^\004\001\003O\003A\001\240\000\000\003\242\000p\001\023\003B\000\179\004\002\002\217\003P\004\215\004\128\000y\005\249\002\248\001\241\000\000\001\235\000\000\000\000\003\233\000\000\000\000\003\243\000\000\000\000\0005\0006\000\000\000\000\004Z\0005\001\230\001\227\002\"\002\017\001\213\000\000\003\007\001\t\000\000\000\179\001\214\001 \001\228\000\000\000\000\002S\003\244\000\000\0043\000\000\004z\000\000\001\210\004\n\005\250\000\000\003?\004\018\003R\000\000\005N\005}\000\000\002\028\000\000\004*\003[\001\231\006\018\002\020\006>\000p\003\235\000\000\000p\000\000\001\232\005\251\001\238\006\128\000y\004\000\000\000\000y\003\\\001\"\006\b\001\t\002T\003]\0006\000\000\002\139\003^\000\000\0006\002\129\000\000\000\000\003_\000\000\006\019\0009\006\020\001 \000\000\005{\001\233\003\237\003\007\006\t\000\000\006\012\005L\005M\000\000\002T\000\000\004\001\003O\003A\001\240\005p\003\242\002\129\001$\003B\000\179\004\002\003\211\003P\006\160\004\128\000^\006\021\001 \001\241\006\208\001\235\000\000\000\000\003\233\000\000\002a\003\243\006\022\005q\005L\005M\000\000\002v\000\000\000\000\000\000\001\227\002\015\002\017\001\t\000\000\000\000\001\t\000\000\000\179\001 \000\000\001\228\002d\003\208\000\000\003\244\000\000\0043\0009\004z\000\000\001\210\004\n\000\000\004\002\003?\004\018\003R\001\026\000\000\005\141\000\000\002\028\000\000\004*\003[\000p\000\000\002\020\000{\005N\003\235\000N\000p\000\000\000y\001D\001\238\006\128\001P\004\000\000\000\000y\003\\\005\252\002\127\000p\002\133\003]\000\000\002\140\000\000\003^\000\000\000\000\000y\0005\005\n\003_\000\000\000\000\004`\004\n\001 \005N\000\000\004\018\003\237\003\007\000\000\002S\0005\000\000\000\000\004*\000\000\000\000\004\001\003O\003A\001\240\000z\003\242\000S\000c\003B\000\179\004\002\006\194\003P\002S\000\000\003\209\000\000\000V\001\241\006\193\006\133\000O\000F\003\233\001F\000\000\006\197\001\147\000\000\0005\001G\000\000\000\000\000\000\000\000\001\t\001 \000\000\002\219\000\000\000\000\000\000\001\t\005\255\0005\0006\000\000\000\000\000\000\0005\000\000\003\244\000\000\004\005\006\199\001\t\002e\001\210\004\n\002f\0006\003?\006\205\003R\001\150\000\000\000\000\001\023\001V\000\000\004*\003[\000\000\000\000\000\000\006/\000p\003\235\000\000\000p\000\000\000\000\000\000\000\000\006\128\000y\004\000\000\000\000y\003\\\000\000\000\000\000p\000\000\003]\0006\000\000\006\\\003^\000\000\000\000\000y\000\000\000\000\003_\001\"\001 \000\000\000\000\001 \0006\005\139\000\000\003\237\003\007\0006\000\000\000p\002\133\002\134\002\145\002\137\0009\004\001\003O\003A\000y\000\000\003\242\000\000\000\000\003B\000\179\004\002\006\194\003P\000\000\0009\000\000\000\000\000\000\000\000\006\196\006\133\000\000\001$\003\233\000\000\002a\006\197\000\000\000\000\000z\000\179\000p\002c\001W\000\000\000\000\006\\\000\000\002S\001\t\000y\000N\001\t\000\000\000\000\000\170\0027\000\000\002d\0009\000\174\003\244\000\000\004\005\006\199\001\t\000\000\001\210\004\n\000\000\000\000\003?\006\205\003R\0009\000\000\004\031\000\000\001\153\0009\004*\003[\000\000\000\000\000\000\002T\002\142\003\235\000N\000p\001\t\002\243\001D\002\129\002\217\001P\004\000\000\000\000y\003\\\002\248\000\000\000N\001Z\003]\0005\000\170\000\000\003^\000\000\000\000\000\171\001\026\000\000\003_\002\248\004Z\000O\000\000\001 \000\000\001[\000\164\003\237\003\007\000\000\001\163\001\t\000\172\000\000\001]\002\249\001 \004\001\003O\003A\001^\000\000\003\242\000\000\000\000\003B\000\179\004\002\006\194\003P\006\135\000\000\000\000\002\219\001\202\000\000\000\000\006\133\000O\002\253\003\233\001F\000\000\006\197\001\147\000\000\000\000\001G\000\178\000{\006f\000\000\000O\000\000\006\162\0006\000\000\000\164\000\000\001\t\000\000\000\000\004\223\000\172\000\000\002Q\000\000\004\160\003\244\0005\004\005\006\199\000\000\002e\001\210\004\n\002f\000\000\003?\006\205\003R\001\150\000\000\005p\001\023\001V\000\000\004*\003[\0005\005\197\000\000\006^\002\139\003\235\000\000\000p\000\000\000\000\000\178\001\023\002\217\000\000\004\000\000\000\000y\003\\\005q\005L\005M\000\000\003]\006]\002\219\005\198\003^\000\000\002T\005\201\005L\005M\003_\000\000\001 \000\000\002\129\001 \000\000\000\000\000\000\003\237\003\007\0009\000\179\005p\0006\000\180\0005\000\000\001 \004\001\003O\003A\000\000\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\006^\0006\000\000\000\000\005q\005L\005M\003\249\001\023\003\233\001 \000\000\004\149\000\000\000\181\000p\000\179\000\000\000\000\001W\002\217\003\251\004\000\000\000\000y\000\000\000\000\005p\001\t\000\000\000\179\004\158\001\151\000\180\000\000\005N\004\160\003\244\000\000\004\005\004\151\001\"\000\000\000\212\004\n\004\031\005N\001 \004\018\0006\003\007\005q\005L\005M\001\153\000\000\004*\003[\0009\004\001\000\000\003A\000\183\003\235\000\000\000\181\000\213\003B\000\000\002\248\000\214\000\000\000\000\000\000\000\000\003\\\005\159\000\185\0009\001Z\003]\001$\003\233\000\000\003^\004$\005N\000Y\0005\000N\003_\0005\000\000\001D\000\000\001 \001P\001[\000\000\003\237\005\157\001\t\001\163\005\160\005L\005M\001]\000\000\000\000\004(\003O\000\000\001^\000\187\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\000\000\192\004\031\0009\000\000\000p\000\000\000\000\004\007\002\219\005N\000\000\004\149\003\235\000y\000p\000\000\000\000\000\000\000\000\002\217\004\b\0042\000\000\000y\000\000\002\248\000\000\000\000\000\000\000\000\0006\000O\0005\0006\001F\005\137\003\244\001\147\004\005\004\151\001G\004$\005\203\004\n\000\000\001\216\000\000\004\018\003\237\003\007\000\000\000\000\0005\000\000\000\000\004*\003[\000\000\004\001\003O\003A\005N\000\000\003\242\000\000\004(\003B\000\179\004\002\000\000\003P\000\000\003\214\000\000\003\\\000\000\002w\000S\001V\003]\000\000\003\233\000\000\003^\0047\0005\005\152\000\000\000V\003_\001\t\000N\000\000\000F\001 \003?\002\219\003@\0006\002d\001\t\000\000\000\000\0005\000\000\000\000\000\000\0009\000\000\003\244\003\208\004\005\0049\000\000\000\000\001\210\004\n\000\000\0006\003?\004;\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\0045\000\000\000\000\005\167\000N\003\235\000\\\000p\003?\000\000\003R\000\000\002\217\004\b\0042\000\000\000y\003\\\000\000\000\000\000\000\0006\003]\000\000\005p\000\000\003^\000O\0005\003A\000\000\000\000\003_\000\179\000\000\003B\001W\001 \000\000\0006\000\000\003\237\003\007\000\000\000\000\0009\000\000\000\000\005q\005L\005M\004\001\003O\003A\000\000\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\0009\000p\000\000\000{\003\209\000O\001\161\003A\004:\003\233\000y\000\000\003\243\003B\000\000\000p\000\000\000\000\000\000\002\220\002\217\004\b\0042\0005\000y\000\000\000\000\000\000\001\t\0006\000N\001Z\000\000\0009\003?\002e\003@\003\244\002f\0043\002z\0044\000\000\002\227\004\n\000\000\001\023\000\000\004\018\001[\003\007\0009\000\000\000p\001\163\000S\004*\003[\001]\004\001\000\000\003A\000y\003\235\001^\005N\000V\003B\000\000\000\000\000\000\000F\000\000\000\000\006\142\003\\\000\000\000\000\003W\000\000\003]\006\155\003\233\000\000\003^\001 \003O\001\t\000\000\0006\003_\000{\000\000\000\000\000\179\001 \000O\003P\003A\003\237\000\000\001\t\000\000\000\000\003B\000\000\0009\003\001\000\000\000\000\003O\0005\000\000\000\000\003\242\0005\001\210\000\000\000\179\004\002\003?\003P\003R\000\000\001\225\002a\000\000\000\000\000\000\003O\000\000\003\005\002y\000\000\000\000\003\243\003\235\000\179\000p\001\t\003P\005\156\000{\002\217\004r\0042\000\000\000y\002d\0005\000\000\000\000\000\000\000\000\003Y\002\219\000\000\000\000\002W\002\219\003\244\000\000\0043\000\000\0044\005\157\0009\004\n\005\160\005L\005M\004\018\003\237\003\007\003\131\000\000\000\000\0006\000\000\004*\003[\0006\004\001\003O\003A\000\000\000\000\003\242\000\000\005\178\003B\000\179\004\002\000\000\003P\000\000\000\000\002t\003\\\003[\006\156\000\000\000\000\003]\000\000\003\233\000\000\003^\003\243\000\000\000\000\000\000\000N\003_\000\000\0006\000\170\003\\\001 \000\000\003O\000\171\003]\000\000\001\t\006\157\003^\006\145\000\179\000\000\006\146\003P\003_\003\244\0005\0043\000\000\0044\001\023\001\210\004\n\000\000\000\000\003?\004\018\003R\000\000\000\000\000\000\000\000\005N\000\000\004*\003[\0009\000\000\000\000\000{\0009\003\235\000\000\000p\000\000\000\000\000\000\000\000\002\217\004r\0042\000\000\000y\003\\\000\000\002\131\000\000\005\156\003]\001 \000O\002e\003^\000\000\002f\000\164\000\000\000\000\003_\000\000\000\000\000\172\001\023\001 \0009\000\000\000\000\003\237\003\007\000\000\000\000\005\157\0006\000\000\005\160\005L\005M\004\001\003O\003A\003Q\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\004y\000\000\000\000\000N\000\000\000\000\000\178\001\211\0005\003\233\001 \001\212\003\243\000\000\000\000\000p\000\000\000\000\000\000\000\000\002\217\004r\0042\0005\000y\000\000\000{\000N\001\t\000\000\000{\000\170\000\000\000\000\000\000\000\000\000\171\003\244\000\000\0043\000\000\004z\003\b\000\000\004\n\000\000\004,\000\000\004\018\000\000\003\007\000\000\005\180\000\000\000\000\000\000\004*\003[\0009\004\001\000\000\003A\005p\003\235\002o\005N\003\012\003B\000\000\000O\0040\000\000\000\000\001\213\0006\003\\\000\000\000\000\000\000\001\214\003]\006\b\003\233\000\000\003^\000\000\005q\005L\005M\0006\003_\000\179\000\000\000O\000\180\001 \000\000\000\000\000\164\003\237\005\156\001\t\000\000\0005\000\172\006\t\005p\006\012\005L\005M\003O\0005\000\000\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\004{\005\157\000\000\000\181\005\160\005L\005M\005q\005L\005M\000\000\0005\003\243\003\235\000\000\000p\000\000\000\178\000\000\000\000\002\217\004\152\0042\000\000\000y\000\000\000{\000N\0009\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\176\003\244\006a\0043\000\000\004z\002\232\0009\004\n\005N\0006\000\000\004\018\003\237\003\007\000\187\000\000\000\000\0006\002\219\004*\003[\000\000\004\001\003O\003A\000\194\005\206\003\242\000\000\005N\003B\000\179\004\002\001\227\003P\000\000\004\141\000\000\003\\\000\000\0006\000\179\000\000\003]\001\228\003\233\000\000\003^\003\243\005N\000\000\000\000\005N\003_\000\000\000\000\000O\000\000\001 \000\000\000\000\000\164\000\000\000\000\001\t\000\179\000\000\000\172\000\180\000\000\004\154\000\000\000\000\003\244\000\000\0043\000\000\004z\000\000\001\210\004\n\000\000\000{\003?\004\018\003R\0009\000\000\005p\000\000\000\000\000\000\004*\003[\0009\0005\000\000\003D\003\159\003\235\000\181\000p\000\000\000\178\005p\000\000\002\217\004\152\0042\000\000\000y\003\\\005q\005L\005M\000\000\003]\0009\000\000\000\000\003^\000\000\006a\001\229\0005\000\000\003_\000\000\005q\005L\005M\001 \005\191\000\000\000\000\003\237\003\007\000\000\006\b\002\219\000\000\000\000\000\000\000\000\000\000\004\001\003O\003A\000\187\000\000\003\242\0066\001\210\003B\000\179\004\002\003?\003P\003R\000\196\000\000\0006\006\t\000\000\006\012\005L\005M\004\174\003\233\000\000\006\"\003\243\000\000\000\000\000p\000\000\005\189\003M\000\000\002\217\004\b\0042\006e\000y\002\243\000{\000\000\001\t\000\179\000\000\0006\000\180\000\000\004\156\005N\000\000\003\244\0005\0043\000\000\004\155\003\167\000\000\004\n\0005\000\000\005p\004\018\002\248\003\007\005N\000\000\000p\000\000\000\000\004*\003[\002\217\004\001\000\000\003A\000y\003\235\000\181\002\249\000\000\003B\000\000\000\000\000\000\005q\005L\005M\000\000\003\\\000\000\000\000\000\000\0009\003]\000\000\003\233\000\000\003^\000\000\000\000\005N\003\007\002\253\003_\000\000\000\000\000\182\000\000\001 \000\000\002S\000\000\003\237\000\000\001\t\000\000\000\000\0006\000\000\005p\000\000\0009\000\000\003O\0006\000\183\000\000\003\242\000\000\001\210\003V\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\000\000\000\185\000p\000N\005q\005L\005M\000\161\002K\003\243\003\235\000y\000p\001\t\000\000\000\000\000\000\002\217\006e\004\000\004\031\000y\000\000\000\000\001\210\000N\000\000\005N\001\211\000\161\002G\000\000\001\212\005\187\003\244\000\000\0043\000\000\004\155\000\000\000\000\004\n\000\000\000\000\002\248\004\018\003\237\003\007\000\000\005\217\000\000\000\000\000\000\004*\003[\0009\004\001\003O\003A\000\000\004$\003\242\0009\000\000\003B\000\179\004\002\000\000\003P\000O\000\000\000\000\003\\\000{\000\164\006\150\000\000\003]\000\000\003\233\000\165\003^\003\243\0069\004(\000\000\005N\003_\001\t\003\183\001\230\000O\001 \000\000\001\213\000\000\000\164\000\000\001\t\000\000\001\214\004\209\000\165\000\000\004\002\005p\004\160\003\244\000\000\0043\000\000\0044\000\000\001\210\004\n\000\000\000\178\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\005q\005L\005M\000\000\003\235\000\000\000p\001\232\000\000\000\178\000\000\002\217\000\000\004\000\000\000\000y\003\\\000{\005\012\000\000\005p\003]\005\215\004\n\003\152\003^\000\000\004\018\000\000\000\000\000\000\003_\000\000\003\189\000\000\004*\001 \000\000\001\233\000\000\003\237\003\007\000\000\000\000\005q\005L\005M\000\000\000\000\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\000\005p\000\000\000\000\000\000\001\235\000\000\000\000\000\179\003\233\001 \000\180\004\149\000\000\000\000\000p\000\000\005\213\005N\000\000\002\217\001\227\004\000\002\014\000y\005q\005L\005M\001\t\000\179\000\179\004\225\001\228\000\180\000\000\006\145\004\160\003\244\006\146\004\005\004\151\006\153\000\000\000\181\004\n\000\000\001\023\005p\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\0005\004\001\000\000\003A\005N\003\235\000\000\000\181\000\000\003B\001\238\000\000\000\000\005q\005L\005M\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\001 \0005\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\000\000\001\t\000\000\0005\004\227\000\000\000\000\005N\000\000\004\160\003O\001\240\000\000\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\000\0006\000\000\001\241\000\000\000\000\000N\000\000\000\000\000\000\000\161\002A\004\149\003\235\000\000\000p\000\000\000\000\000\000\005\230\002\217\000\000\004\000\000\000\000y\000\000\000\000\001\210\000N\0006\005N\001\211\000\161\0026\000\000\001\212\000\000\003\244\000\000\004\005\004\151\000\000\000\000\000\000\004\n\000\000\0006\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\000\005\228\003\242\000\000\000\000\003B\000\179\004\002\000\000\003P\000O\000\000\000\000\003\\\000\000\000\164\0009\000\000\003]\000\000\003\233\000\165\003^\004\149\000\000\000\000\000\000\000\000\003_\000\000\000\000\001\230\000O\001 \000\000\001\213\000\000\000\164\000\000\001\t\000\000\001\214\006j\000\165\0009\000\000\006 \004\160\003\244\000\000\004\005\004\151\000\000\000\000\001\210\004\n\000\000\000\178\003?\004\018\003R\0009\000\000\000\000\000\000\000\000\000\000\004*\003[\006r\000\000\000\000\000\000\000\000\003\235\000\000\000p\001\232\000\000\000\178\000\000\002\217\004\b\0042\000\000\000y\003\\\000\000\000\000\000\000\000\000\003]\006%\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000{\001\233\000\000\003\237\003\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\003O\003A\004\022\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\000\000{\000\000\000\000\000\000\001\235\000\000\000\000\000\179\003\233\000\000\000\180\004\149\000\000\000\000\000p\000\000\004Q\000{\000\000\002\217\001\227\004\000\001\237\000y\000\000\000\000\000\000\001\t\000\179\000\179\000\000\001\228\000\180\004a\000\000\000\000\003\244\000\000\004\005\004\151\000\000\000\000\000\181\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\000\000\003A\000\000\003\235\000\000\000\181\000\000\003B\001\238\000\000\000\000\000\000\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\000\000\001\t\000\000\000\000\006x\000\000\000\000\000\000\000\000\004\160\003O\001\240\000\000\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\001\241\000\000\000\000\000\000\000\000\006\166\000\000\000\000\000\000\003\243\003\235\000\000\000p\000\000\000\000\000\000\000\000\002\217\004\b\0042\000\000\000y\000\000\000\000\000N\000N\000\000\000\000\000\170\000\161\0023\000\000\000\000\000\171\003\244\000\000\0043\000\000\0044\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000p\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000y\000\000\003\242\000\000\000\000\003B\000\179\004\002\000\000\003P\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\004\149\000\000\000\000\000\000\000\000\003_\000\000\000\000\000O\000O\001 \000\000\000\000\000\164\000\164\000\000\001\t\000\000\000\000\000\172\000\165\000\000\000\000\000\000\000\000\003\244\000\000\004\005\004\151\000\000\000\000\001\210\004\n\000\000\004\169\003?\004\018\003R\000\000\000\000\000\000\006\142\000\000\000\000\004*\003[\000\000\000\000\006\154\000\000\000\000\003\235\000\000\000p\001\t\000\178\000\178\000\000\002\217\000\000\0042\000\000\000y\003\\\000\000\000\000\000\000\000\000\003]\000\000\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\003\007\000\000\000\000\000p\000\000\000\000\000\000\000\000\000\000\004\001\003O\003A\000y\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\000\000\000\000\000p\000\000\000\000\000\000\003\233\000\000\0046\003\243\000\000\000y\000p\000\000\000\000\000\000\000\000\002\217\000\000\004\000\000\000\000y\000\000\000\000\000N\001\t\000\179\000\179\000\170\000\180\000\180\000\000\000\000\000\171\003\244\000\000\0043\000\000\0044\000\000\000\000\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\006\142\000\000\000\000\004*\003[\000\000\004\001\006\149\003A\000\000\003\235\000\181\000\181\001\t\003B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\\\000\000\000\000\006\142\000\000\003]\000\000\003\233\006\145\003^\006\144\006\146\000\000\000\000\000\000\003_\001\t\000\000\000O\001\023\001 \000\000\000\000\000\164\003\237\000\000\001\t\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\000\003O\000\000\000\187\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \003\255\004\171\003\235\000\000\000p\000\000\000\178\000\000\000\000\002\217\000\000\004\000\000\000\000y\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\171\003\244\000\000\0043\000\000\004\173\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\000N\003B\000\179\004\002\001D\003P\000\000\001P\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\006\145\003^\004\003\006\146\000\000\000\000\000\000\003_\000\000\000\000\000O\001\023\001 \000\000\000\000\000\164\000\000\000\000\001\t\000\179\000\000\000\172\000\180\000\000\000\000\006\145\000\000\003\244\006\146\004\005\004\006\000\000\000\000\001\210\004\n\000\000\001\023\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\000O\001 \004\t\001F\003\235\000\181\000p\000\000\000\178\001G\000\000\002\217\000\000\004\000\000\000\000y\003\\\000\000\000\000\000\000\000\000\003]\000\000\000\000\000\000\003^\001 \000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\003\007\000\000\000\000\000\000\000\000\000\000\001V\000\000\000\000\004\001\003O\003A\000\187\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\200\000\000\000\000\000\000\000\000\000p\000\000\000\000\000\000\003\233\000\000\000\000\004\003\000\000\000y\000p\000\000\000\000\000\000\000\000\002\217\000\000\004\000\000\000\000y\000\000\000\000\000N\001\t\000\179\000\000\000\170\000\180\000\000\000\000\000\000\000\171\003\244\000\000\004\005\004\006\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\000\000\003A\000\000\003\235\000\181\000\000\000\000\003B\000\179\000\000\000\000\001W\000\000\000\000\000\000\003\\\000\000\000\000\006\142\000\000\003]\000\000\003\233\000\000\003^\006\152\000\000\000\000\000\000\000\000\003_\001\t\000\000\000O\000\000\001 \000\000\000\000\000\164\003\237\000\000\001\t\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\000\003O\000\000\000\187\000\000\003\242\000\000\001\210\000\000\000\179\004\002\003?\003P\003R\000\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\000\000\000\000\004\003\003\235\000\000\000p\000\000\000\178\000\000\000\000\002\217\000N\004\000\000\000\000y\000\170\001[\000\000\000\000\000\000\000\171\001\149\000\000\000\000\000\000\001]\000\000\003\244\000\000\004\005\004\006\001^\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\000\000\003B\000\179\004\002\000p\003P\000\000\000\000\000\000\003\\\000\000\004}\000\000\000y\003]\000\000\003\233\000\000\003^\004v\000\000\000O\000\000\000\000\003_\000\000\000\164\000\000\000\000\001 \000\000\000\000\000\172\000\000\000N\001\t\000\179\000\000\000\170\000\180\000\000\000\000\006\145\000\171\003\244\006\146\004\005\004x\000\000\000\000\001\210\004\n\000\000\001\023\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\000\000\000\000\000\178\000\000\003\235\000\181\000p\000\000\000\000\000\000\002a\002\217\000\000\004\000\000\000\000y\003\\\002k\000\000\000\000\000\000\003]\000\000\000\000\001\t\003^\001 \000\000\000\000\000\000\000\000\003_\000\000\002d\000O\000\000\001 \000\000\000\000\000\164\003\237\003\007\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\004\001\003O\003A\000\187\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\204\000\000\000\000\000\000\004u\000\000\000\000\000\000\000\000\003\233\000\000\000\000\004v\000\000\000\000\000p\000\000\000\178\000\000\000\000\002\217\000\000\004\000\000\179\000y\000\000\000\180\000N\001\t\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\171\003\244\000\000\004\005\004x\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\181\004\001\000\000\003A\000\000\003\235\000\000\000\000\000\000\003B\000\000\000\000\000\000\000\000\002l\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000O\000\000\001 \000\000\002m\000\164\003\237\002e\001\t\000\179\002f\000\172\000\180\000\187\000\000\000\000\000\000\003O\001\023\000\000\000\000\003\242\000\000\001\210\000\206\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\004\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\003\235\000\181\000p\000\000\000\178\000\000\000\000\002\217\000N\004\000\000\000\000y\000\170\000\000\001 \000\000\000\000\000\171\000\000\000\000\000\000\000\000\000\000\000\000\003\244\000\000\004\005\004\140\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\187\000\000\003\242\000\000\000\000\003B\000\179\004\002\000p\003P\000\000\000\208\000\000\003\\\000\000\004\135\000\000\000y\003]\000\000\003\233\000\000\003^\004v\000\000\000O\000\000\000N\003_\000\000\000\164\000\161\0022\001 \000\000\000\000\000\172\000\000\000\000\001\t\000\179\000\000\000\000\000\180\000\000\000\000\000\000\004\148\003\244\000\000\004\005\004x\000\000\000\000\001\210\004\n\000\000\000\000\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\000\000\000\000\000\178\000\000\003\235\000\181\000p\000\000\000\000\000\000\002a\002\217\000\000\004\000\000\000\000y\003\\\002k\000\000\000\000\000\000\003]\000\000\000O\001\t\003^\000\000\000\000\000\164\000\000\000\000\003_\000\000\002d\000\165\000\000\001 \000\000\000\000\000\000\003\237\003\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\003O\003A\000\187\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\222\000\000\000\000\000\000\000\000\000\000\000\178\000\000\000\000\003\233\006n\000\000\004\149\000\000\000\000\000p\000\000\000\000\000\000\000\000\002\217\000N\004\000\000\179\000y\000\170\000\180\000\000\001\t\000\000\000\171\000\000\000\000\000\000\000\000\000\000\004\153\003\244\000\000\004\005\004\151\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\000\000\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\181\004\001\000\000\003A\000\000\003\235\000\000\000\000\000\000\003B\000\000\000\000\000\000\000\000\002l\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\000\000\000\000\000O\000\000\000\000\003_\000\179\000\164\000\000\000\180\001 \000\000\002r\000\172\003\237\002e\001\t\000\000\002f\000\000\000\000\000\187\000\000\000\000\000\000\003O\001\023\000\000\000\000\003\242\000\000\001\210\000\224\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\006z\000\178\004\149\003\235\000\000\000p\000\000\000\000\000\000\000\000\002\217\000N\004\000\000\000\000y\000\170\000\000\001 \000N\000\000\000\171\000\000\001D\000\000\000\000\001P\000\000\003\244\000\000\004\005\004\151\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\003\007\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\000\000\003B\000\179\004\002\000\000\003P\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\006o\000\000\000O\000\000\000\000\003_\000\000\000\164\000\000\000O\001 \000\179\001F\000\172\000\180\001\147\001\t\000\000\001G\000\000\000\000\000\000\000\000\000\000\000\000\003\244\000\000\004\005\006q\000\000\000\000\001\210\004\n\000\000\000\000\003?\004\018\003R\000\000\000\000\000\000\000\000\000\000\000\000\004*\003[\000\181\000\000\006}\000\178\000\000\003\235\001\150\000p\000\000\000\000\001V\000\000\002\217\000\000\004\000\000\000\000y\003\\\000\000\000\000\000\000\000\000\003]\000\000\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\001 \000\000\000\000\000\000\003\237\003\007\000\000\000\000\000\000\000\000\000\000\002/\000\000\000\000\004\001\003O\003A\000\000\000\000\003\242\000\000\001\210\003B\000\179\004\002\003?\003P\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\233\000\000\000\000\006o\000\000\000\000\000p\000\000\000\000\000\000\000\000\002\217\000\000\004\248\000\179\000y\000N\000\180\000\000\001\t\000\170\000\179\000\000\000\000\001W\000\174\000\000\000\000\003\244\000\000\004\005\006q\000\000\000\000\000\000\004\n\000\000\001\174\001\210\004\018\000\000\003\007\001\211\000\000\000\000\000\000\001\212\004*\003[\000\181\004\001\000\000\003A\000\000\003\235\000\000\000\000\000\000\003B\001\153\000\000\000\000\000\000\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\233\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000O\000\000\001Z\000\000\001 \000\164\000\000\000\210\003\237\000\000\001\t\000\172\000\000\000\000\000\000\001\b\000\000\000\000\000\000\003O\001[\000\000\001\230\003\242\002L\001\163\001\213\000\179\004\002\001]\003P\000\000\001\214\000\000\000\000\001^\000\000\000\000\000\000\000p\000\000\000\000\000\000\000\000\006o\003\235\000\000\000\178\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\232\003\244\000\000\004\005\006q\000\000\000\000\000\000\004\n\000\000\000\000\000\000\004\018\003\237\004\249\000\000\000\000\000\000\000\000\000\000\004*\003[\000\000\000\000\003O\000\000\000\000\000\000\003\242\000\000\000\000\001\233\000\179\004\002\001\210\003P\000\000\000\000\003?\003\\\003R\000\000\000\000\002a\003]\000\000\000\000\000\000\003^\003\243\002k\000\000\000\000\000\000\003_\000\000\000p\001\t\000\000\001 \000\000\002\217\001\235\004\248\000\179\000y\002d\000\180\000\000\000\000\000\000\000\000\000\000\000\000\003\244\000\000\004\252\000\000\001\227\003\129\002\017\004\n\000\000\000\000\000\000\004\018\000\179\000\000\000\000\001\228\000\000\003\007\000\219\004*\003[\000\000\000\000\000\000\000\000\000\181\004\001\000\000\003A\000\000\000\000\000\000\000\000\001\210\003B\000\000\002\028\003?\003\\\003R\000\000\000\000\002\020\003]\000\000\000\000\000\000\003^\000\000\003\233\000\000\001\238\000\000\003_\000\212\000p\000\000\000\000\001 \000\000\002\217\000\000\004\248\000\000\000y\000N\000\000\000\000\001\t\000\170\000\000\000\000\000\000\000\183\000\171\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\003\007\000\000\000\000\000\000\001\240\002l\000\000\000\000\000\000\004\001\000\000\003A\000\000\003\235\000\000\000\000\000\000\003B\000\000\001\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\235\000\000\003\233\002e\000\000\000\000\002f\000\000\000\000\000N\000\000\000O\000\000\003?\001\023\003R\000\164\000\000\000\000\003\237\004\251\001\t\000\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003O\000p\000\000\000\000\003\242\000\000\003\157\000\000\000\179\004\002\000y\003P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\003\243\003\235\000\000\000\178\000\000\000\000\004\187\000\000\000N\000\000\000\000\003\188\003?\000\000\003R\000\000\000\000\000\000\000\000\000\000\003\194\000\000\003A\000\000\000\000\003\244\000\000\004\252\003B\000\000\000p\000\000\004\n\000\000\000\000\003\157\004\018\003\237\004\254\000y\000\000\000\000\000\000\004\190\004*\003[\000\000\004\192\003O\000\000\000\000\000\000\003\242\000\000\000\000\000\000\000\179\004\002\000\000\003P\004\199\000\000\001\t\003\\\000\000\003\188\000\000\000\000\003]\000\000\000\000\000\000\003^\003\243\003\194\000\000\003A\000N\003_\000\000\000\000\000\170\003B\001 \000\000\000\000\000\174\000\000\000\179\004\196\000\000\000\180\000\000\003W\000\000\000\000\001\012\004\190\003\244\000p\004\252\004\192\000\000\000\000\003\157\004\n\000\000\000\000\000y\004\018\000\000\000\000\000\000\000\000\000\000\000\000\001\t\004*\003[\000\000\000N\000\000\000\000\000\181\000\161\0021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\188\000\000\003\\\000\000\000\000\000\000\000\000\003]\000\000\003\194\003O\003^\000\000\000\000\000\164\000\000\000\210\003_\000\179\004D\000\172\003P\001 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\195\000\000\004n\004>\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\226\000\000\000\000\001\t\000O\000\000\000N\000\000\000\178\000\164\003?\000\000\003R\000\000\000\000\000\165\003O\000\000\000\000\004E\000\000\000\000\000\000\004\198\000\179\004D\000\000\003P\000p\000\000\000\000\004_\003[\003\157\000\000\000N\000\000\000y\000\000\000\170\000\000\003\243\000\000\000\000\000\174\000N\000\000\000\000\000\000\000\170\003\\\000\178\000\000\000\000\000\171\003]\000\000\000p\004\189\003^\000\000\000\000\000\000\003\188\000\000\003_\000y\000\000\000\000\000\000\001 \000\000\003\194\004E\003A\000\000\000\000\004M\000\000\000N\003B\000\000\000\000\000\170\000\000\004_\003[\000\000\000\174\000\000\000\000\000\000\000\000\000\179\004D\004\190\000\180\000\000\000\000\004\192\000\000\000O\000\000\000\000\003\\\000\000\000\164\000\000\000\210\003]\000\000\000O\000\172\003^\001\t\000\000\000\164\000\000\000\000\003_\000\000\000\219\000\172\000\000\001 \000\000\000\000\000\000\000\181\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\179\000\000\000\174\000\180\000\000\000\000\004E\001\t\000\000\000O\004M\000\000\000\178\000\000\000\164\000p\000\210\000\000\004_\000\000\000\172\000\212\000\178\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\181\000\161\0020\000\000\0029\000\183\001\012\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\178\001 \000\000\000O\003O\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\179\004D\000\172\003P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\n\000\000\003\243\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000O\000\000\000\180\001\t\000\000\000\164\000\000\000\000\000\178\000\179\000\000\000\165\000\180\000\000\000N\000\000\000\000\000\000\001D\004E\000\000\001P\000\000\004M\000\000\000\000\000\000\001\014\000\000\000\000\000\000\004_\003[\000\000\000\181\001\n\000p\001\012\000\000\000\000\000\000\000\000\000\000\000\179\000\181\000y\000\180\000\178\000\000\000\000\003\\\000\000\001\020\000\000\000\000\003]\000\000\000\000\000\000\003^\001\023\000\000\000\000\000\212\000\000\003_\000\000\000\000\000\000\000\000\001 \001\014\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000O\000N\000\183\001F\000\000\001D\000\220\000\000\001P\001G\000\214\000\000\002=\000\179\000N\000\000\000\180\000\185\001D\001 \000\000\001P\000\000\000p\000\000\000\000\000\000\000\212\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\000p\000\000\000\000\000\000\001\135\001\014\001\t\000\000\000\000\000y\000\183\001V\000\181\000\000\000\220\000\000\000\179\000\000\000\214\000\180\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\001\020\000O\000\000\000\000\001F\000\000\000\000\000\000\001\023\000\000\001G\000\212\000\000\000\000\000O\000N\000\000\001F\000\000\001D\000\000\000\181\001P\001G\000\000\000\000\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\000\000\000p\000\214\000\000\000\000\001\135\000\000\001\t\000\000\000\185\000y\001 \001V\000\000\000\000\000\000\000\000\000\000\001\135\000\000\001\t\000\000\000\000\000\000\000\000\001V\000\000\000\000\000N\000\000\000\179\000\000\000\170\001W\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000O\000N\000\000\001F\000\000\001D\000N\000\000\001P\001G\000\170\001\136\001\137\000\000\000\000\000\171\000N\000\000\000\000\000\000\000\170\000\000\000\000\000p\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\001X\000\000\001Y\000\000\001\135\000\000\001\t\000\000\000\000\000\000\001\023\001V\001Z\000O\000\000\000\000\000\179\000\000\000\164\001W\000\210\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\179\001[\000O\001W\000\000\001F\001\\\000O\000\215\000\000\001]\001G\000\164\001\136\001\218\000\000\001^\000O\000\172\000\000\001 \001\127\000\164\000\000\000\210\000\000\001\136\003F\000\172\000\000\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\000\001X\000\000\001Y\001b\001\135\000\000\001\t\000\000\000\000\000\000\001\023\001V\001Z\001X\000\000\001Y\000\178\000\000\000\000\000\000\000N\000\000\000\000\001\023\001D\001Z\000\178\001P\000\000\000\179\001[\000\000\001W\000\000\000\000\001\\\000\000\000\000\000\000\001]\000\000\000\000\000p\001[\000\000\001^\000\000\000\000\001\\\001 \001\127\000y\001]\000\000\000\000\001\136\003\239\000\000\001^\000\000\000\000\000N\001 \001\127\000\000\000\161\000\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\000\001X\000\180\001Y\000\000\000\000\000\000\000O\000\000\000\000\001F\001\023\000\000\001Z\000\000\000\000\001G\000\179\000\000\000\000\001W\000\000\000\179\000\000\000\000\000\180\000\000\000\219\000\000\000\000\000\000\001[\000\179\000N\000\181\000\180\001\\\000\170\000\000\000\000\001]\000\000\000\174\001\136\004\012\000\000\001^\001\135\000O\001\t\001 \001\127\000\000\000\164\001V\000p\000\000\000\181\000\000\000\165\000\219\000\000\000\000\000\212\000y\000\000\000\000\000\181\001X\000\000\001Y\000\000\000\000\006+\000\000\000\000\000\000\000\000\001\023\000\000\001Z\000\000\000\183\000\000\000p\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000y\000\000\000\178\000\212\000\185\001[\000O\006\b\000\000\000\000\001\\\000\164\000\187\000\210\001]\000\000\000\000\000\172\000\000\000\000\001^\000\000\000\183\000\228\001 \001\127\000\220\000\000\000\000\000\000\000\214\006\t\000\000\006\012\005L\005M\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000N\001\t\001W\000\000\000\170\000\000\000\178\000\000\000\000\000\174\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000p\000\000\000\000\001\136\004G\000\000\000\000\000\000\001\t\000y\000p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000y\000\000\000\180\000N\000\000\000\000\000\000\000\170\000\000\001X\000\000\001Y\000\171\000\000\000\000\000\000\000\000\000\000\000\000\001\023\000\000\001Z\000\000\000\000\000\000\000O\000\000\005N\006.\000\000\000\164\000\000\000\210\000\000\000\181\000O\000\172\000\000\000\000\001[\000\164\000\000\000\210\000\000\001\\\000\000\000\172\000\000\001]\000\000\000\179\000\000\000\000\000\180\001^\000\000\000\000\000\000\001 \001\127\000\000\000N\000\000\000\000\000\000\000\170\000\000\001\t\000\000\000O\000\174\000\000\000\178\000\000\000\164\000\000\000\000\001\t\001.\000\000\000\172\000\000\000\178\000p\000\000\000\181\000\000\000\000\000\000\000\000\000N\000\000\000y\000\000\001D\000\000\000\000\001P\000\000\000\000\000N\000\000\000\000\002;\000\170\000\000\000\000\000\000\000\000\000\171\000\000\001\023\000p\000\000\000\212\000\000\000\178\000\000\000\000\000\000\000\000\000y\000\000\000\000\000N\000\000\000\000\000O\001D\000\000\000\000\001P\000\164\000\183\000\210\000\000\000\000\000\220\000\172\000\000\002\192\000\214\000\000\000\000\000\000\000\000\000p\000\000\000\185\0061\001 \000\000\000\000\000\000\000\000\000y\000O\000\179\000\000\001F\000\180\000\000\000\000\000\000\000\000\001G\000O\000\179\000\000\001\t\000\180\000\164\000\000\000\000\000\178\000\000\000\000\000\172\000\000\002\197\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\000\000\000\000\000O\000\000\000\181\001F\000\000\001&\001\134\000\000\001\t\001G\000\000\000\179\000\181\001V\000\180\000\000\000\000\000\000\000N\000\000\0024\000\000\001D\000\178\000\000\001P\000\000\000\000\001\023\000\000\001(\000\212\000\000\000\000\000\000\000\000\000\000\000\000\001\023\000\000\000p\000\212\001\t\000\000\000\000\000\000\000\181\001V\000\000\000y\000\183\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\183\000\000\000\000\000\000\000\220\000\185\000\000\001 \000\214\000\179\000\000\000\000\000\180\000\000\000\000\000\185\000\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\001F\000\000\000\000\000\000\000\000\000\000\001G\000\187\000\000\000\000\001.\000\179\000\000\000\000\001W\000\000\000\000\000\181\000\230\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0010\000\000\001U\000\000\001\t\000\000\000\000\000\000\001\023\001V\000\179\000\212\000\000\001W\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\181\001D\000\000\000\000\001P\000\000\001X\000\000\001Y\000\183\000\000\000\000\000p\000\220\000\000\000\000\001\023\000\214\001Z\000p\000\000\000y\000\000\000\000\000\185\000\000\001 \000\000\000y\000\000\000\000\000N\000\000\000\000\000\000\001D\001[\000\000\001P\000\000\001X\001\\\001Y\000\000\000\000\001]\000\000\000\000\000\187\001\130\001\023\001^\001Z\000p\000\000\001 \001\127\000\000\000\000\000\232\000\000\000\000\000y\000O\000\000\000\000\001F\000\000\000\000\000\000\001[\000\000\001G\000\179\000\000\001\\\001W\000\000\000\000\001]\000\000\000\000\000\000\000\000\002a\001^\000\000\000\000\000\000\001 \001\131\002k\000\000\000\000\000\000\000\000\000\000\000O\001\t\000\000\001F\000\000\000\000\001\129\000\000\001\t\001G\002d\000\000\000\000\001V\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\001X\000\000\001Y\000\000\000\000\000\000\000\000\000\000\000\000\000p\001\023\000\000\001Z\001\133\000\000\001\t\000\000\000N\000y\000\000\001V\000\161\002)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001[\000\000\000\000\000N\000\000\001\\\000\000\000\170\000\000\001]\000\000\000\000\000\171\000\000\000\000\001^\000\000\000\000\000\000\001 \001\127\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000N\000\000\000\172\000\000\000\161\001;\000\000\000\000\000\000\000\179\000\000\000\000\001W\000\000\000N\000\000\000\000\000\000\000\170\000\000\000\000\000O\000\000\000\174\002l\000\000\000\164\000\000\000\000\000\000\000\000\000\000\000\165\001\t\000\000\000\000\000p\000O\000\178\000\000\000\000\000\000\000\164\000\179\000\000\000y\001W\000\000\000\172\002\245\000\000\000\000\002e\000\000\000\000\002f\000\000\000\000\000\000\000\000\001X\000\000\001Y\001\023\000\000\000\000\000O\000\000\000\178\000N\001\023\000\164\001Z\000\161\001>\000\000\000\000\000\165\000\000\000\000\000O\000\000\000\000\000\000\000\178\000\164\000\000\000\210\000\000\000N\001[\000\172\000\000\000\170\001X\001\\\001Y\000\000\000\174\001]\000\000\000\000\001 \000\000\001\023\001^\001Z\000\000\000\000\001 \001\127\000p\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\001\t\000\179\001[\000\000\000\180\000\178\000\000\001\\\000\000\000\000\000\000\001]\000\000\000O\000\000\000\000\000\000\001^\000\164\000\000\000\000\001 \001\127\000\000\000\165\000\000\000\000\000\000\000\000\001\168\000\000\000\179\000\000\000O\000\180\000\000\000\181\000\000\000\164\000\000\000\210\000\000\000N\000\000\000\172\000\000\000\170\000\179\000\000\000\000\000\180\000\174\000\000\000\000\001\170\000\000\000\000\000\000\000\000\000\000\000\178\000\000\001\023\000N\000p\000\212\000\181\000\170\000\000\000\000\000\000\000\000\000\174\000y\000\000\001\t\000\179\000\000\000\000\000\180\000\178\000\000\000\181\000\000\000\183\000p\000\000\000\000\000\220\000\000\000\179\000\000\000\214\000\180\000y\000\000\000\000\000\000\000\000\000\185\000\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\000\000\000\210\000\000\000\000\001.\000\172\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000O\000\187\000N\000\000\000\000\000\164\003?\000\210\003R\000N\000\000\000\172\000\234\000\170\002?\000\000\000\179\000\000\000\174\000\180\000\000\001\t\001\023\000\000\000p\000\212\000\178\000\000\000\000\000\000\000N\000p\000\000\000y\000\161\001A\000\179\000\000\000\000\000\180\000y\000\000\001\t\000\000\000\183\000\000\000\000\000\178\000\220\000N\000\000\000\181\000\214\000\161\001\195\000\000\000\000\000\000\000\000\000\185\000\000\001 \000\000\000\000\001.\000\000\000\000\000\000\000O\000\000\003A\000\181\000\000\000\000\000\000\000O\003B\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\000\000\000\000\172\000\000\000\000\002E\000\000\000\000\000\000\000\000\000\000\000\000\000O\001\023\000\000\000\000\000\212\000\164\000\000\000\000\000\000\000\000\000\000\000\165\000\000\000\000\001\t\000\179\000\000\000\000\000\180\000O\000\000\001\t\000\000\000\183\000\164\000\000\000\178\000\220\000\000\000\000\000\165\000\214\000\000\000\000\000\000\000\000\000\179\000\000\000\185\000\180\001 \000\000\000\000\001.\000\000\003W\000\000\000\178\001\012\000\000\000\181\000\000\001\210\000\000\000\000\000\000\003?\000\000\003R\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\178\000\000\002I\000\000\000\000\000\181\000\000\000\000\000\000\000\000\001\023\000\000\000\000\000\212\000\000\003\226\004\222\000\000\000\000\000\000\000\000\001\210\000\000\003\021\000\000\003?\000\000\003R\000\000\000\000\003O\001\023\000\183\000\000\000\212\000\000\000\220\000\000\000\179\000\000\000\214\003P\000\000\000\000\000\000\000\179\000\000\000\185\000\180\001 \003\226\004o\001\230\000\183\003A\003Y\000\000\000\220\000\000\000\000\003B\000\214\000\000\000\000\000\000\000\000\000\179\000\000\000\185\000\180\001 \000\000\000\000\003*\000\000\003\233\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\179\001\210\001\230\000\180\003A\003?\001\020\003R\000\000\000\000\003B\000\000\000\000\003,\001\023\003[\000\181\000\000\000\000\000\000\000\000\001\023\000\000\000\000\000\212\003\233\000\000\000\000\000\000\000\000\003\226\004=\000\000\003\\\000\000\000\181\000\000\000\000\003]\000\000\000\000\000\000\003^\000\183\003\235\000\000\000\000\000\220\003_\000\000\000\000\000\214\000\000\001 \000\000\000\000\000\000\001\210\000\185\000\000\001 \003?\000\000\003R\000\000\000\000\000\000\001\230\000\000\003A\000\000\000\000\000N\000\000\000\000\003B\000\161\001\204\000\000\003\235\003\237\000\000\000\000\000\000\000\000\000\000\003\226\003\227\001\210\000\000\003\233\003O\003?\000\000\003R\003\242\000\000\000\000\000\000\000\179\000\000\000\000\003P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\237\003\243\003\226\003\241\000\000\000\000\000\000\000\000\001\230\000\000\003A\003O\000\000\000\000\000\000\003\242\003B\000\000\000\000\000\179\000\000\000\000\003P\000O\000\000\000\000\003\244\000\000\000\164\003\235\000\000\003\233\000\000\000\000\000\165\000\000\003\243\000\000\000\000\001\230\000\000\003A\000\000\000\000\000\000\000\000\003[\003B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\244\003\233\000\000\003\\\003\237\000\000\000\000\000\000\003]\000\178\000\000\000\000\003^\000\000\000\000\003O\000\000\000\000\003_\003\242\003[\000\000\000\000\000\179\003\235\000\000\003P\001\210\000\000\000\000\000\000\003?\000\000\003R\000\000\000\000\000\000\000\000\003\\\000\000\003\243\000\000\000\000\003]\000\000\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\000\003_\000\000\003\235\003\226\004C\001\210\000\000\003\237\000\000\003?\000\000\003R\003\244\000\000\000\000\000\000\000\000\000\000\003O\000\000\000\000\000\000\003\242\000\000\000\000\000\000\000\179\000\000\000\000\003P\000\000\000\000\003[\000\000\003\226\004q\000\000\000\000\003\237\000\000\001\230\000\179\003A\003\243\000\180\000\000\000\000\000\000\003B\003O\003\\\000\000\000\000\003\242\000\000\003]\000\000\000\179\000\000\003^\003P\000\000\000\000\003\233\000\000\003_\000\000\000\000\003\244\000\000\000\000\001\230\000\000\003A\003\243\000\000\000\181\000\000\000\000\003B\000\000\001\210\000\000\000\000\000\000\003?\000\000\003R\003[\000\000\000\000\000\000\000\000\000\000\003\233\000\000\000N\000\000\000\000\003\244\000\170\000\000\000\000\000\000\000\000\000\174\003\\\000\000\000\000\000\000\004h\003]\000\000\000\000\000\000\003^\001\210\003\235\000\000\003[\001\211\003_\000\000\000\000\001\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\003\\\000\000\001\211\000\000\000\000\003]\001\212\000\000\000\000\003^\001\230\003\235\003A\000N\000\000\003_\003\237\000\170\003B\000\000\000\000\000\000\000\174\000\000\000\000\000O\000\000\003O\000\000\000\000\000\164\003\242\000\210\003\233\000\000\000\179\000\172\000\000\003P\000\000\000\000\000\000\000\000\000\000\000\000\001\230\000\000\003\237\000\000\001\213\000\000\000\000\003\243\000\000\000\000\001\214\000\000\000\000\003O\000\000\000\000\000\000\003\242\000\000\001\230\000\000\000\179\000\000\001\213\003P\000\000\000\000\000\178\000\000\001\214\000\000\000\000\003\244\000\000\000O\000\000\000\000\001\231\003\243\000\164\000\000\000\210\003\235\000\000\000\000\000\172\001\232\000\000\000\000\000\000\000\000\000\000\003[\000\000\001\165\000\000\002!\000\000\000\000\000\000\000\000\000\000\000\000\003\244\000\000\001\232\000\000\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\003]\001\210\001\233\003\237\003^\001\211\000\178\000\000\003[\001\212\003_\000\000\000\000\000\000\003O\000\000\000\000\000\000\003\242\000\000\000\000\001\233\000\179\000\000\000\000\003P\003\\\000\000\000\000\000\000\000\000\003]\000\000\001\235\000\000\003^\000\000\000\179\000\000\003\243\000\180\003_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\227\006t\002\017\001\235\000\000\000\000\000\000\000\000\000\179\000\000\000\000\001\228\000\000\000\000\000\000\003\244\001\014\000\000\001\230\001\227\000\000\002\017\001\213\000\181\000\000\000\000\000\000\000\179\001\214\000\000\001\228\000\000\002\028\000\000\000\000\003[\000\000\002\030\002\020\000\000\000\000\000\000\000\179\000\000\000\000\000\180\000\000\001\238\000\000\000\000\000\000\000\000\000\212\003\\\000\000\002\019\000\000\002\020\003]\000\000\000\000\001\210\003^\000\000\001\232\001\211\001\238\000\000\003_\001\212\002 \000\183\000\000\000\000\000\000\000\220\000\000\000\181\000\000\000\214\000\000\001\210\000\000\000\000\000\000\001\211\000\185\000\000\000\000\001\212\001\240\000\000\000N\000\000\000\000\001\233\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000N\001\241\000\212\000\000\000\170\001\240\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\241\000\183\001\235\001\230\000\000\000\220\000\000\001\213\000\000\000\214\000\000\000\000\000\000\001\214\000\000\000\000\000\185\000\000\001\227\000\000\002\017\000N\000\000\001\230\000\000\000\170\000\179\001\213\000\000\001\228\000\174\000\000\000\000\001\214\000O\000\000\000\000\000\000\000\000\000\164\002\023\000\000\000\000\000\000\000\000\000\172\000O\000\000\000\000\001\232\000\000\000\164\000\000\000\210\000\000\000\000\002\020\000\172\000\000\000\000\002\026\000\000\000\000\000\000\000\000\001\238\000N\000\000\000\000\001\232\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000N\001\233\000\178\000\000\000\170\000\000\000\000\000\000\000O\000\174\000\000\000\000\000\000\000\164\000\178\000\210\000\000\000\000\000\000\000\172\000\000\001\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\240\000\000\000\000\001\235\000\000\000\000\000\000\000\000\000p\000\000\000\000\000\000\000\000\000\000\000\000\001\241\000\000\000y\000\000\001\227\000\000\002\017\000\000\001\235\000O\000\000\000\178\000\179\000\000\000\164\001\228\000\210\000\000\000\000\000\000\000\172\000\000\000O\000\000\001\227\000\000\002\017\000\164\000\000\000\210\000\000\000\000\000\179\000\172\000\000\001\228\000\000\000\000\000\000\000\000\000\000\000\000\002\020\000\179\000\000\000N\000\180\000\000\000\000\000\170\002\222\001\238\000\000\000\000\000\174\000\179\000\178\000N\000\180\000\000\000\000\000\170\002\020\000\000\000\000\002a\000\174\000\000\000\000\000\178\000\000\001\238\002k\000\000\000\000\000\000\000\000\000\000\000\181\001\t\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\002d\000\000\000\181\002\239\000\000\000\000\001\240\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\241\000\000\000O\000\000\000\000\001\240\000\000\000\164\000\000\000\210\000\212\000\000\000\000\000\172\000O\002 \000\000\000\187\000\000\000\164\001\241\000\210\000\181\000\000\000\000\000\172\000\000\002\251\000\236\000\183\000\000\000\000\000\179\000\220\000\000\000\180\000\000\000\214\003c\000\000\003\003\000\000\000\000\000\000\000\185\000\179\000\000\000\000\000\180\000\178\000\000\000\212\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\000\002 \000\178\000\000\000\174\000\000\000\000\000\000\000\181\000\000\000\000\000\183\000\000\000\000\002 \000\220\000\000\000\000\000\000\000\214\000\000\000\181\000\000\002l\000\000\000N\000\185\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\170\000\000\000\212\002e\000\000\000\000\002f\000\000\000\183\000\000\000\000\000\000\000\220\000O\001\023\000\000\000\214\000\000\000\164\000\000\000\210\000\183\003\n\000\185\000\172\000\220\000\000\000\179\000N\000\214\000\180\000\000\000\170\000\000\000\000\000\000\000\185\000\174\000\000\000\179\000\000\000\000\000\180\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\000\001 \000\172\002 \000\000\000\000\000\000\000\000\000\178\000\000\000\181\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000N\000\000\000\178\000\212\000\170\000\000\000O\000\000\000\000\000\174\000\000\000\164\000\000\000\210\000\000\000\212\000\000\000\172\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\183\000\000\000\000\000\185\000\220\000N\000\000\000\000\000\214\000\170\000\000\000\000\000\000\000\000\000\174\000\185\000\000\000\000\003\162\000\178\000\000\000\000\000O\000\179\000\000\000\000\000\180\000\164\000\000\000\210\000\000\000\000\000O\000\172\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\003\174\000\000\000\000\002 \000\000\000\179\000\000\000\000\000\180\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\178\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\178\000\000\002 \000\172\000\000\000\000\000\000\000\000\000\212\000\181\000\000\000\000\000\000\000\000\000\000\000N\003\197\000\000\000\000\000\170\003\179\000\000\000\000\000\000\000\171\000\179\000\000\000\183\000\180\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\212\000\178\000N\000\000\000\185\000\000\000\161\001\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\183\000\000\000\000\000\181\000\220\000\000\000\000\000N\000\214\000\000\000\000\000\170\000\000\003\186\000\000\000\185\000\174\000\000\000\179\000\000\000\000\000\180\000\000\003\192\000O\000\000\000\000\000\000\000\179\000\164\000\000\000\180\000\212\000N\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\002 \000\000\000\000\000O\000\000\000\183\000\000\000\181\000\164\000\220\002 \000\000\000\000\000\214\000\165\000\000\000\000\000\181\000\000\000\000\000\185\000\179\000\000\000\000\000\180\000\178\000N\000O\000\000\000\000\000\170\000\000\000\164\000\000\000\210\000\174\000\212\000\000\000\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000\000\000\000\000\219\000\178\003\199\000\000\000O\000\000\000\183\000\181\000\000\000\164\000\220\000\210\000\000\000\000\000\214\000\172\000\183\000\000\000\000\000\000\000\220\000\185\000\000\000\000\000\214\000\178\000\000\000\000\000N\000\000\000\000\000\185\000\170\000\000\000\000\000\000\000\212\000\174\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000N\000\210\000\178\000\000\000\170\000\172\000\183\000\000\000\000\000\174\000\220\000\000\000\179\000\000\000\214\000\180\000\000\000\000\000\000\000\000\000N\000\185\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\179\000\170\000\000\000\180\000\178\000\000\000\171\000\000\000O\000\000\000\181\000\000\000\000\000\164\000\000\000\210\000N\000\000\000\000\000\172\000\161\003\023\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\181\000\210\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\004\016\000\000\000\000\000\000\000O\000\179\000\000\000\219\000\180\000\164\000\178\000\210\000N\000\187\000\181\000\172\000\170\000\000\000O\000\000\000\000\000\174\000\000\000\164\000\238\000\000\000\000\000\000\004?\000\172\000\000\000\178\000\000\002 \000\000\000\000\000\000\000O\000\000\004\029\000\181\000\000\000\164\000\212\000\179\000\000\000\000\000\180\000\165\000N\000\000\000\178\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\183\000N\000\000\000\178\000\220\000\161\0036\000\212\000\214\000\000\002 \000\000\000\000\000\000\000\000\000\185\000O\000\181\000\000\000\000\000\000\000\164\000\178\000\210\000\000\000\000\000\183\000\172\004&\000\000\000\220\000\000\000\000\000\179\000\214\000\000\000\180\000\000\000\000\000\000\004A\000\185\000\000\000\000\000\000\000\000\000\212\000\000\000\000\004.\000\000\000\000\000\000\000O\000\179\000\000\000\000\000\180\000\164\000\000\000\210\002 \000N\000\178\000\172\000\183\000\170\000O\000\181\000\220\000\000\000\174\000\164\000\214\000\179\000\000\000\000\000\180\000\165\000\000\000\185\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\179\000\181\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\212\000\000\000\000\000\178\000\000\000\219\000\000\000\000\000\000\000\000\000\179\000\000\000\181\000\180\000\000\000\000\000N\000\178\000\000\000\183\000\170\000\212\000\000\000\220\000\000\000\174\000\181\000\214\000\000\000\000\000\000\000O\000\000\000\000\000\185\000\000\000\164\000\000\000\210\000\000\000\183\000\212\000\172\000\000\000\220\000\181\000\000\000\000\000\214\000\000\000\000\000\179\000\000\000\000\000\180\000\185\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\187\000\185\000\000\000\000\000\178\000\219\000\000\000\000\000O\004K\000\000\000\240\000\181\000\164\000\179\000\210\000N\000\180\000\000\000\172\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\212\002 \000\000\000\000\000\174\000\000\000\000\000\000\000\181\000N\000\000\000\000\000\000\000\170\000\178\000\000\000\000\000\000\000\174\000\183\000\000\000\000\000\181\000\220\000\000\000\000\000\000\000\214\000\000\006P\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\212\000\000\000\000\000N\000O\000\000\004X\000\170\000\000\000\164\000\000\000\179\000\174\000\000\000\180\000\172\000N\000\000\000\000\000\183\000\170\000\000\000\000\000\220\000O\000\174\000\000\000\214\000\000\000\164\000\000\000\210\000\000\000\000\000\185\000\172\006\181\000\000\000O\002 \000\000\000\000\000\000\000\164\000\000\000\210\000\181\000\000\000\000\000\172\000\000\000\178\000\000\000\000\000N\000\000\000\000\004]\000\170\000\000\000\000\000\000\000\179\000\174\000\000\000\180\000\000\000\000\000\000\000O\000\000\000\178\000\000\000\000\000\164\000\212\000\210\000\000\000\000\000\000\000\172\000\000\000O\000\000\000\000\000\178\000\000\000\164\000\000\000\210\002 \000\000\000\000\000\172\000\183\000N\000\000\000\181\000\220\000\170\000\000\000\000\000\214\000\000\000\174\000\000\000\000\000\000\000N\000\185\000\000\000\000\000\170\000\000\000\000\000\000\000\178\000\174\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\212\000\210\000\000\000\178\000\000\000\172\000\000\000\000\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\004d\000\000\000\214\000\000\000\000\000\179\000\000\000\000\000\180\000\185\000O\000\000\000\000\000\000\000\000\000\164\000\178\000\210\000\000\000\179\000\181\000\172\000\180\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\000\000\000\002 \000\172\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\006Q\000\000\000\000\000\179\000\000\000\000\000\180\000\181\000\000\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\187\000\212\000\178\000\000\000N\000\000\000\000\000\000\000\161\0039\001\002\000\242\000\000\000\000\000\000\000\212\000\000\000\181\000\000\000\000\000\183\000\000\000\000\006Q\000\220\000\000\000\000\000\000\000\214\000\000\000\181\000\000\000\000\000\179\000\183\000\185\000\180\000\000\000\220\000\000\000\000\000N\000\214\000\000\000\000\000\170\000\212\000\000\000\000\000\185\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000\000\001\016\000N\000N\000\000\000\183\000\170\000\170\000\181\000\220\000O\000\174\000\174\000\214\000\179\000\164\000\000\000\180\000\183\000N\000\185\000\165\000\220\000\170\000\000\000\000\000\214\000\179\000\174\000\000\000\180\000\000\000\000\000\185\000\000\000\000\000N\000\212\000\000\000\000\000\161\003<\001\140\000\000\000\000\000\000\000\000\000O\000\000\000\181\000\000\000\000\000\164\000\000\000\210\001\157\000\183\000\178\000\172\000\000\000\220\000\000\000\181\000\000\000\214\000\000\000\000\000\000\000O\000O\000\000\000\185\000\000\000\164\000\164\000\210\000\210\000N\000\212\000\172\000\172\000\170\000\000\000\000\000\000\000O\000\174\000\000\000\000\000\000\000\164\000\212\000\210\000\000\000\178\000N\000\172\000\183\000\000\000\170\000\000\000\220\000O\000\000\000\174\000\214\000\000\000\164\000\000\000\000\000\183\000\000\000\185\000\165\000\220\000\178\000\178\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000O\000\000\000\180\000\000\000\000\000\164\000\178\000\210\000\000\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000N\000\210\000\000\000\000\000\170\000\172\000\000\000\000\000\000\000\174\000\181\000\000\000\179\000\000\000\000\000\180\000\000\000N\000\000\000\000\000\000\000\170\000\000\000\178\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\179\000\000\000\180\000\180\000\000\000\000\001\177\000\178\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\179\001\221\000\000\000\000\000\000\000O\000\179\000\181\000\181\000\180\000\164\000\000\000\210\000\000\000\000\000\212\000\172\002\205\000\000\000\000\000\000\000\000\000O\000\000\000\181\000\000\000\000\000\164\000\000\000\210\000\000\000N\000\000\000\172\000\183\000\170\000\212\000\212\000\220\000\000\000\174\000\181\000\214\000\000\000\000\000\000\000\000\000\179\000\000\000\185\000\180\000\000\000\178\000\212\000\000\000\183\000\183\000\000\000\000\000\220\000\220\000\000\000\000\000\214\000\214\000\179\000\000\000\000\000\180\000\178\000\185\000\185\000\183\000\000\000\000\002\211\000\220\000\000\000\000\000\000\000\214\000\000\000\181\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\003\026\000\000\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\000N\000\210\000\000\000\000\000\170\000\172\000\000\000\000\000\212\000\174\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000N\000\000\000\212\000\183\000\170\000\000\000\000\000\220\000\000\000\174\000\179\000\214\000\000\000\180\000\000\000\000\000\000\000\178\000\185\000\000\000\000\000\183\000\000\000\000\000\000\000\220\000\000\000\179\000\000\000\214\000\180\000\000\000\000\000\000\000\000\000\000\000\185\000\000\003\031\000\000\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\000\000\000\210\000\000\000\000\000O\000\172\000\000\003#\000\000\000\164\000\000\000\210\000\000\000\000\000\181\000\172\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\210\000\212\000N\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\178\000\000\000\212\000\000\000\183\000N\000\000\000\000\000\220\000\170\000\178\000\000\000\214\000\179\000\171\000\000\000\180\000\000\000\000\000\185\000\000\000\183\000\000\000\000\000\178\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\003I\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000N\000O\000\000\000\000\000\170\000\000\000\164\000\000\000\210\000\174\000N\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000O\000\000\000\000\000\000\000N\000\164\000\212\000\000\000\170\000\000\000\000\000\172\000\000\000\174\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\183\000\000\000\180\000\178\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\179\000\000\000\185\000\180\003\148\000\000\000\000\000\000\000O\000\178\000\000\000\181\000\000\000\164\003\230\000\210\000\000\000\000\000O\000\172\000\000\000\181\000\000\000\164\000\000\000\210\000\000\000\000\004\180\000\172\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\000N\000\210\000\212\000\000\000\170\000\172\000\000\000\000\000\000\000\174\000N\000\000\000\212\000\000\000\170\000\000\000\000\000\178\000\000\000\174\000\000\000\183\000\000\000\000\000\000\000\220\000\212\000\178\000\000\000\214\000\000\000\183\000\000\000\000\000\000\000\220\000\185\000\179\000\000\000\214\000\180\000\178\000\000\000\000\000\000\000\183\000\185\000\000\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\179\000\000\000\000\000\180\000\185\000\000\000\000\000\000\000\000\004\213\000O\000\000\000\000\000\000\000\000\000\164\000\181\000\210\000\000\000N\000O\000\172\000\000\000\170\000\000\000\164\000\000\000\210\000\174\000\000\000\000\000\172\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\178\000\000\000\180\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\178\000\220\000\000\000\179\000\000\000\214\000\180\004\233\000\000\000\000\000\000\000\000\000\185\000\000\000\181\000\000\000\187\004\235\000O\000\000\000\000\000\000\000\000\000\164\000\181\000\210\000\000\000\244\000\000\000\172\000\000\004\237\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000N\000\000\000\212\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000N\000\000\000\212\000\000\000\170\000\000\000\000\000\000\000\000\000\174\000\000\000\183\000\000\000N\000\178\000\220\000\212\000\170\000\000\000\214\000\000\000\183\000\171\000\000\000\179\000\220\000\185\000\180\000\000\000\214\000\000\000\000\000\000\000\000\000\179\000\183\000\185\000\180\000\000\000\220\000\000\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\004\243\000\000\000\000\000\000\000O\000\000\000\000\000\181\000\000\000\164\005\004\000\000\000\000\000\000\000O\000\172\000\000\000\181\000\000\000\164\000\000\000\000\000\000\000\000\000N\000\172\000\000\000O\000\170\000\000\000\000\000\000\000\164\000\171\000\000\000\000\000\212\000\000\000\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000\179\000N\000\000\000\180\000\178\000\170\000\000\000\000\000\183\000\000\000\171\000\000\000\220\000\000\000\178\000\000\000\214\000\000\000\183\000\000\000\000\000\000\000\220\000\185\000\000\000\000\000\214\000\178\005\018\000\000\000N\000\000\000\000\000\185\000\170\000\181\000\000\000\000\000\000\000\171\000\000\000\000\000N\000O\000\000\000\000\000\170\000\000\000\164\000\000\000\000\000\171\000N\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\212\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\164\000\000\000\000\000N\000\000\000\000\000\172\000\170\000\000\000\000\000\000\000\183\000\171\000\000\000\000\000\220\000\000\000\179\000\178\000\214\000\180\000\000\000\000\000\000\000O\000\000\000\185\000\179\000\000\000\164\000\180\000\000\000\000\000\000\000\000\000\172\000O\000\000\000\000\000\000\000\179\000\164\000\178\000\180\000\000\000\000\000O\000\172\000\000\000\000\001d\000\164\000\181\000\000\000\000\000\000\000\000\000\172\000\000\000\000\003e\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\178\000\000\000\000\000\164\000\181\000\000\000\000\000\000\000\000\000\172\000\212\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000N\000\178\000\000\000\000\000\170\000\000\000\000\000\000\000\183\000\171\000\000\000\179\000\218\000\000\000\180\000\000\000\214\000\000\000\183\000\000\000\000\000N\000\218\000\185\000\178\000\170\000\214\000\000\000\000\000\000\000\171\000\187\000\000\000\185\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\246\000\000\000\000\000\000\000\181\000\000\000\000\000N\000\000\000N\000\000\000\170\000\000\000\170\000\000\000\000\000\171\000\000\000\171\000\000\000\000\000\000\000\179\000N\000O\000\180\000\000\000\170\000\181\000\164\000\000\000\000\000\171\000\000\000\179\000\172\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000O\000\000\000\180\000\000\000\000\000\164\000\000\000\187\000\000\000\000\000\000\000\172\000\181\000\000\000\000\000\000\000\000\000\000\000\248\000\000\000\000\000\000\000\179\000\000\000\181\000\180\000\178\000\000\000O\000\000\000O\000\187\000\000\000\164\000\181\000\164\000N\000\000\000\000\000\172\000\170\000\172\000\250\000\000\000O\000\171\000\000\000\178\000\000\000\164\000\000\000\000\000\000\000\000\000\000\000\172\000\000\000\181\000\000\000N\000\187\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\252\000\187\000\000\000\000\000\178\000N\000\178\000\000\000\000\000\170\000\000\000\187\001`\000\000\000\171\000\000\000\000\000\000\000\000\000\000\000\178\000\000\001f\000\000\000\000\000\000\000\000\000\000\000\000\000N\000\000\000O\000\000\000\170\000\187\000\000\000\164\000\000\000\171\000\000\000\179\000\000\000\172\000\180\000N\001h\000\000\000\000\000\170\000\000\000\000\000N\000\000\000\171\000O\000\170\000\000\000\000\000\000\000\164\000\171\000\179\000\000\000\000\000\180\000\172\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\000\000\181\000\164\000\000\000\178\000\000\000\000\000N\000\172\000\000\000\000\000\170\000\000\000\000\000\000\000\179\000\171\000\179\000\180\000\000\000\180\000O\000\181\000\000\000\000\000\000\000\164\000\178\000\000\000\000\000\000\000\179\000\172\000N\000\180\000\000\000O\000\170\000\000\000\000\000\000\000\164\000\171\000O\000\178\000\000\000\000\000\172\000\164\000\187\000\181\000\000\000\181\000\000\000\172\000\000\000\000\000\000\000\000\000\000\001j\000\000\000\000\000\000\000\000\000\000\000\181\000N\000\178\000\000\000\187\000\170\000\000\000O\000\000\000\000\000\171\000\000\000\164\000\000\000\000\001l\000\000\000\178\000\172\000\000\000\000\000\000\000\000\000\179\000\178\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\187\000O\000\187\000\000\000\000\000\000\000\164\000\000\000\000\000\000\000\000\001n\000\172\001p\000\179\000\000\000\187\000\180\000\000\000\000\000\000\000N\000\178\000\000\000\000\000\170\000\181\001r\000\000\000\000\000\171\000\179\000\000\000\000\000\180\000O\000\000\000\000\000N\000\000\000\164\000\000\000\170\000\000\000\000\000\000\000\172\000\171\000\178\000\181\000N\000\000\000\000\000\000\000\170\000\179\000\000\000\000\000\180\000\171\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\179\000\000\000\000\000\180\000\187\000N\000\000\000\179\000\000\000\170\000\180\000\000\000\178\000\000\000\171\001t\000\000\000O\000\000\000\000\000\181\000\000\000\164\000\000\000\000\000\000\000\000\000\187\000\172\000\000\000\000\000\000\000\000\000\000\000O\000\181\000\000\000\179\001v\000\164\000\180\000\000\000\181\000\000\000\187\000\172\000O\000p\000\000\000\000\000N\000\164\000\000\000\000\000\170\001x\000y\000\172\000N\000\171\000\000\000\000\000\170\000\179\000\178\000\000\000\180\000\171\000\187\000\000\000\000\000O\000\181\000\000\000\000\000\000\000\164\000\000\000\000\001z\000\000\000\178\000\172\000\187\000\000\000\000\000\000\000N\000\000\000\000\000\187\000\170\000\000\000\178\001|\000\000\000\171\000\179\000\181\000\000\000\180\001~\000N\000\000\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000\171\000\000\000\000\000\000\000\000\000O\000\000\000\178\002a\000\187\000\164\000\000\000\000\000O\000\000\002k\000\172\000\000\000\164\000\000\001\243\000\181\001\t\000\000\000\172\000\000\000\000\000\000\000N\000\000\000\000\002d\000\170\000\000\000\000\000\187\000\000\000\171\000\179\000\000\000N\000\180\000O\000\000\000\170\000\000\001\245\000\164\000\000\000\171\000\000\000\000\000\178\000\172\000\000\000\179\000\000\000O\000\180\000\000\000\178\000\000\000\164\000\000\000\000\000\000\000\000\000\179\000\172\000\187\000\180\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\001\247\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\178\000\181\000\000\000\179\000\000\000O\000\180\000\000\000\000\000\000\000\164\000\000\000\000\000\181\000\000\000\178\000\172\000O\000\000\000\000\000\000\000N\000\164\000\000\000\000\000\170\000\000\000\000\000\172\000\000\000\171\000\000\000\187\000\000\000\000\000N\000\000\000\000\000\181\000\170\000\000\000\000\000\000\001\249\000\171\002l\000\000\000\000\000\179\000\187\000\000\000\180\000\178\000\000\000\000\000\000\000\179\000\000\000\000\000\180\001\251\000\187\000\000\000\000\000\178\000\000\000\000\000\000\000\000\000\000\004\025\000\000\001\253\002e\000\000\000\000\002f\000\000\000\000\000\000\000\000\000\000\000\000\000\181\001\023\000\179\000\187\000O\000\180\000\000\000N\000\181\000\164\000\000\000\170\000\000\000\000\001\255\000\172\000\171\000\179\000O\000\000\000\180\000\000\000N\000\164\000\000\000\000\000\170\000\000\000\000\000\172\000\000\000\171\000\000\000\000\000\000\000\000\000\000\000\181\000N\000\000\001 \000\000\000\170\000\000\000\000\000\000\000\000\000\171\000\187\000\000\000\000\000\178\000\181\000\000\000\179\000\000\000\187\000\180\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\178\000\179\002\003\000p\000\180\000\000\000\000\000\000\000O\000\000\000\000\000\000\000y\000\164\000\000\000\000\000\000\000\000\000\000\000\172\000\187\000\000\000\000\000O\000\181\000\000\000\000\000\000\000\164\000\000\000\000\002\005\000\000\000\000\000\172\000\187\000\181\000\000\000N\000O\000\000\000\000\000\170\000\000\000\164\000\000\002\007\000\171\000\000\000\000\000\172\000\000\000\000\000\000\000\000\000\178\000\000\000N\000\000\000N\000\000\000\170\000\000\000\170\000\000\000\000\000\171\000\000\000\171\000\000\000\178\000\179\000\187\000\000\000\180\002a\000\000\000\000\000p\000\000\000\000\000\000\002k\002\t\000\187\000\179\000\178\000y\000\180\001\t\000N\000\000\000\000\000\000\000\170\002\011\000\000\000\000\002d\000\171\000\000\000\000\000\000\000\000\000O\000\000\000\181\000\000\000\000\000\164\000\000\000\000\000N\000\000\000\000\000\172\000\170\000\000\000\000\000\000\000\181\000\171\000\000\000O\000\000\000O\000\000\000\000\000\164\000\000\000\164\000\000\000\000\000N\000\172\000\000\000\172\000\170\000\000\000\000\000\179\000\000\000\171\000\180\000\000\000\000\000\000\000\000\000\000\000\000\002a\000\178\000\000\000\000\000\187\000\179\000O\002k\000\180\000\000\000\000\000\164\000\000\000\000\001\t\002\r\000\000\000\172\000\187\000\000\000\178\000\179\000\178\002d\000\180\000\181\000N\000\000\000O\003a\000\170\000\000\000\000\000\164\000\000\000\171\000\000\000\000\000\000\000\172\000\181\000\000\000\000\000N\000\000\000\000\000\000\000\170\000\000\000O\000\000\002l\000\171\000\178\000\164\000\000\000\181\000N\000\000\000N\000\172\000\170\000\000\000\170\000\000\000\000\000\171\000\000\000\171\000\000\000\000\000\000\000\000\000\187\000\000\000\178\004!\000\000\000\000\002e\000\000\000\000\002f\000\000\003g\000\000\000\179\000\000\000\187\000\180\001\023\000\000\000O\000\000\000\000\000\000\000\178\000\164\000\000\003i\000\000\000\000\000\000\000\172\000\187\000\179\000\000\000\179\000\180\000O\000\180\000\000\000\000\000\000\000\164\003k\000\000\000\000\000\000\000\000\000\172\000\181\000\000\000O\000\000\000O\002l\000\000\000\164\001 \000\164\000\000\000\000\000\000\000\172\000\000\000\172\000\000\000\179\000\178\000\181\000\180\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004T\000\000\000\000\002e\000\000\000\178\002f\000\000\000\000\000\179\000\000\000\000\000\180\000\000\001\023\000\000\000\000\000\000\000\187\000\178\000\000\000\178\000\181\000\000\000\000\000\000\000\000\000\000\000\000\003m\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\187\000\000\000\187\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\003o\000\000\003q\000\000\000\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\187\000\000\000\000\000\179\000\000\000\000\000\180\000\000\000\000\000\000\000\000\003s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\000\000\187\000\180\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003u\000\179\000\000\000\179\000\180\000\181\000\180\000\000\000\000\000\000\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003y\000\000\000\000\000\000\000\000\000\000\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003{\000\000\000\000\000\187\000\000\000\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003}\000\000\003\127"))
   
   let semantic_action =
     [|
@@ -1757,7 +1784,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_aexpr = 
-# 2338 "parser_cocci_menhir.mly"
+# 2326 "parser_cocci_menhir.mly"
              ( Ast0.set_arg_exp _1 )
 # 1763 "parser_cocci_menhir.ml"
          in
@@ -1778,14 +1805,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 136 "parser_cocci_menhir.mly"
+# 110 "parser_cocci_menhir.mly"
        (Parse_aux.list_info)
 # 1784 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_aexpr = 
-# 2340 "parser_cocci_menhir.mly"
+# 2328 "parser_cocci_menhir.mly"
       ( let (nm,lenname,pure,clt) = _1 in
       let nm = P.clt2mcode nm clt in
       let lenname =
@@ -1816,7 +1843,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_aexpr = 
-# 2349 "parser_cocci_menhir.mly"
+# 2337 "parser_cocci_menhir.mly"
       ( Ast0.set_arg_exp(Ast0.wrap(Ast0.TypeExp(_1))) )
 # 1822 "parser_cocci_menhir.ml"
          in
@@ -1843,14 +1870,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let ty : 'tv_signable_types = Obj.magic ty in
         let r : (
-# 119 "parser_cocci_menhir.mly"
+# 93 "parser_cocci_menhir.mly"
       (Data.clt)
 # 1849 "parser_cocci_menhir.ml"
         ) = Obj.magic r in
         let _startpos = _startpos_r_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_all_basic_types = 
-# 718 "parser_cocci_menhir.mly"
+# 706 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) )
 # 1856 "parser_cocci_menhir.ml"
          in
@@ -1877,14 +1904,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let ty : 'tv_signable_types = Obj.magic ty in
         let r : (
-# 119 "parser_cocci_menhir.mly"
+# 93 "parser_cocci_menhir.mly"
       (Data.clt)
 # 1883 "parser_cocci_menhir.ml"
         ) = Obj.magic r in
         let _startpos = _startpos_r_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_all_basic_types = 
-# 720 "parser_cocci_menhir.mly"
+# 708 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) )
 # 1890 "parser_cocci_menhir.ml"
          in
@@ -1908,7 +1935,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_all_basic_types = 
-# 721 "parser_cocci_menhir.mly"
+# 709 "parser_cocci_menhir.mly"
                     ( ty )
 # 1914 "parser_cocci_menhir.ml"
          in
@@ -1932,7 +1959,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_all_basic_types = 
-# 722 "parser_cocci_menhir.mly"
+# 710 "parser_cocci_menhir.mly"
                         ( ty )
 # 1938 "parser_cocci_menhir.ml"
          in
@@ -1954,7 +1981,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_any_strict = 
-# 2385 "parser_cocci_menhir.mly"
+# 2373 "parser_cocci_menhir.mly"
             ( Ast.WhenAny )
 # 1960 "parser_cocci_menhir.ml"
          in
@@ -1976,7 +2003,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_any_strict = 
-# 2386 "parser_cocci_menhir.mly"
+# 2374 "parser_cocci_menhir.mly"
             ( Ast.WhenStrict )
 # 1982 "parser_cocci_menhir.ml"
          in
@@ -1998,7 +2025,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_any_strict = 
-# 2387 "parser_cocci_menhir.mly"
+# 2375 "parser_cocci_menhir.mly"
             ( Ast.WhenForall )
 # 2004 "parser_cocci_menhir.ml"
          in
@@ -2020,7 +2047,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_any_strict = 
-# 2388 "parser_cocci_menhir.mly"
+# 2376 "parser_cocci_menhir.mly"
             ( Ast.WhenExists )
 # 2026 "parser_cocci_menhir.ml"
          in
@@ -2044,7 +2071,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1559 "parser_cocci_menhir.mly"
+# 1547 "parser_cocci_menhir.mly"
                                             ( _1 )
 # 2050 "parser_cocci_menhir.ml"
          in
@@ -2076,7 +2103,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2082 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2084,7 +2111,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1561 "parser_cocci_menhir.mly"
+# 1549 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Mul _1 _2 _3 )
 # 2090 "parser_cocci_menhir.ml"
          in
@@ -2116,7 +2143,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 169 "parser_cocci_menhir.mly"
+# 143 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 2122 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2124,7 +2151,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1563 "parser_cocci_menhir.mly"
+# 1551 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 2130 "parser_cocci_menhir.ml"
          in
@@ -2156,7 +2183,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2162 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2164,7 +2191,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1565 "parser_cocci_menhir.mly"
+# 1553 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Plus _1 _2 _3 )
 # 2170 "parser_cocci_menhir.ml"
          in
@@ -2196,7 +2223,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2202 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2204,7 +2231,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1567 "parser_cocci_menhir.mly"
+# 1555 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Minus _1 _2 _3 )
 # 2210 "parser_cocci_menhir.ml"
          in
@@ -2236,7 +2263,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 168 "parser_cocci_menhir.mly"
+# 142 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 2242 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2244,7 +2271,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1569 "parser_cocci_menhir.mly"
+# 1557 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 2250 "parser_cocci_menhir.ml"
          in
@@ -2276,7 +2303,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 168 "parser_cocci_menhir.mly"
+# 142 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 2282 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2284,7 +2311,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1571 "parser_cocci_menhir.mly"
+# 1559 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 2290 "parser_cocci_menhir.ml"
          in
@@ -2316,7 +2343,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 167 "parser_cocci_menhir.mly"
+# 141 "parser_cocci_menhir.mly"
        (Ast_cocci.logicalOp * Data.clt)
 # 2322 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2324,7 +2351,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1573 "parser_cocci_menhir.mly"
+# 1561 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.logic_op op _1 clt _3 )
 # 2330 "parser_cocci_menhir.ml"
          in
@@ -2356,7 +2383,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2362 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2364,7 +2391,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1575 "parser_cocci_menhir.mly"
+# 1563 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.Eq _1 _2 _3 )
 # 2370 "parser_cocci_menhir.ml"
          in
@@ -2396,7 +2423,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2402 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2404,7 +2431,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1577 "parser_cocci_menhir.mly"
+# 1565 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.NotEq _1 _2 _3 )
 # 2410 "parser_cocci_menhir.ml"
          in
@@ -2436,7 +2463,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 165 "parser_cocci_menhir.mly"
+# 139 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2442 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2444,7 +2471,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1579 "parser_cocci_menhir.mly"
+# 1567 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.And _1 _2 _3 )
 # 2450 "parser_cocci_menhir.ml"
          in
@@ -2476,7 +2503,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 163 "parser_cocci_menhir.mly"
+# 137 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2482 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2484,7 +2511,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1581 "parser_cocci_menhir.mly"
+# 1569 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Or _1 _2 _3 )
 # 2490 "parser_cocci_menhir.ml"
          in
@@ -2516,7 +2543,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 164 "parser_cocci_menhir.mly"
+# 138 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2522 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2524,7 +2551,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1583 "parser_cocci_menhir.mly"
+# 1571 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Xor _1 _2 _3 )
 # 2530 "parser_cocci_menhir.ml"
          in
@@ -2556,7 +2583,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 162 "parser_cocci_menhir.mly"
+# 136 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2562 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2564,7 +2591,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1585 "parser_cocci_menhir.mly"
+# 1573 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.AndLog _1 _2 _3 )
 # 2570 "parser_cocci_menhir.ml"
          in
@@ -2596,7 +2623,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 161 "parser_cocci_menhir.mly"
+# 135 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2602 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2604,7 +2631,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_dot_expressions_ = 
-# 1587 "parser_cocci_menhir.mly"
+# 1575 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.OrLog _1 _2 _3 )
 # 2610 "parser_cocci_menhir.ml"
          in
@@ -2628,7 +2655,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1559 "parser_cocci_menhir.mly"
+# 1547 "parser_cocci_menhir.mly"
                                             ( _1 )
 # 2634 "parser_cocci_menhir.ml"
          in
@@ -2660,7 +2687,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2666 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2668,7 +2695,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1561 "parser_cocci_menhir.mly"
+# 1549 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Mul _1 _2 _3 )
 # 2674 "parser_cocci_menhir.ml"
          in
@@ -2700,7 +2727,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 169 "parser_cocci_menhir.mly"
+# 143 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 2706 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2708,7 +2735,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1563 "parser_cocci_menhir.mly"
+# 1551 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 2714 "parser_cocci_menhir.ml"
          in
@@ -2740,7 +2767,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2746 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2748,7 +2775,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1565 "parser_cocci_menhir.mly"
+# 1553 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Plus _1 _2 _3 )
 # 2754 "parser_cocci_menhir.ml"
          in
@@ -2780,7 +2807,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2786 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2788,7 +2815,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1567 "parser_cocci_menhir.mly"
+# 1555 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Minus _1 _2 _3 )
 # 2794 "parser_cocci_menhir.ml"
          in
@@ -2820,7 +2847,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 168 "parser_cocci_menhir.mly"
+# 142 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 2826 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2828,7 +2855,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1569 "parser_cocci_menhir.mly"
+# 1557 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 2834 "parser_cocci_menhir.ml"
          in
@@ -2860,7 +2887,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 168 "parser_cocci_menhir.mly"
+# 142 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 2866 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2868,7 +2895,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1571 "parser_cocci_menhir.mly"
+# 1559 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 2874 "parser_cocci_menhir.ml"
          in
@@ -2900,7 +2927,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 167 "parser_cocci_menhir.mly"
+# 141 "parser_cocci_menhir.mly"
        (Ast_cocci.logicalOp * Data.clt)
 # 2906 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2908,7 +2935,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1573 "parser_cocci_menhir.mly"
+# 1561 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.logic_op op _1 clt _3 )
 # 2914 "parser_cocci_menhir.ml"
          in
@@ -2940,7 +2967,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2946 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2948,7 +2975,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1575 "parser_cocci_menhir.mly"
+# 1563 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.Eq _1 _2 _3 )
 # 2954 "parser_cocci_menhir.ml"
          in
@@ -2980,7 +3007,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 2986 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -2988,7 +3015,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1577 "parser_cocci_menhir.mly"
+# 1565 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.NotEq _1 _2 _3 )
 # 2994 "parser_cocci_menhir.ml"
          in
@@ -3020,7 +3047,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 165 "parser_cocci_menhir.mly"
+# 139 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3026 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3028,7 +3055,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1579 "parser_cocci_menhir.mly"
+# 1567 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.And _1 _2 _3 )
 # 3034 "parser_cocci_menhir.ml"
          in
@@ -3060,7 +3087,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 163 "parser_cocci_menhir.mly"
+# 137 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3066 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3068,7 +3095,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1581 "parser_cocci_menhir.mly"
+# 1569 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Or _1 _2 _3 )
 # 3074 "parser_cocci_menhir.ml"
          in
@@ -3100,7 +3127,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 164 "parser_cocci_menhir.mly"
+# 138 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3106 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3108,7 +3135,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1583 "parser_cocci_menhir.mly"
+# 1571 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Xor _1 _2 _3 )
 # 3114 "parser_cocci_menhir.ml"
          in
@@ -3140,7 +3167,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 162 "parser_cocci_menhir.mly"
+# 136 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3146 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3148,7 +3175,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1585 "parser_cocci_menhir.mly"
+# 1573 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.AndLog _1 _2 _3 )
 # 3154 "parser_cocci_menhir.ml"
          in
@@ -3180,7 +3207,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 161 "parser_cocci_menhir.mly"
+# 135 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3186 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3188,7 +3215,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_invalid_ = 
-# 1587 "parser_cocci_menhir.mly"
+# 1575 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.OrLog _1 _2 _3 )
 # 3194 "parser_cocci_menhir.ml"
          in
@@ -3212,7 +3239,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1559 "parser_cocci_menhir.mly"
+# 1547 "parser_cocci_menhir.mly"
                                             ( _1 )
 # 3218 "parser_cocci_menhir.ml"
          in
@@ -3244,7 +3271,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3250 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3252,7 +3279,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1561 "parser_cocci_menhir.mly"
+# 1549 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Mul _1 _2 _3 )
 # 3258 "parser_cocci_menhir.ml"
          in
@@ -3284,7 +3311,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 169 "parser_cocci_menhir.mly"
+# 143 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 3290 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3292,7 +3319,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1563 "parser_cocci_menhir.mly"
+# 1551 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 3298 "parser_cocci_menhir.ml"
          in
@@ -3324,7 +3351,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3330 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3332,7 +3359,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1565 "parser_cocci_menhir.mly"
+# 1553 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Plus _1 _2 _3 )
 # 3338 "parser_cocci_menhir.ml"
          in
@@ -3364,7 +3391,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3370 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3372,7 +3399,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1567 "parser_cocci_menhir.mly"
+# 1555 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Minus _1 _2 _3 )
 # 3378 "parser_cocci_menhir.ml"
          in
@@ -3404,7 +3431,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 168 "parser_cocci_menhir.mly"
+# 142 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 3410 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3412,7 +3439,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1569 "parser_cocci_menhir.mly"
+# 1557 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 3418 "parser_cocci_menhir.ml"
          in
@@ -3444,7 +3471,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 168 "parser_cocci_menhir.mly"
+# 142 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 3450 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3452,7 +3479,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1571 "parser_cocci_menhir.mly"
+# 1559 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 3458 "parser_cocci_menhir.ml"
          in
@@ -3484,7 +3511,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 167 "parser_cocci_menhir.mly"
+# 141 "parser_cocci_menhir.mly"
        (Ast_cocci.logicalOp * Data.clt)
 # 3490 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3492,7 +3519,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1573 "parser_cocci_menhir.mly"
+# 1561 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.logic_op op _1 clt _3 )
 # 3498 "parser_cocci_menhir.ml"
          in
@@ -3524,7 +3551,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3530 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3532,7 +3559,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1575 "parser_cocci_menhir.mly"
+# 1563 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.Eq _1 _2 _3 )
 # 3538 "parser_cocci_menhir.ml"
          in
@@ -3564,7 +3591,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3570 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3572,7 +3599,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1577 "parser_cocci_menhir.mly"
+# 1565 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.NotEq _1 _2 _3 )
 # 3578 "parser_cocci_menhir.ml"
          in
@@ -3604,7 +3631,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 165 "parser_cocci_menhir.mly"
+# 139 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3610 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3612,7 +3639,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1579 "parser_cocci_menhir.mly"
+# 1567 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.And _1 _2 _3 )
 # 3618 "parser_cocci_menhir.ml"
          in
@@ -3644,7 +3671,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 163 "parser_cocci_menhir.mly"
+# 137 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3650 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3652,7 +3679,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1581 "parser_cocci_menhir.mly"
+# 1569 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Or _1 _2 _3 )
 # 3658 "parser_cocci_menhir.ml"
          in
@@ -3684,7 +3711,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 164 "parser_cocci_menhir.mly"
+# 138 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3690 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3692,7 +3719,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1583 "parser_cocci_menhir.mly"
+# 1571 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Xor _1 _2 _3 )
 # 3698 "parser_cocci_menhir.ml"
          in
@@ -3724,7 +3751,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 162 "parser_cocci_menhir.mly"
+# 136 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3730 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3732,7 +3759,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1585 "parser_cocci_menhir.mly"
+# 1573 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.AndLog _1 _2 _3 )
 # 3738 "parser_cocci_menhir.ml"
          in
@@ -3764,7 +3791,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 161 "parser_cocci_menhir.mly"
+# 135 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3770 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3772,7 +3799,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_eexpr_nest_expressions_ = 
-# 1587 "parser_cocci_menhir.mly"
+# 1575 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.OrLog _1 _2 _3 )
 # 3778 "parser_cocci_menhir.ml"
          in
@@ -3796,7 +3823,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1559 "parser_cocci_menhir.mly"
+# 1547 "parser_cocci_menhir.mly"
                                             ( _1 )
 # 3802 "parser_cocci_menhir.ml"
          in
@@ -3828,7 +3855,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3834 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3836,7 +3863,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1561 "parser_cocci_menhir.mly"
+# 1549 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Mul _1 _2 _3 )
 # 3842 "parser_cocci_menhir.ml"
          in
@@ -3868,7 +3895,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 169 "parser_cocci_menhir.mly"
+# 143 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 3874 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3876,7 +3903,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1563 "parser_cocci_menhir.mly"
+# 1551 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 3882 "parser_cocci_menhir.ml"
          in
@@ -3908,7 +3935,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3914 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3916,7 +3943,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1565 "parser_cocci_menhir.mly"
+# 1553 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Plus _1 _2 _3 )
 # 3922 "parser_cocci_menhir.ml"
          in
@@ -3948,7 +3975,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
 # 3954 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3956,7 +3983,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1567 "parser_cocci_menhir.mly"
+# 1555 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Minus _1 _2 _3 )
 # 3962 "parser_cocci_menhir.ml"
          in
@@ -3988,7 +4015,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 168 "parser_cocci_menhir.mly"
+# 142 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 3994 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -3996,7 +4023,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1569 "parser_cocci_menhir.mly"
+# 1557 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 4002 "parser_cocci_menhir.ml"
          in
@@ -4028,7 +4055,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 168 "parser_cocci_menhir.mly"
+# 142 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 4034 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4036,7 +4063,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1571 "parser_cocci_menhir.mly"
+# 1559 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 4042 "parser_cocci_menhir.ml"
          in
@@ -4068,7 +4095,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 167 "parser_cocci_menhir.mly"
+# 141 "parser_cocci_menhir.mly"
        (Ast_cocci.logicalOp * Data.clt)
 # 4074 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4076,7 +4103,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1573 "parser_cocci_menhir.mly"
+# 1561 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.logic_op op _1 clt _3 )
 # 4082 "parser_cocci_menhir.ml"
          in
@@ -4108,7 +4135,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4114 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4116,7 +4143,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1575 "parser_cocci_menhir.mly"
+# 1563 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.Eq _1 _2 _3 )
 # 4122 "parser_cocci_menhir.ml"
          in
@@ -4148,7 +4175,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4154 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4156,7 +4183,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1577 "parser_cocci_menhir.mly"
+# 1565 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.NotEq _1 _2 _3 )
 # 4162 "parser_cocci_menhir.ml"
          in
@@ -4188,7 +4215,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 165 "parser_cocci_menhir.mly"
+# 139 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4194 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4196,7 +4223,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1579 "parser_cocci_menhir.mly"
+# 1567 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.And _1 _2 _3 )
 # 4202 "parser_cocci_menhir.ml"
          in
@@ -4228,7 +4255,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 163 "parser_cocci_menhir.mly"
+# 137 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4234 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4236,7 +4263,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1581 "parser_cocci_menhir.mly"
+# 1569 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Or _1 _2 _3 )
 # 4242 "parser_cocci_menhir.ml"
          in
@@ -4268,7 +4295,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 164 "parser_cocci_menhir.mly"
+# 138 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4274 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4276,7 +4303,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1583 "parser_cocci_menhir.mly"
+# 1571 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Xor _1 _2 _3 )
 # 4282 "parser_cocci_menhir.ml"
          in
@@ -4308,7 +4335,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 162 "parser_cocci_menhir.mly"
+# 136 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4314 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4316,7 +4343,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1585 "parser_cocci_menhir.mly"
+# 1573 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.AndLog _1 _2 _3 )
 # 4322 "parser_cocci_menhir.ml"
          in
@@ -4348,7 +4375,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 161 "parser_cocci_menhir.mly"
+# 135 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4354 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4356,7 +4383,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_expr_invalid_ = 
-# 1587 "parser_cocci_menhir.mly"
+# 1575 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.OrLog _1 _2 _3 )
 # 4362 "parser_cocci_menhir.ml"
          in
@@ -4380,7 +4407,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_arith_expr_bis = 
-# 1592 "parser_cocci_menhir.mly"
+# 1580 "parser_cocci_menhir.mly"
                                                              ( _1 )
 # 4386 "parser_cocci_menhir.ml"
          in
@@ -4412,7 +4439,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4418 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4420,7 +4447,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1594 "parser_cocci_menhir.mly"
+# 1582 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Mul _1 _2 _3 )
 # 4426 "parser_cocci_menhir.ml"
          in
@@ -4452,7 +4479,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 169 "parser_cocci_menhir.mly"
+# 143 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 4458 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4460,7 +4487,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1596 "parser_cocci_menhir.mly"
+# 1584 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 4466 "parser_cocci_menhir.ml"
          in
@@ -4492,7 +4519,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4498 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4500,7 +4527,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1598 "parser_cocci_menhir.mly"
+# 1586 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Plus _1 _2 _3 )
 # 4506 "parser_cocci_menhir.ml"
          in
@@ -4532,7 +4559,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4538 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4540,7 +4567,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1600 "parser_cocci_menhir.mly"
+# 1588 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Minus _1 _2 _3 )
 # 4546 "parser_cocci_menhir.ml"
          in
@@ -4572,7 +4599,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 168 "parser_cocci_menhir.mly"
+# 142 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 4578 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4580,7 +4607,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1602 "parser_cocci_menhir.mly"
+# 1590 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 4586 "parser_cocci_menhir.ml"
          in
@@ -4612,7 +4639,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 168 "parser_cocci_menhir.mly"
+# 142 "parser_cocci_menhir.mly"
        (Ast_cocci.arithOp * Data.clt)
 # 4618 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4620,7 +4647,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1604 "parser_cocci_menhir.mly"
+# 1592 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.arith_op op _1 clt _3 )
 # 4626 "parser_cocci_menhir.ml"
          in
@@ -4652,7 +4679,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 167 "parser_cocci_menhir.mly"
+# 141 "parser_cocci_menhir.mly"
        (Ast_cocci.logicalOp * Data.clt)
 # 4658 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4660,7 +4687,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1606 "parser_cocci_menhir.mly"
+# 1594 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in P.logic_op op _1 clt _3 )
 # 4666 "parser_cocci_menhir.ml"
          in
@@ -4692,7 +4719,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4698 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4700,7 +4727,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1608 "parser_cocci_menhir.mly"
+# 1596 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.Eq _1 _2 _3 )
 # 4706 "parser_cocci_menhir.ml"
          in
@@ -4732,7 +4759,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 166 "parser_cocci_menhir.mly"
+# 140 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4738 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4740,7 +4767,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1610 "parser_cocci_menhir.mly"
+# 1598 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.NotEq _1 _2 _3 )
 # 4746 "parser_cocci_menhir.ml"
          in
@@ -4772,7 +4799,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 165 "parser_cocci_menhir.mly"
+# 139 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4778 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4780,7 +4807,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1612 "parser_cocci_menhir.mly"
+# 1600 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.And _1 _2 _3 )
 # 4786 "parser_cocci_menhir.ml"
          in
@@ -4812,7 +4839,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 163 "parser_cocci_menhir.mly"
+# 137 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4818 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4820,7 +4847,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1614 "parser_cocci_menhir.mly"
+# 1602 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Or _1 _2 _3 )
 # 4826 "parser_cocci_menhir.ml"
          in
@@ -4852,7 +4879,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 164 "parser_cocci_menhir.mly"
+# 138 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4858 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4860,7 +4887,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1616 "parser_cocci_menhir.mly"
+# 1604 "parser_cocci_menhir.mly"
       ( P.arith_op Ast.Xor _1 _2 _3 )
 # 4866 "parser_cocci_menhir.ml"
          in
@@ -4892,7 +4919,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_arith_expr_bis = Obj.magic _3 in
         let _2 : (
-# 162 "parser_cocci_menhir.mly"
+# 136 "parser_cocci_menhir.mly"
        (Data.clt)
 # 4898 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -4900,7 +4927,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_arith_expr_bis = 
-# 1618 "parser_cocci_menhir.mly"
+# 1606 "parser_cocci_menhir.mly"
       ( P.logic_op Ast.AndLog _1 _2 _3 )
 # 4906 "parser_cocci_menhir.ml"
          in
@@ -4922,7 +4949,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_arity = 
-# 629 "parser_cocci_menhir.mly"
+# 617 "parser_cocci_menhir.mly"
               ( Ast.UNIQUE )
 # 4928 "parser_cocci_menhir.ml"
          in
@@ -4944,7 +4971,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_arity = 
-# 630 "parser_cocci_menhir.mly"
+# 618 "parser_cocci_menhir.mly"
               ( Ast.OPT )
 # 4950 "parser_cocci_menhir.ml"
          in
@@ -4966,7 +4993,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_arity = 
-# 631 "parser_cocci_menhir.mly"
+# 619 "parser_cocci_menhir.mly"
               ( Ast.MULTI )
 # 4972 "parser_cocci_menhir.ml"
          in
@@ -4983,7 +5010,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_arity = 
-# 632 "parser_cocci_menhir.mly"
+# 620 "parser_cocci_menhir.mly"
                    ( Ast.NONE )
 # 4989 "parser_cocci_menhir.ml"
          in
@@ -5014,20 +5041,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let r : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5020 "parser_cocci_menhir.ml"
         ) = Obj.magic r in
         let i : 'tv_option_eexpr_ = Obj.magic i in
         let l : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5026 "parser_cocci_menhir.ml"
         ) = Obj.magic l in
         let _startpos = _startpos_l_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_array_dec = 
-# 1348 "parser_cocci_menhir.mly"
+# 1336 "parser_cocci_menhir.mly"
                                            ( (l,i,r) )
 # 5033 "parser_cocci_menhir.ml"
          in
@@ -5051,7 +5078,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_assign_expr_eexpr_dot_expressions_ = 
-# 1530 "parser_cocci_menhir.mly"
+# 1518 "parser_cocci_menhir.mly"
                                            ( _1 )
 # 5057 "parser_cocci_menhir.ml"
          in
@@ -5083,7 +5110,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_assign_expr_bis = Obj.magic _3 in
         let _2 : (
-# 180 "parser_cocci_menhir.mly"
+# 154 "parser_cocci_menhir.mly"
        (Ast_cocci.assignOp * Data.clt)
 # 5089 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -5091,7 +5118,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_eexpr_dot_expressions_ = 
-# 1532 "parser_cocci_menhir.mly"
+# 1520 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in
       Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt,
                                Ast0.set_arg_exp _3,false)) )
@@ -5125,7 +5152,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_assign_expr_bis = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5131 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -5133,7 +5160,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_eexpr_dot_expressions_ = 
-# 1536 "parser_cocci_menhir.mly"
+# 1524 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.Assignment
             (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) )
@@ -5159,7 +5186,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_assign_expr_eexpr_nest_expressions_ = 
-# 1530 "parser_cocci_menhir.mly"
+# 1518 "parser_cocci_menhir.mly"
                                            ( _1 )
 # 5165 "parser_cocci_menhir.ml"
          in
@@ -5191,7 +5218,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_assign_expr_bis = Obj.magic _3 in
         let _2 : (
-# 180 "parser_cocci_menhir.mly"
+# 154 "parser_cocci_menhir.mly"
        (Ast_cocci.assignOp * Data.clt)
 # 5197 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -5199,7 +5226,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_eexpr_nest_expressions_ = 
-# 1532 "parser_cocci_menhir.mly"
+# 1520 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in
       Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt,
                                Ast0.set_arg_exp _3,false)) )
@@ -5233,7 +5260,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_assign_expr_bis = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5239 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -5241,7 +5268,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_eexpr_nest_expressions_ = 
-# 1536 "parser_cocci_menhir.mly"
+# 1524 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.Assignment
             (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) )
@@ -5267,7 +5294,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_assign_expr_expr_invalid_ = 
-# 1530 "parser_cocci_menhir.mly"
+# 1518 "parser_cocci_menhir.mly"
                                            ( _1 )
 # 5273 "parser_cocci_menhir.ml"
          in
@@ -5299,7 +5326,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_assign_expr_bis = Obj.magic _3 in
         let _2 : (
-# 180 "parser_cocci_menhir.mly"
+# 154 "parser_cocci_menhir.mly"
        (Ast_cocci.assignOp * Data.clt)
 # 5305 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -5307,7 +5334,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_expr_invalid_ = 
-# 1532 "parser_cocci_menhir.mly"
+# 1520 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in
       Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt,
                                Ast0.set_arg_exp _3,false)) )
@@ -5341,7 +5368,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_assign_expr_bis = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5347 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -5349,7 +5376,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_expr_invalid_ = 
-# 1536 "parser_cocci_menhir.mly"
+# 1524 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.Assignment
             (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) )
@@ -5375,7 +5402,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_assign_expr_bis = 
-# 1541 "parser_cocci_menhir.mly"
+# 1529 "parser_cocci_menhir.mly"
                                                             ( _1 )
 # 5381 "parser_cocci_menhir.ml"
          in
@@ -5407,7 +5434,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_assign_expr_bis = Obj.magic _3 in
         let _2 : (
-# 180 "parser_cocci_menhir.mly"
+# 154 "parser_cocci_menhir.mly"
        (Ast_cocci.assignOp * Data.clt)
 # 5413 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -5415,7 +5442,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_bis = 
-# 1543 "parser_cocci_menhir.mly"
+# 1531 "parser_cocci_menhir.mly"
       ( let (op,clt) = _2 in
       Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt,
                                Ast0.set_arg_exp _3,false)) )
@@ -5449,7 +5476,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_assign_expr_bis = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5455 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -5457,7 +5484,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_assign_expr_bis = 
-# 1547 "parser_cocci_menhir.mly"
+# 1535 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.Assignment
             (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) )
@@ -5483,7 +5510,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_basic_expr_eexpr_dot_expressions_ = 
-# 1527 "parser_cocci_menhir.mly"
+# 1515 "parser_cocci_menhir.mly"
                                                            ( _1 )
 # 5489 "parser_cocci_menhir.ml"
          in
@@ -5507,7 +5534,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_basic_expr_eexpr_nest_expressions_ = 
-# 1527 "parser_cocci_menhir.mly"
+# 1515 "parser_cocci_menhir.mly"
                                                            ( _1 )
 # 5513 "parser_cocci_menhir.ml"
          in
@@ -5531,7 +5558,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_basic_expr_expr_invalid_ = 
-# 1527 "parser_cocci_menhir.mly"
+# 1515 "parser_cocci_menhir.mly"
                                                            ( _1 )
 # 5537 "parser_cocci_menhir.ml"
          in
@@ -5563,19 +5590,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_fun_start = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5569 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5574 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_case_line = 
-# 1205 "parser_cocci_menhir.mly"
+# 1193 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.Default(P.clt2mcode "default" _1,P.clt2mcode ":" _2,_3)) )
 # 5582 "parser_cocci_menhir.ml"
@@ -5613,20 +5640,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _4 : 'tv_fun_start = Obj.magic _4 in
         let _3 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5619 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_eexpr = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5625 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_case_line = 
-# 1208 "parser_cocci_menhir.mly"
+# 1196 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Case(P.clt2mcode "case" _1,_2,P.clt2mcode ":" _3,_4)) )
 # 5632 "parser_cocci_menhir.ml"
          in
@@ -5650,7 +5677,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cast_expr_eexpr_dot_expressions_ = 
-# 1623 "parser_cocci_menhir.mly"
+# 1611 "parser_cocci_menhir.mly"
                                           ( _1 )
 # 5656 "parser_cocci_menhir.ml"
          in
@@ -5687,20 +5714,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let e : 'tv_cast_expr_eexpr_dot_expressions_ = Obj.magic e in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5693 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5699 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let _startpos = _startpos_lp_ in
         let _endpos = _endpos_e_ in
         let _v : 'tv_cast_expr_eexpr_dot_expressions_ = 
-# 1625 "parser_cocci_menhir.mly"
+# 1613 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t,
                             P.clt2mcode ")" rp, e)) )
 # 5707 "parser_cocci_menhir.ml"
@@ -5725,7 +5752,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cast_expr_eexpr_invalid_ = 
-# 1623 "parser_cocci_menhir.mly"
+# 1611 "parser_cocci_menhir.mly"
                                           ( _1 )
 # 5731 "parser_cocci_menhir.ml"
          in
@@ -5762,20 +5789,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let e : 'tv_cast_expr_eexpr_invalid_ = Obj.magic e in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5768 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5774 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let _startpos = _startpos_lp_ in
         let _endpos = _endpos_e_ in
         let _v : 'tv_cast_expr_eexpr_invalid_ = 
-# 1625 "parser_cocci_menhir.mly"
+# 1613 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t,
                             P.clt2mcode ")" rp, e)) )
 # 5782 "parser_cocci_menhir.ml"
@@ -5800,7 +5827,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cast_expr_eexpr_nest_expressions_ = 
-# 1623 "parser_cocci_menhir.mly"
+# 1611 "parser_cocci_menhir.mly"
                                           ( _1 )
 # 5806 "parser_cocci_menhir.ml"
          in
@@ -5837,20 +5864,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let e : 'tv_cast_expr_eexpr_nest_expressions_ = Obj.magic e in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5843 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5849 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let _startpos = _startpos_lp_ in
         let _endpos = _endpos_e_ in
         let _v : 'tv_cast_expr_eexpr_nest_expressions_ = 
-# 1625 "parser_cocci_menhir.mly"
+# 1613 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t,
                             P.clt2mcode ")" rp, e)) )
 # 5857 "parser_cocci_menhir.ml"
@@ -5875,7 +5902,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cast_expr_expr_invalid_ = 
-# 1623 "parser_cocci_menhir.mly"
+# 1611 "parser_cocci_menhir.mly"
                                           ( _1 )
 # 5881 "parser_cocci_menhir.ml"
          in
@@ -5912,20 +5939,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let e : 'tv_cast_expr_expr_invalid_ = Obj.magic e in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5918 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 5924 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let _startpos = _startpos_lp_ in
         let _endpos = _endpos_e_ in
         let _v : 'tv_cast_expr_expr_invalid_ = 
-# 1625 "parser_cocci_menhir.mly"
+# 1613 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t,
                             P.clt2mcode ")" rp, e)) )
 # 5932 "parser_cocci_menhir.ml"
@@ -5954,7 +5981,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_choose_iso = 
-# 310 "parser_cocci_menhir.mly"
+# 284 "parser_cocci_menhir.mly"
                                                  ( List.map P.id2name _2 )
 # 5960 "parser_cocci_menhir.ml"
          in
@@ -5978,7 +6005,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_any_strict_ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 5984 "parser_cocci_menhir.ml"
          in
@@ -6002,7 +6029,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_ctype_ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6008 "parser_cocci_menhir.ml"
          in
@@ -6026,7 +6053,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_d_ident_ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6032 "parser_cocci_menhir.ml"
          in
@@ -6050,7 +6077,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_ident_or_const_ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6056 "parser_cocci_menhir.ml"
          in
@@ -6074,7 +6101,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_meta_ident_ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6080 "parser_cocci_menhir.ml"
          in
@@ -6098,7 +6125,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6104 "parser_cocci_menhir.ml"
          in
@@ -6122,7 +6149,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6128 "parser_cocci_menhir.ml"
          in
@@ -6146,7 +6173,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub__ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6152 "parser_cocci_menhir.ml"
          in
@@ -6170,7 +6197,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6176 "parser_cocci_menhir.ml"
          in
@@ -6194,7 +6221,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6200 "parser_cocci_menhir.ml"
          in
@@ -6218,7 +6245,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid__ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6224 "parser_cocci_menhir.ml"
          in
@@ -6242,7 +6269,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_seed_ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6248 "parser_cocci_menhir.ml"
          in
@@ -6266,7 +6293,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_x_eq_not_pos__ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6272 "parser_cocci_menhir.ml"
          in
@@ -6290,7 +6317,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_comma_list_typedef_ident_ = 
-# 2363 "parser_cocci_menhir.mly"
+# 2351 "parser_cocci_menhir.mly"
                                        ( _1 )
 # 6296 "parser_cocci_menhir.ml"
          in
@@ -6314,7 +6341,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cond_expr_eexpr_dot_expressions_ = 
-# 1552 "parser_cocci_menhir.mly"
+# 1540 "parser_cocci_menhir.mly"
                                              ( _1 )
 # 6320 "parser_cocci_menhir.ml"
          in
@@ -6356,13 +6383,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let r : 'tv_eargexpr = Obj.magic r in
         let dd : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 6362 "parser_cocci_menhir.ml"
         ) = Obj.magic dd in
         let t : 'tv_option_eexpr_ = Obj.magic t in
         let w : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 6368 "parser_cocci_menhir.ml"
         ) = Obj.magic w in
@@ -6370,7 +6397,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_l_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_cond_expr_eexpr_dot_expressions_ = 
-# 1555 "parser_cocci_menhir.mly"
+# 1543 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t,
                                 P.clt2mcode ":" dd, r)) )
 # 6377 "parser_cocci_menhir.ml"
@@ -6395,7 +6422,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cond_expr_eexpr_nest_expressions_ = 
-# 1552 "parser_cocci_menhir.mly"
+# 1540 "parser_cocci_menhir.mly"
                                              ( _1 )
 # 6401 "parser_cocci_menhir.ml"
          in
@@ -6437,13 +6464,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let r : 'tv_eargexpr = Obj.magic r in
         let dd : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 6443 "parser_cocci_menhir.ml"
         ) = Obj.magic dd in
         let t : 'tv_option_eexpr_ = Obj.magic t in
         let w : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 6449 "parser_cocci_menhir.ml"
         ) = Obj.magic w in
@@ -6451,7 +6478,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_l_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_cond_expr_eexpr_nest_expressions_ = 
-# 1555 "parser_cocci_menhir.mly"
+# 1543 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t,
                                 P.clt2mcode ":" dd, r)) )
 # 6458 "parser_cocci_menhir.ml"
@@ -6476,7 +6503,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_cond_expr_expr_invalid_ = 
-# 1552 "parser_cocci_menhir.mly"
+# 1540 "parser_cocci_menhir.mly"
                                              ( _1 )
 # 6482 "parser_cocci_menhir.ml"
          in
@@ -6518,13 +6545,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let r : 'tv_eargexpr = Obj.magic r in
         let dd : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 6524 "parser_cocci_menhir.ml"
         ) = Obj.magic dd in
         let t : 'tv_option_eexpr_ = Obj.magic t in
         let w : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 6530 "parser_cocci_menhir.ml"
         ) = Obj.magic w in
@@ -6532,7 +6559,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_l_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_cond_expr_expr_invalid_ = 
-# 1555 "parser_cocci_menhir.mly"
+# 1543 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t,
                                 P.clt2mcode ":" dd, r)) )
 # 6539 "parser_cocci_menhir.ml"
@@ -6554,14 +6581,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 122 "parser_cocci_menhir.mly"
+# 96 "parser_cocci_menhir.mly"
       (Data.clt)
 # 6560 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_const_vol = 
-# 1101 "parser_cocci_menhir.mly"
+# 1089 "parser_cocci_menhir.mly"
                    ( P.clt2mcode Ast.Const _1 )
 # 6567 "parser_cocci_menhir.ml"
          in
@@ -6582,14 +6609,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 122 "parser_cocci_menhir.mly"
+# 96 "parser_cocci_menhir.mly"
       (Data.clt)
 # 6588 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_const_vol = 
-# 1102 "parser_cocci_menhir.mly"
+# 1090 "parser_cocci_menhir.mly"
                    ( P.clt2mcode Ast.Volatile _1 )
 # 6595 "parser_cocci_menhir.ml"
          in
@@ -6613,7 +6640,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_continue_list_aexpr_TEllipsis_ = 
-# 2139 "parser_cocci_menhir.mly"
+# 2127 "parser_cocci_menhir.mly"
        ( fun build_dots build_comma -> [_1] )
 # 6619 "parser_cocci_menhir.ml"
          in
@@ -6639,7 +6666,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 6645 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -6647,7 +6674,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_list_aexpr_TEllipsis_ = 
-# 2141 "parser_cocci_menhir.mly"
+# 2129 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
 # 6654 "parser_cocci_menhir.ml"
@@ -6680,7 +6707,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_nonempty_list_start_aexpr_TEllipsis_ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 6686 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -6688,7 +6715,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_continue_list_aexpr_TEllipsis_ = 
-# 2144 "parser_cocci_menhir.mly"
+# 2132 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (_3 build_dots build_comma) )
@@ -6718,7 +6745,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_list_aexpr_TEllipsis_ = 
-# 2147 "parser_cocci_menhir.mly"
+# 2135 "parser_cocci_menhir.mly"
                                             ( _2 )
 # 6724 "parser_cocci_menhir.ml"
          in
@@ -6742,7 +6769,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_continue_list_dparam_TEllipsis_ = 
-# 2139 "parser_cocci_menhir.mly"
+# 2127 "parser_cocci_menhir.mly"
        ( fun build_dots build_comma -> [_1] )
 # 6748 "parser_cocci_menhir.ml"
          in
@@ -6768,7 +6795,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 6774 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -6776,7 +6803,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_list_dparam_TEllipsis_ = 
-# 2141 "parser_cocci_menhir.mly"
+# 2129 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
 # 6783 "parser_cocci_menhir.ml"
@@ -6809,7 +6836,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_nonempty_list_start_dparam_TEllipsis_ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 6815 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -6817,7 +6844,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_continue_list_dparam_TEllipsis_ = 
-# 2144 "parser_cocci_menhir.mly"
+# 2132 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (_3 build_dots build_comma) )
@@ -6847,7 +6874,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_list_dparam_TEllipsis_ = 
-# 2147 "parser_cocci_menhir.mly"
+# 2135 "parser_cocci_menhir.mly"
                                             ( _2 )
 # 6853 "parser_cocci_menhir.ml"
          in
@@ -6871,7 +6898,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_continue_list_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = 
-# 2139 "parser_cocci_menhir.mly"
+# 2127 "parser_cocci_menhir.mly"
        ( fun build_dots build_comma -> [_1] )
 # 6877 "parser_cocci_menhir.ml"
          in
@@ -6897,7 +6924,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 6903 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -6905,7 +6932,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_list_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = 
-# 2141 "parser_cocci_menhir.mly"
+# 2129 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
 # 6912 "parser_cocci_menhir.ml"
@@ -6938,7 +6965,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 6944 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -6946,7 +6973,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_continue_list_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = 
-# 2144 "parser_cocci_menhir.mly"
+# 2132 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (_3 build_dots build_comma) )
@@ -6976,7 +7003,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_list_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = 
-# 2147 "parser_cocci_menhir.mly"
+# 2135 "parser_cocci_menhir.mly"
                                             ( _2 )
 # 6982 "parser_cocci_menhir.ml"
          in
@@ -7000,7 +7027,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_continue_list_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2139 "parser_cocci_menhir.mly"
+# 2127 "parser_cocci_menhir.mly"
        ( fun build_dots build_comma -> [_1] )
 # 7006 "parser_cocci_menhir.ml"
          in
@@ -7026,7 +7053,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7032 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -7034,7 +7061,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_list_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2141 "parser_cocci_menhir.mly"
+# 2129 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
 # 7041 "parser_cocci_menhir.ml"
@@ -7067,7 +7094,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7073 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -7075,7 +7102,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_continue_list_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2144 "parser_cocci_menhir.mly"
+# 2132 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (_3 build_dots build_comma) )
@@ -7105,7 +7132,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_list_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2147 "parser_cocci_menhir.mly"
+# 2135 "parser_cocci_menhir.mly"
                                             ( _2 )
 # 7111 "parser_cocci_menhir.ml"
          in
@@ -7129,7 +7156,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_continue_list_one_dec_decl__TEllipsis_ = 
-# 2139 "parser_cocci_menhir.mly"
+# 2127 "parser_cocci_menhir.mly"
        ( fun build_dots build_comma -> [_1] )
 # 7135 "parser_cocci_menhir.ml"
          in
@@ -7155,7 +7182,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7161 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -7163,7 +7190,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_list_one_dec_decl__TEllipsis_ = 
-# 2141 "parser_cocci_menhir.mly"
+# 2129 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
 # 7170 "parser_cocci_menhir.ml"
@@ -7196,7 +7223,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7202 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -7204,7 +7231,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_continue_list_one_dec_decl__TEllipsis_ = 
-# 2144 "parser_cocci_menhir.mly"
+# 2132 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (_3 build_dots build_comma) )
@@ -7234,7 +7261,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_list_one_dec_decl__TEllipsis_ = 
-# 2147 "parser_cocci_menhir.mly"
+# 2135 "parser_cocci_menhir.mly"
                                             ( _2 )
 # 7240 "parser_cocci_menhir.ml"
          in
@@ -7258,7 +7285,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_continue_list_one_dec_name_opt_decl__TEllipsis_ = 
-# 2139 "parser_cocci_menhir.mly"
+# 2127 "parser_cocci_menhir.mly"
        ( fun build_dots build_comma -> [_1] )
 # 7264 "parser_cocci_menhir.ml"
          in
@@ -7284,7 +7311,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7290 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -7292,7 +7319,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_list_one_dec_name_opt_decl__TEllipsis_ = 
-# 2141 "parser_cocci_menhir.mly"
+# 2129 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
 # 7299 "parser_cocci_menhir.ml"
@@ -7325,7 +7352,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7331 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -7333,7 +7360,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_continue_list_one_dec_name_opt_decl__TEllipsis_ = 
-# 2144 "parser_cocci_menhir.mly"
+# 2132 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (_3 build_dots build_comma) )
@@ -7363,7 +7390,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_list_one_dec_name_opt_decl__TEllipsis_ = 
-# 2147 "parser_cocci_menhir.mly"
+# 2135 "parser_cocci_menhir.mly"
                                             ( _2 )
 # 7369 "parser_cocci_menhir.ml"
          in
@@ -7380,7 +7407,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_continue_struct_decl_list = 
-# 801 "parser_cocci_menhir.mly"
+# 789 "parser_cocci_menhir.mly"
                                      ( [] )
 # 7386 "parser_cocci_menhir.ml"
          in
@@ -7410,7 +7437,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_continue_struct_decl_list = 
-# 802 "parser_cocci_menhir.mly"
+# 790 "parser_cocci_menhir.mly"
                                      ( _1@_2 )
 # 7416 "parser_cocci_menhir.ml"
          in
@@ -7434,7 +7461,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_continue_struct_decl_list = 
-# 803 "parser_cocci_menhir.mly"
+# 791 "parser_cocci_menhir.mly"
                                      ( _1 )
 # 7440 "parser_cocci_menhir.ml"
          in
@@ -7471,7 +7498,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 726 "parser_cocci_menhir.mly"
+# 714 "parser_cocci_menhir.mly"
     ( List.fold_left
        (function prev ->
          function (star,cv) ->
@@ -7519,7 +7546,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 726 "parser_cocci_menhir.mly"
+# 714 "parser_cocci_menhir.mly"
     ( List.fold_left
        (function prev ->
          function (star,cv) ->
@@ -7544,14 +7571,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let r : (
-# 119 "parser_cocci_menhir.mly"
+# 93 "parser_cocci_menhir.mly"
       (Data.clt)
 # 7550 "parser_cocci_menhir.ml"
         ) = Obj.magic r in
         let _startpos = _startpos_r_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_ctype = 
-# 732 "parser_cocci_menhir.mly"
+# 720 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,None)) )
 # 7557 "parser_cocci_menhir.ml"
          in
@@ -7572,14 +7599,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let r : (
-# 119 "parser_cocci_menhir.mly"
+# 93 "parser_cocci_menhir.mly"
       (Data.clt)
 # 7578 "parser_cocci_menhir.ml"
         ) = Obj.magic r in
         let _startpos = _startpos_r_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_ctype = 
-# 734 "parser_cocci_menhir.mly"
+# 722 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,None)) )
 # 7585 "parser_cocci_menhir.ml"
          in
@@ -7610,20 +7637,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7616 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7622 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let _startpos = _startpos_lp_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_ctype = 
-# 736 "parser_cocci_menhir.mly"
+# 724 "parser_cocci_menhir.mly"
     ( let (mids,code) = t in
       Ast0.wrap
        (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) )
@@ -7655,7 +7682,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_d_ident = 
-# 1346 "parser_cocci_menhir.mly"
+# 1334 "parser_cocci_menhir.mly"
       ( (_1, function t -> P.arrayify t _2) )
 # 7661 "parser_cocci_menhir.ml"
          in
@@ -7679,7 +7706,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_dargexpr = 
-# 1484 "parser_cocci_menhir.mly"
+# 1472 "parser_cocci_menhir.mly"
                                              ( _1 )
 # 7685 "parser_cocci_menhir.ml"
          in
@@ -7715,7 +7742,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_t_ in
         let _endpos = _endpos_a_ in
         let _v : 'tv_decl = 
-# 1074 "parser_cocci_menhir.mly"
+# 1062 "parser_cocci_menhir.mly"
  ( let t = P.arrayify t a in Ast0.wrap(Ast0.Param(t, Some i)) )
 # 7721 "parser_cocci_menhir.ml"
          in
@@ -7739,7 +7766,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_t_ in
         let _endpos = _endpos_t_ in
         let _v : 'tv_decl = 
-# 1075 "parser_cocci_menhir.mly"
+# 1063 "parser_cocci_menhir.mly"
               ( (*verify in FunDecl*) Ast0.wrap(Ast0.Param(t, None)) )
 # 7745 "parser_cocci_menhir.ml"
          in
@@ -7795,29 +7822,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let rp1 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7801 "parser_cocci_menhir.ml"
         ) = Obj.magic rp1 in
         let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
         let lp1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7807 "parser_cocci_menhir.ml"
         ) = Obj.magic lp1 in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7812 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let i : 'tv_disj_ident = Obj.magic i in
         let s : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7818 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 7823 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
@@ -7825,7 +7852,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_t_ in
         let _endpos = _endpos_rp1_ in
         let _v : 'tv_decl = 
-# 1078 "parser_cocci_menhir.mly"
+# 1066 "parser_cocci_menhir.mly"
         ( let fnptr =
          Ast0.wrap
            (Ast0.FunctionPointer
@@ -7851,14 +7878,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 134 "parser_cocci_menhir.mly"
+# 108 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 7857 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl = 
-# 1085 "parser_cocci_menhir.mly"
+# 1073 "parser_cocci_menhir.mly"
  ( let (nm,pure,clt) = _1 in
        Ast0.wrap(Ast0.MetaParam(P.clt2mcode nm clt,pure)) )
 # 7865 "parser_cocci_menhir.ml"
@@ -7880,14 +7907,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 7886 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl = 
-# 1087 "parser_cocci_menhir.mly"
+# 1075 "parser_cocci_menhir.mly"
             ( tmeta_to_param _1 )
 # 7893 "parser_cocci_menhir.ml"
          in
@@ -7908,14 +7935,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 7914 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl_ident = 
-# 2063 "parser_cocci_menhir.mly"
+# 2051 "parser_cocci_menhir.mly"
          ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
 # 7921 "parser_cocci_menhir.ml"
          in
@@ -7936,14 +7963,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 132 "parser_cocci_menhir.mly"
+# 106 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
 # 7942 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl_ident = 
-# 2065 "parser_cocci_menhir.mly"
+# 2053 "parser_cocci_menhir.mly"
          ( let (nm,constraints,pure,clt) = _1 in
          Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,Ast.NoVal,pure)) )
 # 7950 "parser_cocci_menhir.ml"
@@ -7968,7 +7995,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl_list_decl_ = 
-# 2087 "parser_cocci_menhir.mly"
+# 2075 "parser_cocci_menhir.mly"
      ( Ast0.wrap
         (Ast0.DOTS
            (_1
@@ -7996,7 +8023,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl_list_name_opt_decl_ = 
-# 2087 "parser_cocci_menhir.mly"
+# 2075 "parser_cocci_menhir.mly"
      ( Ast0.wrap
         (Ast0.DOTS
            (_1
@@ -8021,14 +8048,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 134 "parser_cocci_menhir.mly"
+# 108 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 8027 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl_statement = 
-# 1410 "parser_cocci_menhir.mly"
+# 1398 "parser_cocci_menhir.mly"
       ( let (nm,pure,clt) = _1 in
       [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] )
 # 8035 "parser_cocci_menhir.ml"
@@ -8053,7 +8080,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl_statement = 
-# 1413 "parser_cocci_menhir.mly"
+# 1401 "parser_cocci_menhir.mly"
       ( List.map
          (function x ->
            Ast0.wrap
@@ -8081,7 +8108,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl_statement = 
-# 1418 "parser_cocci_menhir.mly"
+# 1406 "parser_cocci_menhir.mly"
               ( [_1] )
 # 8087 "parser_cocci_menhir.ml"
          in
@@ -8112,20 +8139,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8118 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let t : 'tv_midzero_list_fun_start_fun_start_ = Obj.magic t in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8124 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_decl_statement = 
-# 1427 "parser_cocci_menhir.mly"
+# 1415 "parser_cocci_menhir.mly"
       ( let (mids,code) = t in
        if List.for_all
            (function x ->
@@ -8154,14 +8181,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 134 "parser_cocci_menhir.mly"
+# 108 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 8160 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl_statement_expr = 
-# 1440 "parser_cocci_menhir.mly"
+# 1428 "parser_cocci_menhir.mly"
       ( let (nm,pure,clt) = _1 in
       [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] )
 # 8168 "parser_cocci_menhir.ml"
@@ -8186,7 +8213,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl_statement_expr = 
-# 1443 "parser_cocci_menhir.mly"
+# 1431 "parser_cocci_menhir.mly"
       ( List.map
          (function x ->
            Ast0.wrap
@@ -8214,7 +8241,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl_statement_expr = 
-# 1448 "parser_cocci_menhir.mly"
+# 1436 "parser_cocci_menhir.mly"
               ( [_1] )
 # 8220 "parser_cocci_menhir.ml"
          in
@@ -8245,20 +8272,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8251 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let t : 'tv_midzero_list_fun_after_stm_fun_after_dots_or_ = Obj.magic t in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8257 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_decl_statement_expr = 
-# 1457 "parser_cocci_menhir.mly"
+# 1445 "parser_cocci_menhir.mly"
       ( let (mids,code) = t in
        if List.for_all (function [] -> true | _ -> false) code
       then []
@@ -8291,7 +8318,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8297 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
@@ -8299,7 +8326,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_t_ in
         let _endpos = _endpos_pv_ in
         let _v : 'tv_decl_var = 
-# 1220 "parser_cocci_menhir.mly"
+# 1208 "parser_cocci_menhir.mly"
       ( [Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv))] )
 # 8305 "parser_cocci_menhir.ml"
          in
@@ -8320,14 +8347,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 8326 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_decl_var = 
-# 1221 "parser_cocci_menhir.mly"
+# 1209 "parser_cocci_menhir.mly"
               ( [P.meta_decl _1] )
 # 8333 "parser_cocci_menhir.ml"
          in
@@ -8358,7 +8385,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8364 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
@@ -8374,7 +8401,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1223 "parser_cocci_menhir.mly"
+# 1211 "parser_cocci_menhir.mly"
       ( List.map
          (function (id,fn) ->
            Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)))
@@ -8413,7 +8440,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8419 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
@@ -8431,7 +8458,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1223 "parser_cocci_menhir.mly"
+# 1211 "parser_cocci_menhir.mly"
       ( List.map
          (function (id,fn) ->
            Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)))
@@ -8458,7 +8485,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_f_ in
         let _endpos = _endpos_f_ in
         let _v : 'tv_decl_var = 
-# 1227 "parser_cocci_menhir.mly"
+# 1215 "parser_cocci_menhir.mly"
                ( [f] )
 # 8464 "parser_cocci_menhir.ml"
          in
@@ -8499,13 +8526,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8505 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8511 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
@@ -8521,7 +8548,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1229 "parser_cocci_menhir.mly"
+# 1217 "parser_cocci_menhir.mly"
       (let (id,fn) = d in
       [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))])
 # 8528 "parser_cocci_menhir.ml"
@@ -8568,13 +8595,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8574 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8580 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
@@ -8592,7 +8619,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1229 "parser_cocci_menhir.mly"
+# 1217 "parser_cocci_menhir.mly"
       (let (id,fn) = d in
       [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))])
 # 8599 "parser_cocci_menhir.ml"
@@ -8624,7 +8651,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8630 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
@@ -8647,7 +8674,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1234 "parser_cocci_menhir.mly"
+# 1222 "parser_cocci_menhir.mly"
       ( List.map
          (function (id,fn) ->
            let idtype =
@@ -8688,7 +8715,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8694 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
@@ -8713,7 +8740,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1234 "parser_cocci_menhir.mly"
+# 1222 "parser_cocci_menhir.mly"
       ( List.map
          (function (id,fn) ->
            let idtype =
@@ -8754,7 +8781,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8760 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
@@ -8779,7 +8806,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1234 "parser_cocci_menhir.mly"
+# 1222 "parser_cocci_menhir.mly"
       ( List.map
          (function (id,fn) ->
            let idtype =
@@ -8825,7 +8852,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8831 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
@@ -8852,7 +8879,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1234 "parser_cocci_menhir.mly"
+# 1222 "parser_cocci_menhir.mly"
       ( List.map
          (function (id,fn) ->
            let idtype =
@@ -8898,13 +8925,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8904 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8910 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
@@ -8927,7 +8954,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1242 "parser_cocci_menhir.mly"
+# 1230 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
       !Data.add_type_name (P.id2name i);
       let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
@@ -8977,13 +9004,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8983 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 8989 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
@@ -9008,7 +9035,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1242 "parser_cocci_menhir.mly"
+# 1230 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
       !Data.add_type_name (P.id2name i);
       let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
@@ -9058,13 +9085,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9064 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9070 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
@@ -9089,7 +9116,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1242 "parser_cocci_menhir.mly"
+# 1230 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
       !Data.add_type_name (P.id2name i);
       let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
@@ -9144,13 +9171,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9150 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9156 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
@@ -9177,7 +9204,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1242 "parser_cocci_menhir.mly"
+# 1230 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
       !Data.add_type_name (P.id2name i);
       let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
@@ -9242,34 +9269,34 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9248 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let rp2 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9253 "parser_cocci_menhir.ml"
         ) = Obj.magic rp2 in
         let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
         let lp2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9259 "parser_cocci_menhir.ml"
         ) = Obj.magic lp2 in
         let rp1 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9264 "parser_cocci_menhir.ml"
         ) = Obj.magic rp1 in
         let d : 'tv_d_ident = Obj.magic d in
         let st : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9270 "parser_cocci_menhir.ml"
         ) = Obj.magic st in
         let lp1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9275 "parser_cocci_menhir.ml"
         ) = Obj.magic lp1 in
@@ -9284,7 +9311,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1252 "parser_cocci_menhir.mly"
+# 1240 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         let t =
          Ast0.wrap
@@ -9356,34 +9383,34 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9362 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let rp2 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9367 "parser_cocci_menhir.ml"
         ) = Obj.magic rp2 in
         let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
         let lp2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9373 "parser_cocci_menhir.ml"
         ) = Obj.magic lp2 in
         let rp1 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9378 "parser_cocci_menhir.ml"
         ) = Obj.magic rp1 in
         let d : 'tv_d_ident = Obj.magic d in
         let st : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9384 "parser_cocci_menhir.ml"
         ) = Obj.magic st in
         let lp1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9389 "parser_cocci_menhir.ml"
         ) = Obj.magic lp1 in
@@ -9400,7 +9427,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1252 "parser_cocci_menhir.mly"
+# 1240 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         let t =
          Ast0.wrap
@@ -9447,18 +9474,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _5 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9453 "parser_cocci_menhir.ml"
         ) = Obj.magic _5 in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9458 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9464 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -9466,7 +9493,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : 'tv_decl_var = 
-# 1260 "parser_cocci_menhir.mly"
+# 1248 "parser_cocci_menhir.mly"
       ( [Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3,
                                  P.clt2mcode ")" _4,P.clt2mcode ";" _5))] )
 # 9473 "parser_cocci_menhir.ml"
@@ -9518,24 +9545,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _7 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9524 "parser_cocci_menhir.ml"
         ) = Obj.magic _7 in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9530 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9535 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9541 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -9543,7 +9570,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : 'tv_decl_var = 
-# 1263 "parser_cocci_menhir.mly"
+# 1251 "parser_cocci_menhir.mly"
       ( [Ast0.wrap
            (Ast0.MacroDeclInit
               (_1,P.clt2mcode "(" _2,_3,
@@ -9618,40 +9645,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9624 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9630 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
         let rp2 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9635 "parser_cocci_menhir.ml"
         ) = Obj.magic rp2 in
         let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
         let lp2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9641 "parser_cocci_menhir.ml"
         ) = Obj.magic lp2 in
         let rp1 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9646 "parser_cocci_menhir.ml"
         ) = Obj.magic rp1 in
         let d : 'tv_d_ident = Obj.magic d in
         let st : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9652 "parser_cocci_menhir.ml"
         ) = Obj.magic st in
         let lp1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9657 "parser_cocci_menhir.ml"
         ) = Obj.magic lp1 in
@@ -9666,7 +9693,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1272 "parser_cocci_menhir.mly"
+# 1260 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         let t =
          Ast0.wrap
@@ -9748,40 +9775,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9754 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9760 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
         let rp2 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9765 "parser_cocci_menhir.ml"
         ) = Obj.magic rp2 in
         let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
         let lp2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9771 "parser_cocci_menhir.ml"
         ) = Obj.magic lp2 in
         let rp1 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9776 "parser_cocci_menhir.ml"
         ) = Obj.magic rp1 in
         let d : 'tv_d_ident = Obj.magic d in
         let st : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9782 "parser_cocci_menhir.ml"
         ) = Obj.magic st in
         let lp1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9787 "parser_cocci_menhir.ml"
         ) = Obj.magic lp1 in
@@ -9798,7 +9825,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1272 "parser_cocci_menhir.mly"
+# 1260 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         let t =
          Ast0.wrap
@@ -9840,21 +9867,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9846 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let id : 'tv_comma_list_typedef_ident_ = Obj.magic id in
         let t : 'tv_typedef_ctype = Obj.magic t in
         let s : (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
 # 9853 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_pv_ in
         let _v : 'tv_decl_var = 
-# 1280 "parser_cocci_menhir.mly"
+# 1268 "parser_cocci_menhir.mly"
       ( let s = P.clt2mcode "typedef" s in
         List.map
          (function id ->
@@ -9882,7 +9909,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_define_param_list_option = 
-# 997 "parser_cocci_menhir.mly"
+# 985 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.DOTS
             (_1
@@ -9907,14 +9934,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 153 "parser_cocci_menhir.mly"
+# 127 "parser_cocci_menhir.mly"
        (Data.clt * token)
 # 9913 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_defineop = 
-# 941 "parser_cocci_menhir.mly"
+# 929 "parser_cocci_menhir.mly"
     ( let (clt,ident) = _1 in
       let aft = P.get_aft clt in (* move stuff after the define to the ident *)
       function body ->
@@ -9967,20 +9994,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 9973 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_define_param_list_option = Obj.magic _2 in
         let _1 : (
-# 154 "parser_cocci_menhir.mly"
+# 128 "parser_cocci_menhir.mly"
        (Data.clt * token * int * int)
 # 9979 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_defineop = 
-# 965 "parser_cocci_menhir.mly"
+# 953 "parser_cocci_menhir.mly"
     ( let (clt,ident,parenoff,parencol) = _1 in
       let aft = P.get_aft clt in (* move stuff after the define to the ( *)
       (* clt is the start of the #define itself *)
@@ -10025,14 +10052,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 114 "parser_cocci_menhir.mly"
+# 88 "parser_cocci_menhir.mly"
       (string)
 # 10031 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_dep = 
-# 299 "parser_cocci_menhir.mly"
+# 273 "parser_cocci_menhir.mly"
                    ( Ast0.Dep _1 )
 # 10038 "parser_cocci_menhir.ml"
          in
@@ -10057,14 +10084,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 114 "parser_cocci_menhir.mly"
+# 88 "parser_cocci_menhir.mly"
       (string)
 # 10063 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_dep = 
-# 300 "parser_cocci_menhir.mly"
+# 274 "parser_cocci_menhir.mly"
                    ( Ast0.AntiDep (Ast0.Dep _2) )
 # 10070 "parser_cocci_menhir.ml"
          in
@@ -10100,7 +10127,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_dep = 
-# 302 "parser_cocci_menhir.mly"
+# 276 "parser_cocci_menhir.mly"
                    ( Ast0.AntiDep _3 )
 # 10106 "parser_cocci_menhir.ml"
          in
@@ -10125,14 +10152,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 114 "parser_cocci_menhir.mly"
+# 88 "parser_cocci_menhir.mly"
       (string)
 # 10131 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_dep = 
-# 303 "parser_cocci_menhir.mly"
+# 277 "parser_cocci_menhir.mly"
                    ( Ast0.EverDep _2 )
 # 10138 "parser_cocci_menhir.ml"
          in
@@ -10157,14 +10184,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 114 "parser_cocci_menhir.mly"
+# 88 "parser_cocci_menhir.mly"
       (string)
 # 10163 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_dep = 
-# 304 "parser_cocci_menhir.mly"
+# 278 "parser_cocci_menhir.mly"
                    ( Ast0.NeverDep _2 )
 # 10170 "parser_cocci_menhir.ml"
          in
@@ -10198,7 +10225,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_dep = 
-# 305 "parser_cocci_menhir.mly"
+# 279 "parser_cocci_menhir.mly"
                    ( Ast0.AndDep(_1, _3) )
 # 10204 "parser_cocci_menhir.ml"
          in
@@ -10232,7 +10259,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_dep = 
-# 306 "parser_cocci_menhir.mly"
+# 280 "parser_cocci_menhir.mly"
                    ( Ast0.OrDep (_1, _3) )
 # 10238 "parser_cocci_menhir.ml"
          in
@@ -10264,7 +10291,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_dep = 
-# 307 "parser_cocci_menhir.mly"
+# 281 "parser_cocci_menhir.mly"
                    ( _2 )
 # 10270 "parser_cocci_menhir.ml"
          in
@@ -10281,7 +10308,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_depends = 
-# 295 "parser_cocci_menhir.mly"
+# 269 "parser_cocci_menhir.mly"
                            ( Ast0.NoDep )
 # 10287 "parser_cocci_menhir.ml"
          in
@@ -10313,7 +10340,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_parents_ in
         let _v : 'tv_depends = 
-# 296 "parser_cocci_menhir.mly"
+# 270 "parser_cocci_menhir.mly"
                            ( parents )
 # 10319 "parser_cocci_menhir.ml"
          in
@@ -10340,14 +10367,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_disj_ident = Obj.magic _2 in
         let _1 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10346 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_designator = 
-# 1396 "parser_cocci_menhir.mly"
+# 1384 "parser_cocci_menhir.mly"
      ( Ast0.DesignatorField (P.clt2mcode "." _1,_2) )
 # 10353 "parser_cocci_menhir.ml"
          in
@@ -10378,20 +10405,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10384 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_eexpr = Obj.magic _2 in
         let _1 : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10390 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_designator = 
-# 1398 "parser_cocci_menhir.mly"
+# 1386 "parser_cocci_menhir.mly"
      ( Ast0.DesignatorIndex (P.clt2mcode "[" _1,_2,P.clt2mcode "]" _3) )
 # 10397 "parser_cocci_menhir.ml"
          in
@@ -10432,26 +10459,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _5 : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10438 "parser_cocci_menhir.ml"
         ) = Obj.magic _5 in
         let _4 : 'tv_eexpr = Obj.magic _4 in
         let _3 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10444 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_eexpr = Obj.magic _2 in
         let _1 : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10450 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : 'tv_designator = 
-# 1400 "parser_cocci_menhir.mly"
+# 1388 "parser_cocci_menhir.mly"
      ( Ast0.DesignatorRange (P.clt2mcode "[" _1,_2,P.clt2mcode "..." _3,
                             _4,P.clt2mcode "]" _5) )
 # 10458 "parser_cocci_menhir.ml"
@@ -10476,7 +10503,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_dexpr = 
-# 1483 "parser_cocci_menhir.mly"
+# 1471 "parser_cocci_menhir.mly"
                                               ( _1 )
 # 10482 "parser_cocci_menhir.ml"
          in
@@ -10504,7 +10531,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_disable = 
-# 313 "parser_cocci_menhir.mly"
+# 287 "parser_cocci_menhir.mly"
                                                       ( List.map P.id2name _2 )
 # 10510 "parser_cocci_menhir.ml"
          in
@@ -10528,7 +10555,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_disj_ident = 
-# 2051 "parser_cocci_menhir.mly"
+# 2039 "parser_cocci_menhir.mly"
               ( _1 )
 # 10534 "parser_cocci_menhir.ml"
          in
@@ -10559,20 +10586,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10565 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_midzero_list_disj_ident_disj_ident_ = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10571 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let _startpos = _startpos_lp_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_disj_ident = 
-# 2053 "parser_cocci_menhir.mly"
+# 2041 "parser_cocci_menhir.mly"
   ( let (mids,code) = t in
         Ast0.wrap
           (Ast0.DisjId(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) )
@@ -10595,14 +10622,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10601 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_dot_expressions = 
-# 1493 "parser_cocci_menhir.mly"
+# 1481 "parser_cocci_menhir.mly"
             ( Ast0.wrap(Ast0.Edots(P.clt2mcode "..." _1,None)) )
 # 10608 "parser_cocci_menhir.ml"
          in
@@ -10626,7 +10653,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_dot_expressions = 
-# 1494 "parser_cocci_menhir.mly"
+# 1482 "parser_cocci_menhir.mly"
                    ( _1 )
 # 10632 "parser_cocci_menhir.ml"
          in
@@ -10650,7 +10677,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_dparam = 
-# 993 "parser_cocci_menhir.mly"
+# 981 "parser_cocci_menhir.mly"
                ( Ast0.wrap(Ast0.DParam _1) )
 # 10656 "parser_cocci_menhir.ml"
          in
@@ -10674,7 +10701,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_eargexpr = 
-# 1481 "parser_cocci_menhir.mly"
+# 1469 "parser_cocci_menhir.mly"
                                             ( _1 )
 # 10680 "parser_cocci_menhir.ml"
          in
@@ -10695,14 +10722,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10701 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : 'tv_edots_when_TEllipsis_eexpr_ = 
-# 2373 "parser_cocci_menhir.mly"
+# 2361 "parser_cocci_menhir.mly"
                                                   ( (d,None) )
 # 10708 "parser_cocci_menhir.ml"
          in
@@ -10741,14 +10768,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let w : 'tv_eexpr = Obj.magic w in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10747 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos__5_ in
         let _v : 'tv_edots_when_TEllipsis_eexpr_ = 
-# 2374 "parser_cocci_menhir.mly"
+# 2362 "parser_cocci_menhir.mly"
                                                   ( (d,Some w) )
 # 10754 "parser_cocci_menhir.ml"
          in
@@ -10769,14 +10796,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10775 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : 'tv_edots_when_TEllipsis_enum_decl_one_ = 
-# 2373 "parser_cocci_menhir.mly"
+# 2361 "parser_cocci_menhir.mly"
                                                   ( (d,None) )
 # 10782 "parser_cocci_menhir.ml"
          in
@@ -10815,14 +10842,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let w : 'tv_enum_decl_one = Obj.magic w in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10821 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos__5_ in
         let _v : 'tv_edots_when_TEllipsis_enum_decl_one_ = 
-# 2374 "parser_cocci_menhir.mly"
+# 2362 "parser_cocci_menhir.mly"
                                                   ( (d,Some w) )
 # 10828 "parser_cocci_menhir.ml"
          in
@@ -10843,14 +10870,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10849 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : 'tv_edots_when_TEllipsis_initialize_ = 
-# 2373 "parser_cocci_menhir.mly"
+# 2361 "parser_cocci_menhir.mly"
                                                   ( (d,None) )
 # 10856 "parser_cocci_menhir.ml"
          in
@@ -10889,14 +10916,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let w : 'tv_initialize = Obj.magic w in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10895 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos__5_ in
         let _v : 'tv_edots_when_TEllipsis_initialize_ = 
-# 2374 "parser_cocci_menhir.mly"
+# 2362 "parser_cocci_menhir.mly"
                                                   ( (d,Some w) )
 # 10902 "parser_cocci_menhir.ml"
          in
@@ -10917,14 +10944,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10923 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : 'tv_edots_when_TEllipsis_struct_decl_one_ = 
-# 2373 "parser_cocci_menhir.mly"
+# 2361 "parser_cocci_menhir.mly"
                                                   ( (d,None) )
 # 10930 "parser_cocci_menhir.ml"
          in
@@ -10963,14 +10990,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let w : 'tv_struct_decl_one = Obj.magic w in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
 # 10969 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos__5_ in
         let _v : 'tv_edots_when_TEllipsis_struct_decl_one_ = 
-# 2374 "parser_cocci_menhir.mly"
+# 2362 "parser_cocci_menhir.mly"
                                                   ( (d,Some w) )
 # 10976 "parser_cocci_menhir.ml"
          in
@@ -10994,7 +11021,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_eexpr = 
-# 1480 "parser_cocci_menhir.mly"
+# 1468 "parser_cocci_menhir.mly"
                                              ( _1 )
 # 11000 "parser_cocci_menhir.ml"
          in
@@ -11018,7 +11045,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_eexpr_list_option = 
-# 2353 "parser_cocci_menhir.mly"
+# 2341 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.DOTS
             (_1
@@ -11039,7 +11066,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_empty_list_start_aexpr_TEllipsis_ = 
-# 2115 "parser_cocci_menhir.mly"
+# 2103 "parser_cocci_menhir.mly"
               ( fun build_dots build_comma -> [] )
 # 11045 "parser_cocci_menhir.ml"
          in
@@ -11063,7 +11090,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_empty_list_start_aexpr_TEllipsis_ = 
-# 2116 "parser_cocci_menhir.mly"
+# 2104 "parser_cocci_menhir.mly"
                                    ( _1 )
 # 11069 "parser_cocci_menhir.ml"
          in
@@ -11080,7 +11107,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_empty_list_start_dparam_TEllipsis_ = 
-# 2115 "parser_cocci_menhir.mly"
+# 2103 "parser_cocci_menhir.mly"
               ( fun build_dots build_comma -> [] )
 # 11086 "parser_cocci_menhir.ml"
          in
@@ -11104,7 +11131,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_empty_list_start_dparam_TEllipsis_ = 
-# 2116 "parser_cocci_menhir.mly"
+# 2104 "parser_cocci_menhir.mly"
                                    ( _1 )
 # 11110 "parser_cocci_menhir.ml"
          in
@@ -11121,7 +11148,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_empty_list_start_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2115 "parser_cocci_menhir.mly"
+# 2103 "parser_cocci_menhir.mly"
               ( fun build_dots build_comma -> [] )
 # 11127 "parser_cocci_menhir.ml"
          in
@@ -11145,7 +11172,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_empty_list_start_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2116 "parser_cocci_menhir.mly"
+# 2104 "parser_cocci_menhir.mly"
                                    ( _1 )
 # 11151 "parser_cocci_menhir.ml"
          in
@@ -11162,7 +11189,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_empty_list_start_one_dec_decl__TEllipsis_ = 
-# 2115 "parser_cocci_menhir.mly"
+# 2103 "parser_cocci_menhir.mly"
               ( fun build_dots build_comma -> [] )
 # 11168 "parser_cocci_menhir.ml"
          in
@@ -11186,7 +11213,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_empty_list_start_one_dec_decl__TEllipsis_ = 
-# 2116 "parser_cocci_menhir.mly"
+# 2104 "parser_cocci_menhir.mly"
                                    ( _1 )
 # 11192 "parser_cocci_menhir.ml"
          in
@@ -11203,7 +11230,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_empty_list_start_one_dec_name_opt_decl__TEllipsis_ = 
-# 2115 "parser_cocci_menhir.mly"
+# 2103 "parser_cocci_menhir.mly"
               ( fun build_dots build_comma -> [] )
 # 11209 "parser_cocci_menhir.ml"
          in
@@ -11227,7 +11254,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_empty_list_start_one_dec_name_opt_decl__TEllipsis_ = 
-# 2116 "parser_cocci_menhir.mly"
+# 2104 "parser_cocci_menhir.mly"
                                    ( _1 )
 # 11233 "parser_cocci_menhir.ml"
          in
@@ -11251,7 +11278,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_enum_decl_list = 
-# 839 "parser_cocci_menhir.mly"
+# 827 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.DOTS(_1 P.mkedots (fun c -> Ast0.EComma c))) )
 # 11257 "parser_cocci_menhir.ml"
          in
@@ -11275,7 +11302,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_enum_decl_one = 
-# 810 "parser_cocci_menhir.mly"
+# 798 "parser_cocci_menhir.mly"
                     ( Ast0.wrap(Ast0.Ident(_1)) )
 # 11281 "parser_cocci_menhir.ml"
          in
@@ -11307,7 +11334,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_enum_val = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 11313 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -11315,7 +11342,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_enum_decl_one = 
-# 812 "parser_cocci_menhir.mly"
+# 800 "parser_cocci_menhir.mly"
  ( let id = Ast0.wrap(Ast0.Ident(_1)) in
        Ast0.wrap
          (Ast0.Assignment
@@ -11343,7 +11370,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_enum_val = 
-# 819 "parser_cocci_menhir.mly"
+# 807 "parser_cocci_menhir.mly"
             ( Ast0.wrap(Ast0.Ident(_1)) )
 # 11349 "parser_cocci_menhir.ml"
          in
@@ -11364,14 +11391,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 11370 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_enum_val = 
-# 821 "parser_cocci_menhir.mly"
+# 809 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
 # 11378 "parser_cocci_menhir.ml"
@@ -11393,14 +11420,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 11399 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_enum_val = 
-# 823 "parser_cocci_menhir.mly"
+# 811 "parser_cocci_menhir.mly"
          ( tmeta_to_exp _1 )
 # 11406 "parser_cocci_menhir.ml"
          in
@@ -11421,14 +11448,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
 # 11427 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_enum_val = 
-# 825 "parser_cocci_menhir.mly"
+# 813 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
@@ -11451,14 +11478,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
 # 11457 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_enum_val = 
-# 829 "parser_cocci_menhir.mly"
+# 817 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
@@ -11481,14 +11508,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
 # 11487 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_enum_val = 
-# 833 "parser_cocci_menhir.mly"
+# 821 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
@@ -11512,7 +11539,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_exists = 
-# 316 "parser_cocci_menhir.mly"
+# 290 "parser_cocci_menhir.mly"
           ( Ast.Exists )
 # 11518 "parser_cocci_menhir.ml"
          in
@@ -11534,7 +11561,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_exists = 
-# 317 "parser_cocci_menhir.mly"
+# 291 "parser_cocci_menhir.mly"
           ( Ast.Forall )
 # 11540 "parser_cocci_menhir.ml"
          in
@@ -11551,7 +11578,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_exists = 
-# 318 "parser_cocci_menhir.mly"
+# 292 "parser_cocci_menhir.mly"
           ( Ast.Undetermined )
 # 11557 "parser_cocci_menhir.ml"
          in
@@ -11575,7 +11602,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_expr = 
-# 1478 "parser_cocci_menhir.mly"
+# 1466 "parser_cocci_menhir.mly"
                                 ( _1 )
 # 11581 "parser_cocci_menhir.ml"
          in
@@ -11599,7 +11626,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_r_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_expr_dots_TEllipsis_ = 
-# 1751 "parser_cocci_menhir.mly"
+# 1739 "parser_cocci_menhir.mly"
                                                        ( r )
 # 11605 "parser_cocci_menhir.ml"
          in
@@ -11623,7 +11650,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_m_ in
         let _endpos = _endpos_m_ in
         let _v : 'tv_expression_type = 
-# 577 "parser_cocci_menhir.mly"
+# 565 "parser_cocci_menhir.mly"
                         ( P.ty_pointerify Type_cocci.Unknown m )
 # 11629 "parser_cocci_menhir.ml"
          in
@@ -11651,7 +11678,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_m_ in
         let _v : 'tv_expression_type = 
-# 579 "parser_cocci_menhir.mly"
+# 567 "parser_cocci_menhir.mly"
     ( P.ty_pointerify (Type_cocci.EnumName Type_cocci.NoName) m )
 # 11657 "parser_cocci_menhir.ml"
          in
@@ -11679,7 +11706,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_m_ in
         let _v : 'tv_expression_type = 
-# 581 "parser_cocci_menhir.mly"
+# 569 "parser_cocci_menhir.mly"
     ( P.ty_pointerify
        (Type_cocci.StructUnionName (Type_cocci.Struct,Type_cocci.NoName)) m )
 # 11686 "parser_cocci_menhir.ml"
@@ -11708,7 +11735,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_m_ in
         let _v : 'tv_expression_type = 
-# 584 "parser_cocci_menhir.mly"
+# 572 "parser_cocci_menhir.mly"
     ( P.ty_pointerify
        (Type_cocci.StructUnionName (Type_cocci.Union,Type_cocci.NoName)) m )
 # 11715 "parser_cocci_menhir.ml"
@@ -11726,7 +11753,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_extends = 
-# 290 "parser_cocci_menhir.mly"
+# 264 "parser_cocci_menhir.mly"
                                                   ( () )
 # 11732 "parser_cocci_menhir.ml"
          in
@@ -11751,14 +11778,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let parent : (
-# 114 "parser_cocci_menhir.mly"
+# 88 "parser_cocci_menhir.mly"
       (string)
 # 11757 "parser_cocci_menhir.ml"
         ) = Obj.magic parent in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_parent_ in
         let _v : 'tv_extends = 
-# 292 "parser_cocci_menhir.mly"
+# 266 "parser_cocci_menhir.mly"
     ( !Data.install_bindings (parent) )
 # 11764 "parser_cocci_menhir.ml"
          in
@@ -11784,19 +11811,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 155 "parser_cocci_menhir.mly"
+# 129 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 11790 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 155 "parser_cocci_menhir.mly"
+# 129 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 11795 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_filespec = 
-# 876 "parser_cocci_menhir.mly"
+# 864 "parser_cocci_menhir.mly"
     ( [Ast0.wrap
          (Ast0.FILEINFO(P.id2mcode _1,
                         P.id2mcode _2))] )
@@ -11822,7 +11849,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_fn_ident = 
-# 2026 "parser_cocci_menhir.mly"
+# 2014 "parser_cocci_menhir.mly"
                      ( _1 )
 # 11828 "parser_cocci_menhir.ml"
          in
@@ -11843,14 +11870,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 131 "parser_cocci_menhir.mly"
+# 105 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
 # 11849 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_fn_ident = 
-# 2028 "parser_cocci_menhir.mly"
+# 2016 "parser_cocci_menhir.mly"
          ( let (nm,constraints,pure,clt) = _1 in
         Ast0.wrap(Ast0.MetaFunc(P.clt2mcode nm clt,constraints,pure)) )
 # 11857 "parser_cocci_menhir.ml"
@@ -11872,14 +11899,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 131 "parser_cocci_menhir.mly"
+# 105 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
 # 11878 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_fn_ident = 
-# 2031 "parser_cocci_menhir.mly"
+# 2019 "parser_cocci_menhir.mly"
   ( let (nm,constraints,pure,clt) = _1 in
         Ast0.wrap
           (Ast0.MetaLocalFunc(P.clt2mcode nm clt,constraints,pure)) )
@@ -11898,7 +11925,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_fninfo = 
-# 1029 "parser_cocci_menhir.mly"
+# 1017 "parser_cocci_menhir.mly"
                 ( [] )
 # 11904 "parser_cocci_menhir.ml"
          in
@@ -11928,7 +11955,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fninfo = 
-# 1031 "parser_cocci_menhir.mly"
+# 1019 "parser_cocci_menhir.mly"
       ( try
        let _ =
          List.find (function Ast0.FStorage(_) -> true | _ -> false) _2 in
@@ -11962,7 +11989,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_t_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_fninfo = 
-# 1036 "parser_cocci_menhir.mly"
+# 1024 "parser_cocci_menhir.mly"
                         ( (Ast0.FType(t))::r )
 # 11968 "parser_cocci_menhir.ml"
          in
@@ -11989,14 +12016,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_fninfo = Obj.magic _2 in
         let _1 : (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
 # 11995 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fninfo = 
-# 1038 "parser_cocci_menhir.mly"
+# 1026 "parser_cocci_menhir.mly"
       ( try
        let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) _2 in
        raise (Semantic_cocci.Semantic "duplicate inline")
@@ -12026,14 +12053,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_fninfo = Obj.magic _2 in
         let _1 : (
-# 123 "parser_cocci_menhir.mly"
+# 97 "parser_cocci_menhir.mly"
       (string * Data.clt)
 # 12032 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fninfo = 
-# 1043 "parser_cocci_menhir.mly"
+# 1031 "parser_cocci_menhir.mly"
       ( try
        let _ = List.find (function Ast0.FAttr(_) -> true | _ -> false) _2 in
        raise (Semantic_cocci.Semantic "multiple attributes")
@@ -12053,7 +12080,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_fninfo_nt = 
-# 1049 "parser_cocci_menhir.mly"
+# 1037 "parser_cocci_menhir.mly"
                 ( [] )
 # 12059 "parser_cocci_menhir.ml"
          in
@@ -12083,7 +12110,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fninfo_nt = 
-# 1051 "parser_cocci_menhir.mly"
+# 1039 "parser_cocci_menhir.mly"
       ( try
        let _ =
          List.find (function Ast0.FStorage(_) -> true | _ -> false) _2 in
@@ -12114,14 +12141,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_fninfo_nt = Obj.magic _2 in
         let _1 : (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
 # 12120 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fninfo_nt = 
-# 1057 "parser_cocci_menhir.mly"
+# 1045 "parser_cocci_menhir.mly"
       ( try
        let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) _2 in
        raise (Semantic_cocci.Semantic "duplicate inline")
@@ -12151,14 +12178,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_fninfo_nt = Obj.magic _2 in
         let _1 : (
-# 123 "parser_cocci_menhir.mly"
+# 97 "parser_cocci_menhir.mly"
       (string * Data.clt)
 # 12157 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fninfo_nt = 
-# 1062 "parser_cocci_menhir.mly"
+# 1050 "parser_cocci_menhir.mly"
       ( try
        let _ = List.find (function Ast0.FAttr(_) -> true | _ -> false) _2 in
        raise (Semantic_cocci.Semantic "duplicate init")
@@ -12178,7 +12205,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_fun_after_dots = 
-# 2286 "parser_cocci_menhir.mly"
+# 2274 "parser_cocci_menhir.mly"
                                ([])
 # 12184 "parser_cocci_menhir.ml"
          in
@@ -12206,7 +12233,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fun_after_dots = 
-# 2287 "parser_cocci_menhir.mly"
+# 2275 "parser_cocci_menhir.mly"
                                (_2)
 # 12212 "parser_cocci_menhir.ml"
          in
@@ -12236,7 +12263,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fun_after_dots = 
-# 2288 "parser_cocci_menhir.mly"
+# 2276 "parser_cocci_menhir.mly"
                                (Ast0.wrap(Ast0.Exp(_1))::_2)
 # 12242 "parser_cocci_menhir.ml"
          in
@@ -12266,7 +12293,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fun_after_dots = 
-# 2289 "parser_cocci_menhir.mly"
+# 2277 "parser_cocci_menhir.mly"
                                     (_1@_2)
 # 12272 "parser_cocci_menhir.ml"
          in
@@ -12283,7 +12310,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_fun_after_dots_or = 
-# 2296 "parser_cocci_menhir.mly"
+# 2284 "parser_cocci_menhir.mly"
                                ([])
 # 12289 "parser_cocci_menhir.ml"
          in
@@ -12311,7 +12338,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fun_after_dots_or = 
-# 2297 "parser_cocci_menhir.mly"
+# 2285 "parser_cocci_menhir.mly"
                                (_2)
 # 12317 "parser_cocci_menhir.ml"
          in
@@ -12341,7 +12368,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fun_after_dots_or = 
-# 2298 "parser_cocci_menhir.mly"
+# 2286 "parser_cocci_menhir.mly"
                                (Ast0.wrap(Ast0.Exp(_1))::_2)
 # 12347 "parser_cocci_menhir.ml"
          in
@@ -12371,7 +12398,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fun_after_dots_or = 
-# 2299 "parser_cocci_menhir.mly"
+# 2287 "parser_cocci_menhir.mly"
                                     (_1@_2)
 # 12377 "parser_cocci_menhir.ml"
          in
@@ -12401,7 +12428,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fun_after_exp = 
-# 2292 "parser_cocci_menhir.mly"
+# 2280 "parser_cocci_menhir.mly"
                                (_1::_2)
 # 12407 "parser_cocci_menhir.ml"
          in
@@ -12418,7 +12445,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_fun_after_exp_or = 
-# 2302 "parser_cocci_menhir.mly"
+# 2290 "parser_cocci_menhir.mly"
                                ([])
 # 12424 "parser_cocci_menhir.ml"
          in
@@ -12448,7 +12475,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fun_after_exp_or = 
-# 2303 "parser_cocci_menhir.mly"
+# 2291 "parser_cocci_menhir.mly"
                                (_1::_2)
 # 12454 "parser_cocci_menhir.ml"
          in
@@ -12465,7 +12492,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_fun_after_stm = 
-# 2281 "parser_cocci_menhir.mly"
+# 2269 "parser_cocci_menhir.mly"
                                ([])
 # 12471 "parser_cocci_menhir.ml"
          in
@@ -12495,7 +12522,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fun_after_stm = 
-# 2282 "parser_cocci_menhir.mly"
+# 2270 "parser_cocci_menhir.mly"
                                (_1::_2)
 # 12501 "parser_cocci_menhir.ml"
          in
@@ -12525,7 +12552,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_fun_after_stm = 
-# 2283 "parser_cocci_menhir.mly"
+# 2271 "parser_cocci_menhir.mly"
                                (_1@_2)
 # 12531 "parser_cocci_menhir.ml"
          in
@@ -12549,7 +12576,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_fun_start = 
-# 2278 "parser_cocci_menhir.mly"
+# 2266 "parser_cocci_menhir.mly"
                  ( Ast0.wrap(Ast0.DOTS(_1)) )
 # 12555 "parser_cocci_menhir.ml"
          in
@@ -12573,7 +12600,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_func_ident = 
-# 2017 "parser_cocci_menhir.mly"
+# 2005 "parser_cocci_menhir.mly"
              ( _1 )
 # 12579 "parser_cocci_menhir.ml"
          in
@@ -12594,14 +12621,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 131 "parser_cocci_menhir.mly"
+# 105 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
 # 12600 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_func_ident = 
-# 2019 "parser_cocci_menhir.mly"
+# 2007 "parser_cocci_menhir.mly"
          ( let (nm,constraints,pure,clt) = _1 in
         Ast0.wrap(Ast0.MetaFunc(P.clt2mcode nm clt,constraints,pure)) )
 # 12608 "parser_cocci_menhir.ml"
@@ -12623,14 +12650,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 131 "parser_cocci_menhir.mly"
+# 105 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
 # 12629 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_func_ident = 
-# 2022 "parser_cocci_menhir.mly"
+# 2010 "parser_cocci_menhir.mly"
   ( let (nm,constraints,pure,clt) = _1 in
         Ast0.wrap
           (Ast0.MetaLocalFunc(P.clt2mcode nm clt,constraints,pure)) )
@@ -12692,24 +12719,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let rb : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
 # 12698 "parser_cocci_menhir.ml"
         ) = Obj.magic rb in
         let b : 'tv_fun_start = Obj.magic b in
         let lb : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
 # 12704 "parser_cocci_menhir.ml"
         ) = Obj.magic lb in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 12709 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let d : 'tv_decl_list_decl_ = Obj.magic d in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 12715 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
@@ -12718,7 +12745,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_f_ in
         let _endpos = _endpos_rb_ in
         let _v : 'tv_fundecl = 
-# 1020 "parser_cocci_menhir.mly"
+# 1008 "parser_cocci_menhir.mly"
       ( P.verify_parameter_declarations (Ast0.undots d);
        Ast0.wrap(Ast0.FunDecl((Ast0.default_info(),Ast0.context_befaft()),
                               f, i,
@@ -12770,18 +12797,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pt : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 12776 "parser_cocci_menhir.ml"
         ) = Obj.magic pt in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 12781 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 12787 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
@@ -12797,7 +12824,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1008 "parser_cocci_menhir.mly"
+# 996 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.UnInit
             (s,
@@ -12854,18 +12881,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pt : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 12860 "parser_cocci_menhir.ml"
         ) = Obj.magic pt in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
 # 12865 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 12871 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
@@ -12883,7 +12910,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
         in
         
-# 1008 "parser_cocci_menhir.mly"
+# 996 "parser_cocci_menhir.mly"
       ( Ast0.wrap
          (Ast0.UnInit
             (s,
@@ -12913,7 +12940,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_ident = 
-# 2036 "parser_cocci_menhir.mly"
+# 2024 "parser_cocci_menhir.mly"
          ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
 # 12919 "parser_cocci_menhir.ml"
          in
@@ -12937,7 +12964,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_ident = 
-# 2037 "parser_cocci_menhir.mly"
+# 2025 "parser_cocci_menhir.mly"
                          ( _1 )
 # 12943 "parser_cocci_menhir.ml"
          in
@@ -12958,14 +12985,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 130 "parser_cocci_menhir.mly"
+# 104 "parser_cocci_menhir.mly"
        (Parse_aux.midinfo)
 # 12964 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_ident = 
-# 2039 "parser_cocci_menhir.mly"
+# 2027 "parser_cocci_menhir.mly"
          ( let (nm,constraints,seed,pure,clt) = _1 in
          Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,seed,pure)) )
 # 12972 "parser_cocci_menhir.ml"
@@ -12990,7 +13017,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_i_ in
         let _endpos = _endpos_i_ in
         let _v : 'tv_ident_or_const = 
-# 1989 "parser_cocci_menhir.mly"
+# 1977 "parser_cocci_menhir.mly"
                     ( Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i)))) )
 # 12996 "parser_cocci_menhir.ml"
          in
@@ -13014,7 +13041,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_ident_or_const = 
-# 1990 "parser_cocci_menhir.mly"
+# 1978 "parser_cocci_menhir.mly"
                          ( Ast0.wrap(Ast0.Ident(_1)) )
 # 13020 "parser_cocci_menhir.ml"
          in
@@ -13035,14 +13062,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 13041 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_ident_or_const = 
-# 1992 "parser_cocci_menhir.mly"
+# 1980 "parser_cocci_menhir.mly"
   ( let (x,clt) = _1 in
         Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
 # 13049 "parser_cocci_menhir.ml"
@@ -13064,14 +13091,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 152 "parser_cocci_menhir.mly"
+# 126 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 13070 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_incl = 
-# 329 "parser_cocci_menhir.mly"
+# 303 "parser_cocci_menhir.mly"
                       ( let (x,_) = _1 in Data.Include(x) )
 # 13077 "parser_cocci_menhir.ml"
          in
@@ -13096,14 +13123,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 13102 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_incl = 
-# 330 "parser_cocci_menhir.mly"
+# 304 "parser_cocci_menhir.mly"
                       ( Data.Iso(Common.Left(P.id2name _2)) )
 # 13109 "parser_cocci_menhir.ml"
          in
@@ -13128,14 +13155,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 151 "parser_cocci_menhir.mly"
+# 125 "parser_cocci_menhir.mly"
        (string)
 # 13134 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_incl = 
-# 331 "parser_cocci_menhir.mly"
+# 305 "parser_cocci_menhir.mly"
                       ( Data.Iso(Common.Right _2) )
 # 13141 "parser_cocci_menhir.ml"
          in
@@ -13163,7 +13190,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_incl = 
-# 333 "parser_cocci_menhir.mly"
+# 307 "parser_cocci_menhir.mly"
     ( let names = List.map P.id2name _2 in
       Iteration.parsed_virtual_rules :=
        Common.union_set names !Iteration.parsed_virtual_rules;
@@ -13198,11 +13225,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 220 "parser_cocci_menhir.mly"
+# 194 "parser_cocci_menhir.mly"
       (Data.incl_iso list)
 # 13204 "parser_cocci_menhir.ml"
         ) = 
-# 325 "parser_cocci_menhir.mly"
+# 299 "parser_cocci_menhir.mly"
                        ( _1 )
 # 13208 "parser_cocci_menhir.ml"
          in
@@ -13230,11 +13257,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 220 "parser_cocci_menhir.mly"
+# 194 "parser_cocci_menhir.mly"
       (Data.incl_iso list)
 # 13236 "parser_cocci_menhir.ml"
         ) = 
-# 326 "parser_cocci_menhir.mly"
+# 300 "parser_cocci_menhir.mly"
                        ( _1 )
 # 13240 "parser_cocci_menhir.ml"
          in
@@ -13255,14 +13282,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 152 "parser_cocci_menhir.mly"
+# 126 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 13261 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_includes = 
-# 882 "parser_cocci_menhir.mly"
+# 870 "parser_cocci_menhir.mly"
     ( Ast0.wrap
              (Ast0.Include(P.clt2mcode "#include"
                              (P.drop_pos (P.drop_aft (P.id2clt _1))),
@@ -13292,14 +13319,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 152 "parser_cocci_menhir.mly"
+# 126 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 13298 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_includes = 
-# 893 "parser_cocci_menhir.mly"
+# 881 "parser_cocci_menhir.mly"
     ( Ast0.wrap
              (Ast0.Include(P.clt2mcode "#include"
                              (P.drop_pos (P.drop_aft (P.id2clt _1))),
@@ -13333,14 +13360,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _1 : (
-# 153 "parser_cocci_menhir.mly"
+# 127 "parser_cocci_menhir.mly"
        (Data.clt * token)
 # 13339 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_includes = 
-# 904 "parser_cocci_menhir.mly"
+# 892 "parser_cocci_menhir.mly"
     ( let (clt,ident) = _1 in
       let aft = P.get_aft clt in (* move stuff after the define to the ident *)
       Ast0.wrap
@@ -13386,7 +13413,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_d_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_includes = 
-# 924 "parser_cocci_menhir.mly"
+# 912 "parser_cocci_menhir.mly"
     ( d (Ast0.wrap(Ast0.DOTS([]))) )
 # 13392 "parser_cocci_menhir.ml"
          in
@@ -13420,7 +13447,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_d_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_includes = 
-# 926 "parser_cocci_menhir.mly"
+# 914 "parser_cocci_menhir.mly"
     ( let ty = Ast0.wrap(Ast0.TopExp(Ast0.wrap(Ast0.TypeExp(t)))) in
       d (Ast0.wrap(Ast0.DOTS([ty]))) )
 # 13427 "parser_cocci_menhir.ml"
@@ -13455,7 +13482,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_includes = 
-# 929 "parser_cocci_menhir.mly"
+# 917 "parser_cocci_menhir.mly"
     ( let body =
        match b with
          [e] ->
@@ -13487,7 +13514,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_initialize = 
-# 1352 "parser_cocci_menhir.mly"
+# 1340 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.InitExpr(_1)) )
 # 13493 "parser_cocci_menhir.ml"
          in
@@ -13518,20 +13545,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
 # 13524 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_initialize_list = Obj.magic _2 in
         let _1 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
 # 13530 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_initialize = 
-# 1354 "parser_cocci_menhir.mly"
+# 1342 "parser_cocci_menhir.mly"
     ( if P.struct_initializer _2
     then
       let il = P.drop_dot_commas _2 in
@@ -13557,14 +13584,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 13563 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_initialize = 
-# 1361 "parser_cocci_menhir.mly"
+# 1349 "parser_cocci_menhir.mly"
       (let (nm,pure,clt) = _1 in
       Ast0.wrap(Ast0.MetaInit(P.clt2mcode nm clt,pure)) )
 # 13571 "parser_cocci_menhir.ml"
@@ -13589,7 +13616,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_initialize2 = 
-# 1367 "parser_cocci_menhir.mly"
+# 1355 "parser_cocci_menhir.mly"
                             ( Ast0.wrap(Ast0.InitExpr(_1)) )
 # 13595 "parser_cocci_menhir.ml"
          in
@@ -13613,7 +13640,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_initialize2 = 
-# 1368 "parser_cocci_menhir.mly"
+# 1356 "parser_cocci_menhir.mly"
                             ( Ast0.wrap(Ast0.InitExpr(_1)) )
 # 13619 "parser_cocci_menhir.ml"
          in
@@ -13644,20 +13671,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
 # 13650 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_initialize_list = Obj.magic _2 in
         let _1 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
 # 13656 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_initialize2 = 
-# 1370 "parser_cocci_menhir.mly"
+# 1358 "parser_cocci_menhir.mly"
     ( if P.struct_initializer _2
     then
       let il = P.drop_dot_commas _2 in
@@ -13694,7 +13721,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_initialize2 = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
 # 13700 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -13702,7 +13729,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_initialize2 = 
-# 1378 "parser_cocci_menhir.mly"
+# 1366 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.InitGccExt(_1,P.clt2mcode "=" _2,_3)) )
 # 13708 "parser_cocci_menhir.ml"
          in
@@ -13734,7 +13761,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_initialize2 = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
 # 13740 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
@@ -13742,7 +13769,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_initialize2 = 
-# 1380 "parser_cocci_menhir.mly"
+# 1368 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.InitGccName(_1,P.clt2mcode ":" _2,_3)) )
 # 13748 "parser_cocci_menhir.ml"
          in
@@ -13763,14 +13790,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
 # 13769 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_initialize2 = 
-# 1382 "parser_cocci_menhir.mly"
+# 1370 "parser_cocci_menhir.mly"
       (let (nm,pure,clt) = _1 in
       Ast0.wrap(Ast0.MetaInit(P.clt2mcode nm clt,pure)) )
 # 13777 "parser_cocci_menhir.ml"
@@ -13792,14 +13819,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 136 "parser_cocci_menhir.mly"
+# 110 "parser_cocci_menhir.mly"
        (Parse_aux.list_info)
 # 13798 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_initialize2 = 
-# 1385 "parser_cocci_menhir.mly"
+# 1373 "parser_cocci_menhir.mly"
       (let (nm,lenname,pure,clt) = _1 in
       let nm = P.clt2mcode nm clt in
       let lenname =
@@ -13830,7 +13857,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_initialize_list = 
-# 1405 "parser_cocci_menhir.mly"
+# 1393 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.DOTS(_1 P.mkidots (fun c -> Ast0.IComma c))) )
 # 13836 "parser_cocci_menhir.ml"
          in
@@ -13852,7 +13879,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_invalid = 
-# 1490 "parser_cocci_menhir.mly"
+# 1478 "parser_cocci_menhir.mly"
            ( raise (Semantic_cocci.Semantic "not matchable") )
 # 13858 "parser_cocci_menhir.ml"
          in
@@ -13869,7 +13896,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_is_expression = 
-# 321 "parser_cocci_menhir.mly"
+# 295 "parser_cocci_menhir.mly"
               ( false )
 # 13875 "parser_cocci_menhir.ml"
          in
@@ -13891,7 +13918,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_is_expression = 
-# 322 "parser_cocci_menhir.mly"
+# 296 "parser_cocci_menhir.mly"
               ( true )
 # 13897 "parser_cocci_menhir.ml"
          in
@@ -13919,7 +13946,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_t_ in
         let _v : 'tv_iso_ctype_ = 
-# 2429 "parser_cocci_menhir.mly"
+# 2417 "parser_cocci_menhir.mly"
                 ( Common.Left t )
 # 13925 "parser_cocci_menhir.ml"
          in
@@ -13947,7 +13974,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_t_ in
         let _v : 'tv_iso_ctype_ = 
-# 2430 "parser_cocci_menhir.mly"
+# 2418 "parser_cocci_menhir.mly"
                      ( Common.Right t )
 # 13953 "parser_cocci_menhir.ml"
          in
@@ -13975,7 +14002,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_t_ in
         let _v : 'tv_iso_decl_var_ = 
-# 2429 "parser_cocci_menhir.mly"
+# 2417 "parser_cocci_menhir.mly"
                 ( Common.Left t )
 # 13981 "parser_cocci_menhir.ml"
          in
@@ -14003,7 +14030,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_t_ in
         let _v : 'tv_iso_decl_var_ = 
-# 2430 "parser_cocci_menhir.mly"
+# 2418 "parser_cocci_menhir.mly"
                      ( Common.Right t )
 # 14009 "parser_cocci_menhir.ml"
          in
@@ -14031,7 +14058,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_t_ in
         let _v : 'tv_iso_eexpr_ = 
-# 2429 "parser_cocci_menhir.mly"
+# 2417 "parser_cocci_menhir.mly"
                 ( Common.Left t )
 # 14037 "parser_cocci_menhir.ml"
          in
@@ -14059,7 +14086,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_t_ in
         let _v : 'tv_iso_eexpr_ = 
-# 2430 "parser_cocci_menhir.mly"
+# 2418 "parser_cocci_menhir.mly"
                      ( Common.Right t )
 # 14065 "parser_cocci_menhir.ml"
          in
@@ -14087,7 +14114,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_t_ in
         let _v : 'tv_iso_iso_statement_ = 
-# 2429 "parser_cocci_menhir.mly"
+# 2417 "parser_cocci_menhir.mly"
                 ( Common.Left t )
 # 14093 "parser_cocci_menhir.ml"
          in
@@ -14115,7 +14142,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_t_ in
         let _v : 'tv_iso_iso_statement_ = 
-# 2430 "parser_cocci_menhir.mly"
+# 2418 "parser_cocci_menhir.mly"
                      ( Common.Right t )
 # 14121 "parser_cocci_menhir.ml"
          in
@@ -14143,7 +14170,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_t_ in
         let _v : 'tv_iso_nest_start_ = 
-# 2429 "parser_cocci_menhir.mly"
+# 2417 "parser_cocci_menhir.mly"
                 ( Common.Left t )
 # 14149 "parser_cocci_menhir.ml"
          in
@@ -14171,7 +14198,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_t_ in
         let _v : 'tv_iso_nest_start_ = 
-# 2430 "parser_cocci_menhir.mly"
+# 2418 "parser_cocci_menhir.mly"
                      ( Common.Right t )
 # 14177 "parser_cocci_menhir.ml"
          in
@@ -14209,11 +14236,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (
-# 236 "parser_cocci_menhir.mly"
+# 210 "parser_cocci_menhir.mly"
       (Ast0_cocci.anything list list)
 # 14215 "parser_cocci_menhir.ml"
         ) = 
-# 2397 "parser_cocci_menhir.mly"
+# 2385 "parser_cocci_menhir.mly"
     ( let fn x = Ast0.ExprTag x in P.iso_adjust fn fn e1 el )
 # 14219 "parser_cocci_menhir.ml"
          in
@@ -14251,11 +14278,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (
-# 236 "parser_cocci_menhir.mly"
+# 210 "parser_cocci_menhir.mly"
       (Ast0_cocci.anything list list)
 # 14257 "parser_cocci_menhir.ml"
         ) = 
-# 2399 "parser_cocci_menhir.mly"
+# 2387 "parser_cocci_menhir.mly"
     ( let fn x = Ast0.ArgExprTag x in P.iso_adjust fn fn e1 el )
 # 14261 "parser_cocci_menhir.ml"
          in
@@ -14293,11 +14320,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (
-# 236 "parser_cocci_menhir.mly"
+# 210 "parser_cocci_menhir.mly"
       (Ast0_cocci.anything list list)
 # 14299 "parser_cocci_menhir.ml"
         ) = 
-# 2401 "parser_cocci_menhir.mly"
+# 2389 "parser_cocci_menhir.mly"
     ( let fn x = Ast0.TestExprTag x in P.iso_adjust fn fn e1 el )
 # 14303 "parser_cocci_menhir.ml"
          in
@@ -14335,11 +14362,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (
-# 236 "parser_cocci_menhir.mly"
+# 210 "parser_cocci_menhir.mly"
       (Ast0_cocci.anything list list)
 # 14341 "parser_cocci_menhir.ml"
         ) = 
-# 2403 "parser_cocci_menhir.mly"
+# 2391 "parser_cocci_menhir.mly"
     ( let ffn x = Ast0.ExprTag x in
       let fn x =  Ast0.TestExprTag x in
       P.iso_adjust ffn fn e1 el )
@@ -14379,11 +14406,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (
-# 236 "parser_cocci_menhir.mly"
+# 210 "parser_cocci_menhir.mly"
       (Ast0_cocci.anything list list)
 # 14385 "parser_cocci_menhir.ml"
         ) = 
-# 2407 "parser_cocci_menhir.mly"
+# 2395 "parser_cocci_menhir.mly"
     ( let fn x = Ast0.StmtTag x in P.iso_adjust fn fn s1 sl )
 # 14389 "parser_cocci_menhir.ml"
          in
@@ -14421,11 +14448,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (
-# 236 "parser_cocci_menhir.mly"
+# 210 "parser_cocci_menhir.mly"
       (Ast0_cocci.anything list list)
 # 14427 "parser_cocci_menhir.ml"
         ) = 
-# 2409 "parser_cocci_menhir.mly"
+# 2397 "parser_cocci_menhir.mly"
     ( let fn x = Ast0.TypeCTag x in P.iso_adjust fn fn t1 tl )
 # 14431 "parser_cocci_menhir.ml"
          in
@@ -14463,11 +14490,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (
-# 236 "parser_cocci_menhir.mly"
+# 210 "parser_cocci_menhir.mly"
       (Ast0_cocci.anything list list)
 # 14469 "parser_cocci_menhir.ml"
         ) = 
-# 2411 "parser_cocci_menhir.mly"
+# 2399 "parser_cocci_menhir.mly"
     ( let fn x = Ast0.DotsStmtTag x in P.iso_adjust fn fn e1 el )
 # 14473 "parser_cocci_menhir.ml"
          in
@@ -14505,11 +14532,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (
-# 236 "parser_cocci_menhir.mly"
+# 210 "parser_cocci_menhir.mly"
       (Ast0_cocci.anything list list)
 # 14511 "parser_cocci_menhir.ml"
         ) = 
-# 2413 "parser_cocci_menhir.mly"
+# 2401 "parser_cocci_menhir.mly"
     ( let check_one = function
        [x] -> x
       | _ ->
@@ -14546,11 +14573,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_m_ in
         let _endpos = _endpos_m_ in
         let _v : (
-# 239 "parser_cocci_menhir.mly"
+# 213 "parser_cocci_menhir.mly"
       ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list)
 # 14552 "parser_cocci_menhir.ml"
         ) = 
-# 256 "parser_cocci_menhir.mly"
+# 230 "parser_cocci_menhir.mly"
                          ( m "" )
 # 14556 "parser_cocci_menhir.ml"
          in
@@ -14578,11 +14605,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_nm_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 223 "parser_cocci_menhir.mly"
+# 197 "parser_cocci_menhir.mly"
       (Ast_cocci.rulename)
 # 14584 "parser_cocci_menhir.ml"
         ) = 
-# 271 "parser_cocci_menhir.mly"
+# 245 "parser_cocci_menhir.mly"
                       ( P.make_iso_rule_name_result (P.id2name nm) )
 # 14588 "parser_cocci_menhir.ml"
          in
@@ -14606,7 +14633,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_iso_statement = 
-# 1195 "parser_cocci_menhir.mly"
+# 1183 "parser_cocci_menhir.mly"
                                       ( _1 )
 # 14612 "parser_cocci_menhir.ml"
          in
@@ -14630,7 +14657,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_iso_statement = 
-# 1197 "parser_cocci_menhir.mly"
+# 1185 "parser_cocci_menhir.mly"
       ( match _1 with
        [decl] ->
          Ast0.wrap
@@ -14655,14 +14682,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 14661 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_iter_ident = 
-# 2070 "parser_cocci_menhir.mly"
+# 2058 "parser_cocci_menhir.mly"
          ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
 # 14668 "parser_cocci_menhir.ml"
          in
@@ -14683,14 +14710,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 132 "parser_cocci_menhir.mly"
+# 106 "parser_cocci_menhir.mly"
        (Parse_aux.idinfo)
 # 14689 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_iter_ident = 
-# 2072 "parser_cocci_menhir.mly"
+# 2060 "parser_cocci_menhir.mly"
          ( let (nm,constraints,pure,clt) = _1 in
          Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,Ast.NoVal,pure)) )
 # 14697 "parser_cocci_menhir.ml"
@@ -14735,7 +14762,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let xs : 'tv_list_TMul_ = Obj.magic xs in
         let x : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
 # 14741 "parser_cocci_menhir.ml"
         ) = Obj.magic x in
@@ -15815,7 +15842,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_list_len = 
-# 425 "parser_cocci_menhir.mly"
+# 399 "parser_cocci_menhir.mly"
                            ( Common.Left _1 )
 # 15821 "parser_cocci_menhir.ml"
          in
@@ -15836,14 +15863,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
 # 15842 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_list_len = 
-# 426 "parser_cocci_menhir.mly"
+# 400 "parser_cocci_menhir.mly"
        ( let (x,clt) = _1 in Common.Right (int_of_string x) )
 # 15849 "parser_cocci_menhir.ml"
          in
@@ -15854,6 +15881,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.endp = _endpos;
           MenhirLib.EngineTypes.next = _menhir_stack;
           });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.semv = _3;
+          MenhirLib.EngineTypes.startp = _startpos__3_;
+          MenhirLib.EngineTypes.endp = _endpos__3_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.startp = _startpos__2_;
+            MenhirLib.EngineTypes.endp = _endpos__2_;
+            MenhirLib.EngineTypes.next = {
+              MenhirLib.EngineTypes.state = _menhir_s;
+              MenhirLib.EngineTypes.startp = _startpos__1_;
+              MenhirLib.EngineTypes.endp = _endpos__1_;
+              MenhirLib.EngineTypes.next = _menhir_stack;
+              };
+            };
+          } = _menhir_stack in
+        let _3 : 'tv_pure_ident = Obj.magic _3 in
+        let _startpos = _startpos__1_ in
+        let _endpos = _endpos__3_ in
+        let _v : 'tv_list_len = 
+# 402 "parser_cocci_menhir.mly"
+    ( let nm = ("virtual",P.id2name _3) in
+    Iteration.parsed_virtual_identifiers :=
+      Common.union_set [snd nm]
+        !Iteration.parsed_virtual_identifiers;
+    try
+    Common.Right (int_of_string
+                   (List.assoc (snd nm) !Flag.defined_virtual_env))
+    with Not_found | Failure "int_of_string" ->
+      begin
+       Common.Left (Some "virtual",P.id2name _3)
+      end
+    )
+# 15892 "parser_cocci_menhir.ml"
+         in
+        _menhir_env.MenhirLib.EngineTypes.stack <- {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+          });
       (fun _menhir_env ->
         let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
         let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in
@@ -15862,7 +15932,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_loption_choose_iso_ = 
 # 57 "standard.mly"
     ( [] )
-# 15866 "parser_cocci_menhir.ml"
+# 15909 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15886,7 +15956,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_loption_choose_iso_ = 
 # 59 "standard.mly"
     ( x )
-# 15890 "parser_cocci_menhir.ml"
+# 15933 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15903,7 +15973,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_loption_disable_ = 
 # 57 "standard.mly"
     ( [] )
-# 15907 "parser_cocci_menhir.ml"
+# 15950 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15927,7 +15997,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_loption_disable_ = 
 # 59 "standard.mly"
     ( x )
-# 15931 "parser_cocci_menhir.ml"
+# 15974 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15944,7 +16014,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_loption_filespec_ = 
 # 57 "standard.mly"
     ( [] )
-# 15948 "parser_cocci_menhir.ml"
+# 15991 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15968,7 +16038,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_loption_filespec_ = 
 # 59 "standard.mly"
     ( x )
-# 15972 "parser_cocci_menhir.ml"
+# 16015 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15985,7 +16055,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_loption_minus_start_ = 
 # 57 "standard.mly"
     ( [] )
-# 15989 "parser_cocci_menhir.ml"
+# 16032 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16009,7 +16079,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_loption_minus_start_ = 
 # 59 "standard.mly"
     ( x )
-# 16013 "parser_cocci_menhir.ml"
+# 16056 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16026,7 +16096,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_loption_not_pos_ = 
 # 57 "standard.mly"
     ( [] )
-# 16030 "parser_cocci_menhir.ml"
+# 16073 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16050,7 +16120,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_loption_not_pos_ = 
 # 59 "standard.mly"
     ( x )
-# 16054 "parser_cocci_menhir.ml"
+# 16097 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16067,7 +16137,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_loption_plus_start_ = 
 # 57 "standard.mly"
     ( [] )
-# 16071 "parser_cocci_menhir.ml"
+# 16114 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16091,7 +16161,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_loption_plus_start_ = 
 # 59 "standard.mly"
     ( x )
-# 16095 "parser_cocci_menhir.ml"
+# 16138 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16110,16 +16180,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 16116 "parser_cocci_menhir.ml"
+# 16159 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_mctype = 
-# 743 "parser_cocci_menhir.mly"
+# 731 "parser_cocci_menhir.mly"
         ( tmeta_to_type _1 )
-# 16123 "parser_cocci_menhir.ml"
+# 16166 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16141,9 +16211,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_mctype = 
-# 744 "parser_cocci_menhir.mly"
+# 732 "parser_cocci_menhir.mly"
         (_1)
-# 16147 "parser_cocci_menhir.ml"
+# 16190 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16165,9 +16235,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_t_ in
         let _endpos = _endpos_t_ in
         let _v : 'tv_meta_exp_type = 
-# 621 "parser_cocci_menhir.mly"
+# 609 "parser_cocci_menhir.mly"
     ( [Ast0_cocci.ast0_type_to_type t] )
-# 16171 "parser_cocci_menhir.ml"
+# 16214 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16197,9 +16267,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_t_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_meta_exp_type = 
-# 623 "parser_cocci_menhir.mly"
+# 611 "parser_cocci_menhir.mly"
     ( [Type_cocci.Array (Ast0_cocci.ast0_type_to_type t)] )
-# 16203 "parser_cocci_menhir.ml"
+# 16246 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16235,11 +16305,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_m_ in
         let _v : 'tv_meta_exp_type = 
-# 625 "parser_cocci_menhir.mly"
+# 613 "parser_cocci_menhir.mly"
     ( List.map
        (function x -> P.ty_pointerify (Ast0_cocci.ast0_type_to_type x) m)
        t )
-# 16243 "parser_cocci_menhir.ml"
+# 16286 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16268,16 +16338,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_pure_ident = Obj.magic _3 in
         let _1 : (
-# 114 "parser_cocci_menhir.mly"
+# 88 "parser_cocci_menhir.mly"
       (string)
-# 16274 "parser_cocci_menhir.ml"
+# 16317 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_meta_ident = 
-# 1794 "parser_cocci_menhir.mly"
+# 1782 "parser_cocci_menhir.mly"
                                    ( (Some _1,P.id2name _3) )
-# 16281 "parser_cocci_menhir.ml"
+# 16324 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16306,16 +16376,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_pure_ident_kwd = Obj.magic _3 in
         let _1 : (
-# 114 "parser_cocci_menhir.mly"
+# 88 "parser_cocci_menhir.mly"
       (string)
-# 16312 "parser_cocci_menhir.ml"
+# 16355 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_meta_ident = 
-# 1795 "parser_cocci_menhir.mly"
+# 1783 "parser_cocci_menhir.mly"
                                    ( (Some _1,_3) )
-# 16319 "parser_cocci_menhir.ml"
+# 16362 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16337,13 +16407,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_m_ in
         let _endpos = _endpos_m_ in
         let _v : (
-# 231 "parser_cocci_menhir.mly"
+# 205 "parser_cocci_menhir.mly"
       ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list)
-# 16343 "parser_cocci_menhir.ml"
+# 16386 "parser_cocci_menhir.ml"
         ) = 
-# 255 "parser_cocci_menhir.mly"
+# 229 "parser_cocci_menhir.mly"
                        ( m (!Ast0.rule_name) )
-# 16347 "parser_cocci_menhir.ml"
+# 16390 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16386,17 +16456,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 437 "parser_cocci_menhir.mly"
+# 425 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta ->
       let tok = check_meta(Ast.MetaMetaDecl(arity,name)) in
       !Data.add_meta_meta name pure; tok) )
-# 16394 "parser_cocci_menhir.ml"
+# 16437 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 16400 "parser_cocci_menhir.ml"
+# 16443 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16439,17 +16509,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 441 "parser_cocci_menhir.mly"
+# 429 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta ->
       let tok = check_meta(Ast.MetaParamDecl(arity,name)) in
       !Data.add_param_meta name pure; tok) )
-# 16447 "parser_cocci_menhir.ml"
+# 16490 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 16453 "parser_cocci_menhir.ml"
+# 16496 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16496,18 +16566,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__6_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 445 "parser_cocci_menhir.mly"
+# 433 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta ->
       let len = Ast.AnyLen in
       let tok = check_meta(Ast.MetaParamListDecl(arity,name,len)) in
       !Data.add_paramlist_meta name len pure; tok) )
-# 16505 "parser_cocci_menhir.ml"
+# 16548 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 16511 "parser_cocci_menhir.ml"
+# 16554 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16554,18 +16624,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__6_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 450 "parser_cocci_menhir.mly"
+# 438 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta ->
       let len = Ast.AnyLen in
       let tok = check_meta(Ast.MetaExpListDecl(arity,name,len)) in
       !Data.add_explist_meta name len pure; tok) )
-# 16563 "parser_cocci_menhir.ml"
+# 16606 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 16569 "parser_cocci_menhir.ml"
+# 16612 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16608,17 +16678,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 455 "parser_cocci_menhir.mly"
+# 443 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta ->
       let tok = check_meta(Ast.MetaTypeDecl(arity,name)) in
       !Data.add_type_meta name pure; tok) )
-# 16616 "parser_cocci_menhir.ml"
+# 16659 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 16622 "parser_cocci_menhir.ml"
+# 16665 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16661,17 +16731,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 459 "parser_cocci_menhir.mly"
+# 447 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta ->
       let tok = check_meta(Ast.MetaInitDecl(arity,name)) in
       !Data.add_init_meta name pure; tok) )
-# 16669 "parser_cocci_menhir.ml"
+# 16712 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 16675 "parser_cocci_menhir.ml"
+# 16718 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16718,18 +16788,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__6_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 463 "parser_cocci_menhir.mly"
+# 451 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta ->
       let len = Ast.AnyLen in
       let tok = check_meta(Ast.MetaInitListDecl(arity,name,len)) in
       !Data.add_initlist_meta name len pure; tok) )
-# 16727 "parser_cocci_menhir.ml"
+# 16770 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 16733 "parser_cocci_menhir.ml"
+# 16776 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16772,17 +16842,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 468 "parser_cocci_menhir.mly"
+# 456 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta ->
       let tok = check_meta(Ast.MetaStmDecl(arity,name)) in
       !Data.add_stm_meta name pure; tok) )
-# 16780 "parser_cocci_menhir.ml"
+# 16823 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 16786 "parser_cocci_menhir.ml"
+# 16829 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16825,17 +16895,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 472 "parser_cocci_menhir.mly"
+# 460 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta ->
       let tok = check_meta(Ast.MetaDeclDecl(arity,name)) in
       !Data.add_decl_meta name pure; tok) )
-# 16833 "parser_cocci_menhir.ml"
+# 16876 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 16839 "parser_cocci_menhir.ml"
+# 16882 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16878,17 +16948,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 476 "parser_cocci_menhir.mly"
+# 464 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta ->
       let tok = check_meta(Ast.MetaFieldDecl(arity,name)) in
       !Data.add_field_meta name pure; tok) )
-# 16886 "parser_cocci_menhir.ml"
+# 16929 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 16892 "parser_cocci_menhir.ml"
+# 16935 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16935,18 +17005,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__6_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 480 "parser_cocci_menhir.mly"
+# 468 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta ->
       let len = Ast.AnyLen in
       let tok = check_meta(Ast.MetaFieldListDecl(arity,name,len)) in
       !Data.add_field_list_meta name len pure; tok) )
-# 16944 "parser_cocci_menhir.ml"
+# 16987 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 16950 "parser_cocci_menhir.ml"
+# 16993 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16993,17 +17063,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__6_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 485 "parser_cocci_menhir.mly"
+# 473 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta ->
       let tok = check_meta(Ast.MetaStmListDecl(arity,name)) in
       !Data.add_stmlist_meta name pure; tok) )
-# 17001 "parser_cocci_menhir.ml"
+# 17044 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 17007 "parser_cocci_menhir.ml"
+# 17050 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17046,18 +17116,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 489 "parser_cocci_menhir.mly"
+# 477 "parser_cocci_menhir.mly"
     ( (fun arity (_,name) pure check_meta ->
       if arity = Ast.NONE && pure = Ast0.Impure
       then (!Data.add_type_name name; [])
       else raise (Semantic_cocci.Semantic "bad typedef")) )
-# 17055 "parser_cocci_menhir.ml"
+# 17098 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 17061 "parser_cocci_menhir.ml"
+# 17104 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17104,18 +17174,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__6_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 494 "parser_cocci_menhir.mly"
+# 482 "parser_cocci_menhir.mly"
     ( (fun arity (_,name) pure check_meta ->
       if arity = Ast.NONE && pure = Ast0.Impure
       then (!Data.add_declarer_name name; [])
       else raise (Semantic_cocci.Semantic "bad declarer")) )
-# 17113 "parser_cocci_menhir.ml"
+# 17156 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 17119 "parser_cocci_menhir.ml"
+# 17162 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17162,18 +17232,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__6_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 499 "parser_cocci_menhir.mly"
+# 487 "parser_cocci_menhir.mly"
     ( (fun arity (_,name) pure check_meta ->
       if arity = Ast.NONE && pure = Ast0.Impure
       then (!Data.add_iterator_name name; [])
       else raise (Semantic_cocci.Semantic "bad iterator")) )
-# 17171 "parser_cocci_menhir.ml"
+# 17214 "parser_cocci_menhir.ml"
           
         in
         
-# 345 "parser_cocci_menhir.mly"
+# 319 "parser_cocci_menhir.mly"
     ( P.create_metadec ar ispure kindfn ids )
-# 17177 "parser_cocci_menhir.ml"
+# 17220 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17208,17 +17278,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__4_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 430 "parser_cocci_menhir.mly"
+# 418 "parser_cocci_menhir.mly"
     ( (fun name check_meta seed ->
       let tok = check_meta(Ast.MetaFreshIdDecl(name,seed)) in
       !Data.add_fresh_id_meta name seed; tok) )
-# 17216 "parser_cocci_menhir.ml"
+# 17259 "parser_cocci_menhir.ml"
           
         in
         
-# 348 "parser_cocci_menhir.mly"
+# 322 "parser_cocci_menhir.mly"
     ( P.create_fresh_metadec kindfn ids )
-# 17222 "parser_cocci_menhir.ml"
+# 17265 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17261,7 +17331,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 506 "parser_cocci_menhir.mly"
+# 494 "parser_cocci_menhir.mly"
     (
      let idfn arity name pure check_meta constraints =
        let tok = check_meta(Ast.MetaIdDecl(arity,name)) in
@@ -17278,17 +17348,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let tok = check_meta(Ast.MetaIdDecl(arity,name)) in
         !Data.add_virt_id_meta_not_found name pure; tok in
      (idfn,virtfn) )
-# 17282 "parser_cocci_menhir.ml"
+# 17325 "parser_cocci_menhir.ml"
           
         in
         
-# 354 "parser_cocci_menhir.mly"
+# 328 "parser_cocci_menhir.mly"
     ( let (normal,virt) = Common.partition_either (fun x -> x) ids in
     let (idfn,virtfn) = kindfn in
     function cr ->
       (P.create_metadec_with_constraints ar ispure idfn normal cr) @
       (P.create_metadec_virt ar ispure virtfn virt cr) )
-# 17292 "parser_cocci_menhir.ml"
+# 17335 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17331,17 +17401,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 525 "parser_cocci_menhir.mly"
+# 513 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       let tok = check_meta(Ast.MetaFuncDecl(arity,name)) in
       !Data.add_func_meta name constraints pure; tok) )
-# 17339 "parser_cocci_menhir.ml"
+# 17382 "parser_cocci_menhir.ml"
           
         in
         
-# 363 "parser_cocci_menhir.mly"
+# 337 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 17345 "parser_cocci_menhir.ml"
+# 17388 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17388,18 +17458,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__6_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 529 "parser_cocci_menhir.mly"
+# 517 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       let tok = check_meta(Ast.MetaLocalFuncDecl(arity,name)) in
       !Data.add_local_func_meta name constraints pure;
       tok) )
-# 17397 "parser_cocci_menhir.ml"
+# 17440 "parser_cocci_menhir.ml"
           
         in
         
-# 363 "parser_cocci_menhir.mly"
+# 337 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 17403 "parser_cocci_menhir.ml"
+# 17446 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17442,17 +17512,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 534 "parser_cocci_menhir.mly"
+# 522 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       let tok = check_meta(Ast.MetaDeclarerDecl(arity,name)) in
       !Data.add_declarer_meta name constraints pure; tok) )
-# 17450 "parser_cocci_menhir.ml"
+# 17493 "parser_cocci_menhir.ml"
           
         in
         
-# 363 "parser_cocci_menhir.mly"
+# 337 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 17456 "parser_cocci_menhir.ml"
+# 17499 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17495,17 +17565,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 538 "parser_cocci_menhir.mly"
+# 526 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       let tok = check_meta(Ast.MetaIteratorDecl(arity,name)) in
       !Data.add_iterator_meta name constraints pure; tok) )
-# 17503 "parser_cocci_menhir.ml"
+# 17546 "parser_cocci_menhir.ml"
           
         in
         
-# 363 "parser_cocci_menhir.mly"
+# 337 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 17509 "parser_cocci_menhir.ml"
+# 17552 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17548,17 +17618,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 544 "parser_cocci_menhir.mly"
+# 532 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       let tok = check_meta(Ast.MetaErrDecl(arity,name)) in
       !Data.add_err_meta name constraints pure; tok) )
-# 17556 "parser_cocci_menhir.ml"
+# 17599 "parser_cocci_menhir.ml"
           
         in
         
-# 368 "parser_cocci_menhir.mly"
+# 342 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 17562 "parser_cocci_menhir.ml"
+# 17605 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17611,11 +17681,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             
 # 39 "standard.mly"
     ( None )
-# 17615 "parser_cocci_menhir.ml"
+# 17658 "parser_cocci_menhir.ml"
             
           in
           
-# 548 "parser_cocci_menhir.mly"
+# 536 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       match l with
        None ->
@@ -17624,13 +17694,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       | Some _ ->
          !Data.add_local_idexp_meta ty name constraints pure;
          check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) )
-# 17628 "parser_cocci_menhir.ml"
+# 17671 "parser_cocci_menhir.ml"
           
         in
         
-# 368 "parser_cocci_menhir.mly"
+# 342 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 17634 "parser_cocci_menhir.ml"
+# 17677 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17691,11 +17761,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             
 # 41 "standard.mly"
     ( Some x )
-# 17695 "parser_cocci_menhir.ml"
+# 17738 "parser_cocci_menhir.ml"
             
           in
           
-# 548 "parser_cocci_menhir.mly"
+# 536 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       match l with
        None ->
@@ -17704,13 +17774,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       | Some _ ->
          !Data.add_local_idexp_meta ty name constraints pure;
          check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) )
-# 17708 "parser_cocci_menhir.ml"
+# 17751 "parser_cocci_menhir.ml"
           
         in
         
-# 368 "parser_cocci_menhir.mly"
+# 342 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 17714 "parser_cocci_menhir.ml"
+# 17757 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17767,7 +17837,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           let m = m0 in
           let l = l0 in
           
-# 557 "parser_cocci_menhir.mly"
+# 545 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       let ty = Some [P.ty_pointerify Type_cocci.Unknown m] in
       match l with
@@ -17777,13 +17847,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       | Some _ ->
          !Data.add_local_idexp_meta ty name constraints pure;
          check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) )
-# 17781 "parser_cocci_menhir.ml"
+# 17824 "parser_cocci_menhir.ml"
           
         in
         
-# 368 "parser_cocci_menhir.mly"
+# 342 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 17787 "parser_cocci_menhir.ml"
+# 17830 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17833,18 +17903,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_metadec = let kindfn =
           let ty = ty0 in
           
-# 567 "parser_cocci_menhir.mly"
+# 555 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       let ty = Some [ty] in
       let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in
       !Data.add_exp_meta ty name constraints pure; tok) )
-# 17842 "parser_cocci_menhir.ml"
+# 17885 "parser_cocci_menhir.ml"
           
         in
         
-# 368 "parser_cocci_menhir.mly"
+# 342 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 17848 "parser_cocci_menhir.ml"
+# 17891 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17890,21 +17960,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             
 # 39 "standard.mly"
     ( None )
-# 17894 "parser_cocci_menhir.ml"
+# 17937 "parser_cocci_menhir.ml"
             
           in
           
-# 572 "parser_cocci_menhir.mly"
+# 560 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       let tok = check_meta(Ast.MetaConstDecl(arity,name,ty)) in
       !Data.add_const_meta ty name constraints pure; tok) )
-# 17902 "parser_cocci_menhir.ml"
+# 17945 "parser_cocci_menhir.ml"
           
         in
         
-# 368 "parser_cocci_menhir.mly"
+# 342 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 17908 "parser_cocci_menhir.ml"
+# 17951 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17958,21 +18028,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             
 # 41 "standard.mly"
     ( Some x )
-# 17962 "parser_cocci_menhir.ml"
+# 18005 "parser_cocci_menhir.ml"
             
           in
           
-# 572 "parser_cocci_menhir.mly"
+# 560 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       let tok = check_meta(Ast.MetaConstDecl(arity,name,ty)) in
       !Data.add_const_meta ty name constraints pure; tok) )
-# 17970 "parser_cocci_menhir.ml"
+# 18013 "parser_cocci_menhir.ml"
           
         in
         
-# 368 "parser_cocci_menhir.mly"
+# 342 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 17976 "parser_cocci_menhir.ml"
+# 18019 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18015,17 +18085,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = let kindfn =
           
-# 590 "parser_cocci_menhir.mly"
+# 578 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       let tok = check_meta(Ast.MetaExpDecl(arity,name,None)) in
       !Data.add_exp_meta None name constraints pure; tok) )
-# 18023 "parser_cocci_menhir.ml"
+# 18066 "parser_cocci_menhir.ml"
           
         in
         
-# 373 "parser_cocci_menhir.mly"
+# 347 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 18029 "parser_cocci_menhir.ml"
+# 18072 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18071,7 +18141,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_metadec = let kindfn =
           let vl = vl0 in
           
-# 594 "parser_cocci_menhir.mly"
+# 582 "parser_cocci_menhir.mly"
     ( (fun arity name pure check_meta constraints ->
       let ty = Some vl in
       (match constraints with
@@ -18096,13 +18166,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in
       !Data.add_exp_meta ty name constraints pure; tok)
     )
-# 18100 "parser_cocci_menhir.ml"
+# 18143 "parser_cocci_menhir.ml"
           
         in
         
-# 373 "parser_cocci_menhir.mly"
+# 347 "parser_cocci_menhir.mly"
     ( P.create_metadec_with_constraints ar ispure kindfn ids )
-# 18106 "parser_cocci_menhir.ml"
+# 18149 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18144,7 +18214,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_ar_ in
         let _endpos = _endpos__5_ in
         let _v : 'tv_metadec = 
-# 379 "parser_cocci_menhir.mly"
+# 353 "parser_cocci_menhir.mly"
     ( (if !Data.in_generating
       then failwith "position variables not allowed in a generated rule file");
       let kindfn arity name pure check_meta constraints =
@@ -18152,7 +18222,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
       let any = match a with None -> Ast.PER | Some _ -> Ast.ALL in
       !Data.add_pos_meta name constraints any; tok in
     P.create_metadec_with_constraints ar false kindfn ids )
-# 18156 "parser_cocci_menhir.ml"
+# 18199 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18212,13 +18282,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_ar_ in
         let _endpos = _endpos__9_ in
         let _v : 'tv_metadec = 
-# 389 "parser_cocci_menhir.mly"
+# 363 "parser_cocci_menhir.mly"
     ( P.create_len_metadec ar ispure
        (fun lenname arity name pure check_meta ->
          let tok = check_meta(Ast.MetaParamListDecl(arity,name,lenname)) in
          !Data.add_paramlist_meta name lenname pure; tok)
        len ids )
-# 18222 "parser_cocci_menhir.ml"
+# 18265 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18278,13 +18348,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_ar_ in
         let _endpos = _endpos__9_ in
         let _v : 'tv_metadec = 
-# 397 "parser_cocci_menhir.mly"
+# 371 "parser_cocci_menhir.mly"
     ( P.create_len_metadec ar ispure
        (fun lenname arity name pure check_meta ->
          let tok = check_meta(Ast.MetaExpListDecl(arity,name,lenname)) in
          !Data.add_explist_meta name lenname pure; tok)
        len ids )
-# 18288 "parser_cocci_menhir.ml"
+# 18331 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18344,13 +18414,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_ar_ in
         let _endpos = _endpos__9_ in
         let _v : 'tv_metadec = 
-# 405 "parser_cocci_menhir.mly"
+# 379 "parser_cocci_menhir.mly"
     ( P.create_len_metadec ar ispure
        (fun lenname arity name pure check_meta ->
          let tok = check_meta(Ast.MetaFieldListDecl(arity,name,lenname)) in
          !Data.add_field_list_meta name lenname pure; tok)
        len ids )
-# 18354 "parser_cocci_menhir.ml"
+# 18397 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18410,13 +18480,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_ar_ in
         let _endpos = _endpos__9_ in
         let _v : 'tv_metadec = 
-# 413 "parser_cocci_menhir.mly"
+# 387 "parser_cocci_menhir.mly"
     ( P.create_len_metadec ar ispure
        (fun lenname arity name pure check_meta ->
          let tok = check_meta(Ast.MetaInitListDecl(arity,name,lenname)) in
          !Data.add_initlist_meta name lenname pure; tok)
        len ids )
-# 18420 "parser_cocci_menhir.ml"
+# 18463 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18446,12 +18516,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_metadec = 
-# 419 "parser_cocci_menhir.mly"
+# 393 "parser_cocci_menhir.mly"
     ( (fun _ ->
         let add_sym = fun (nm,_) -> !Data.add_symbol_meta nm in
           List.iter add_sym ids; [])
     )
-# 18455 "parser_cocci_menhir.ml"
+# 18498 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18473,9 +18543,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_mident = 
-# 2043 "parser_cocci_menhir.mly"
+# 2031 "parser_cocci_menhir.mly"
          ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
-# 18479 "parser_cocci_menhir.ml"
+# 18522 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18497,9 +18567,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_mident = 
-# 2044 "parser_cocci_menhir.mly"
+# 2032 "parser_cocci_menhir.mly"
                          ( _1 )
-# 18503 "parser_cocci_menhir.ml"
+# 18546 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18518,16 +18588,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 18524 "parser_cocci_menhir.ml"
+# 18567 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_mident = 
-# 2045 "parser_cocci_menhir.mly"
+# 2033 "parser_cocci_menhir.mly"
              ( tmeta_to_ident _1 )
-# 18531 "parser_cocci_menhir.ml"
+# 18574 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18546,17 +18616,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 130 "parser_cocci_menhir.mly"
+# 104 "parser_cocci_menhir.mly"
        (Parse_aux.midinfo)
-# 18552 "parser_cocci_menhir.ml"
+# 18595 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_mident = 
-# 2047 "parser_cocci_menhir.mly"
+# 2035 "parser_cocci_menhir.mly"
          ( let (nm,constraints,seed,pure,clt) = _1 in
          Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,seed,pure)) )
-# 18560 "parser_cocci_menhir.ml"
+# 18603 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18584,9 +18654,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_midzero_list_ctype_ctype_ = 
-# 2367 "parser_cocci_menhir.mly"
+# 2355 "parser_cocci_menhir.mly"
      ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 18590 "parser_cocci_menhir.ml"
+# 18633 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18614,9 +18684,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_midzero_list_disj_ident_disj_ident_ = 
-# 2367 "parser_cocci_menhir.mly"
+# 2355 "parser_cocci_menhir.mly"
      ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 18620 "parser_cocci_menhir.ml"
+# 18663 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18644,9 +18714,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_midzero_list_eexpr_eexpr_ = 
-# 2367 "parser_cocci_menhir.mly"
+# 2355 "parser_cocci_menhir.mly"
      ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 18650 "parser_cocci_menhir.ml"
+# 18693 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18674,9 +18744,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_midzero_list_expr_eexpr_ = 
-# 2367 "parser_cocci_menhir.mly"
+# 2355 "parser_cocci_menhir.mly"
      ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 18680 "parser_cocci_menhir.ml"
+# 18723 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18704,9 +18774,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_midzero_list_fun_after_stm_fun_after_dots_or_ = 
-# 2367 "parser_cocci_menhir.mly"
+# 2355 "parser_cocci_menhir.mly"
      ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 18710 "parser_cocci_menhir.ml"
+# 18753 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18734,9 +18804,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_midzero_list_fun_start_fun_start_ = 
-# 2367 "parser_cocci_menhir.mly"
+# 2355 "parser_cocci_menhir.mly"
      ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 18740 "parser_cocci_menhir.ml"
+# 18783 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18764,9 +18834,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_midzero_list_mctype_mctype_ = 
-# 2367 "parser_cocci_menhir.mly"
+# 2355 "parser_cocci_menhir.mly"
      ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 18770 "parser_cocci_menhir.ml"
+# 18813 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18794,9 +18864,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_midzero_list_rule_elem_statement_rule_elem_statement_ = 
-# 2367 "parser_cocci_menhir.mly"
+# 2355 "parser_cocci_menhir.mly"
      ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 18800 "parser_cocci_menhir.ml"
+# 18843 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18824,9 +18894,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_midzero_list_statement_statement_ = 
-# 2367 "parser_cocci_menhir.mly"
+# 2355 "parser_cocci_menhir.mly"
      ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 18830 "parser_cocci_menhir.ml"
+# 18873 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18854,9 +18924,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_midzero_list_struct_decl_one_struct_decl_one_ = 
-# 2367 "parser_cocci_menhir.mly"
+# 2355 "parser_cocci_menhir.mly"
      ( let (mids,code) = List.split b in (mids,(a::code)) )
-# 18860 "parser_cocci_menhir.ml"
+# 18903 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18884,11 +18954,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_f_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_minus_body = 
-# 850 "parser_cocci_menhir.mly"
+# 838 "parser_cocci_menhir.mly"
     ( match f@b(*@ew*) with
       [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty")
     | code -> code )
-# 18892 "parser_cocci_menhir.ml"
+# 18935 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18916,11 +18986,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_f_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_minus_exp_body = 
-# 864 "parser_cocci_menhir.mly"
+# 852 "parser_cocci_menhir.mly"
     ( match f@[b](*@ew*) with
       [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty")
     | code -> code )
-# 18924 "parser_cocci_menhir.ml"
+# 18967 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18946,13 +19016,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 211 "parser_cocci_menhir.mly"
+# 185 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 18952 "parser_cocci_menhir.ml"
+# 18995 "parser_cocci_menhir.ml"
         ) = 
-# 251 "parser_cocci_menhir.mly"
+# 225 "parser_cocci_menhir.mly"
                                    ( _1 )
-# 18956 "parser_cocci_menhir.ml"
+# 18999 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18978,13 +19048,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_m_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 211 "parser_cocci_menhir.mly"
+# 185 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 18984 "parser_cocci_menhir.ml"
+# 19027 "parser_cocci_menhir.ml"
         ) = 
-# 251 "parser_cocci_menhir.mly"
+# 225 "parser_cocci_menhir.mly"
                                                                        ( m )
-# 18988 "parser_cocci_menhir.ml"
+# 19031 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19010,13 +19080,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_m_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 211 "parser_cocci_menhir.mly"
+# 185 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 19016 "parser_cocci_menhir.ml"
+# 19059 "parser_cocci_menhir.ml"
         ) = 
-# 252 "parser_cocci_menhir.mly"
+# 226 "parser_cocci_menhir.mly"
                          ( m )
-# 19020 "parser_cocci_menhir.ml"
+# 19063 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19042,13 +19112,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 208 "parser_cocci_menhir.mly"
+# 182 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 19048 "parser_cocci_menhir.ml"
+# 19091 "parser_cocci_menhir.ml"
         ) = 
-# 247 "parser_cocci_menhir.mly"
+# 221 "parser_cocci_menhir.mly"
                            ( _1 )
-# 19052 "parser_cocci_menhir.ml"
+# 19095 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19074,13 +19144,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_m_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 208 "parser_cocci_menhir.mly"
+# 182 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 19080 "parser_cocci_menhir.ml"
+# 19123 "parser_cocci_menhir.ml"
         ) = 
-# 247 "parser_cocci_menhir.mly"
+# 221 "parser_cocci_menhir.mly"
                                                            ( m )
-# 19084 "parser_cocci_menhir.ml"
+# 19127 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19106,13 +19176,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_m_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 208 "parser_cocci_menhir.mly"
+# 182 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 19112 "parser_cocci_menhir.ml"
+# 19155 "parser_cocci_menhir.ml"
         ) = 
-# 248 "parser_cocci_menhir.mly"
+# 222 "parser_cocci_menhir.mly"
                      ( m )
-# 19116 "parser_cocci_menhir.ml"
+# 19159 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19134,9 +19204,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_minus_start = 
-# 2192 "parser_cocci_menhir.mly"
+# 2180 "parser_cocci_menhir.mly"
                          ( [Ast0.wrap(Ast0.OTHER(_1))] )
-# 19140 "parser_cocci_menhir.ml"
+# 19183 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19158,9 +19228,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_minus_start = 
-# 2193 "parser_cocci_menhir.mly"
+# 2181 "parser_cocci_menhir.mly"
                          ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] )
-# 19164 "parser_cocci_menhir.ml"
+# 19207 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19182,9 +19252,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_minus_start = 
-# 2194 "parser_cocci_menhir.mly"
+# 2182 "parser_cocci_menhir.mly"
                     ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] )
-# 19188 "parser_cocci_menhir.ml"
+# 19231 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19206,9 +19276,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_minus_start = 
-# 2196 "parser_cocci_menhir.mly"
+# 2184 "parser_cocci_menhir.mly"
     ( List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1 )
-# 19212 "parser_cocci_menhir.ml"
+# 19255 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19227,9 +19297,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let a : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19233 "parser_cocci_menhir.ml"
+# 19276 "parser_cocci_menhir.ml"
         ) = Obj.magic a in
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_a_ in
@@ -19237,13 +19307,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 19241 "parser_cocci_menhir.ml"
+# 19284 "parser_cocci_menhir.ml"
           
         in
         
-# 740 "parser_cocci_menhir.mly"
+# 728 "parser_cocci_menhir.mly"
                                  ( (a,b) )
-# 19247 "parser_cocci_menhir.ml"
+# 19290 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19268,9 +19338,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let x0 : 'tv_const_vol = Obj.magic x0 in
         let a : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19274 "parser_cocci_menhir.ml"
+# 19317 "parser_cocci_menhir.ml"
         ) = Obj.magic a in
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_x0_ in
@@ -19279,13 +19349,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 19283 "parser_cocci_menhir.ml"
+# 19326 "parser_cocci_menhir.ml"
           
         in
         
-# 740 "parser_cocci_menhir.mly"
+# 728 "parser_cocci_menhir.mly"
                                  ( (a,b) )
-# 19289 "parser_cocci_menhir.ml"
+# 19332 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19310,16 +19380,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let b : 'tv_ctype = Obj.magic b in
         let a : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19316 "parser_cocci_menhir.ml"
+# 19359 "parser_cocci_menhir.ml"
         ) = Obj.magic a in
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_mzl_ctype_ = 
-# 2370 "parser_cocci_menhir.mly"
+# 2358 "parser_cocci_menhir.mly"
                  ( (P.clt2mcode "|" a, b) )
-# 19323 "parser_cocci_menhir.ml"
+# 19366 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19344,16 +19414,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let b : 'tv_disj_ident = Obj.magic b in
         let a : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19350 "parser_cocci_menhir.ml"
+# 19393 "parser_cocci_menhir.ml"
         ) = Obj.magic a in
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_mzl_disj_ident_ = 
-# 2370 "parser_cocci_menhir.mly"
+# 2358 "parser_cocci_menhir.mly"
                  ( (P.clt2mcode "|" a, b) )
-# 19357 "parser_cocci_menhir.ml"
+# 19400 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19378,16 +19448,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let b : 'tv_eexpr = Obj.magic b in
         let a : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19384 "parser_cocci_menhir.ml"
+# 19427 "parser_cocci_menhir.ml"
         ) = Obj.magic a in
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_mzl_eexpr_ = 
-# 2370 "parser_cocci_menhir.mly"
+# 2358 "parser_cocci_menhir.mly"
                  ( (P.clt2mcode "|" a, b) )
-# 19391 "parser_cocci_menhir.ml"
+# 19434 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19412,16 +19482,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let b : 'tv_fun_after_dots_or = Obj.magic b in
         let a : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19418 "parser_cocci_menhir.ml"
+# 19461 "parser_cocci_menhir.ml"
         ) = Obj.magic a in
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_mzl_fun_after_dots_or_ = 
-# 2370 "parser_cocci_menhir.mly"
+# 2358 "parser_cocci_menhir.mly"
                  ( (P.clt2mcode "|" a, b) )
-# 19425 "parser_cocci_menhir.ml"
+# 19468 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19446,16 +19516,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let b : 'tv_fun_start = Obj.magic b in
         let a : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19452 "parser_cocci_menhir.ml"
+# 19495 "parser_cocci_menhir.ml"
         ) = Obj.magic a in
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_mzl_fun_start_ = 
-# 2370 "parser_cocci_menhir.mly"
+# 2358 "parser_cocci_menhir.mly"
                  ( (P.clt2mcode "|" a, b) )
-# 19459 "parser_cocci_menhir.ml"
+# 19502 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19480,16 +19550,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let b : 'tv_mctype = Obj.magic b in
         let a : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19486 "parser_cocci_menhir.ml"
+# 19529 "parser_cocci_menhir.ml"
         ) = Obj.magic a in
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_mzl_mctype_ = 
-# 2370 "parser_cocci_menhir.mly"
+# 2358 "parser_cocci_menhir.mly"
                  ( (P.clt2mcode "|" a, b) )
-# 19493 "parser_cocci_menhir.ml"
+# 19536 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19514,16 +19584,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let b : 'tv_rule_elem_statement = Obj.magic b in
         let a : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19520 "parser_cocci_menhir.ml"
+# 19563 "parser_cocci_menhir.ml"
         ) = Obj.magic a in
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_mzl_rule_elem_statement_ = 
-# 2370 "parser_cocci_menhir.mly"
+# 2358 "parser_cocci_menhir.mly"
                  ( (P.clt2mcode "|" a, b) )
-# 19527 "parser_cocci_menhir.ml"
+# 19570 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19548,16 +19618,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let b : 'tv_statement = Obj.magic b in
         let a : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19554 "parser_cocci_menhir.ml"
+# 19597 "parser_cocci_menhir.ml"
         ) = Obj.magic a in
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_mzl_statement_ = 
-# 2370 "parser_cocci_menhir.mly"
+# 2358 "parser_cocci_menhir.mly"
                  ( (P.clt2mcode "|" a, b) )
-# 19561 "parser_cocci_menhir.ml"
+# 19604 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19582,16 +19652,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let b : 'tv_struct_decl_one = Obj.magic b in
         let a : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19588 "parser_cocci_menhir.ml"
+# 19631 "parser_cocci_menhir.ml"
         ) = Obj.magic a in
         let _startpos = _startpos_a_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_mzl_struct_decl_one_ = 
-# 2370 "parser_cocci_menhir.mly"
+# 2358 "parser_cocci_menhir.mly"
                  ( (P.clt2mcode "|" a, b) )
-# 19595 "parser_cocci_menhir.ml"
+# 19638 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19613,9 +19683,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_name_opt_decl = 
-# 1090 "parser_cocci_menhir.mly"
+# 1078 "parser_cocci_menhir.mly"
             ( _1 )
-# 19619 "parser_cocci_menhir.ml"
+# 19662 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19664,43 +19734,43 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let rp1 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19670 "parser_cocci_menhir.ml"
+# 19713 "parser_cocci_menhir.ml"
         ) = Obj.magic rp1 in
         let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in
         let lp1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19676 "parser_cocci_menhir.ml"
+# 19719 "parser_cocci_menhir.ml"
         ) = Obj.magic lp1 in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19681 "parser_cocci_menhir.ml"
+# 19724 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let s : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19686 "parser_cocci_menhir.ml"
+# 19729 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19691 "parser_cocci_menhir.ml"
+# 19734 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let t : 'tv_ctype = Obj.magic t in
         let _startpos = _startpos_t_ in
         let _endpos = _endpos_rp1_ in
         let _v : 'tv_name_opt_decl = 
-# 1093 "parser_cocci_menhir.mly"
+# 1081 "parser_cocci_menhir.mly"
         ( let fnptr =
          Ast0.wrap
            (Ast0.FunctionPointer
               (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp,
                P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in
        Ast0.wrap(Ast0.Param(fnptr, None)) )
-# 19704 "parser_cocci_menhir.ml"
+# 19747 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19728,9 +19798,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nest_after_dots = 
-# 2312 "parser_cocci_menhir.mly"
+# 2300 "parser_cocci_menhir.mly"
                                      (_1@_2)
-# 19734 "parser_cocci_menhir.ml"
+# 19777 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19756,9 +19826,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nest_after_dots = 
-# 2313 "parser_cocci_menhir.mly"
+# 2301 "parser_cocci_menhir.mly"
                                 (_2)
-# 19762 "parser_cocci_menhir.ml"
+# 19805 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19786,9 +19856,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nest_after_dots = 
-# 2314 "parser_cocci_menhir.mly"
+# 2302 "parser_cocci_menhir.mly"
                                 ((Ast0.wrap(Ast0.Exp(_1)))::_2)
-# 19792 "parser_cocci_menhir.ml"
+# 19835 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19803,9 +19873,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_nest_after_exp = 
-# 2322 "parser_cocci_menhir.mly"
+# 2310 "parser_cocci_menhir.mly"
                                 ([])
-# 19809 "parser_cocci_menhir.ml"
+# 19852 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19833,9 +19903,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nest_after_exp = 
-# 2323 "parser_cocci_menhir.mly"
+# 2311 "parser_cocci_menhir.mly"
                                 (_1::_2)
-# 19839 "parser_cocci_menhir.ml"
+# 19882 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19850,9 +19920,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_nest_after_stm = 
-# 2317 "parser_cocci_menhir.mly"
+# 2305 "parser_cocci_menhir.mly"
                                 ([])
-# 19856 "parser_cocci_menhir.ml"
+# 19899 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19880,9 +19950,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nest_after_stm = 
-# 2318 "parser_cocci_menhir.mly"
+# 2306 "parser_cocci_menhir.mly"
                                 (_1::_2)
-# 19886 "parser_cocci_menhir.ml"
+# 19929 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19910,9 +19980,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nest_after_stm = 
-# 2319 "parser_cocci_menhir.mly"
+# 2307 "parser_cocci_menhir.mly"
                                 (_1@_2)
-# 19916 "parser_cocci_menhir.ml"
+# 19959 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19941,24 +20011,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let c : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19947 "parser_cocci_menhir.ml"
+# 19990 "parser_cocci_menhir.ml"
         ) = Obj.magic c in
         let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in
         let _1 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19953 "parser_cocci_menhir.ml"
+# 19996 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_c_ in
         let _v : 'tv_nest_expressions = 
-# 1499 "parser_cocci_menhir.mly"
+# 1487 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<..." _1,
                              Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))),
                              P.clt2mcode "...>" c, None, false)) )
-# 19962 "parser_cocci_menhir.ml"
+# 20005 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19987,24 +20057,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let c : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19993 "parser_cocci_menhir.ml"
+# 20036 "parser_cocci_menhir.ml"
         ) = Obj.magic c in
         let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in
         let _1 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 19999 "parser_cocci_menhir.ml"
+# 20042 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_c_ in
         let _v : 'tv_nest_expressions = 
-# 1503 "parser_cocci_menhir.mly"
+# 1491 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<+..." _1,
                              Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))),
                              P.clt2mcode "...+>" c, None, true)) )
-# 20008 "parser_cocci_menhir.ml"
+# 20051 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20023,16 +20093,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 20029 "parser_cocci_menhir.ml"
+# 20072 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_nest_expressions = 
-# 1506 "parser_cocci_menhir.mly"
+# 1494 "parser_cocci_menhir.mly"
         ( tmeta_to_exp _1 )
-# 20036 "parser_cocci_menhir.ml"
+# 20079 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20061,24 +20131,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let c : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20067 "parser_cocci_menhir.ml"
+# 20110 "parser_cocci_menhir.ml"
         ) = Obj.magic c in
         let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in
         let _1 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20073 "parser_cocci_menhir.ml"
+# 20116 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_c_ in
         let _v : 'tv_nest_expressions_only = 
-# 1510 "parser_cocci_menhir.mly"
+# 1498 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<..." _1,
                              Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))),
                              P.clt2mcode "...>" c, None, false)) )
-# 20082 "parser_cocci_menhir.ml"
+# 20125 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20107,24 +20177,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let c : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20113 "parser_cocci_menhir.ml"
+# 20156 "parser_cocci_menhir.ml"
         ) = Obj.magic c in
         let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in
         let _1 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20119 "parser_cocci_menhir.ml"
+# 20162 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_c_ in
         let _v : 'tv_nest_expressions_only = 
-# 1514 "parser_cocci_menhir.mly"
+# 1502 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<+..." _1,
                              Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))),
                              P.clt2mcode "...+>" c, None, true)) )
-# 20128 "parser_cocci_menhir.ml"
+# 20171 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20146,9 +20216,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_nest_start = 
-# 2309 "parser_cocci_menhir.mly"
+# 2297 "parser_cocci_menhir.mly"
                    ( Ast0.wrap(Ast0.DOTS(_1)) )
-# 20152 "parser_cocci_menhir.ml"
+# 20195 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20168,13 +20238,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (
-# 242 "parser_cocci_menhir.mly"
+# 216 "parser_cocci_menhir.mly"
       (unit)
-# 20174 "parser_cocci_menhir.ml"
+# 20217 "parser_cocci_menhir.ml"
         ) = 
-# 2437 "parser_cocci_menhir.mly"
+# 2425 "parser_cocci_menhir.mly"
                     ( () )
-# 20178 "parser_cocci_menhir.ml"
+# 20221 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20198,13 +20268,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 242 "parser_cocci_menhir.mly"
+# 216 "parser_cocci_menhir.mly"
       (unit)
-# 20204 "parser_cocci_menhir.ml"
+# 20247 "parser_cocci_menhir.ml"
         ) = 
-# 2438 "parser_cocci_menhir.mly"
+# 2426 "parser_cocci_menhir.mly"
                     ( () )
-# 20208 "parser_cocci_menhir.ml"
+# 20251 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20224,13 +20294,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (
-# 242 "parser_cocci_menhir.mly"
+# 216 "parser_cocci_menhir.mly"
       (unit)
-# 20230 "parser_cocci_menhir.ml"
+# 20273 "parser_cocci_menhir.ml"
         ) = 
-# 2439 "parser_cocci_menhir.mly"
+# 2427 "parser_cocci_menhir.mly"
                     ( () )
-# 20234 "parser_cocci_menhir.ml"
+# 20277 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20258,10 +20328,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_g_ in
         let _endpos = _endpos_dg_ in
         let _v : 'tv_no_dot_start_end_dexpr_edots_when_TEllipsis_eexpr__ = 
-# 1756 "parser_cocci_menhir.mly"
+# 1744 "parser_cocci_menhir.mly"
   ( function dot_builder ->
       g :: (List.concat(List.map (function (d,g) -> [dot_builder d;g]) dg)) )
-# 20265 "parser_cocci_menhir.ml"
+# 20308 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20280,16 +20350,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let ty : (
-# 118 "parser_cocci_menhir.mly"
+# 92 "parser_cocci_menhir.mly"
       (Data.clt)
-# 20286 "parser_cocci_menhir.ml"
+# 20329 "parser_cocci_menhir.ml"
         ) = Obj.magic ty in
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_non_signable_types = 
-# 677 "parser_cocci_menhir.mly"
+# 665 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) )
-# 20293 "parser_cocci_menhir.ml"
+# 20336 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20313,24 +20383,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let ty2 : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 20319 "parser_cocci_menhir.ml"
+# 20362 "parser_cocci_menhir.ml"
         ) = Obj.magic ty2 in
         let ty1 : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 20324 "parser_cocci_menhir.ml"
+# 20367 "parser_cocci_menhir.ml"
         ) = Obj.magic ty1 in
         let _startpos = _startpos_ty1_ in
         let _endpos = _endpos_ty2_ in
         let _v : 'tv_non_signable_types = 
-# 679 "parser_cocci_menhir.mly"
+# 667 "parser_cocci_menhir.mly"
     ( Ast0.wrap
        (Ast0.BaseType
           (Ast.LongDoubleType,
            [P.clt2mcode "long" ty1;P.clt2mcode "double" ty2])) )
-# 20334 "parser_cocci_menhir.ml"
+# 20377 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20349,16 +20419,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let ty : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 20355 "parser_cocci_menhir.ml"
+# 20398 "parser_cocci_menhir.ml"
         ) = Obj.magic ty in
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_non_signable_types = 
-# 684 "parser_cocci_menhir.mly"
+# 672 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) )
-# 20362 "parser_cocci_menhir.ml"
+# 20405 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20377,16 +20447,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let ty : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 20383 "parser_cocci_menhir.ml"
+# 20426 "parser_cocci_menhir.ml"
         ) = Obj.magic ty in
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_non_signable_types = 
-# 686 "parser_cocci_menhir.mly"
+# 674 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) )
-# 20390 "parser_cocci_menhir.ml"
+# 20433 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20405,16 +20475,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let ty : (
-# 117 "parser_cocci_menhir.mly"
+# 91 "parser_cocci_menhir.mly"
       (Data.clt)
-# 20411 "parser_cocci_menhir.ml"
+# 20454 "parser_cocci_menhir.ml"
         ) = Obj.magic ty in
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_non_signable_types = 
-# 688 "parser_cocci_menhir.mly"
+# 676 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.BaseType(Ast.SizeType,[P.clt2mcode "size_t" ty])) )
-# 20418 "parser_cocci_menhir.ml"
+# 20461 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20433,16 +20503,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let ty : (
-# 117 "parser_cocci_menhir.mly"
+# 91 "parser_cocci_menhir.mly"
       (Data.clt)
-# 20439 "parser_cocci_menhir.ml"
+# 20482 "parser_cocci_menhir.ml"
         ) = Obj.magic ty in
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_non_signable_types = 
-# 690 "parser_cocci_menhir.mly"
+# 678 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.BaseType(Ast.SSizeType,[P.clt2mcode "ssize_t" ty])) )
-# 20446 "parser_cocci_menhir.ml"
+# 20489 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20461,16 +20531,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let ty : (
-# 117 "parser_cocci_menhir.mly"
+# 91 "parser_cocci_menhir.mly"
       (Data.clt)
-# 20467 "parser_cocci_menhir.ml"
+# 20510 "parser_cocci_menhir.ml"
         ) = Obj.magic ty in
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_non_signable_types = 
-# 692 "parser_cocci_menhir.mly"
+# 680 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.BaseType(Ast.PtrDiffType,[P.clt2mcode "ptrdiff_t" ty])) )
-# 20474 "parser_cocci_menhir.ml"
+# 20517 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20495,16 +20565,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let i : 'tv_ident = Obj.magic i in
         let s : (
-# 118 "parser_cocci_menhir.mly"
+# 92 "parser_cocci_menhir.mly"
       (Data.clt)
-# 20501 "parser_cocci_menhir.ml"
+# 20544 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_i_ in
         let _v : 'tv_non_signable_types = 
-# 694 "parser_cocci_menhir.mly"
+# 682 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, Some i)) )
-# 20508 "parser_cocci_menhir.ml"
+# 20551 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20538,20 +20608,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let r : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20544 "parser_cocci_menhir.ml"
+# 20587 "parser_cocci_menhir.ml"
         ) = Obj.magic r in
         let ids : 'tv_enum_decl_list = Obj.magic ids in
         let l : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20550 "parser_cocci_menhir.ml"
+# 20593 "parser_cocci_menhir.ml"
         ) = Obj.magic l in
         let s : (
-# 118 "parser_cocci_menhir.mly"
+# 92 "parser_cocci_menhir.mly"
       (Data.clt)
-# 20555 "parser_cocci_menhir.ml"
+# 20598 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_r_ in
@@ -20559,16 +20629,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 20563 "parser_cocci_menhir.ml"
+# 20606 "parser_cocci_menhir.ml"
           
         in
         
-# 696 "parser_cocci_menhir.mly"
+# 684 "parser_cocci_menhir.mly"
     ( (if i = None && !Data.in_iso
     then failwith "enums must be named in the iso file");
       Ast0.wrap(Ast0.EnumDef(Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)),
                             P.clt2mcode "{" l, ids, P.clt2mcode "}" r)) )
-# 20572 "parser_cocci_menhir.ml"
+# 20615 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20607,21 +20677,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let r : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20613 "parser_cocci_menhir.ml"
+# 20656 "parser_cocci_menhir.ml"
         ) = Obj.magic r in
         let ids : 'tv_enum_decl_list = Obj.magic ids in
         let l : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20619 "parser_cocci_menhir.ml"
+# 20662 "parser_cocci_menhir.ml"
         ) = Obj.magic l in
         let x0 : 'tv_ident = Obj.magic x0 in
         let s : (
-# 118 "parser_cocci_menhir.mly"
+# 92 "parser_cocci_menhir.mly"
       (Data.clt)
-# 20625 "parser_cocci_menhir.ml"
+# 20668 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_r_ in
@@ -20630,16 +20700,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 20634 "parser_cocci_menhir.ml"
+# 20677 "parser_cocci_menhir.ml"
           
         in
         
-# 696 "parser_cocci_menhir.mly"
+# 684 "parser_cocci_menhir.mly"
     ( (if i = None && !Data.in_iso
     then failwith "enums must be named in the iso file");
       Ast0.wrap(Ast0.EnumDef(Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)),
                             P.clt2mcode "{" l, ids, P.clt2mcode "}" r)) )
-# 20643 "parser_cocci_menhir.ml"
+# 20686 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20667,9 +20737,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_i_ in
         let _v : 'tv_non_signable_types = 
-# 701 "parser_cocci_menhir.mly"
+# 689 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) )
-# 20673 "parser_cocci_menhir.ml"
+# 20716 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20703,15 +20773,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let r : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20709 "parser_cocci_menhir.ml"
+# 20752 "parser_cocci_menhir.ml"
         ) = Obj.magic r in
         let d : 'tv_struct_decl_list = Obj.magic d in
         let l : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20715 "parser_cocci_menhir.ml"
+# 20758 "parser_cocci_menhir.ml"
         ) = Obj.magic l in
         let s : 'tv_struct_or_union = Obj.magic s in
         let _startpos = _startpos_s_ in
@@ -20720,17 +20790,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 20724 "parser_cocci_menhir.ml"
+# 20767 "parser_cocci_menhir.ml"
           
         in
         
-# 704 "parser_cocci_menhir.mly"
+# 692 "parser_cocci_menhir.mly"
     ( (if i = None && !Data.in_iso
     then failwith "structures must be named in the iso file");
       Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
                                    P.clt2mcode "{" l,
                                    d, P.clt2mcode "}" r)) )
-# 20734 "parser_cocci_menhir.ml"
+# 20777 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20769,15 +20839,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let r : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20775 "parser_cocci_menhir.ml"
+# 20818 "parser_cocci_menhir.ml"
         ) = Obj.magic r in
         let d : 'tv_struct_decl_list = Obj.magic d in
         let l : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20781 "parser_cocci_menhir.ml"
+# 20824 "parser_cocci_menhir.ml"
         ) = Obj.magic l in
         let x0 : 'tv_type_ident = Obj.magic x0 in
         let s : 'tv_struct_or_union = Obj.magic s in
@@ -20788,17 +20858,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 20792 "parser_cocci_menhir.ml"
+# 20835 "parser_cocci_menhir.ml"
           
         in
         
-# 704 "parser_cocci_menhir.mly"
+# 692 "parser_cocci_menhir.mly"
     ( (if i = None && !Data.in_iso
     then failwith "structures must be named in the iso file");
       Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)),
                                    P.clt2mcode "{" l,
                                    d, P.clt2mcode "}" r)) )
-# 20802 "parser_cocci_menhir.ml"
+# 20845 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20832,29 +20902,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let r : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20838 "parser_cocci_menhir.ml"
+# 20881 "parser_cocci_menhir.ml"
         ) = Obj.magic r in
         let d : 'tv_struct_decl_list = Obj.magic d in
         let l : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20844 "parser_cocci_menhir.ml"
+# 20887 "parser_cocci_menhir.ml"
         ) = Obj.magic l in
         let s : (
-# 134 "parser_cocci_menhir.mly"
+# 108 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 20849 "parser_cocci_menhir.ml"
+# 20892 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_non_signable_types = 
-# 710 "parser_cocci_menhir.mly"
+# 698 "parser_cocci_menhir.mly"
     ( let (nm,pure,clt) = s in
     let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in
     Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) )
-# 20858 "parser_cocci_menhir.ml"
+# 20901 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20873,16 +20943,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let p : (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 20879 "parser_cocci_menhir.ml"
+# 20922 "parser_cocci_menhir.ml"
         ) = Obj.magic p in
         let _startpos = _startpos_p_ in
         let _endpos = _endpos_p_ in
         let _v : 'tv_non_signable_types = 
-# 714 "parser_cocci_menhir.mly"
+# 702 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) )
-# 20886 "parser_cocci_menhir.ml"
+# 20929 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20901,16 +20971,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let x : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20907 "parser_cocci_menhir.ml"
+# 20950 "parser_cocci_menhir.ml"
         ) = Obj.magic x in
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_x_ in
         let _v : 'tv_nonempty_list_TMul_ = 
 # 124 "standard.mly"
     ( [ x ] )
-# 20914 "parser_cocci_menhir.ml"
+# 20957 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20935,16 +21005,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let xs : 'tv_nonempty_list_TMul_ = Obj.magic xs in
         let x : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20941 "parser_cocci_menhir.ml"
+# 20984 "parser_cocci_menhir.ml"
         ) = Obj.magic x in
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_xs_ in
         let _v : 'tv_nonempty_list_TMul_ = 
 # 126 "standard.mly"
     ( x :: xs )
-# 20948 "parser_cocci_menhir.ml"
+# 20991 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20966,9 +21036,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = 
-# 2119 "parser_cocci_menhir.mly"
+# 2107 "parser_cocci_menhir.mly"
        ( fun build_dots build_comma -> [_1] )
-# 20972 "parser_cocci_menhir.ml"
+# 21015 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20992,18 +21062,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 20998 "parser_cocci_menhir.ml"
+# 21041 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_aexpr = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = 
-# 2121 "parser_cocci_menhir.mly"
+# 2109 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
-# 21007 "parser_cocci_menhir.ml"
+# 21050 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21033,19 +21103,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_nonempty_list_start_aexpr_TEllipsis_ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21039 "parser_cocci_menhir.ml"
+# 21082 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_aexpr = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = 
-# 2124 "parser_cocci_menhir.mly"
+# 2112 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (_3 build_dots build_comma) )
-# 21049 "parser_cocci_menhir.ml"
+# 21092 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21071,9 +21141,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = 
-# 2127 "parser_cocci_menhir.mly"
+# 2115 "parser_cocci_menhir.mly"
                                             ( _2 )
-# 21077 "parser_cocci_menhir.ml"
+# 21120 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21092,16 +21162,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21098 "parser_cocci_menhir.ml"
+# 21141 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = 
-# 2128 "parser_cocci_menhir.mly"
+# 2116 "parser_cocci_menhir.mly"
            ( fun build_dots build_comma -> [(build_dots "..." d)] )
-# 21105 "parser_cocci_menhir.ml"
+# 21148 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21125,22 +21195,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21131 "parser_cocci_menhir.ml"
+# 21174 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21136 "parser_cocci_menhir.ml"
+# 21179 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = 
-# 2130 "parser_cocci_menhir.mly"
+# 2118 "parser_cocci_menhir.mly"
       ( fun build_dots build_comma ->
        [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
-# 21144 "parser_cocci_menhir.ml"
+# 21187 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21170,24 +21240,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let r : 'tv_continue_list_aexpr_TEllipsis_ = Obj.magic r in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21176 "parser_cocci_menhir.ml"
+# 21219 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21181 "parser_cocci_menhir.ml"
+# 21224 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_nonempty_list_start_aexpr_TEllipsis_ = 
-# 2133 "parser_cocci_menhir.mly"
+# 2121 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       (build_dots "..." d)::
       (Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (r build_dots build_comma) )
-# 21191 "parser_cocci_menhir.ml"
+# 21234 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21209,9 +21279,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = 
-# 2119 "parser_cocci_menhir.mly"
+# 2107 "parser_cocci_menhir.mly"
        ( fun build_dots build_comma -> [_1] )
-# 21215 "parser_cocci_menhir.ml"
+# 21258 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21235,18 +21305,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21241 "parser_cocci_menhir.ml"
+# 21284 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_dparam = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = 
-# 2121 "parser_cocci_menhir.mly"
+# 2109 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
-# 21250 "parser_cocci_menhir.ml"
+# 21293 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21276,19 +21346,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_nonempty_list_start_dparam_TEllipsis_ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21282 "parser_cocci_menhir.ml"
+# 21325 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_dparam = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = 
-# 2124 "parser_cocci_menhir.mly"
+# 2112 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (_3 build_dots build_comma) )
-# 21292 "parser_cocci_menhir.ml"
+# 21335 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21314,9 +21384,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = 
-# 2127 "parser_cocci_menhir.mly"
+# 2115 "parser_cocci_menhir.mly"
                                             ( _2 )
-# 21320 "parser_cocci_menhir.ml"
+# 21363 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21335,16 +21405,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21341 "parser_cocci_menhir.ml"
+# 21384 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = 
-# 2128 "parser_cocci_menhir.mly"
+# 2116 "parser_cocci_menhir.mly"
            ( fun build_dots build_comma -> [(build_dots "..." d)] )
-# 21348 "parser_cocci_menhir.ml"
+# 21391 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21368,22 +21438,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21374 "parser_cocci_menhir.ml"
+# 21417 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21379 "parser_cocci_menhir.ml"
+# 21422 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = 
-# 2130 "parser_cocci_menhir.mly"
+# 2118 "parser_cocci_menhir.mly"
       ( fun build_dots build_comma ->
        [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
-# 21387 "parser_cocci_menhir.ml"
+# 21430 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21413,24 +21483,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let r : 'tv_continue_list_dparam_TEllipsis_ = Obj.magic r in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21419 "parser_cocci_menhir.ml"
+# 21462 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21424 "parser_cocci_menhir.ml"
+# 21467 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_nonempty_list_start_dparam_TEllipsis_ = 
-# 2133 "parser_cocci_menhir.mly"
+# 2121 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       (build_dots "..." d)::
       (Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (r build_dots build_comma) )
-# 21434 "parser_cocci_menhir.ml"
+# 21477 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21452,9 +21522,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = 
-# 2119 "parser_cocci_menhir.mly"
+# 2107 "parser_cocci_menhir.mly"
        ( fun build_dots build_comma -> [_1] )
-# 21458 "parser_cocci_menhir.ml"
+# 21501 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21478,18 +21548,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21484 "parser_cocci_menhir.ml"
+# 21527 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_enum_decl_one = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = 
-# 2121 "parser_cocci_menhir.mly"
+# 2109 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
-# 21493 "parser_cocci_menhir.ml"
+# 21536 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21519,19 +21589,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21525 "parser_cocci_menhir.ml"
+# 21568 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_enum_decl_one = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = 
-# 2124 "parser_cocci_menhir.mly"
+# 2112 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (_3 build_dots build_comma) )
-# 21535 "parser_cocci_menhir.ml"
+# 21578 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21557,9 +21627,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = 
-# 2127 "parser_cocci_menhir.mly"
+# 2115 "parser_cocci_menhir.mly"
                                             ( _2 )
-# 21563 "parser_cocci_menhir.ml"
+# 21606 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21581,9 +21651,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = 
-# 2128 "parser_cocci_menhir.mly"
+# 2116 "parser_cocci_menhir.mly"
            ( fun build_dots build_comma -> [(build_dots "..." d)] )
-# 21587 "parser_cocci_menhir.ml"
+# 21630 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21607,18 +21677,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21613 "parser_cocci_menhir.ml"
+# 21656 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let d : 'tv_edots_when_TEllipsis_enum_decl_one_ = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = 
-# 2130 "parser_cocci_menhir.mly"
+# 2118 "parser_cocci_menhir.mly"
       ( fun build_dots build_comma ->
        [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
-# 21622 "parser_cocci_menhir.ml"
+# 21665 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21648,20 +21718,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let r : 'tv_continue_list_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = Obj.magic r in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21654 "parser_cocci_menhir.ml"
+# 21697 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let d : 'tv_edots_when_TEllipsis_enum_decl_one_ = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_nonempty_list_start_enum_decl_one_edots_when_TEllipsis_enum_decl_one__ = 
-# 2133 "parser_cocci_menhir.mly"
+# 2121 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       (build_dots "..." d)::
       (Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (r build_dots build_comma) )
-# 21665 "parser_cocci_menhir.ml"
+# 21708 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21683,9 +21753,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2119 "parser_cocci_menhir.mly"
+# 2107 "parser_cocci_menhir.mly"
        ( fun build_dots build_comma -> [_1] )
-# 21689 "parser_cocci_menhir.ml"
+# 21732 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21709,18 +21779,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21715 "parser_cocci_menhir.ml"
+# 21758 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_initialize2 = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2121 "parser_cocci_menhir.mly"
+# 2109 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
-# 21724 "parser_cocci_menhir.ml"
+# 21767 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21750,19 +21820,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21756 "parser_cocci_menhir.ml"
+# 21799 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_initialize2 = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2124 "parser_cocci_menhir.mly"
+# 2112 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (_3 build_dots build_comma) )
-# 21766 "parser_cocci_menhir.ml"
+# 21809 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21788,9 +21858,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2127 "parser_cocci_menhir.mly"
+# 2115 "parser_cocci_menhir.mly"
                                             ( _2 )
-# 21794 "parser_cocci_menhir.ml"
+# 21837 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21812,9 +21882,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2128 "parser_cocci_menhir.mly"
+# 2116 "parser_cocci_menhir.mly"
            ( fun build_dots build_comma -> [(build_dots "..." d)] )
-# 21818 "parser_cocci_menhir.ml"
+# 21861 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21838,18 +21908,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21844 "parser_cocci_menhir.ml"
+# 21887 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let d : 'tv_edots_when_TEllipsis_initialize_ = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2130 "parser_cocci_menhir.mly"
+# 2118 "parser_cocci_menhir.mly"
       ( fun build_dots build_comma ->
        [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
-# 21853 "parser_cocci_menhir.ml"
+# 21896 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21879,20 +21949,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let r : 'tv_continue_list_initialize2_edots_when_TEllipsis_initialize__ = Obj.magic r in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21885 "parser_cocci_menhir.ml"
+# 21928 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let d : 'tv_edots_when_TEllipsis_initialize_ = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_nonempty_list_start_initialize2_edots_when_TEllipsis_initialize__ = 
-# 2133 "parser_cocci_menhir.mly"
+# 2121 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       (build_dots "..." d)::
       (Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (r build_dots build_comma) )
-# 21896 "parser_cocci_menhir.ml"
+# 21939 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21914,9 +21984,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = 
-# 2119 "parser_cocci_menhir.mly"
+# 2107 "parser_cocci_menhir.mly"
        ( fun build_dots build_comma -> [_1] )
-# 21920 "parser_cocci_menhir.ml"
+# 21963 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21940,18 +22010,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21946 "parser_cocci_menhir.ml"
+# 21989 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_one_dec_decl_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = 
-# 2121 "parser_cocci_menhir.mly"
+# 2109 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
-# 21955 "parser_cocci_menhir.ml"
+# 21998 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21981,19 +22051,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 21987 "parser_cocci_menhir.ml"
+# 22030 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_one_dec_decl_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = 
-# 2124 "parser_cocci_menhir.mly"
+# 2112 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (_3 build_dots build_comma) )
-# 21997 "parser_cocci_menhir.ml"
+# 22040 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22019,9 +22089,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = 
-# 2127 "parser_cocci_menhir.mly"
+# 2115 "parser_cocci_menhir.mly"
                                             ( _2 )
-# 22025 "parser_cocci_menhir.ml"
+# 22068 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22040,16 +22110,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22046 "parser_cocci_menhir.ml"
+# 22089 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = 
-# 2128 "parser_cocci_menhir.mly"
+# 2116 "parser_cocci_menhir.mly"
            ( fun build_dots build_comma -> [(build_dots "..." d)] )
-# 22053 "parser_cocci_menhir.ml"
+# 22096 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22073,22 +22143,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22079 "parser_cocci_menhir.ml"
+# 22122 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22084 "parser_cocci_menhir.ml"
+# 22127 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = 
-# 2130 "parser_cocci_menhir.mly"
+# 2118 "parser_cocci_menhir.mly"
       ( fun build_dots build_comma ->
        [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
-# 22092 "parser_cocci_menhir.ml"
+# 22135 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22118,24 +22188,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let r : 'tv_continue_list_one_dec_decl__TEllipsis_ = Obj.magic r in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22124 "parser_cocci_menhir.ml"
+# 22167 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22129 "parser_cocci_menhir.ml"
+# 22172 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_nonempty_list_start_one_dec_decl__TEllipsis_ = 
-# 2133 "parser_cocci_menhir.mly"
+# 2121 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       (build_dots "..." d)::
       (Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (r build_dots build_comma) )
-# 22139 "parser_cocci_menhir.ml"
+# 22182 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22157,9 +22227,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = 
-# 2119 "parser_cocci_menhir.mly"
+# 2107 "parser_cocci_menhir.mly"
        ( fun build_dots build_comma -> [_1] )
-# 22163 "parser_cocci_menhir.ml"
+# 22206 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22183,18 +22253,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22189 "parser_cocci_menhir.ml"
+# 22232 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_one_dec_name_opt_decl_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = 
-# 2121 "parser_cocci_menhir.mly"
+# 2109 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::[Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
-# 22198 "parser_cocci_menhir.ml"
+# 22241 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22224,19 +22294,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22230 "parser_cocci_menhir.ml"
+# 22273 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_one_dec_name_opt_decl_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = 
-# 2124 "parser_cocci_menhir.mly"
+# 2112 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       _1::(Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (_3 build_dots build_comma) )
-# 22240 "parser_cocci_menhir.ml"
+# 22283 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22262,9 +22332,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = 
-# 2127 "parser_cocci_menhir.mly"
+# 2115 "parser_cocci_menhir.mly"
                                             ( _2 )
-# 22268 "parser_cocci_menhir.ml"
+# 22311 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22283,16 +22353,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22289 "parser_cocci_menhir.ml"
+# 22332 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = 
-# 2128 "parser_cocci_menhir.mly"
+# 2116 "parser_cocci_menhir.mly"
            ( fun build_dots build_comma -> [(build_dots "..." d)] )
-# 22296 "parser_cocci_menhir.ml"
+# 22339 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22316,22 +22386,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22322 "parser_cocci_menhir.ml"
+# 22365 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22327 "parser_cocci_menhir.ml"
+# 22370 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = 
-# 2130 "parser_cocci_menhir.mly"
+# 2118 "parser_cocci_menhir.mly"
       ( fun build_dots build_comma ->
        [(build_dots "..." d);Ast0.wrap(build_comma(P.clt2mcode "," _2))] )
-# 22335 "parser_cocci_menhir.ml"
+# 22378 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22361,24 +22431,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let r : 'tv_continue_list_one_dec_name_opt_decl__TEllipsis_ = Obj.magic r in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22367 "parser_cocci_menhir.ml"
+# 22410 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let d : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22372 "parser_cocci_menhir.ml"
+# 22415 "parser_cocci_menhir.ml"
         ) = Obj.magic d in
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_nonempty_list_start_one_dec_name_opt_decl__TEllipsis_ = 
-# 2133 "parser_cocci_menhir.mly"
+# 2121 "parser_cocci_menhir.mly"
     ( fun build_dots build_comma ->
       (build_dots "..." d)::
       (Ast0.wrap(build_comma(P.clt2mcode "," _2)))::
       (r build_dots build_comma) )
-# 22382 "parser_cocci_menhir.ml"
+# 22425 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22404,13 +22474,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_i_ in
         let _v : 'tv_not_ceq = 
-# 1952 "parser_cocci_menhir.mly"
+# 1940 "parser_cocci_menhir.mly"
          ( (if !Data.in_iso
           then failwith "constraints not allowed in iso file");
           (if !Data.in_generating
           then failwith "constraints not allowed in a generated rule file");
           [i] )
-# 22414 "parser_cocci_menhir.ml"
+# 22457 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22444,13 +22514,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_not_ceq = 
-# 1958 "parser_cocci_menhir.mly"
+# 1946 "parser_cocci_menhir.mly"
   ( (if !Data.in_iso
           then failwith "constraints not allowed in iso file");
           (if !Data.in_generating
           then failwith "constraints not allowed in a generated rule file");
           l )
-# 22454 "parser_cocci_menhir.ml"
+# 22497 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22472,9 +22542,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_ceq_ in
         let _endpos = _endpos_ceq_ in
         let _v : 'tv_not_ceq_or_sub = 
-# 1928 "parser_cocci_menhir.mly"
+# 1916 "parser_cocci_menhir.mly"
                   (Ast0.NotExpCstrt ceq)
-# 22478 "parser_cocci_menhir.ml"
+# 22521 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22496,9 +22566,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_s_ in
         let _v : 'tv_not_ceq_or_sub = 
-# 1929 "parser_cocci_menhir.mly"
+# 1917 "parser_cocci_menhir.mly"
                   (Ast0.SubExpCstrt s)
-# 22502 "parser_cocci_menhir.ml"
+# 22545 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22524,14 +22594,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_i_ in
         let _v : 'tv_not_eqe = 
-# 1933 "parser_cocci_menhir.mly"
+# 1921 "parser_cocci_menhir.mly"
          ( (if !Data.in_iso
           then failwith "constraints not allowed in iso file");
           (if !Data.in_generating
           then failwith "constraints not allowed in a generated rule file");
           [Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))]
         )
-# 22535 "parser_cocci_menhir.ml"
+# 22578 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22565,7 +22635,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_not_eqe = 
-# 1940 "parser_cocci_menhir.mly"
+# 1928 "parser_cocci_menhir.mly"
   ( (if !Data.in_iso
           then failwith "constraints not allowed in iso file");
           (if !Data.in_generating
@@ -22575,7 +22645,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
                Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i)))))
             l
         )
-# 22579 "parser_cocci_menhir.ml"
+# 22622 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22601,7 +22671,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_i_ in
         let _v : 'tv_not_eqid = 
-# 1890 "parser_cocci_menhir.mly"
+# 1878 "parser_cocci_menhir.mly"
          ( (if !Data.in_iso
           then failwith "constraints not allowed in iso file");
           (if !Data.in_generating
@@ -22615,7 +22685,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
                   (function mv -> Ast.MetaIdDecl(Ast.NONE,mv)) in
               Ast.IdNegIdSet([],[i])
           | (None,i) -> Ast.IdNegIdSet([i],[])) )
-# 22619 "parser_cocci_menhir.ml"
+# 22662 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22649,7 +22719,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_not_eqid = 
-# 1904 "parser_cocci_menhir.mly"
+# 1892 "parser_cocci_menhir.mly"
   ( (if !Data.in_iso
           then failwith "constraints not allowed in iso file");
           (if !Data.in_generating
@@ -22667,7 +22737,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               ([],[]) l in
           Ast.IdNegIdSet(str,meta)
         )
-# 22671 "parser_cocci_menhir.ml"
+# 22714 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22693,7 +22763,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_i_ in
         let _v : 'tv_not_pos = 
-# 1997 "parser_cocci_menhir.mly"
+# 1985 "parser_cocci_menhir.mly"
          ( (if !Data.in_iso
           then failwith "constraints not allowed in iso file");
           (if !Data.in_generating
@@ -22702,7 +22772,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             P.check_inherited_constraint i
               (function mv -> Ast.MetaPosDecl(Ast.NONE,mv)) in
           [i] )
-# 22706 "parser_cocci_menhir.ml"
+# 22749 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22736,7 +22806,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_not_pos = 
-# 2006 "parser_cocci_menhir.mly"
+# 1994 "parser_cocci_menhir.mly"
   ( (if !Data.in_iso
           then failwith "constraints not allowed in iso file");
           (if !Data.in_generating
@@ -22746,7 +22816,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               P.check_inherited_constraint i
                 (function mv -> Ast.MetaPosDecl(Ast.NONE,mv)))
             l )
-# 22750 "parser_cocci_menhir.ml"
+# 22793 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22768,9 +22838,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_one_dec_decl_ = 
-# 2094 "parser_cocci_menhir.mly"
+# 2082 "parser_cocci_menhir.mly"
         ( _1 )
-# 22774 "parser_cocci_menhir.ml"
+# 22817 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22789,14 +22859,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 136 "parser_cocci_menhir.mly"
+# 110 "parser_cocci_menhir.mly"
        (Parse_aux.list_info)
-# 22795 "parser_cocci_menhir.ml"
+# 22838 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_one_dec_decl_ = 
-# 2096 "parser_cocci_menhir.mly"
+# 2084 "parser_cocci_menhir.mly"
     ( let (nm,lenname,pure,clt) = _1 in
     let nm = P.clt2mcode nm clt in
       let lenname =
@@ -22805,7 +22875,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
        | Ast.MetaLen nm -> Ast0.MetaListLen(P.clt2mcode nm clt)
        | Ast.CstLen n -> Ast0.CstListLen n in
     Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) )
-# 22809 "parser_cocci_menhir.ml"
+# 22852 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22827,9 +22897,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_one_dec_name_opt_decl_ = 
-# 2094 "parser_cocci_menhir.mly"
+# 2082 "parser_cocci_menhir.mly"
         ( _1 )
-# 22833 "parser_cocci_menhir.ml"
+# 22876 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22848,14 +22918,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 136 "parser_cocci_menhir.mly"
+# 110 "parser_cocci_menhir.mly"
        (Parse_aux.list_info)
-# 22854 "parser_cocci_menhir.ml"
+# 22897 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_one_dec_name_opt_decl_ = 
-# 2096 "parser_cocci_menhir.mly"
+# 2084 "parser_cocci_menhir.mly"
     ( let (nm,lenname,pure,clt) = _1 in
     let nm = P.clt2mcode nm clt in
       let lenname =
@@ -22864,7 +22934,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
        | Ast.MetaLen nm -> Ast0.MetaListLen(P.clt2mcode nm clt)
        | Ast.CstLen n -> Ast0.CstListLen n in
     Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) )
-# 22868 "parser_cocci_menhir.ml"
+# 22911 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22888,17 +22958,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22894 "parser_cocci_menhir.ml"
+# 22937 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let t : 'tv_ctype = Obj.magic t in
         let _startpos = _startpos_t_ in
         let _endpos = _endpos_pv_ in
         let _v : 'tv_one_decl_var = 
-# 1288 "parser_cocci_menhir.mly"
+# 1276 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv)) )
-# 22902 "parser_cocci_menhir.ml"
+# 22945 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22917,16 +22987,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 22923 "parser_cocci_menhir.ml"
+# 22966 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_one_decl_var = 
-# 1289 "parser_cocci_menhir.mly"
+# 1277 "parser_cocci_menhir.mly"
               ( P.meta_decl _1 )
-# 22930 "parser_cocci_menhir.ml"
+# 22973 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22955,9 +23025,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 22961 "parser_cocci_menhir.ml"
+# 23004 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let d : 'tv_d_ident = Obj.magic d in
         let t : 'tv_ctype = Obj.magic t in
@@ -22967,14 +23037,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 22971 "parser_cocci_menhir.ml"
+# 23014 "parser_cocci_menhir.ml"
           
         in
         
-# 1291 "parser_cocci_menhir.mly"
+# 1279 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) )
-# 22978 "parser_cocci_menhir.ml"
+# 23021 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23008,9 +23078,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23014 "parser_cocci_menhir.ml"
+# 23057 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let d : 'tv_d_ident = Obj.magic d in
         let t : 'tv_ctype = Obj.magic t in
@@ -23022,14 +23092,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 23026 "parser_cocci_menhir.ml"
+# 23069 "parser_cocci_menhir.ml"
           
         in
         
-# 1291 "parser_cocci_menhir.mly"
+# 1279 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) )
-# 23033 "parser_cocci_menhir.ml"
+# 23076 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23051,9 +23121,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_f_ in
         let _endpos = _endpos_f_ in
         let _v : 'tv_one_decl_var = 
-# 1293 "parser_cocci_menhir.mly"
+# 1281 "parser_cocci_menhir.mly"
                ( f )
-# 23057 "parser_cocci_menhir.ml"
+# 23100 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23092,15 +23162,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23098 "parser_cocci_menhir.ml"
+# 23141 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23104 "parser_cocci_menhir.ml"
+# 23147 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
         let d : 'tv_d_ident = Obj.magic d in
         let t : 'tv_ctype = Obj.magic t in
@@ -23110,14 +23180,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 23114 "parser_cocci_menhir.ml"
+# 23157 "parser_cocci_menhir.ml"
           
         in
         
-# 1295 "parser_cocci_menhir.mly"
+# 1283 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
       Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) )
-# 23121 "parser_cocci_menhir.ml"
+# 23164 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23161,15 +23231,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23167 "parser_cocci_menhir.ml"
+# 23210 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23173 "parser_cocci_menhir.ml"
+# 23216 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
         let d : 'tv_d_ident = Obj.magic d in
         let t : 'tv_ctype = Obj.magic t in
@@ -23181,14 +23251,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 23185 "parser_cocci_menhir.ml"
+# 23228 "parser_cocci_menhir.ml"
           
         in
         
-# 1295 "parser_cocci_menhir.mly"
+# 1283 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
       Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) )
-# 23192 "parser_cocci_menhir.ml"
+# 23235 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23217,9 +23287,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23223 "parser_cocci_menhir.ml"
+# 23266 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let d : 'tv_d_ident = Obj.magic d in
         let i : 'tv_pure_ident_or_symbol = Obj.magic i in
@@ -23229,22 +23299,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 23233 "parser_cocci_menhir.ml"
+# 23276 "parser_cocci_menhir.ml"
           
         in
         let s =
           
 # 39 "standard.mly"
     ( None )
-# 23240 "parser_cocci_menhir.ml"
+# 23283 "parser_cocci_menhir.ml"
           
         in
         
-# 1300 "parser_cocci_menhir.mly"
+# 1288 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
        Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) )
-# 23248 "parser_cocci_menhir.ml"
+# 23291 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23278,9 +23348,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23284 "parser_cocci_menhir.ml"
+# 23327 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let d : 'tv_d_ident = Obj.magic d in
         let i : 'tv_pure_ident_or_symbol = Obj.magic i in
@@ -23292,22 +23362,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 23296 "parser_cocci_menhir.ml"
+# 23339 "parser_cocci_menhir.ml"
           
         in
         let s =
           
 # 39 "standard.mly"
     ( None )
-# 23303 "parser_cocci_menhir.ml"
+# 23346 "parser_cocci_menhir.ml"
           
         in
         
-# 1300 "parser_cocci_menhir.mly"
+# 1288 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
        Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) )
-# 23311 "parser_cocci_menhir.ml"
+# 23354 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23341,9 +23411,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23347 "parser_cocci_menhir.ml"
+# 23390 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let d : 'tv_d_ident = Obj.magic d in
         let i : 'tv_pure_ident_or_symbol = Obj.magic i in
@@ -23354,7 +23424,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 23358 "parser_cocci_menhir.ml"
+# 23401 "parser_cocci_menhir.ml"
           
         in
         let s =
@@ -23362,15 +23432,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 23366 "parser_cocci_menhir.ml"
+# 23409 "parser_cocci_menhir.ml"
           
         in
         
-# 1300 "parser_cocci_menhir.mly"
+# 1288 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
        Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) )
-# 23374 "parser_cocci_menhir.ml"
+# 23417 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23409,9 +23479,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23415 "parser_cocci_menhir.ml"
+# 23458 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let d : 'tv_d_ident = Obj.magic d in
         let i : 'tv_pure_ident_or_symbol = Obj.magic i in
@@ -23424,7 +23494,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 23428 "parser_cocci_menhir.ml"
+# 23471 "parser_cocci_menhir.ml"
           
         in
         let s =
@@ -23432,15 +23502,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 23436 "parser_cocci_menhir.ml"
+# 23479 "parser_cocci_menhir.ml"
           
         in
         
-# 1300 "parser_cocci_menhir.mly"
+# 1288 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
        Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) )
-# 23444 "parser_cocci_menhir.ml"
+# 23487 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23479,15 +23549,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23485 "parser_cocci_menhir.ml"
+# 23528 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23491 "parser_cocci_menhir.ml"
+# 23534 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
         let d : 'tv_d_ident = Obj.magic d in
         let i : 'tv_pure_ident_or_symbol = Obj.magic i in
@@ -23497,24 +23567,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 23501 "parser_cocci_menhir.ml"
+# 23544 "parser_cocci_menhir.ml"
           
         in
         let s =
           
 # 39 "standard.mly"
     ( None )
-# 23508 "parser_cocci_menhir.ml"
+# 23551 "parser_cocci_menhir.ml"
           
         in
         
-# 1305 "parser_cocci_menhir.mly"
+# 1293 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
       !Data.add_type_name (P.id2name i);
       let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
       Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
                           P.clt2mcode ";" pv)) )
-# 23518 "parser_cocci_menhir.ml"
+# 23561 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23558,15 +23628,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23564 "parser_cocci_menhir.ml"
+# 23607 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23570 "parser_cocci_menhir.ml"
+# 23613 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
         let d : 'tv_d_ident = Obj.magic d in
         let i : 'tv_pure_ident_or_symbol = Obj.magic i in
@@ -23578,24 +23648,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 23582 "parser_cocci_menhir.ml"
+# 23625 "parser_cocci_menhir.ml"
           
         in
         let s =
           
 # 39 "standard.mly"
     ( None )
-# 23589 "parser_cocci_menhir.ml"
+# 23632 "parser_cocci_menhir.ml"
           
         in
         
-# 1305 "parser_cocci_menhir.mly"
+# 1293 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
       !Data.add_type_name (P.id2name i);
       let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
       Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
                           P.clt2mcode ";" pv)) )
-# 23599 "parser_cocci_menhir.ml"
+# 23642 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23639,15 +23709,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23645 "parser_cocci_menhir.ml"
+# 23688 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23651 "parser_cocci_menhir.ml"
+# 23694 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
         let d : 'tv_d_ident = Obj.magic d in
         let i : 'tv_pure_ident_or_symbol = Obj.magic i in
@@ -23658,7 +23728,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 23662 "parser_cocci_menhir.ml"
+# 23705 "parser_cocci_menhir.ml"
           
         in
         let s =
@@ -23666,17 +23736,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 23670 "parser_cocci_menhir.ml"
+# 23713 "parser_cocci_menhir.ml"
           
         in
         
-# 1305 "parser_cocci_menhir.mly"
+# 1293 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
       !Data.add_type_name (P.id2name i);
       let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
       Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
                           P.clt2mcode ";" pv)) )
-# 23680 "parser_cocci_menhir.ml"
+# 23723 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23725,15 +23795,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23731 "parser_cocci_menhir.ml"
+# 23774 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23737 "parser_cocci_menhir.ml"
+# 23780 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
         let d : 'tv_d_ident = Obj.magic d in
         let i : 'tv_pure_ident_or_symbol = Obj.magic i in
@@ -23746,7 +23816,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 23750 "parser_cocci_menhir.ml"
+# 23793 "parser_cocci_menhir.ml"
           
         in
         let s =
@@ -23754,17 +23824,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 23758 "parser_cocci_menhir.ml"
+# 23801 "parser_cocci_menhir.ml"
           
         in
         
-# 1305 "parser_cocci_menhir.mly"
+# 1293 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
       !Data.add_type_name (P.id2name i);
       let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
       Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e,
                           P.clt2mcode ";" pv)) )
-# 23768 "parser_cocci_menhir.ml"
+# 23811 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23823,36 +23893,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23829 "parser_cocci_menhir.ml"
+# 23872 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let rp2 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23834 "parser_cocci_menhir.ml"
+# 23877 "parser_cocci_menhir.ml"
         ) = Obj.magic rp2 in
         let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
         let lp2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23840 "parser_cocci_menhir.ml"
+# 23883 "parser_cocci_menhir.ml"
         ) = Obj.magic lp2 in
         let rp1 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23845 "parser_cocci_menhir.ml"
+# 23888 "parser_cocci_menhir.ml"
         ) = Obj.magic rp1 in
         let d : 'tv_d_ident = Obj.magic d in
         let st : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23851 "parser_cocci_menhir.ml"
+# 23894 "parser_cocci_menhir.ml"
         ) = Obj.magic st in
         let lp1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23856 "parser_cocci_menhir.ml"
+# 23899 "parser_cocci_menhir.ml"
         ) = Obj.magic lp1 in
         let t : 'tv_ctype = Obj.magic t in
         let _startpos = _startpos_t_ in
@@ -23861,11 +23931,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 23865 "parser_cocci_menhir.ml"
+# 23908 "parser_cocci_menhir.ml"
           
         in
         
-# 1315 "parser_cocci_menhir.mly"
+# 1303 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         let t =
          Ast0.wrap
@@ -23873,7 +23943,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
                P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
         Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) )
-# 23877 "parser_cocci_menhir.ml"
+# 23920 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23937,36 +24007,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23943 "parser_cocci_menhir.ml"
+# 23986 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let rp2 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23948 "parser_cocci_menhir.ml"
+# 23991 "parser_cocci_menhir.ml"
         ) = Obj.magic rp2 in
         let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
         let lp2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23954 "parser_cocci_menhir.ml"
+# 23997 "parser_cocci_menhir.ml"
         ) = Obj.magic lp2 in
         let rp1 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23959 "parser_cocci_menhir.ml"
+# 24002 "parser_cocci_menhir.ml"
         ) = Obj.magic rp1 in
         let d : 'tv_d_ident = Obj.magic d in
         let st : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23965 "parser_cocci_menhir.ml"
+# 24008 "parser_cocci_menhir.ml"
         ) = Obj.magic st in
         let lp1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 23970 "parser_cocci_menhir.ml"
+# 24013 "parser_cocci_menhir.ml"
         ) = Obj.magic lp1 in
         let t : 'tv_ctype = Obj.magic t in
         let x0 : 'tv_storage = Obj.magic x0 in
@@ -23977,11 +24047,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 23981 "parser_cocci_menhir.ml"
+# 24024 "parser_cocci_menhir.ml"
           
         in
         
-# 1315 "parser_cocci_menhir.mly"
+# 1303 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         let t =
          Ast0.wrap
@@ -23989,7 +24059,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
                P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
         Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) )
-# 23993 "parser_cocci_menhir.ml"
+# 24036 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24028,29 +24098,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _5 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24034 "parser_cocci_menhir.ml"
+# 24077 "parser_cocci_menhir.ml"
         ) = Obj.magic _5 in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24039 "parser_cocci_menhir.ml"
+# 24082 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24045 "parser_cocci_menhir.ml"
+# 24088 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_decl_ident = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : 'tv_one_decl_var = 
-# 1323 "parser_cocci_menhir.mly"
+# 1311 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3,
                                  P.clt2mcode ")" _4,P.clt2mcode ";" _5)) )
-# 24054 "parser_cocci_menhir.ml"
+# 24097 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24099,38 +24169,38 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _7 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24105 "parser_cocci_menhir.ml"
+# 24148 "parser_cocci_menhir.ml"
         ) = Obj.magic _7 in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24111 "parser_cocci_menhir.ml"
+# 24154 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24116 "parser_cocci_menhir.ml"
+# 24159 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24122 "parser_cocci_menhir.ml"
+# 24165 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_decl_ident = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : 'tv_one_decl_var = 
-# 1326 "parser_cocci_menhir.mly"
+# 1314 "parser_cocci_menhir.mly"
       ( Ast0.wrap
             (Ast0.MacroDeclInit
                (_1,P.clt2mcode "(" _2,_3,
                 P.clt2mcode ")" _4,P.clt2mcode "=" q,e,
                 P.clt2mcode ";" _7)) )
-# 24134 "parser_cocci_menhir.ml"
+# 24177 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24199,42 +24269,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24205 "parser_cocci_menhir.ml"
+# 24248 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24211 "parser_cocci_menhir.ml"
+# 24254 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
         let rp2 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24216 "parser_cocci_menhir.ml"
+# 24259 "parser_cocci_menhir.ml"
         ) = Obj.magic rp2 in
         let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
         let lp2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24222 "parser_cocci_menhir.ml"
+# 24265 "parser_cocci_menhir.ml"
         ) = Obj.magic lp2 in
         let rp1 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24227 "parser_cocci_menhir.ml"
+# 24270 "parser_cocci_menhir.ml"
         ) = Obj.magic rp1 in
         let d : 'tv_d_ident = Obj.magic d in
         let st : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24233 "parser_cocci_menhir.ml"
+# 24276 "parser_cocci_menhir.ml"
         ) = Obj.magic st in
         let lp1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24238 "parser_cocci_menhir.ml"
+# 24281 "parser_cocci_menhir.ml"
         ) = Obj.magic lp1 in
         let t : 'tv_ctype = Obj.magic t in
         let _startpos = _startpos_t_ in
@@ -24243,11 +24313,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 24247 "parser_cocci_menhir.ml"
+# 24290 "parser_cocci_menhir.ml"
           
         in
         
-# 1335 "parser_cocci_menhir.mly"
+# 1323 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         let t =
          Ast0.wrap
@@ -24255,7 +24325,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
                P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
       Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)))
-# 24259 "parser_cocci_menhir.ml"
+# 24302 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24329,42 +24399,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24335 "parser_cocci_menhir.ml"
+# 24378 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let e : 'tv_initialize = Obj.magic e in
         let q : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24341 "parser_cocci_menhir.ml"
+# 24384 "parser_cocci_menhir.ml"
         ) = Obj.magic q in
         let rp2 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24346 "parser_cocci_menhir.ml"
+# 24389 "parser_cocci_menhir.ml"
         ) = Obj.magic rp2 in
         let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
         let lp2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24352 "parser_cocci_menhir.ml"
+# 24395 "parser_cocci_menhir.ml"
         ) = Obj.magic lp2 in
         let rp1 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24357 "parser_cocci_menhir.ml"
+# 24400 "parser_cocci_menhir.ml"
         ) = Obj.magic rp1 in
         let d : 'tv_d_ident = Obj.magic d in
         let st : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24363 "parser_cocci_menhir.ml"
+# 24406 "parser_cocci_menhir.ml"
         ) = Obj.magic st in
         let lp1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 24368 "parser_cocci_menhir.ml"
+# 24411 "parser_cocci_menhir.ml"
         ) = Obj.magic lp1 in
         let t : 'tv_ctype = Obj.magic t in
         let x0 : 'tv_storage = Obj.magic x0 in
@@ -24375,11 +24445,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 24379 "parser_cocci_menhir.ml"
+# 24422 "parser_cocci_menhir.ml"
           
         in
         
-# 1335 "parser_cocci_menhir.mly"
+# 1323 "parser_cocci_menhir.mly"
       ( let (id,fn) = d in
         let t =
          Ast0.wrap
@@ -24387,7 +24457,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
                P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
       Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)))
-# 24391 "parser_cocci_menhir.ml"
+# 24434 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24404,7 +24474,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_TLocal_ = 
 # 29 "standard.mly"
     ( None )
-# 24408 "parser_cocci_menhir.ml"
+# 24451 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24428,7 +24498,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_TLocal_ = 
 # 31 "standard.mly"
     ( Some x )
-# 24432 "parser_cocci_menhir.ml"
+# 24475 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24445,7 +24515,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_TPosAny_ = 
 # 29 "standard.mly"
     ( None )
-# 24449 "parser_cocci_menhir.ml"
+# 24492 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24469,7 +24539,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_TPosAny_ = 
 # 31 "standard.mly"
     ( Some x )
-# 24473 "parser_cocci_menhir.ml"
+# 24516 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24486,7 +24556,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_eexpr_ = 
 # 29 "standard.mly"
     ( None )
-# 24490 "parser_cocci_menhir.ml"
+# 24533 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24510,7 +24580,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_eexpr_ = 
 # 31 "standard.mly"
     ( Some x )
-# 24514 "parser_cocci_menhir.ml"
+# 24557 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24527,7 +24597,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_expr_ = 
 # 29 "standard.mly"
     ( None )
-# 24531 "parser_cocci_menhir.ml"
+# 24574 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24551,7 +24621,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_expr_ = 
 # 31 "standard.mly"
     ( Some x )
-# 24555 "parser_cocci_menhir.ml"
+# 24598 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24568,7 +24638,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_not_ceq_or_sub_ = 
 # 29 "standard.mly"
     ( None )
-# 24572 "parser_cocci_menhir.ml"
+# 24615 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24592,7 +24662,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_not_ceq_or_sub_ = 
 # 31 "standard.mly"
     ( Some x )
-# 24596 "parser_cocci_menhir.ml"
+# 24639 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24609,7 +24679,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_re_or_not_eqe_or_sub_ = 
 # 29 "standard.mly"
     ( None )
-# 24613 "parser_cocci_menhir.ml"
+# 24656 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24633,7 +24703,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_re_or_not_eqe_or_sub_ = 
 # 31 "standard.mly"
     ( Some x )
-# 24637 "parser_cocci_menhir.ml"
+# 24680 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24650,7 +24720,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_re_or_not_eqid_ = 
 # 29 "standard.mly"
     ( None )
-# 24654 "parser_cocci_menhir.ml"
+# 24697 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24674,7 +24744,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_option_re_or_not_eqid_ = 
 # 31 "standard.mly"
     ( Some x )
-# 24678 "parser_cocci_menhir.ml"
+# 24721 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24689,9 +24759,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_plus_after_dots = 
-# 2259 "parser_cocci_menhir.mly"
+# 2247 "parser_cocci_menhir.mly"
                                                                          ([])
-# 24695 "parser_cocci_menhir.ml"
+# 24738 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24717,9 +24787,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_plus_after_dots = 
-# 2260 "parser_cocci_menhir.mly"
+# 2248 "parser_cocci_menhir.mly"
                                                                          (_2)
-# 24723 "parser_cocci_menhir.ml"
+# 24766 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24747,9 +24817,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_plus_after_dots = 
-# 2262 "parser_cocci_menhir.mly"
+# 2250 "parser_cocci_menhir.mly"
                      ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 )
-# 24753 "parser_cocci_menhir.ml"
+# 24796 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24777,9 +24847,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_plus_after_dots = 
-# 2263 "parser_cocci_menhir.mly"
+# 2251 "parser_cocci_menhir.mly"
                                              ( Ast0.wrap(Ast0.OTHER(_1))::_2 )
-# 24783 "parser_cocci_menhir.ml"
+# 24826 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24807,9 +24877,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_plus_after_dots = 
-# 2265 "parser_cocci_menhir.mly"
+# 2253 "parser_cocci_menhir.mly"
                 ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 )
-# 24813 "parser_cocci_menhir.ml"
+# 24856 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24824,9 +24894,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_plus_after_exp = 
-# 2255 "parser_cocci_menhir.mly"
+# 2243 "parser_cocci_menhir.mly"
                                                                          ([])
-# 24830 "parser_cocci_menhir.ml"
+# 24873 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24854,9 +24924,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_plus_after_exp = 
-# 2256 "parser_cocci_menhir.mly"
+# 2244 "parser_cocci_menhir.mly"
                                           ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 )
-# 24860 "parser_cocci_menhir.ml"
+# 24903 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24871,9 +24941,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_plus_after_stm = 
-# 2268 "parser_cocci_menhir.mly"
+# 2256 "parser_cocci_menhir.mly"
                                                                          ([])
-# 24877 "parser_cocci_menhir.ml"
+# 24920 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24901,9 +24971,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_plus_after_stm = 
-# 2269 "parser_cocci_menhir.mly"
+# 2257 "parser_cocci_menhir.mly"
                                           ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 )
-# 24907 "parser_cocci_menhir.ml"
+# 24950 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24931,9 +25001,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_plus_after_stm = 
-# 2270 "parser_cocci_menhir.mly"
+# 2258 "parser_cocci_menhir.mly"
                                              ( Ast0.wrap(Ast0.OTHER(_1))::_2 )
-# 24937 "parser_cocci_menhir.ml"
+# 24980 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24961,9 +25031,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_plus_after_stm = 
-# 2272 "parser_cocci_menhir.mly"
+# 2260 "parser_cocci_menhir.mly"
                 ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 )
-# 24967 "parser_cocci_menhir.ml"
+# 25010 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24991,9 +25061,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_f_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_plus_body = 
-# 858 "parser_cocci_menhir.mly"
+# 846 "parser_cocci_menhir.mly"
     ( f@b(*@ew*) )
-# 24997 "parser_cocci_menhir.ml"
+# 25040 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25021,9 +25091,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_f_ in
         let _endpos = _endpos_b_ in
         let _v : 'tv_plus_exp_body = 
-# 872 "parser_cocci_menhir.mly"
+# 860 "parser_cocci_menhir.mly"
     ( f@[b](*@ew*) )
-# 25027 "parser_cocci_menhir.ml"
+# 25070 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25049,13 +25119,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 217 "parser_cocci_menhir.mly"
+# 191 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 25055 "parser_cocci_menhir.ml"
+# 25098 "parser_cocci_menhir.ml"
         ) = 
-# 253 "parser_cocci_menhir.mly"
+# 227 "parser_cocci_menhir.mly"
                                  ( _1 )
-# 25059 "parser_cocci_menhir.ml"
+# 25102 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25081,13 +25151,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_p_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 217 "parser_cocci_menhir.mly"
+# 191 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 25087 "parser_cocci_menhir.ml"
+# 25130 "parser_cocci_menhir.ml"
         ) = 
-# 253 "parser_cocci_menhir.mly"
+# 227 "parser_cocci_menhir.mly"
                                                                     ( p )
-# 25091 "parser_cocci_menhir.ml"
+# 25134 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25113,13 +25183,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_p_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 217 "parser_cocci_menhir.mly"
+# 191 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 25119 "parser_cocci_menhir.ml"
+# 25162 "parser_cocci_menhir.ml"
         ) = 
-# 254 "parser_cocci_menhir.mly"
+# 228 "parser_cocci_menhir.mly"
                         ( p )
-# 25123 "parser_cocci_menhir.ml"
+# 25166 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25145,13 +25215,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 214 "parser_cocci_menhir.mly"
+# 188 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 25151 "parser_cocci_menhir.ml"
+# 25194 "parser_cocci_menhir.ml"
         ) = 
-# 249 "parser_cocci_menhir.mly"
+# 223 "parser_cocci_menhir.mly"
                          ( _1 )
-# 25155 "parser_cocci_menhir.ml"
+# 25198 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25177,13 +25247,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_p_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 214 "parser_cocci_menhir.mly"
+# 188 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 25183 "parser_cocci_menhir.ml"
+# 25226 "parser_cocci_menhir.ml"
         ) = 
-# 249 "parser_cocci_menhir.mly"
+# 223 "parser_cocci_menhir.mly"
                                                         ( p )
-# 25187 "parser_cocci_menhir.ml"
+# 25230 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25209,13 +25279,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_p_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 214 "parser_cocci_menhir.mly"
+# 188 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 25215 "parser_cocci_menhir.ml"
+# 25258 "parser_cocci_menhir.ml"
         ) = 
-# 250 "parser_cocci_menhir.mly"
+# 224 "parser_cocci_menhir.mly"
                     ( p )
-# 25219 "parser_cocci_menhir.ml"
+# 25262 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25237,9 +25307,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_plus_start = 
-# 2244 "parser_cocci_menhir.mly"
+# 2232 "parser_cocci_menhir.mly"
                           ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] )
-# 25243 "parser_cocci_menhir.ml"
+# 25286 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25261,9 +25331,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_plus_start = 
-# 2245 "parser_cocci_menhir.mly"
+# 2233 "parser_cocci_menhir.mly"
                      ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] )
-# 25267 "parser_cocci_menhir.ml"
+# 25310 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25291,9 +25361,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_plus_start = 
-# 2247 "parser_cocci_menhir.mly"
+# 2235 "parser_cocci_menhir.mly"
                                           ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 )
-# 25297 "parser_cocci_menhir.ml"
+# 25340 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25321,9 +25391,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_plus_start = 
-# 2249 "parser_cocci_menhir.mly"
+# 2237 "parser_cocci_menhir.mly"
                      ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 )
-# 25327 "parser_cocci_menhir.ml"
+# 25370 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25351,9 +25421,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_plus_start = 
-# 2250 "parser_cocci_menhir.mly"
+# 2238 "parser_cocci_menhir.mly"
                                              ( Ast0.wrap(Ast0.OTHER(_1))::_2 )
-# 25357 "parser_cocci_menhir.ml"
+# 25400 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25381,9 +25451,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_plus_start = 
-# 2252 "parser_cocci_menhir.mly"
+# 2240 "parser_cocci_menhir.mly"
                 ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 )
-# 25387 "parser_cocci_menhir.ml"
+# 25430 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25405,9 +25475,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1672 "parser_cocci_menhir.mly"
+# 1660 "parser_cocci_menhir.mly"
                                                  ( _1 )
-# 25411 "parser_cocci_menhir.ml"
+# 25454 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25441,24 +25511,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _4 : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25447 "parser_cocci_menhir.ml"
+# 25490 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr = Obj.magic _3 in
         let _2 : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25453 "parser_cocci_menhir.ml"
+# 25496 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1674 "parser_cocci_menhir.mly"
+# 1662 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3,
                                       P.clt2mcode "]" _4)) )
-# 25462 "parser_cocci_menhir.ml"
+# 25505 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25488,17 +25558,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_disj_ident = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25494 "parser_cocci_menhir.ml"
+# 25537 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1677 "parser_cocci_menhir.mly"
+# 1665 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) )
-# 25502 "parser_cocci_menhir.ml"
+# 25545 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25528,18 +25598,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_disj_ident = Obj.magic _3 in
         let _2 : (
-# 176 "parser_cocci_menhir.mly"
+# 150 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25534 "parser_cocci_menhir.ml"
+# 25577 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1679 "parser_cocci_menhir.mly"
+# 1667 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2,
                                     _3)) )
-# 25543 "parser_cocci_menhir.ml"
+# 25586 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25563,17 +25633,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25569 "parser_cocci_menhir.ml"
+# 25612 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1682 "parser_cocci_menhir.mly"
+# 1670 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) )
-# 25577 "parser_cocci_menhir.ml"
+# 25620 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25597,17 +25667,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25603 "parser_cocci_menhir.ml"
+# 25646 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1684 "parser_cocci_menhir.mly"
+# 1672 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) )
-# 25611 "parser_cocci_menhir.ml"
+# 25654 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25641,25 +25711,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25647 "parser_cocci_menhir.ml"
+# 25690 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25653 "parser_cocci_menhir.ml"
+# 25696 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1686 "parser_cocci_menhir.mly"
+# 1674 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2,
                              _3,
                              P.clt2mcode ")" _4)) )
-# 25663 "parser_cocci_menhir.ml"
+# 25706 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25703,31 +25773,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _6 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25709 "parser_cocci_menhir.ml"
+# 25752 "parser_cocci_menhir.ml"
         ) = Obj.magic _6 in
         let _5 : 'tv_initialize_list = Obj.magic _5 in
         let _4 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25715 "parser_cocci_menhir.ml"
+# 25758 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25720 "parser_cocci_menhir.ml"
+# 25763 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_ctype = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25726 "parser_cocci_menhir.ml"
+# 25769 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__6_ in
         let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = 
-# 1692 "parser_cocci_menhir.mly"
+# 1680 "parser_cocci_menhir.mly"
      ( let init =
        if P.struct_initializer _5
        then
@@ -25739,7 +25809,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           (Ast0.InitList(P.clt2mcode "{" _4,_5,P.clt2mcode "}" _6,true)) in
      Ast0.wrap
        (Ast0.Constructor(P.clt2mcode "(" _1, _2, P.clt2mcode ")" _3, init)) )
-# 25743 "parser_cocci_menhir.ml"
+# 25786 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25761,9 +25831,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1672 "parser_cocci_menhir.mly"
+# 1660 "parser_cocci_menhir.mly"
                                                  ( _1 )
-# 25767 "parser_cocci_menhir.ml"
+# 25810 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25797,24 +25867,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _4 : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25803 "parser_cocci_menhir.ml"
+# 25846 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr = Obj.magic _3 in
         let _2 : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25809 "parser_cocci_menhir.ml"
+# 25852 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1674 "parser_cocci_menhir.mly"
+# 1662 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3,
                                       P.clt2mcode "]" _4)) )
-# 25818 "parser_cocci_menhir.ml"
+# 25861 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25844,17 +25914,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_disj_ident = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25850 "parser_cocci_menhir.ml"
+# 25893 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1677 "parser_cocci_menhir.mly"
+# 1665 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) )
-# 25858 "parser_cocci_menhir.ml"
+# 25901 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25884,18 +25954,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_disj_ident = Obj.magic _3 in
         let _2 : (
-# 176 "parser_cocci_menhir.mly"
+# 150 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25890 "parser_cocci_menhir.ml"
+# 25933 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1679 "parser_cocci_menhir.mly"
+# 1667 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2,
                                     _3)) )
-# 25899 "parser_cocci_menhir.ml"
+# 25942 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25919,17 +25989,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25925 "parser_cocci_menhir.ml"
+# 25968 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1682 "parser_cocci_menhir.mly"
+# 1670 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) )
-# 25933 "parser_cocci_menhir.ml"
+# 25976 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25953,17 +26023,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 25959 "parser_cocci_menhir.ml"
+# 26002 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1684 "parser_cocci_menhir.mly"
+# 1672 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) )
-# 25967 "parser_cocci_menhir.ml"
+# 26010 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25997,25 +26067,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26003 "parser_cocci_menhir.ml"
+# 26046 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26009 "parser_cocci_menhir.ml"
+# 26052 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1686 "parser_cocci_menhir.mly"
+# 1674 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2,
                              _3,
                              P.clt2mcode ")" _4)) )
-# 26019 "parser_cocci_menhir.ml"
+# 26062 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26059,31 +26129,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _6 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26065 "parser_cocci_menhir.ml"
+# 26108 "parser_cocci_menhir.ml"
         ) = Obj.magic _6 in
         let _5 : 'tv_initialize_list = Obj.magic _5 in
         let _4 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26071 "parser_cocci_menhir.ml"
+# 26114 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26076 "parser_cocci_menhir.ml"
+# 26119 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_ctype = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26082 "parser_cocci_menhir.ml"
+# 26125 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__6_ in
         let _v : 'tv_postfix_expr_eexpr_invalid_ = 
-# 1692 "parser_cocci_menhir.mly"
+# 1680 "parser_cocci_menhir.mly"
      ( let init =
        if P.struct_initializer _5
        then
@@ -26095,7 +26165,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           (Ast0.InitList(P.clt2mcode "{" _4,_5,P.clt2mcode "}" _6,true)) in
      Ast0.wrap
        (Ast0.Constructor(P.clt2mcode "(" _1, _2, P.clt2mcode ")" _3, init)) )
-# 26099 "parser_cocci_menhir.ml"
+# 26142 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26117,9 +26187,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1672 "parser_cocci_menhir.mly"
+# 1660 "parser_cocci_menhir.mly"
                                                  ( _1 )
-# 26123 "parser_cocci_menhir.ml"
+# 26166 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26153,24 +26223,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _4 : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26159 "parser_cocci_menhir.ml"
+# 26202 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr = Obj.magic _3 in
         let _2 : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26165 "parser_cocci_menhir.ml"
+# 26208 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1674 "parser_cocci_menhir.mly"
+# 1662 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3,
                                       P.clt2mcode "]" _4)) )
-# 26174 "parser_cocci_menhir.ml"
+# 26217 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26200,17 +26270,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_disj_ident = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26206 "parser_cocci_menhir.ml"
+# 26249 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1677 "parser_cocci_menhir.mly"
+# 1665 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) )
-# 26214 "parser_cocci_menhir.ml"
+# 26257 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26240,18 +26310,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_disj_ident = Obj.magic _3 in
         let _2 : (
-# 176 "parser_cocci_menhir.mly"
+# 150 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26246 "parser_cocci_menhir.ml"
+# 26289 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1679 "parser_cocci_menhir.mly"
+# 1667 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2,
                                     _3)) )
-# 26255 "parser_cocci_menhir.ml"
+# 26298 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26275,17 +26345,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26281 "parser_cocci_menhir.ml"
+# 26324 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1682 "parser_cocci_menhir.mly"
+# 1670 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) )
-# 26289 "parser_cocci_menhir.ml"
+# 26332 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26309,17 +26379,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26315 "parser_cocci_menhir.ml"
+# 26358 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1684 "parser_cocci_menhir.mly"
+# 1672 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) )
-# 26323 "parser_cocci_menhir.ml"
+# 26366 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26353,25 +26423,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26359 "parser_cocci_menhir.ml"
+# 26402 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26365 "parser_cocci_menhir.ml"
+# 26408 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1686 "parser_cocci_menhir.mly"
+# 1674 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2,
                              _3,
                              P.clt2mcode ")" _4)) )
-# 26375 "parser_cocci_menhir.ml"
+# 26418 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26415,31 +26485,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _6 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26421 "parser_cocci_menhir.ml"
+# 26464 "parser_cocci_menhir.ml"
         ) = Obj.magic _6 in
         let _5 : 'tv_initialize_list = Obj.magic _5 in
         let _4 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26427 "parser_cocci_menhir.ml"
+# 26470 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26432 "parser_cocci_menhir.ml"
+# 26475 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_ctype = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26438 "parser_cocci_menhir.ml"
+# 26481 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__6_ in
         let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = 
-# 1692 "parser_cocci_menhir.mly"
+# 1680 "parser_cocci_menhir.mly"
      ( let init =
        if P.struct_initializer _5
        then
@@ -26451,7 +26521,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           (Ast0.InitList(P.clt2mcode "{" _4,_5,P.clt2mcode "}" _6,true)) in
      Ast0.wrap
        (Ast0.Constructor(P.clt2mcode "(" _1, _2, P.clt2mcode ")" _3, init)) )
-# 26455 "parser_cocci_menhir.ml"
+# 26498 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26473,9 +26543,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1672 "parser_cocci_menhir.mly"
+# 1660 "parser_cocci_menhir.mly"
                                                  ( _1 )
-# 26479 "parser_cocci_menhir.ml"
+# 26522 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26509,24 +26579,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _4 : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26515 "parser_cocci_menhir.ml"
+# 26558 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr = Obj.magic _3 in
         let _2 : (
-# 174 "parser_cocci_menhir.mly"
+# 148 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26521 "parser_cocci_menhir.ml"
+# 26564 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1674 "parser_cocci_menhir.mly"
+# 1662 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3,
                                       P.clt2mcode "]" _4)) )
-# 26530 "parser_cocci_menhir.ml"
+# 26573 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26556,17 +26626,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_disj_ident = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26562 "parser_cocci_menhir.ml"
+# 26605 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1677 "parser_cocci_menhir.mly"
+# 1665 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) )
-# 26570 "parser_cocci_menhir.ml"
+# 26613 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26596,18 +26666,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_disj_ident = Obj.magic _3 in
         let _2 : (
-# 176 "parser_cocci_menhir.mly"
+# 150 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26602 "parser_cocci_menhir.ml"
+# 26645 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1679 "parser_cocci_menhir.mly"
+# 1667 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2,
                                     _3)) )
-# 26611 "parser_cocci_menhir.ml"
+# 26654 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26631,17 +26701,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26637 "parser_cocci_menhir.ml"
+# 26680 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1682 "parser_cocci_menhir.mly"
+# 1670 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) )
-# 26645 "parser_cocci_menhir.ml"
+# 26688 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26665,17 +26735,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26671 "parser_cocci_menhir.ml"
+# 26714 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1684 "parser_cocci_menhir.mly"
+# 1672 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) )
-# 26679 "parser_cocci_menhir.ml"
+# 26722 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26709,25 +26779,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26715 "parser_cocci_menhir.ml"
+# 26758 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26721 "parser_cocci_menhir.ml"
+# 26764 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1686 "parser_cocci_menhir.mly"
+# 1674 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2,
                              _3,
                              P.clt2mcode ")" _4)) )
-# 26731 "parser_cocci_menhir.ml"
+# 26774 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26771,31 +26841,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _6 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26777 "parser_cocci_menhir.ml"
+# 26820 "parser_cocci_menhir.ml"
         ) = Obj.magic _6 in
         let _5 : 'tv_initialize_list = Obj.magic _5 in
         let _4 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26783 "parser_cocci_menhir.ml"
+# 26826 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26788 "parser_cocci_menhir.ml"
+# 26831 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_ctype = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26794 "parser_cocci_menhir.ml"
+# 26837 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__6_ in
         let _v : 'tv_postfix_expr_expr_invalid_ = 
-# 1692 "parser_cocci_menhir.mly"
+# 1680 "parser_cocci_menhir.mly"
      ( let init =
        if P.struct_initializer _5
        then
@@ -26807,7 +26877,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           (Ast0.InitList(P.clt2mcode "{" _4,_5,P.clt2mcode "}" _6,true)) in
      Ast0.wrap
        (Ast0.Constructor(P.clt2mcode "(" _1, _2, P.clt2mcode ")" _3, init)) )
-# 26811 "parser_cocci_menhir.ml"
+# 26854 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26829,9 +26899,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pre_basic_expr_eexpr_dot_expressions_ = 
-# 1521 "parser_cocci_menhir.mly"
+# 1509 "parser_cocci_menhir.mly"
                                                           ( _1 )
-# 26835 "parser_cocci_menhir.ml"
+# 26878 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26861,17 +26931,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_basic_expr_eexpr_dot_expressions_ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26867 "parser_cocci_menhir.ml"
+# 26910 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_pre_basic_expr_eexpr_dot_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_pre_basic_expr_eexpr_dot_expressions_ = 
-# 1524 "parser_cocci_menhir.mly"
+# 1512 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Sequence(_1,P.clt2mcode "," _2,_3)) )
-# 26875 "parser_cocci_menhir.ml"
+# 26918 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26893,9 +26963,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pre_basic_expr_eexpr_nest_expressions_ = 
-# 1521 "parser_cocci_menhir.mly"
+# 1509 "parser_cocci_menhir.mly"
                                                           ( _1 )
-# 26899 "parser_cocci_menhir.ml"
+# 26942 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26925,17 +26995,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_basic_expr_eexpr_nest_expressions_ = Obj.magic _3 in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26931 "parser_cocci_menhir.ml"
+# 26974 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_pre_basic_expr_eexpr_nest_expressions_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_pre_basic_expr_eexpr_nest_expressions_ = 
-# 1524 "parser_cocci_menhir.mly"
+# 1512 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Sequence(_1,P.clt2mcode "," _2,_3)) )
-# 26939 "parser_cocci_menhir.ml"
+# 26982 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26957,9 +27027,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1705 "parser_cocci_menhir.mly"
+# 1693 "parser_cocci_menhir.mly"
                 ( Ast0.wrap(Ast0.Ident(_1)) )
-# 26963 "parser_cocci_menhir.ml"
+# 27006 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26984,17 +27054,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_ident = Obj.magic _2 in
         let _1 : (
-# 162 "parser_cocci_menhir.mly"
+# 136 "parser_cocci_menhir.mly"
        (Data.clt)
-# 26990 "parser_cocci_menhir.ml"
+# 27033 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1707 "parser_cocci_menhir.mly"
+# 1695 "parser_cocci_menhir.mly"
      ( let op = P.clt2mcode Ast.GetRefLabel _1 in
      Ast0.wrap(Ast0.Unary(Ast0.wrap(Ast0.Ident(_2)), op)) )
-# 26998 "parser_cocci_menhir.ml"
+# 27041 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27013,17 +27083,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 27019 "parser_cocci_menhir.ml"
+# 27062 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1710 "parser_cocci_menhir.mly"
+# 1698 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
-# 27027 "parser_cocci_menhir.ml"
+# 27070 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27042,17 +27112,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 27048 "parser_cocci_menhir.ml"
+# 27091 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1713 "parser_cocci_menhir.mly"
+# 1701 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) )
-# 27056 "parser_cocci_menhir.ml"
+# 27099 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27071,17 +27141,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 27077 "parser_cocci_menhir.ml"
+# 27120 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1716 "parser_cocci_menhir.mly"
+# 1704 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) )
-# 27085 "parser_cocci_menhir.ml"
+# 27128 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27100,17 +27170,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 27106 "parser_cocci_menhir.ml"
+# 27149 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1719 "parser_cocci_menhir.mly"
+# 1707 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) )
-# 27114 "parser_cocci_menhir.ml"
+# 27157 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27129,18 +27199,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 27135 "parser_cocci_menhir.ml"
+# 27178 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1722 "parser_cocci_menhir.mly"
+# 1710 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
-# 27144 "parser_cocci_menhir.ml"
+# 27187 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27159,17 +27229,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 133 "parser_cocci_menhir.mly"
+# 107 "parser_cocci_menhir.mly"
        (Parse_aux.expinfo)
-# 27165 "parser_cocci_menhir.ml"
+# 27208 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1726 "parser_cocci_menhir.mly"
+# 1714 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,clt) = _1 in
      Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) )
-# 27173 "parser_cocci_menhir.ml"
+# 27216 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27188,18 +27258,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 27194 "parser_cocci_menhir.ml"
+# 27237 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1729 "parser_cocci_menhir.mly"
+# 1717 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
-# 27203 "parser_cocci_menhir.ml"
+# 27246 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27218,18 +27288,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 27224 "parser_cocci_menhir.ml"
+# 27267 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1733 "parser_cocci_menhir.mly"
+# 1721 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
-# 27233 "parser_cocci_menhir.ml"
+# 27276 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27248,18 +27318,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 27254 "parser_cocci_menhir.ml"
+# 27297 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1737 "parser_cocci_menhir.mly"
+# 1725 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) )
-# 27263 "parser_cocci_menhir.ml"
+# 27306 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27288,23 +27358,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27294 "parser_cocci_menhir.ml"
+# 27337 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_eexpr = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27300 "parser_cocci_menhir.ml"
+# 27343 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1741 "parser_cocci_menhir.mly"
+# 1729 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2,
                            P.clt2mcode ")" _3)) )
-# 27308 "parser_cocci_menhir.ml"
+# 27351 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27333,25 +27403,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27339 "parser_cocci_menhir.ml"
+# 27382 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27345 "parser_cocci_menhir.ml"
+# 27388 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1744 "parser_cocci_menhir.mly"
+# 1732 "parser_cocci_menhir.mly"
      ( let (mids,code) = _2 in
        Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1,
                               code, mids,
                               P.clt2mcode ")" _3)) )
-# 27355 "parser_cocci_menhir.ml"
+# 27398 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27373,9 +27443,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_dot_expressions_ = 
-# 1748 "parser_cocci_menhir.mly"
+# 1736 "parser_cocci_menhir.mly"
                  ( _1 )
-# 27379 "parser_cocci_menhir.ml"
+# 27422 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27397,9 +27467,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1705 "parser_cocci_menhir.mly"
+# 1693 "parser_cocci_menhir.mly"
                 ( Ast0.wrap(Ast0.Ident(_1)) )
-# 27403 "parser_cocci_menhir.ml"
+# 27446 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27424,17 +27494,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_ident = Obj.magic _2 in
         let _1 : (
-# 162 "parser_cocci_menhir.mly"
+# 136 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27430 "parser_cocci_menhir.ml"
+# 27473 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1707 "parser_cocci_menhir.mly"
+# 1695 "parser_cocci_menhir.mly"
      ( let op = P.clt2mcode Ast.GetRefLabel _1 in
      Ast0.wrap(Ast0.Unary(Ast0.wrap(Ast0.Ident(_2)), op)) )
-# 27438 "parser_cocci_menhir.ml"
+# 27481 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27453,17 +27523,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 27459 "parser_cocci_menhir.ml"
+# 27502 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1710 "parser_cocci_menhir.mly"
+# 1698 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
-# 27467 "parser_cocci_menhir.ml"
+# 27510 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27482,17 +27552,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 27488 "parser_cocci_menhir.ml"
+# 27531 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1713 "parser_cocci_menhir.mly"
+# 1701 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) )
-# 27496 "parser_cocci_menhir.ml"
+# 27539 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27511,17 +27581,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 27517 "parser_cocci_menhir.ml"
+# 27560 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1716 "parser_cocci_menhir.mly"
+# 1704 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) )
-# 27525 "parser_cocci_menhir.ml"
+# 27568 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27540,17 +27610,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 27546 "parser_cocci_menhir.ml"
+# 27589 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1719 "parser_cocci_menhir.mly"
+# 1707 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) )
-# 27554 "parser_cocci_menhir.ml"
+# 27597 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27569,18 +27639,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 27575 "parser_cocci_menhir.ml"
+# 27618 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1722 "parser_cocci_menhir.mly"
+# 1710 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
-# 27584 "parser_cocci_menhir.ml"
+# 27627 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27599,17 +27669,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 133 "parser_cocci_menhir.mly"
+# 107 "parser_cocci_menhir.mly"
        (Parse_aux.expinfo)
-# 27605 "parser_cocci_menhir.ml"
+# 27648 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1726 "parser_cocci_menhir.mly"
+# 1714 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,clt) = _1 in
      Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) )
-# 27613 "parser_cocci_menhir.ml"
+# 27656 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27628,18 +27698,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 27634 "parser_cocci_menhir.ml"
+# 27677 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1729 "parser_cocci_menhir.mly"
+# 1717 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
-# 27643 "parser_cocci_menhir.ml"
+# 27686 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27658,18 +27728,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 27664 "parser_cocci_menhir.ml"
+# 27707 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1733 "parser_cocci_menhir.mly"
+# 1721 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
-# 27673 "parser_cocci_menhir.ml"
+# 27716 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27688,18 +27758,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 27694 "parser_cocci_menhir.ml"
+# 27737 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1737 "parser_cocci_menhir.mly"
+# 1725 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) )
-# 27703 "parser_cocci_menhir.ml"
+# 27746 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27728,23 +27798,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27734 "parser_cocci_menhir.ml"
+# 27777 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_eexpr = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27740 "parser_cocci_menhir.ml"
+# 27783 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1741 "parser_cocci_menhir.mly"
+# 1729 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2,
                            P.clt2mcode ")" _3)) )
-# 27748 "parser_cocci_menhir.ml"
+# 27791 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27773,25 +27843,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27779 "parser_cocci_menhir.ml"
+# 27822 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27785 "parser_cocci_menhir.ml"
+# 27828 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1744 "parser_cocci_menhir.mly"
+# 1732 "parser_cocci_menhir.mly"
      ( let (mids,code) = _2 in
        Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1,
                               code, mids,
                               P.clt2mcode ")" _3)) )
-# 27795 "parser_cocci_menhir.ml"
+# 27838 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27813,9 +27883,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_invalid_ = 
-# 1748 "parser_cocci_menhir.mly"
+# 1736 "parser_cocci_menhir.mly"
                  ( _1 )
-# 27819 "parser_cocci_menhir.ml"
+# 27862 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27837,9 +27907,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1705 "parser_cocci_menhir.mly"
+# 1693 "parser_cocci_menhir.mly"
                 ( Ast0.wrap(Ast0.Ident(_1)) )
-# 27843 "parser_cocci_menhir.ml"
+# 27886 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27864,17 +27934,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_ident = Obj.magic _2 in
         let _1 : (
-# 162 "parser_cocci_menhir.mly"
+# 136 "parser_cocci_menhir.mly"
        (Data.clt)
-# 27870 "parser_cocci_menhir.ml"
+# 27913 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1707 "parser_cocci_menhir.mly"
+# 1695 "parser_cocci_menhir.mly"
      ( let op = P.clt2mcode Ast.GetRefLabel _1 in
      Ast0.wrap(Ast0.Unary(Ast0.wrap(Ast0.Ident(_2)), op)) )
-# 27878 "parser_cocci_menhir.ml"
+# 27921 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27893,17 +27963,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 27899 "parser_cocci_menhir.ml"
+# 27942 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1710 "parser_cocci_menhir.mly"
+# 1698 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
-# 27907 "parser_cocci_menhir.ml"
+# 27950 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27922,17 +27992,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 27928 "parser_cocci_menhir.ml"
+# 27971 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1713 "parser_cocci_menhir.mly"
+# 1701 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) )
-# 27936 "parser_cocci_menhir.ml"
+# 27979 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27951,17 +28021,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 27957 "parser_cocci_menhir.ml"
+# 28000 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1716 "parser_cocci_menhir.mly"
+# 1704 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) )
-# 27965 "parser_cocci_menhir.ml"
+# 28008 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27980,17 +28050,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 27986 "parser_cocci_menhir.ml"
+# 28029 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1719 "parser_cocci_menhir.mly"
+# 1707 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) )
-# 27994 "parser_cocci_menhir.ml"
+# 28037 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28009,18 +28079,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 28015 "parser_cocci_menhir.ml"
+# 28058 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1722 "parser_cocci_menhir.mly"
+# 1710 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
-# 28024 "parser_cocci_menhir.ml"
+# 28067 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28039,17 +28109,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 133 "parser_cocci_menhir.mly"
+# 107 "parser_cocci_menhir.mly"
        (Parse_aux.expinfo)
-# 28045 "parser_cocci_menhir.ml"
+# 28088 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1726 "parser_cocci_menhir.mly"
+# 1714 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,clt) = _1 in
      Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) )
-# 28053 "parser_cocci_menhir.ml"
+# 28096 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28068,18 +28138,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 28074 "parser_cocci_menhir.ml"
+# 28117 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1729 "parser_cocci_menhir.mly"
+# 1717 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
-# 28083 "parser_cocci_menhir.ml"
+# 28126 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28098,18 +28168,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 28104 "parser_cocci_menhir.ml"
+# 28147 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1733 "parser_cocci_menhir.mly"
+# 1721 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
-# 28113 "parser_cocci_menhir.ml"
+# 28156 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28128,18 +28198,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 28134 "parser_cocci_menhir.ml"
+# 28177 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1737 "parser_cocci_menhir.mly"
+# 1725 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) )
-# 28143 "parser_cocci_menhir.ml"
+# 28186 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28168,23 +28238,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28174 "parser_cocci_menhir.ml"
+# 28217 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_eexpr = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28180 "parser_cocci_menhir.ml"
+# 28223 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1741 "parser_cocci_menhir.mly"
+# 1729 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2,
                            P.clt2mcode ")" _3)) )
-# 28188 "parser_cocci_menhir.ml"
+# 28231 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28213,25 +28283,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28219 "parser_cocci_menhir.ml"
+# 28262 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28225 "parser_cocci_menhir.ml"
+# 28268 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1744 "parser_cocci_menhir.mly"
+# 1732 "parser_cocci_menhir.mly"
      ( let (mids,code) = _2 in
        Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1,
                               code, mids,
                               P.clt2mcode ")" _3)) )
-# 28235 "parser_cocci_menhir.ml"
+# 28278 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28253,9 +28323,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_eexpr_nest_expressions_ = 
-# 1748 "parser_cocci_menhir.mly"
+# 1736 "parser_cocci_menhir.mly"
                  ( _1 )
-# 28259 "parser_cocci_menhir.ml"
+# 28302 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28277,9 +28347,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1705 "parser_cocci_menhir.mly"
+# 1693 "parser_cocci_menhir.mly"
                 ( Ast0.wrap(Ast0.Ident(_1)) )
-# 28283 "parser_cocci_menhir.ml"
+# 28326 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28304,17 +28374,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_ident = Obj.magic _2 in
         let _1 : (
-# 162 "parser_cocci_menhir.mly"
+# 136 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28310 "parser_cocci_menhir.ml"
+# 28353 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1707 "parser_cocci_menhir.mly"
+# 1695 "parser_cocci_menhir.mly"
      ( let op = P.clt2mcode Ast.GetRefLabel _1 in
      Ast0.wrap(Ast0.Unary(Ast0.wrap(Ast0.Ident(_2)), op)) )
-# 28318 "parser_cocci_menhir.ml"
+# 28361 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28333,17 +28403,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 28339 "parser_cocci_menhir.ml"
+# 28382 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1710 "parser_cocci_menhir.mly"
+# 1698 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) )
-# 28347 "parser_cocci_menhir.ml"
+# 28390 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28362,17 +28432,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 28368 "parser_cocci_menhir.ml"
+# 28411 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1713 "parser_cocci_menhir.mly"
+# 1701 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) )
-# 28376 "parser_cocci_menhir.ml"
+# 28419 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28391,17 +28461,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 28397 "parser_cocci_menhir.ml"
+# 28440 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1716 "parser_cocci_menhir.mly"
+# 1704 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) )
-# 28405 "parser_cocci_menhir.ml"
+# 28448 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28420,17 +28490,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 28426 "parser_cocci_menhir.ml"
+# 28469 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1719 "parser_cocci_menhir.mly"
+# 1707 "parser_cocci_menhir.mly"
      ( let (x,clt) = _1 in
      Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) )
-# 28434 "parser_cocci_menhir.ml"
+# 28477 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28449,18 +28519,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 28455 "parser_cocci_menhir.ml"
+# 28498 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1722 "parser_cocci_menhir.mly"
+# 1710 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) )
-# 28464 "parser_cocci_menhir.ml"
+# 28507 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28479,17 +28549,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 133 "parser_cocci_menhir.mly"
+# 107 "parser_cocci_menhir.mly"
        (Parse_aux.expinfo)
-# 28485 "parser_cocci_menhir.ml"
+# 28528 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1726 "parser_cocci_menhir.mly"
+# 1714 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,clt) = _1 in
      Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) )
-# 28493 "parser_cocci_menhir.ml"
+# 28536 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28508,18 +28578,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 28514 "parser_cocci_menhir.ml"
+# 28557 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1729 "parser_cocci_menhir.mly"
+# 1717 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) )
-# 28523 "parser_cocci_menhir.ml"
+# 28566 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28538,18 +28608,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 28544 "parser_cocci_menhir.ml"
+# 28587 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1733 "parser_cocci_menhir.mly"
+# 1721 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) )
-# 28553 "parser_cocci_menhir.ml"
+# 28596 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28568,18 +28638,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 138 "parser_cocci_menhir.mly"
+# 112 "parser_cocci_menhir.mly"
        (Parse_aux.typed_expinfo)
-# 28574 "parser_cocci_menhir.ml"
+# 28617 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1737 "parser_cocci_menhir.mly"
+# 1725 "parser_cocci_menhir.mly"
      ( let (nm,constraints,pure,ty,clt) = _1 in
      Ast0.wrap
        (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) )
-# 28583 "parser_cocci_menhir.ml"
+# 28626 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28608,23 +28678,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28614 "parser_cocci_menhir.ml"
+# 28657 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_eexpr = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28620 "parser_cocci_menhir.ml"
+# 28663 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1741 "parser_cocci_menhir.mly"
+# 1729 "parser_cocci_menhir.mly"
      ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2,
                            P.clt2mcode ")" _3)) )
-# 28628 "parser_cocci_menhir.ml"
+# 28671 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28653,25 +28723,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28659 "parser_cocci_menhir.ml"
+# 28702 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_midzero_list_expr_eexpr_ = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 28665 "parser_cocci_menhir.ml"
+# 28708 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1744 "parser_cocci_menhir.mly"
+# 1732 "parser_cocci_menhir.mly"
      ( let (mids,code) = _2 in
        Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1,
                               code, mids,
                               P.clt2mcode ")" _3)) )
-# 28675 "parser_cocci_menhir.ml"
+# 28718 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28693,9 +28763,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_primary_expr_expr_invalid_ = 
-# 1748 "parser_cocci_menhir.mly"
+# 1736 "parser_cocci_menhir.mly"
                  ( _1 )
-# 28699 "parser_cocci_menhir.ml"
+# 28742 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28715,9 +28785,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure = 
-# 264 "parser_cocci_menhir.mly"
+# 238 "parser_cocci_menhir.mly"
                  ( Ast0.Pure )
-# 28721 "parser_cocci_menhir.ml"
+# 28764 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28737,9 +28807,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure = 
-# 265 "parser_cocci_menhir.mly"
+# 239 "parser_cocci_menhir.mly"
                  ( Ast0.Context )
-# 28743 "parser_cocci_menhir.ml"
+# 28786 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28763,9 +28833,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_pure = 
-# 266 "parser_cocci_menhir.mly"
+# 240 "parser_cocci_menhir.mly"
                  ( Ast0.PureContext )
-# 28769 "parser_cocci_menhir.ml"
+# 28812 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28789,9 +28859,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_pure = 
-# 267 "parser_cocci_menhir.mly"
+# 241 "parser_cocci_menhir.mly"
                  ( Ast0.PureContext )
-# 28795 "parser_cocci_menhir.ml"
+# 28838 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28806,9 +28876,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_pure = 
-# 268 "parser_cocci_menhir.mly"
+# 242 "parser_cocci_menhir.mly"
                  ( Ast0.Impure )
-# 28812 "parser_cocci_menhir.ml"
+# 28855 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28827,16 +28897,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 28833 "parser_cocci_menhir.ml"
+# 28876 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident = 
-# 1762 "parser_cocci_menhir.mly"
+# 1750 "parser_cocci_menhir.mly"
             ( _1 )
-# 28840 "parser_cocci_menhir.ml"
+# 28883 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28856,9 +28926,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1769 "parser_cocci_menhir.mly"
+# 1757 "parser_cocci_menhir.mly"
                  ( "identifier" )
-# 28862 "parser_cocci_menhir.ml"
+# 28905 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28878,9 +28948,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1770 "parser_cocci_menhir.mly"
+# 1758 "parser_cocci_menhir.mly"
                  ( "expression" )
-# 28884 "parser_cocci_menhir.ml"
+# 28927 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28900,9 +28970,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1771 "parser_cocci_menhir.mly"
+# 1759 "parser_cocci_menhir.mly"
                 ( "statement" )
-# 28906 "parser_cocci_menhir.ml"
+# 28949 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28922,9 +28992,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1772 "parser_cocci_menhir.mly"
+# 1760 "parser_cocci_menhir.mly"
                ( "function" )
-# 28928 "parser_cocci_menhir.ml"
+# 28971 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28944,9 +29014,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1773 "parser_cocci_menhir.mly"
+# 1761 "parser_cocci_menhir.mly"
             ( "local" )
-# 28950 "parser_cocci_menhir.ml"
+# 28993 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28966,9 +29036,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1774 "parser_cocci_menhir.mly"
+# 1762 "parser_cocci_menhir.mly"
            ( "type" )
-# 28972 "parser_cocci_menhir.ml"
+# 29015 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28988,9 +29058,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1775 "parser_cocci_menhir.mly"
+# 1763 "parser_cocci_menhir.mly"
                 ( "parameter" )
-# 28994 "parser_cocci_menhir.ml"
+# 29037 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29010,9 +29080,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1776 "parser_cocci_menhir.mly"
+# 1764 "parser_cocci_menhir.mly"
                    ( "idexpression" )
-# 29016 "parser_cocci_menhir.ml"
+# 29059 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29032,9 +29102,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1777 "parser_cocci_menhir.mly"
+# 1765 "parser_cocci_menhir.mly"
                   ( "initialiser" )
-# 29038 "parser_cocci_menhir.ml"
+# 29081 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29054,9 +29124,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1778 "parser_cocci_menhir.mly"
+# 1766 "parser_cocci_menhir.mly"
            ( "list" )
-# 29060 "parser_cocci_menhir.ml"
+# 29103 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29076,9 +29146,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1779 "parser_cocci_menhir.mly"
+# 1767 "parser_cocci_menhir.mly"
             ( "fresh" )
-# 29082 "parser_cocci_menhir.ml"
+# 29125 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29098,9 +29168,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1780 "parser_cocci_menhir.mly"
+# 1768 "parser_cocci_menhir.mly"
                ( "constant" )
-# 29104 "parser_cocci_menhir.ml"
+# 29147 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29120,9 +29190,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1781 "parser_cocci_menhir.mly"
+# 1769 "parser_cocci_menhir.mly"
             ( "error" )
-# 29126 "parser_cocci_menhir.ml"
+# 29169 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29142,9 +29212,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1782 "parser_cocci_menhir.mly"
+# 1770 "parser_cocci_menhir.mly"
             ( "words" )
-# 29148 "parser_cocci_menhir.ml"
+# 29191 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29164,9 +29234,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1783 "parser_cocci_menhir.mly"
+# 1771 "parser_cocci_menhir.mly"
            ( "pure" )
-# 29170 "parser_cocci_menhir.ml"
+# 29213 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29186,9 +29256,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1784 "parser_cocci_menhir.mly"
+# 1772 "parser_cocci_menhir.mly"
               ( "context" )
-# 29192 "parser_cocci_menhir.ml"
+# 29235 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29208,9 +29278,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1785 "parser_cocci_menhir.mly"
+# 1773 "parser_cocci_menhir.mly"
                 ( "generated" )
-# 29214 "parser_cocci_menhir.ml"
+# 29257 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29230,9 +29300,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1786 "parser_cocci_menhir.mly"
+# 1774 "parser_cocci_menhir.mly"
               ( "typedef" )
-# 29236 "parser_cocci_menhir.ml"
+# 29279 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29252,9 +29322,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1787 "parser_cocci_menhir.mly"
+# 1775 "parser_cocci_menhir.mly"
                ( "declarer" )
-# 29258 "parser_cocci_menhir.ml"
+# 29301 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29274,9 +29344,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1788 "parser_cocci_menhir.mly"
+# 1776 "parser_cocci_menhir.mly"
                ( "iterator" )
-# 29280 "parser_cocci_menhir.ml"
+# 29323 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29296,9 +29366,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1789 "parser_cocci_menhir.mly"
+# 1777 "parser_cocci_menhir.mly"
            ( "name" )
-# 29302 "parser_cocci_menhir.ml"
+# 29345 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29318,9 +29388,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1790 "parser_cocci_menhir.mly"
+# 1778 "parser_cocci_menhir.mly"
                ( "position" )
-# 29324 "parser_cocci_menhir.ml"
+# 29367 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29340,9 +29410,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_kwd = 
-# 1791 "parser_cocci_menhir.mly"
+# 1779 "parser_cocci_menhir.mly"
              ( "symbol" )
-# 29346 "parser_cocci_menhir.ml"
+# 29389 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29364,9 +29434,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_or_meta_ident = 
-# 1798 "parser_cocci_menhir.mly"
+# 1786 "parser_cocci_menhir.mly"
                                  ( (None,P.id2name _1) )
-# 29370 "parser_cocci_menhir.ml"
+# 29413 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29388,9 +29458,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_or_meta_ident = 
-# 1799 "parser_cocci_menhir.mly"
+# 1787 "parser_cocci_menhir.mly"
                                  ( (None,_1) )
-# 29394 "parser_cocci_menhir.ml"
+# 29437 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29412,9 +29482,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_or_meta_ident = 
-# 1800 "parser_cocci_menhir.mly"
+# 1788 "parser_cocci_menhir.mly"
                                  ( _1 )
-# 29418 "parser_cocci_menhir.ml"
+# 29461 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29442,13 +29512,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_i_ in
         let _endpos = _endpos_optc_ in
         let _v : 'tv_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub_ = 
-# 1837 "parser_cocci_menhir.mly"
+# 1825 "parser_cocci_menhir.mly"
     (
       match optc with
          None   -> (i, Ast0.NoConstraint)
        | Some c -> (i, c)
     )
-# 29452 "parser_cocci_menhir.ml"
+# 29495 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29476,13 +29546,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_i_ in
         let _endpos = _endpos_optc_ in
         let _v : 'tv_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub_ = 
-# 1837 "parser_cocci_menhir.mly"
+# 1825 "parser_cocci_menhir.mly"
     (
       match optc with
          None   -> (i, Ast0.NoConstraint)
        | Some c -> (i, c)
     )
-# 29486 "parser_cocci_menhir.ml"
+# 29529 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29510,13 +29580,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_i_ in
         let _endpos = _endpos_c_ in
         let _v : 'tv_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid_ = 
-# 1862 "parser_cocci_menhir.mly"
+# 1850 "parser_cocci_menhir.mly"
     (
       match c with
          None -> (i, Ast.IdNoConstraint)
        | Some constraint_ -> (i,constraint_)
     )
-# 29520 "parser_cocci_menhir.ml"
+# 29563 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29544,14 +29614,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_i_ in
         let _endpos = _endpos_c_ in
         let _v : 'tv_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid_ = 
-# 1845 "parser_cocci_menhir.mly"
+# 1833 "parser_cocci_menhir.mly"
     (
       Common.Left
         (match c with
          None -> (i, Ast.IdNoConstraint)
        | Some constraint_ -> (i,constraint_))
     )
-# 29555 "parser_cocci_menhir.ml"
+# 29598 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29581,7 +29651,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid_ = 
-# 1852 "parser_cocci_menhir.mly"
+# 1840 "parser_cocci_menhir.mly"
     (
      let nm = P.id2name _3 in
      Iteration.parsed_virtual_identifiers :=
@@ -29589,7 +29659,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         !Iteration.parsed_virtual_identifiers;
      Common.Right nm
     )
-# 29593 "parser_cocci_menhir.ml"
+# 29636 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29611,9 +29681,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_or_meta_ident_with_seed = 
-# 1806 "parser_cocci_menhir.mly"
+# 1794 "parser_cocci_menhir.mly"
                                 ( (_1,Ast.NoVal) )
-# 29617 "parser_cocci_menhir.ml"
+# 29660 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29645,11 +29715,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_pure_ident_or_meta_ident_with_seed = 
-# 1809 "parser_cocci_menhir.mly"
+# 1797 "parser_cocci_menhir.mly"
   ( match _3 with
           [Ast.SeedString s] -> (_1,Ast.StringSeed s)
         | _ -> (_1,Ast.ListSeed _3) )
-# 29653 "parser_cocci_menhir.ml"
+# 29696 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29677,11 +29747,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_i_ in
         let _endpos = _endpos_l_ in
         let _v : 'tv_pure_ident_or_meta_ident_with_x_eq_not_pos_ = 
-# 1831 "parser_cocci_menhir.mly"
+# 1819 "parser_cocci_menhir.mly"
     (
       (i, l)
     )
-# 29685 "parser_cocci_menhir.ml"
+# 29728 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29703,9 +29773,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_or_symbol = 
-# 1765 "parser_cocci_menhir.mly"
+# 1753 "parser_cocci_menhir.mly"
                ( _1 )
-# 29709 "parser_cocci_menhir.ml"
+# 29752 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29724,16 +29794,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 29730 "parser_cocci_menhir.ml"
+# 29773 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_pure_ident_or_symbol = 
-# 1766 "parser_cocci_menhir.mly"
+# 1754 "parser_cocci_menhir.mly"
            ( _1 )
-# 29737 "parser_cocci_menhir.ml"
+# 29780 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29755,9 +29825,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_re_ in
         let _endpos = _endpos_re_ in
         let _v : 'tv_re_or_not_eqe_or_sub = 
-# 1923 "parser_cocci_menhir.mly"
+# 1911 "parser_cocci_menhir.mly"
                   (Ast0.NotIdCstrt  re)
-# 29761 "parser_cocci_menhir.ml"
+# 29804 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29779,9 +29849,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_ne_ in
         let _endpos = _endpos_ne_ in
         let _v : 'tv_re_or_not_eqe_or_sub = 
-# 1924 "parser_cocci_menhir.mly"
+# 1912 "parser_cocci_menhir.mly"
                   (Ast0.NotExpCstrt ne)
-# 29785 "parser_cocci_menhir.ml"
+# 29828 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29803,9 +29873,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_s_ in
         let _v : 'tv_re_or_not_eqe_or_sub = 
-# 1925 "parser_cocci_menhir.mly"
+# 1913 "parser_cocci_menhir.mly"
                   (Ast0.SubExpCstrt s)
-# 29809 "parser_cocci_menhir.ml"
+# 29852 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29827,9 +29897,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_re_ in
         let _endpos = _endpos_re_ in
         let _v : 'tv_re_or_not_eqid = 
-# 1869 "parser_cocci_menhir.mly"
+# 1857 "parser_cocci_menhir.mly"
                   (Ast.IdRegExpConstraint re)
-# 29833 "parser_cocci_menhir.ml"
+# 29876 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29851,9 +29921,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_ne_ in
         let _endpos = _endpos_ne_ in
         let _v : 'tv_re_or_not_eqid = 
-# 1870 "parser_cocci_menhir.mly"
+# 1858 "parser_cocci_menhir.mly"
                   (ne)
-# 29857 "parser_cocci_menhir.ml"
+# 29900 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29876,21 +29946,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let re : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 29882 "parser_cocci_menhir.ml"
+# 29925 "parser_cocci_menhir.ml"
         ) = Obj.magic re in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_re_ in
         let _v : 'tv_regexp_eqid = 
-# 1874 "parser_cocci_menhir.mly"
+# 1862 "parser_cocci_menhir.mly"
          ( (if !Data.in_iso
            then failwith "constraints not allowed in iso file");
           (if !Data.in_generating
            then failwith "constraints not allowed in a generated rule file");
           let (s,_) = re in Ast.IdRegExp (s,Regexp.regexp s)
         )
-# 29894 "parser_cocci_menhir.ml"
+# 29937 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29913,21 +29983,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let re : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 29919 "parser_cocci_menhir.ml"
+# 29962 "parser_cocci_menhir.ml"
         ) = Obj.magic re in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_re_ in
         let _v : 'tv_regexp_eqid = 
-# 1881 "parser_cocci_menhir.mly"
+# 1869 "parser_cocci_menhir.mly"
          ( (if !Data.in_iso
            then failwith "constraints not allowed in iso file");
           (if !Data.in_generating
            then failwith "constraints not allowed in a generated rule file");
           let (s,_) = re in Ast.IdNotRegExp (s,Regexp.regexp s)
         )
-# 29931 "parser_cocci_menhir.ml"
+# 29974 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29942,13 +30012,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : (
-# 205 "parser_cocci_menhir.mly"
+# 179 "parser_cocci_menhir.mly"
       (unit)
-# 29948 "parser_cocci_menhir.ml"
+# 29991 "parser_cocci_menhir.ml"
         ) = 
-# 246 "parser_cocci_menhir.mly"
+# 220 "parser_cocci_menhir.mly"
         ( )
-# 29952 "parser_cocci_menhir.ml"
+# 29995 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29970,9 +30040,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_rule_elem_statement = 
-# 1169 "parser_cocci_menhir.mly"
+# 1157 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),_1)) )
-# 29976 "parser_cocci_menhir.ml"
+# 30019 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29996,17 +30066,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30002 "parser_cocci_menhir.ml"
+# 30045 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_option_expr_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_rule_elem_statement = 
-# 1170 "parser_cocci_menhir.mly"
+# 1158 "parser_cocci_menhir.mly"
                        ( P.exp_stm _1 _2 )
-# 30010 "parser_cocci_menhir.ml"
+# 30053 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30035,22 +30105,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30041 "parser_cocci_menhir.ml"
+# 30084 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_eexpr = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30047 "parser_cocci_menhir.ml"
+# 30090 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_rule_elem_statement = 
-# 1171 "parser_cocci_menhir.mly"
+# 1159 "parser_cocci_menhir.mly"
                         ( P.ret_exp _1 _2 _3 )
-# 30054 "parser_cocci_menhir.ml"
+# 30097 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30074,21 +30144,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30080 "parser_cocci_menhir.ml"
+# 30123 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30085 "parser_cocci_menhir.ml"
+# 30128 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_rule_elem_statement = 
-# 1172 "parser_cocci_menhir.mly"
+# 1160 "parser_cocci_menhir.mly"
                   ( P.ret _1 _2 )
-# 30092 "parser_cocci_menhir.ml"
+# 30135 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30112,21 +30182,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30118 "parser_cocci_menhir.ml"
+# 30161 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30123 "parser_cocci_menhir.ml"
+# 30166 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_rule_elem_statement = 
-# 1173 "parser_cocci_menhir.mly"
+# 1161 "parser_cocci_menhir.mly"
                  ( P.break _1 _2 )
-# 30130 "parser_cocci_menhir.ml"
+# 30173 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30150,21 +30220,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30156 "parser_cocci_menhir.ml"
+# 30199 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30161 "parser_cocci_menhir.ml"
+# 30204 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_rule_elem_statement = 
-# 1174 "parser_cocci_menhir.mly"
+# 1162 "parser_cocci_menhir.mly"
                     ( P.cont _1 _2 )
-# 30168 "parser_cocci_menhir.ml"
+# 30211 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30193,26 +30263,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30199 "parser_cocci_menhir.ml"
+# 30242 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_midzero_list_rule_elem_statement_rule_elem_statement_ = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 30205 "parser_cocci_menhir.ml"
+# 30248 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_rule_elem_statement = 
-# 1176 "parser_cocci_menhir.mly"
+# 1164 "parser_cocci_menhir.mly"
     ( let (mids,code) = _2 in
     Ast0.wrap
       (Ast0.Disj(P.clt2mcode "(" _1,
                 List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code,
                 mids, P.clt2mcode ")" _3)) )
-# 30216 "parser_cocci_menhir.ml"
+# 30259 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30266,20 +30336,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (
-# 227 "parser_cocci_menhir.mly"
+# 201 "parser_cocci_menhir.mly"
       (Ast_cocci.rulename)
-# 30272 "parser_cocci_menhir.ml"
+# 30315 "parser_cocci_menhir.ml"
         ) = let nm =
           
 # 39 "standard.mly"
     ( None )
-# 30277 "parser_cocci_menhir.ml"
+# 30320 "parser_cocci_menhir.ml"
           
         in
         
-# 276 "parser_cocci_menhir.mly"
+# 250 "parser_cocci_menhir.mly"
       ( P.make_cocci_rule_name_result nm d i a e ee )
-# 30283 "parser_cocci_menhir.ml"
+# 30326 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30339,21 +30409,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_x0_ in
         let _endpos = _endpos__8_ in
         let _v : (
-# 227 "parser_cocci_menhir.mly"
+# 201 "parser_cocci_menhir.mly"
       (Ast_cocci.rulename)
-# 30345 "parser_cocci_menhir.ml"
+# 30388 "parser_cocci_menhir.ml"
         ) = let nm =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 30351 "parser_cocci_menhir.ml"
+# 30394 "parser_cocci_menhir.ml"
           
         in
         
-# 276 "parser_cocci_menhir.mly"
+# 250 "parser_cocci_menhir.mly"
       ( P.make_cocci_rule_name_result nm d i a e ee )
-# 30357 "parser_cocci_menhir.ml"
+# 30400 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30411,13 +30481,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__8_ in
         let _v : (
-# 227 "parser_cocci_menhir.mly"
+# 201 "parser_cocci_menhir.mly"
       (Ast_cocci.rulename)
-# 30417 "parser_cocci_menhir.ml"
+# 30460 "parser_cocci_menhir.ml"
         ) = 
-# 281 "parser_cocci_menhir.mly"
+# 255 "parser_cocci_menhir.mly"
       ( P.make_generated_rule_name_result None d i a e ee )
-# 30421 "parser_cocci_menhir.ml"
+# 30464 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30457,20 +30527,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (
-# 227 "parser_cocci_menhir.mly"
+# 201 "parser_cocci_menhir.mly"
       (Ast_cocci.rulename)
-# 30463 "parser_cocci_menhir.ml"
+# 30506 "parser_cocci_menhir.ml"
         ) = let nm =
           
 # 39 "standard.mly"
     ( None )
-# 30468 "parser_cocci_menhir.ml"
+# 30511 "parser_cocci_menhir.ml"
           
         in
         
-# 283 "parser_cocci_menhir.mly"
+# 257 "parser_cocci_menhir.mly"
       ( P.make_script_rule_name_result lang nm d )
-# 30474 "parser_cocci_menhir.ml"
+# 30517 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30516,21 +30586,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__6_ in
         let _v : (
-# 227 "parser_cocci_menhir.mly"
+# 201 "parser_cocci_menhir.mly"
       (Ast_cocci.rulename)
-# 30522 "parser_cocci_menhir.ml"
+# 30565 "parser_cocci_menhir.ml"
         ) = let nm =
           let x = x0 in
           
 # 41 "standard.mly"
     ( Some x )
-# 30528 "parser_cocci_menhir.ml"
+# 30571 "parser_cocci_menhir.ml"
           
         in
         
-# 283 "parser_cocci_menhir.mly"
+# 257 "parser_cocci_menhir.mly"
       ( P.make_script_rule_name_result lang nm d )
-# 30534 "parser_cocci_menhir.ml"
+# 30577 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30570,13 +30640,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (
-# 227 "parser_cocci_menhir.mly"
+# 201 "parser_cocci_menhir.mly"
       (Ast_cocci.rulename)
-# 30576 "parser_cocci_menhir.ml"
+# 30619 "parser_cocci_menhir.ml"
         ) = 
-# 285 "parser_cocci_menhir.mly"
+# 259 "parser_cocci_menhir.mly"
       ( P.make_initial_script_rule_name_result lang d )
-# 30580 "parser_cocci_menhir.ml"
+# 30623 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30616,13 +30686,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (
-# 227 "parser_cocci_menhir.mly"
+# 201 "parser_cocci_menhir.mly"
       (Ast_cocci.rulename)
-# 30622 "parser_cocci_menhir.ml"
+# 30665 "parser_cocci_menhir.ml"
         ) = 
-# 287 "parser_cocci_menhir.mly"
+# 261 "parser_cocci_menhir.mly"
       ( P.make_final_script_rule_name_result lang d )
-# 30626 "parser_cocci_menhir.ml"
+# 30669 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30648,13 +30718,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_py_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 233 "parser_cocci_menhir.mly"
+# 207 "parser_cocci_menhir.mly"
        ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option)
-# 30654 "parser_cocci_menhir.ml"
+# 30697 "parser_cocci_menhir.ml"
         ) = 
-# 2443 "parser_cocci_menhir.mly"
+# 2431 "parser_cocci_menhir.mly"
   ( ((Some (P.id2name py), None), None) )
-# 30658 "parser_cocci_menhir.ml"
+# 30701 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30686,13 +30756,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_py_ in
         let _endpos = _endpos__3_ in
         let _v : (
-# 233 "parser_cocci_menhir.mly"
+# 207 "parser_cocci_menhir.mly"
        ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option)
-# 30692 "parser_cocci_menhir.ml"
+# 30735 "parser_cocci_menhir.ml"
         ) = 
-# 2445 "parser_cocci_menhir.mly"
+# 2433 "parser_cocci_menhir.mly"
   ( ((Some (P.id2name py), None), Some _2) )
-# 30696 "parser_cocci_menhir.ml"
+# 30739 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30740,13 +30810,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (
-# 233 "parser_cocci_menhir.mly"
+# 207 "parser_cocci_menhir.mly"
        ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option)
-# 30746 "parser_cocci_menhir.ml"
+# 30789 "parser_cocci_menhir.ml"
         ) = 
-# 2447 "parser_cocci_menhir.mly"
+# 2435 "parser_cocci_menhir.mly"
   ( ((None, Some (P.id2name ast)), Some _6) )
-# 30750 "parser_cocci_menhir.ml"
+# 30793 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30794,13 +30864,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (
-# 233 "parser_cocci_menhir.mly"
+# 207 "parser_cocci_menhir.mly"
        ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option)
-# 30800 "parser_cocci_menhir.ml"
+# 30843 "parser_cocci_menhir.ml"
         ) = 
-# 2449 "parser_cocci_menhir.mly"
+# 2437 "parser_cocci_menhir.mly"
   ( ((Some (P.id2name str), None), Some _6) )
-# 30804 "parser_cocci_menhir.ml"
+# 30847 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30850,13 +30920,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (
-# 233 "parser_cocci_menhir.mly"
+# 207 "parser_cocci_menhir.mly"
        ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option)
-# 30856 "parser_cocci_menhir.ml"
+# 30899 "parser_cocci_menhir.ml"
         ) = 
-# 2451 "parser_cocci_menhir.mly"
+# 2439 "parser_cocci_menhir.mly"
   ( ((Some (P.id2name str), Some (P.id2name ast)), Some _6) )
-# 30860 "parser_cocci_menhir.ml"
+# 30903 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30889,18 +30959,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let cocci : 'tv_pure_ident = Obj.magic cocci in
         let _2 : (
-# 114 "parser_cocci_menhir.mly"
+# 88 "parser_cocci_menhir.mly"
       (string)
-# 30895 "parser_cocci_menhir.ml"
+# 30938 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_cocci_ in
         let _v : 'tv_script_name_decl = 
-# 2455 "parser_cocci_menhir.mly"
+# 2443 "parser_cocci_menhir.mly"
       ( let nm = P.id2name cocci in
         let mv = Parse_aux.lookup _2 nm in
         ((_2, nm), mv) )
-# 30904 "parser_cocci_menhir.ml"
+# 30947 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30934,7 +31004,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_cocci_ in
         let _v : 'tv_script_name_decl = 
-# 2459 "parser_cocci_menhir.mly"
+# 2447 "parser_cocci_menhir.mly"
       ( let nm = P.id2name cocci in
         Iteration.parsed_virtual_identifiers :=
           Common.union_set [nm]
@@ -30942,7 +31012,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let name = ("virtual", nm) in
         let mv = Ast.MetaIdDecl(Ast.NONE,name) in
         (name,mv) )
-# 30946 "parser_cocci_menhir.ml"
+# 30989 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30961,16 +31031,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 30967 "parser_cocci_menhir.ml"
+# 31010 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_seed_elem = 
-# 1814 "parser_cocci_menhir.mly"
+# 1802 "parser_cocci_menhir.mly"
           ( let (x,_) = _1 in Ast.SeedString x )
-# 30974 "parser_cocci_menhir.ml"
+# 31017 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30989,16 +31059,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 130 "parser_cocci_menhir.mly"
+# 104 "parser_cocci_menhir.mly"
        (Parse_aux.midinfo)
-# 30995 "parser_cocci_menhir.ml"
+# 31038 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_seed_elem = 
-# 1815 "parser_cocci_menhir.mly"
+# 1803 "parser_cocci_menhir.mly"
           ( let (x,_,_,_,_) = _1 in Ast.SeedId x )
-# 31002 "parser_cocci_menhir.ml"
+# 31045 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31018,9 +31088,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_seed_elem = 
-# 1816 "parser_cocci_menhir.mly"
+# 1804 "parser_cocci_menhir.mly"
         (failwith "tmeta")
-# 31024 "parser_cocci_menhir.ml"
+# 31067 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31050,14 +31120,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_seed_elem = 
-# 1818 "parser_cocci_menhir.mly"
+# 1806 "parser_cocci_menhir.mly"
     ( let nm = ("virtual",P.id2name _3) in
      Iteration.parsed_virtual_identifiers :=
        Common.union_set [snd nm]
         !Iteration.parsed_virtual_identifiers;
     try Ast.SeedString (List.assoc (snd nm) !Flag.defined_virtual_env)
     with Not_found -> Ast.SeedId nm )
-# 31061 "parser_cocci_menhir.ml"
+# 31104 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31086,18 +31156,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _3 : 'tv_pure_ident = Obj.magic _3 in
         let _1 : (
-# 114 "parser_cocci_menhir.mly"
+# 88 "parser_cocci_menhir.mly"
       (string)
-# 31092 "parser_cocci_menhir.ml"
+# 31135 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_seed_elem = 
-# 1825 "parser_cocci_menhir.mly"
+# 1813 "parser_cocci_menhir.mly"
     ( let nm = (_1,P.id2name _3) in
       P.check_meta(Ast.MetaIdDecl(Ast.NONE,nm));
       Ast.SeedId nm )
-# 31101 "parser_cocci_menhir.ml"
+# 31144 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31116,16 +31186,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let x : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 31122 "parser_cocci_menhir.ml"
+# 31165 "parser_cocci_menhir.ml"
         ) = Obj.magic x in
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_x_ in
         let _v : 'tv_separated_nonempty_list_TComma_TString_ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31129 "parser_cocci_menhir.ml"
+# 31172 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31154,16 +31224,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let xs : 'tv_separated_nonempty_list_TComma_TString_ = Obj.magic xs in
         let x : (
-# 159 "parser_cocci_menhir.mly"
+# 133 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 31160 "parser_cocci_menhir.ml"
+# 31203 "parser_cocci_menhir.ml"
         ) = Obj.magic x in
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_xs_ in
         let _v : 'tv_separated_nonempty_list_TComma_TString_ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31167 "parser_cocci_menhir.ml"
+# 31210 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31187,7 +31257,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31191 "parser_cocci_menhir.ml"
+# 31234 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31221,7 +31291,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31225 "parser_cocci_menhir.ml"
+# 31268 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31245,7 +31315,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_ctype_ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31249 "parser_cocci_menhir.ml"
+# 31292 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31279,7 +31349,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_ctype_ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31283 "parser_cocci_menhir.ml"
+# 31326 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31303,7 +31373,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31307 "parser_cocci_menhir.ml"
+# 31350 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31337,7 +31407,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31341 "parser_cocci_menhir.ml"
+# 31384 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31361,7 +31431,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31365 "parser_cocci_menhir.ml"
+# 31408 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31395,7 +31465,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31399 "parser_cocci_menhir.ml"
+# 31442 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31419,7 +31489,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31423 "parser_cocci_menhir.ml"
+# 31466 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31453,7 +31523,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31457 "parser_cocci_menhir.ml"
+# 31500 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31477,7 +31547,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31481 "parser_cocci_menhir.ml"
+# 31524 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31511,7 +31581,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31515 "parser_cocci_menhir.ml"
+# 31558 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31535,7 +31605,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31539 "parser_cocci_menhir.ml"
+# 31582 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31569,7 +31639,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31573 "parser_cocci_menhir.ml"
+# 31616 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31593,7 +31663,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub__ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31597 "parser_cocci_menhir.ml"
+# 31640 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31627,7 +31697,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_not_ceq_or_sub__ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31631 "parser_cocci_menhir.ml"
+# 31674 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31651,7 +31721,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31655 "parser_cocci_menhir.ml"
+# 31698 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31685,7 +31755,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_econstraint_re_or_not_eqe_or_sub__ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31689 "parser_cocci_menhir.ml"
+# 31732 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31709,7 +31779,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31713 "parser_cocci_menhir.ml"
+# 31756 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31743,7 +31813,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_re_or_not_eqid__ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31747 "parser_cocci_menhir.ml"
+# 31790 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31767,7 +31837,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid__ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31771 "parser_cocci_menhir.ml"
+# 31814 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31801,7 +31871,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_idconstraint_virt_re_or_not_eqid__ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31805 "parser_cocci_menhir.ml"
+# 31848 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31825,7 +31895,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31829 "parser_cocci_menhir.ml"
+# 31872 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31859,7 +31929,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31863 "parser_cocci_menhir.ml"
+# 31906 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31883,7 +31953,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_pos__ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31887 "parser_cocci_menhir.ml"
+# 31930 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31917,7 +31987,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_x_eq_not_pos__ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31921 "parser_cocci_menhir.ml"
+# 31964 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31941,7 +32011,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_typedef_ident_ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 31945 "parser_cocci_menhir.ml"
+# 31988 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31975,7 +32045,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TComma_typedef_ident_ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 31979 "parser_cocci_menhir.ml"
+# 32022 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31999,7 +32069,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = 
 # 144 "standard.mly"
     ( [ x ] )
-# 32003 "parser_cocci_menhir.ml"
+# 32046 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32033,7 +32103,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _v : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = 
 # 146 "standard.mly"
     ( x :: xs )
-# 32037 "parser_cocci_menhir.ml"
+# 32080 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32052,16 +32122,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let ty : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32058 "parser_cocci_menhir.ml"
+# 32101 "parser_cocci_menhir.ml"
         ) = Obj.magic ty in
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_signable_types = 
-# 638 "parser_cocci_menhir.mly"
+# 626 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) )
-# 32065 "parser_cocci_menhir.ml"
+# 32108 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32080,16 +32150,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let ty : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32086 "parser_cocci_menhir.ml"
+# 32129 "parser_cocci_menhir.ml"
         ) = Obj.magic ty in
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_signable_types = 
-# 640 "parser_cocci_menhir.mly"
+# 628 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) )
-# 32093 "parser_cocci_menhir.ml"
+# 32136 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32113,23 +32183,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let ty2 : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32119 "parser_cocci_menhir.ml"
+# 32162 "parser_cocci_menhir.ml"
         ) = Obj.magic ty2 in
         let ty1 : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32124 "parser_cocci_menhir.ml"
+# 32167 "parser_cocci_menhir.ml"
         ) = Obj.magic ty1 in
         let _startpos = _startpos_ty1_ in
         let _endpos = _endpos_ty2_ in
         let _v : 'tv_signable_types = 
-# 642 "parser_cocci_menhir.mly"
+# 630 "parser_cocci_menhir.mly"
     ( Ast0.wrap
        (Ast0.BaseType
           (Ast.ShortIntType,[P.clt2mcode "short" ty1;P.clt2mcode "int" ty2])) )
-# 32133 "parser_cocci_menhir.ml"
+# 32176 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32148,16 +32218,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let ty : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32154 "parser_cocci_menhir.ml"
+# 32197 "parser_cocci_menhir.ml"
         ) = Obj.magic ty in
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : 'tv_signable_types = 
-# 646 "parser_cocci_menhir.mly"
+# 634 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) )
-# 32161 "parser_cocci_menhir.ml"
+# 32204 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32176,17 +32246,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let p : (
-# 134 "parser_cocci_menhir.mly"
+# 108 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 32182 "parser_cocci_menhir.ml"
+# 32225 "parser_cocci_menhir.ml"
         ) = Obj.magic p in
         let _startpos = _startpos_p_ in
         let _endpos = _endpos_p_ in
         let _v : 'tv_signable_types = 
-# 648 "parser_cocci_menhir.mly"
+# 636 "parser_cocci_menhir.mly"
     ( let (nm,pure,clt) = p in
       Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
-# 32190 "parser_cocci_menhir.ml"
+# 32233 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32214,26 +32284,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let p : (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 32220 "parser_cocci_menhir.ml"
+# 32263 "parser_cocci_menhir.ml"
         ) = Obj.magic p in
         let r : (
-# 114 "parser_cocci_menhir.mly"
+# 88 "parser_cocci_menhir.mly"
       (string)
-# 32225 "parser_cocci_menhir.ml"
+# 32268 "parser_cocci_menhir.ml"
         ) = Obj.magic r in
         let _startpos = _startpos_r_ in
         let _endpos = _endpos_p_ in
         let _v : 'tv_signable_types = 
-# 651 "parser_cocci_menhir.mly"
+# 639 "parser_cocci_menhir.mly"
     ( let nm = (r,P.id2name p) in
     (* this is only possible when we are in a metavar decl.  Otherwise,
        it will be represented already as a MetaType *)
     let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in
     Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p),
                            Ast0.Impure (*will be ignored*))) )
-# 32237 "parser_cocci_menhir.ml"
+# 32280 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32252,16 +32322,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let ty1 : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32258 "parser_cocci_menhir.ml"
+# 32301 "parser_cocci_menhir.ml"
         ) = Obj.magic ty1 in
         let _startpos = _startpos_ty1_ in
         let _endpos = _endpos_ty1_ in
         let _v : 'tv_signable_types = 
-# 658 "parser_cocci_menhir.mly"
+# 646 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty1])) )
-# 32265 "parser_cocci_menhir.ml"
+# 32308 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32285,23 +32355,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let ty2 : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32291 "parser_cocci_menhir.ml"
+# 32334 "parser_cocci_menhir.ml"
         ) = Obj.magic ty2 in
         let ty1 : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32296 "parser_cocci_menhir.ml"
+# 32339 "parser_cocci_menhir.ml"
         ) = Obj.magic ty1 in
         let _startpos = _startpos_ty1_ in
         let _endpos = _endpos_ty2_ in
         let _v : 'tv_signable_types = 
-# 660 "parser_cocci_menhir.mly"
+# 648 "parser_cocci_menhir.mly"
     ( Ast0.wrap
        (Ast0.BaseType
           (Ast.LongIntType,[P.clt2mcode "long" ty1;P.clt2mcode "int" ty2])) )
-# 32305 "parser_cocci_menhir.ml"
+# 32348 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32325,24 +32395,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let ty2 : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32331 "parser_cocci_menhir.ml"
+# 32374 "parser_cocci_menhir.ml"
         ) = Obj.magic ty2 in
         let ty1 : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32336 "parser_cocci_menhir.ml"
+# 32379 "parser_cocci_menhir.ml"
         ) = Obj.magic ty1 in
         let _startpos = _startpos_ty1_ in
         let _endpos = _endpos_ty2_ in
         let _v : 'tv_signable_types = 
-# 664 "parser_cocci_menhir.mly"
+# 652 "parser_cocci_menhir.mly"
     ( Ast0.wrap
        (Ast0.BaseType
           (Ast.LongLongType,
            [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) )
-# 32346 "parser_cocci_menhir.ml"
+# 32389 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32371,30 +32441,30 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let ty3 : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32377 "parser_cocci_menhir.ml"
+# 32420 "parser_cocci_menhir.ml"
         ) = Obj.magic ty3 in
         let ty2 : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32382 "parser_cocci_menhir.ml"
+# 32425 "parser_cocci_menhir.ml"
         ) = Obj.magic ty2 in
         let ty1 : (
-# 116 "parser_cocci_menhir.mly"
+# 90 "parser_cocci_menhir.mly"
       (Data.clt)
-# 32387 "parser_cocci_menhir.ml"
+# 32430 "parser_cocci_menhir.ml"
         ) = Obj.magic ty1 in
         let _startpos = _startpos_ty1_ in
         let _endpos = _endpos_ty3_ in
         let _v : 'tv_signable_types = 
-# 669 "parser_cocci_menhir.mly"
+# 657 "parser_cocci_menhir.mly"
     ( Ast0.wrap
        (Ast0.BaseType
           (Ast.LongLongIntType,
            [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2;
              P.clt2mcode "int" ty3])) )
-# 32398 "parser_cocci_menhir.ml"
+# 32441 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32416,9 +32486,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_single_statement = 
-# 1184 "parser_cocci_menhir.mly"
+# 1172 "parser_cocci_menhir.mly"
                                       ( _1 )
-# 32422 "parser_cocci_menhir.ml"
+# 32465 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32447,26 +32517,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32453 "parser_cocci_menhir.ml"
+# 32496 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_midzero_list_statement_statement_ = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32459 "parser_cocci_menhir.ml"
+# 32502 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_single_statement = 
-# 1188 "parser_cocci_menhir.mly"
+# 1176 "parser_cocci_menhir.mly"
       ( let (mids,code) = _2 in
         Ast0.wrap
          (Ast0.Disj(P.clt2mcode "(" _1,
                     List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code,
                     mids, P.clt2mcode ")" _3)) )
-# 32470 "parser_cocci_menhir.ml"
+# 32513 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32488,9 +32558,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_statement = 
-# 1107 "parser_cocci_menhir.mly"
+# 1095 "parser_cocci_menhir.mly"
            ( _1 )
-# 32494 "parser_cocci_menhir.ml"
+# 32537 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32509,16 +32579,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 32515 "parser_cocci_menhir.ml"
+# 32558 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_statement = 
-# 1108 "parser_cocci_menhir.mly"
+# 1096 "parser_cocci_menhir.mly"
         ( tmeta_to_statement _1)
-# 32522 "parser_cocci_menhir.ml"
+# 32565 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32537,16 +32607,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 134 "parser_cocci_menhir.mly"
+# 108 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 32543 "parser_cocci_menhir.ml"
+# 32586 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_statement = 
-# 1110 "parser_cocci_menhir.mly"
+# 1098 "parser_cocci_menhir.mly"
     ( P.meta_stm _1 )
-# 32550 "parser_cocci_menhir.ml"
+# 32593 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32570,17 +32640,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32576 "parser_cocci_menhir.ml"
+# 32619 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_option_expr_ = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_statement = 
-# 1112 "parser_cocci_menhir.mly"
+# 1100 "parser_cocci_menhir.mly"
     ( P.exp_stm _1 _2 )
-# 32584 "parser_cocci_menhir.ml"
+# 32627 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32620,27 +32690,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _5 : 'tv_single_statement = Obj.magic _5 in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32626 "parser_cocci_menhir.ml"
+# 32669 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32632 "parser_cocci_menhir.ml"
+# 32675 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32637 "parser_cocci_menhir.ml"
+# 32680 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : 'tv_statement = 
-# 1114 "parser_cocci_menhir.mly"
+# 1102 "parser_cocci_menhir.mly"
     ( P.ifthen _1 _2 _3 _4 _5 )
-# 32644 "parser_cocci_menhir.ml"
+# 32687 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32690,33 +32760,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _7 : 'tv_single_statement = Obj.magic _7 in
         let _6 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32696 "parser_cocci_menhir.ml"
+# 32739 "parser_cocci_menhir.ml"
         ) = Obj.magic _6 in
         let _5 : 'tv_single_statement = Obj.magic _5 in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32702 "parser_cocci_menhir.ml"
+# 32745 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32708 "parser_cocci_menhir.ml"
+# 32751 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32713 "parser_cocci_menhir.ml"
+# 32756 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : 'tv_statement = 
-# 1116 "parser_cocci_menhir.mly"
+# 1104 "parser_cocci_menhir.mly"
     ( P.ifthenelse _1 _2 _3 _4 _5 _6 _7 )
-# 32720 "parser_cocci_menhir.ml"
+# 32763 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32776,39 +32846,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _9 : 'tv_single_statement = Obj.magic _9 in
         let _8 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32782 "parser_cocci_menhir.ml"
+# 32825 "parser_cocci_menhir.ml"
         ) = Obj.magic _8 in
         let _7 : 'tv_option_eexpr_ = Obj.magic _7 in
         let _6 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32788 "parser_cocci_menhir.ml"
+# 32831 "parser_cocci_menhir.ml"
         ) = Obj.magic _6 in
         let _5 : 'tv_option_eexpr_ = Obj.magic _5 in
         let _4 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32794 "parser_cocci_menhir.ml"
+# 32837 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_option_eexpr_ = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32800 "parser_cocci_menhir.ml"
+# 32843 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32805 "parser_cocci_menhir.ml"
+# 32848 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__9_ in
         let _v : 'tv_statement = 
-# 1119 "parser_cocci_menhir.mly"
+# 1107 "parser_cocci_menhir.mly"
     ( P.forloop _1 _2 _3 _4 _5 _6 _7 _8 _9 )
-# 32812 "parser_cocci_menhir.ml"
+# 32855 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32863,34 +32933,34 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _8 : 'tv_single_statement = Obj.magic _8 in
         let _7 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32869 "parser_cocci_menhir.ml"
+# 32912 "parser_cocci_menhir.ml"
         ) = Obj.magic _7 in
         let _6 : 'tv_option_eexpr_ = Obj.magic _6 in
         let _5 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32875 "parser_cocci_menhir.ml"
+# 32918 "parser_cocci_menhir.ml"
         ) = Obj.magic _5 in
         let _4 : 'tv_option_eexpr_ = Obj.magic _4 in
         let _3 : 'tv_one_decl_var = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32882 "parser_cocci_menhir.ml"
+# 32925 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32887 "parser_cocci_menhir.ml"
+# 32930 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__8_ in
         let _v : 'tv_statement = 
-# 1122 "parser_cocci_menhir.mly"
+# 1110 "parser_cocci_menhir.mly"
     ( P.forloop2 _1 _2 _3 _4 _5 _6 _7 _8 )
-# 32894 "parser_cocci_menhir.ml"
+# 32937 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32930,27 +33000,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _5 : 'tv_single_statement = Obj.magic _5 in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32936 "parser_cocci_menhir.ml"
+# 32979 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32942 "parser_cocci_menhir.ml"
+# 32985 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 32947 "parser_cocci_menhir.ml"
+# 32990 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : 'tv_statement = 
-# 1124 "parser_cocci_menhir.mly"
+# 1112 "parser_cocci_menhir.mly"
     ( P.whileloop _1 _2 _3 _4 _5 )
-# 32954 "parser_cocci_menhir.ml"
+# 32997 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32999,38 +33069,38 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _7 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33005 "parser_cocci_menhir.ml"
+# 33048 "parser_cocci_menhir.ml"
         ) = Obj.magic _7 in
         let _6 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33010 "parser_cocci_menhir.ml"
+# 33053 "parser_cocci_menhir.ml"
         ) = Obj.magic _6 in
         let _5 : 'tv_eexpr = Obj.magic _5 in
         let _4 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33016 "parser_cocci_menhir.ml"
+# 33059 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33021 "parser_cocci_menhir.ml"
+# 33064 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_single_statement = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33027 "parser_cocci_menhir.ml"
+# 33070 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : 'tv_statement = 
-# 1126 "parser_cocci_menhir.mly"
+# 1114 "parser_cocci_menhir.mly"
     ( P.doloop _1 _2 _3 _4 _5 _6 _7 )
-# 33034 "parser_cocci_menhir.ml"
+# 33077 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33070,23 +33140,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _5 : 'tv_single_statement = Obj.magic _5 in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33076 "parser_cocci_menhir.ml"
+# 33119 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr_list_option = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33082 "parser_cocci_menhir.ml"
+# 33125 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_iter_ident = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : 'tv_statement = 
-# 1128 "parser_cocci_menhir.mly"
+# 1116 "parser_cocci_menhir.mly"
     ( P.iterator _1 _2 _3 _4 _5 )
-# 33090 "parser_cocci_menhir.ml"
+# 33133 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33140,39 +33210,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _8 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33146 "parser_cocci_menhir.ml"
+# 33189 "parser_cocci_menhir.ml"
         ) = Obj.magic _8 in
         let _7 : 'tv_list_case_line_ = Obj.magic _7 in
         let _6 : 'tv_list_decl_var_ = Obj.magic _6 in
         let _5 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33153 "parser_cocci_menhir.ml"
+# 33196 "parser_cocci_menhir.ml"
         ) = Obj.magic _5 in
         let _4 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33158 "parser_cocci_menhir.ml"
+# 33201 "parser_cocci_menhir.ml"
         ) = Obj.magic _4 in
         let _3 : 'tv_eexpr = Obj.magic _3 in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33164 "parser_cocci_menhir.ml"
+# 33207 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33169 "parser_cocci_menhir.ml"
+# 33212 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__8_ in
         let _v : 'tv_statement = 
-# 1130 "parser_cocci_menhir.mly"
+# 1118 "parser_cocci_menhir.mly"
     ( P.switch _1 _2 _3 _4 _5 (List.concat _6) _7 _8 )
-# 33176 "parser_cocci_menhir.ml"
+# 33219 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33201,22 +33271,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33207 "parser_cocci_menhir.ml"
+# 33250 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_eexpr = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33213 "parser_cocci_menhir.ml"
+# 33256 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_statement = 
-# 1131 "parser_cocci_menhir.mly"
+# 1119 "parser_cocci_menhir.mly"
                         ( P.ret_exp _1 _2 _3 )
-# 33220 "parser_cocci_menhir.ml"
+# 33263 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33240,21 +33310,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33246 "parser_cocci_menhir.ml"
+# 33289 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 125 "parser_cocci_menhir.mly"
+# 99 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33251 "parser_cocci_menhir.ml"
+# 33294 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_statement = 
-# 1132 "parser_cocci_menhir.mly"
+# 1120 "parser_cocci_menhir.mly"
                   ( P.ret _1 _2 )
-# 33258 "parser_cocci_menhir.ml"
+# 33301 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33278,21 +33348,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33284 "parser_cocci_menhir.ml"
+# 33327 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33289 "parser_cocci_menhir.ml"
+# 33332 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_statement = 
-# 1133 "parser_cocci_menhir.mly"
+# 1121 "parser_cocci_menhir.mly"
                  ( P.break _1 _2 )
-# 33296 "parser_cocci_menhir.ml"
+# 33339 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33316,21 +33386,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33322 "parser_cocci_menhir.ml"
+# 33365 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33327 "parser_cocci_menhir.ml"
+# 33370 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_statement = 
-# 1134 "parser_cocci_menhir.mly"
+# 1122 "parser_cocci_menhir.mly"
                     ( P.cont _1 _2 )
-# 33334 "parser_cocci_menhir.ml"
+# 33377 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33354,17 +33424,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33360 "parser_cocci_menhir.ml"
+# 33403 "parser_cocci_menhir.ml"
         ) = Obj.magic _2 in
         let _1 : 'tv_mident = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_statement = 
-# 1135 "parser_cocci_menhir.mly"
+# 1123 "parser_cocci_menhir.mly"
                  ( P.label _1 _2 )
-# 33368 "parser_cocci_menhir.ml"
+# 33411 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33393,22 +33463,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33399 "parser_cocci_menhir.ml"
+# 33442 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_disj_ident = Obj.magic _2 in
         let _1 : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33405 "parser_cocci_menhir.ml"
+# 33448 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_statement = 
-# 1136 "parser_cocci_menhir.mly"
+# 1124 "parser_cocci_menhir.mly"
                            ( P.goto _1 _2 _3 )
-# 33412 "parser_cocci_menhir.ml"
+# 33455 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33437,22 +33507,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33443 "parser_cocci_menhir.ml"
+# 33486 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_fun_start = Obj.magic _2 in
         let _1 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33449 "parser_cocci_menhir.ml"
+# 33492 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_statement = 
-# 1138 "parser_cocci_menhir.mly"
+# 1126 "parser_cocci_menhir.mly"
     ( P.seq _1 _2 _3 )
-# 33456 "parser_cocci_menhir.ml"
+# 33499 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33477,16 +33547,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let w : 'tv_list_whenppdecs_ = Obj.magic w in
         let _1 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33483 "parser_cocci_menhir.ml"
+# 33526 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_w_ in
         let _v : 'tv_stm_dots = 
-# 1142 "parser_cocci_menhir.mly"
+# 1130 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." _1, List.concat w)) )
-# 33490 "parser_cocci_menhir.ml"
+# 33533 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33520,24 +33590,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let c : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33526 "parser_cocci_menhir.ml"
+# 33569 "parser_cocci_menhir.ml"
         ) = Obj.magic c in
         let b : 'tv_nest_start = Obj.magic b in
         let w : 'tv_list_whenppdecs_ = Obj.magic w in
         let _1 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33533 "parser_cocci_menhir.ml"
+# 33576 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_c_ in
         let _v : 'tv_stm_dots = 
-# 1144 "parser_cocci_menhir.mly"
+# 1132 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." _1, b,
                          P.clt2mcode "...>" c, List.concat w, false)) )
-# 33541 "parser_cocci_menhir.ml"
+# 33584 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33571,24 +33641,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let c : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33577 "parser_cocci_menhir.ml"
+# 33620 "parser_cocci_menhir.ml"
         ) = Obj.magic c in
         let b : 'tv_nest_start = Obj.magic b in
         let w : 'tv_list_whenppdecs_ = Obj.magic w in
         let _1 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33584 "parser_cocci_menhir.ml"
+# 33627 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_c_ in
         let _v : 'tv_stm_dots = 
-# 1147 "parser_cocci_menhir.mly"
+# 1135 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." _1, b,
                          P.clt2mcode "...+>" c, List.concat w, true)) )
-# 33592 "parser_cocci_menhir.ml"
+# 33635 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33607,16 +33677,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let s : (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
-# 33613 "parser_cocci_menhir.ml"
+# 33656 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_s_ in
         let _v : 'tv_storage = 
-# 1068 "parser_cocci_menhir.mly"
+# 1056 "parser_cocci_menhir.mly"
                         ( P.clt2mcode Ast.Static s )
-# 33620 "parser_cocci_menhir.ml"
+# 33663 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33635,16 +33705,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let s : (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
-# 33641 "parser_cocci_menhir.ml"
+# 33684 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_s_ in
         let _v : 'tv_storage = 
-# 1069 "parser_cocci_menhir.mly"
+# 1057 "parser_cocci_menhir.mly"
                         ( P.clt2mcode Ast.Auto s )
-# 33648 "parser_cocci_menhir.ml"
+# 33691 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33663,16 +33733,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let s : (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
-# 33669 "parser_cocci_menhir.ml"
+# 33712 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_s_ in
         let _v : 'tv_storage = 
-# 1070 "parser_cocci_menhir.mly"
+# 1058 "parser_cocci_menhir.mly"
                         ( P.clt2mcode Ast.Register s )
-# 33676 "parser_cocci_menhir.ml"
+# 33719 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33691,16 +33761,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let s : (
-# 121 "parser_cocci_menhir.mly"
+# 95 "parser_cocci_menhir.mly"
       (Data.clt)
-# 33697 "parser_cocci_menhir.ml"
+# 33740 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_s_ in
         let _v : 'tv_storage = 
-# 1071 "parser_cocci_menhir.mly"
+# 1059 "parser_cocci_menhir.mly"
                         ( P.clt2mcode Ast.Extern s )
-# 33704 "parser_cocci_menhir.ml"
+# 33747 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33720,9 +33790,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_struct_decl = 
-# 763 "parser_cocci_menhir.mly"
+# 751 "parser_cocci_menhir.mly"
                       ( [] )
-# 33726 "parser_cocci_menhir.ml"
+# 33769 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33744,9 +33814,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_struct_decl = 
-# 764 "parser_cocci_menhir.mly"
+# 752 "parser_cocci_menhir.mly"
                       ( [_1] )
-# 33750 "parser_cocci_menhir.ml"
+# 33793 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33768,9 +33838,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_struct_decl_list = 
-# 792 "parser_cocci_menhir.mly"
+# 780 "parser_cocci_menhir.mly"
                           ( Ast0.wrap(Ast0.DOTS(_1)) )
-# 33774 "parser_cocci_menhir.ml"
+# 33817 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33792,9 +33862,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_struct_decl_list_start = 
-# 795 "parser_cocci_menhir.mly"
+# 783 "parser_cocci_menhir.mly"
                                      ( _1 )
-# 33798 "parser_cocci_menhir.ml"
+# 33841 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33822,9 +33892,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_struct_decl_list_start = 
-# 796 "parser_cocci_menhir.mly"
+# 784 "parser_cocci_menhir.mly"
                                      ( _1@_2 )
-# 33828 "parser_cocci_menhir.ml"
+# 33871 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33852,9 +33922,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_r_ in
         let _v : 'tv_struct_decl_list_start = 
-# 798 "parser_cocci_menhir.mly"
+# 786 "parser_cocci_menhir.mly"
     ( (P.mkddots_one "..." d)::r )
-# 33858 "parser_cocci_menhir.ml"
+# 33901 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33873,16 +33943,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 33879 "parser_cocci_menhir.ml"
+# 33922 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_struct_decl_one = 
-# 767 "parser_cocci_menhir.mly"
+# 755 "parser_cocci_menhir.mly"
                  ( P.meta_field _1 )
-# 33886 "parser_cocci_menhir.ml"
+# 33929 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33901,16 +33971,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 137 "parser_cocci_menhir.mly"
+# 111 "parser_cocci_menhir.mly"
        (Parse_aux.list_info)
-# 33907 "parser_cocci_menhir.ml"
+# 33950 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_struct_decl_one = 
-# 768 "parser_cocci_menhir.mly"
+# 756 "parser_cocci_menhir.mly"
                      ( P.meta_field_list _1 )
-# 33914 "parser_cocci_menhir.ml"
+# 33957 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33929,16 +33999,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 33935 "parser_cocci_menhir.ml"
+# 33978 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_struct_decl_one = 
-# 769 "parser_cocci_menhir.mly"
+# 757 "parser_cocci_menhir.mly"
             ( tmeta_to_field _1 )
-# 33942 "parser_cocci_menhir.ml"
+# 33985 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33967,24 +34037,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33973 "parser_cocci_menhir.ml"
+# 34016 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_midzero_list_struct_decl_one_struct_decl_one_ = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 33979 "parser_cocci_menhir.ml"
+# 34022 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let _startpos = _startpos_lp_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_struct_decl_one = 
-# 771 "parser_cocci_menhir.mly"
+# 759 "parser_cocci_menhir.mly"
  ( let (mids,code) = t in
        Ast0.wrap
          (Ast0.DisjDecl(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) )
-# 33988 "parser_cocci_menhir.ml"
+# 34031 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34013,19 +34083,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34019 "parser_cocci_menhir.ml"
+# 34062 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let d : 'tv_d_ident = Obj.magic d in
         let t : 'tv_ctype = Obj.magic t in
         let _startpos = _startpos_t_ in
         let _endpos = _endpos_pv_ in
         let _v : 'tv_struct_decl_one = 
-# 775 "parser_cocci_menhir.mly"
+# 763 "parser_cocci_menhir.mly"
   ( let (id,fn) = d in
         Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv)) )
-# 34029 "parser_cocci_menhir.ml"
+# 34072 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34084,42 +34154,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34090 "parser_cocci_menhir.ml"
+# 34133 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let rp2 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34095 "parser_cocci_menhir.ml"
+# 34138 "parser_cocci_menhir.ml"
         ) = Obj.magic rp2 in
         let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in
         let lp2 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34101 "parser_cocci_menhir.ml"
+# 34144 "parser_cocci_menhir.ml"
         ) = Obj.magic lp2 in
         let rp1 : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34106 "parser_cocci_menhir.ml"
+# 34149 "parser_cocci_menhir.ml"
         ) = Obj.magic rp1 in
         let d : 'tv_d_ident = Obj.magic d in
         let st : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34112 "parser_cocci_menhir.ml"
+# 34155 "parser_cocci_menhir.ml"
         ) = Obj.magic st in
         let lp1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34117 "parser_cocci_menhir.ml"
+# 34160 "parser_cocci_menhir.ml"
         ) = Obj.magic lp1 in
         let t : 'tv_ctype = Obj.magic t in
         let _startpos = _startpos_t_ in
         let _endpos = _endpos_pv_ in
         let _v : 'tv_struct_decl_one = 
-# 779 "parser_cocci_menhir.mly"
+# 767 "parser_cocci_menhir.mly"
         ( let (id,fn) = d in
         let t =
          Ast0.wrap
@@ -34127,7 +34197,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1,
                P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in
         Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv)) )
-# 34131 "parser_cocci_menhir.ml"
+# 34174 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34156,9 +34226,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34162 "parser_cocci_menhir.ml"
+# 34205 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let d : 'tv_d_ident = Obj.magic d in
         let i : 'tv_pure_ident_or_symbol = Obj.magic i in
@@ -34168,15 +34238,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 34172 "parser_cocci_menhir.ml"
+# 34215 "parser_cocci_menhir.ml"
           
         in
         
-# 787 "parser_cocci_menhir.mly"
+# 775 "parser_cocci_menhir.mly"
   ( let (id,fn) = d in
         let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
         Ast0.wrap(Ast0.UnInit(None,fn idtype,id,P.clt2mcode ";" pv)) )
-# 34180 "parser_cocci_menhir.ml"
+# 34223 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34210,9 +34280,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let pv : (
-# 179 "parser_cocci_menhir.mly"
+# 153 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34216 "parser_cocci_menhir.ml"
+# 34259 "parser_cocci_menhir.ml"
         ) = Obj.magic pv in
         let d : 'tv_d_ident = Obj.magic d in
         let i : 'tv_pure_ident_or_symbol = Obj.magic i in
@@ -34224,15 +34294,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 34228 "parser_cocci_menhir.ml"
+# 34271 "parser_cocci_menhir.ml"
           
         in
         
-# 787 "parser_cocci_menhir.mly"
+# 775 "parser_cocci_menhir.mly"
   ( let (id,fn) = d in
         let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in
         Ast0.wrap(Ast0.UnInit(None,fn idtype,id,P.clt2mcode ";" pv)) )
-# 34236 "parser_cocci_menhir.ml"
+# 34279 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34251,16 +34321,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let s : (
-# 118 "parser_cocci_menhir.mly"
+# 92 "parser_cocci_menhir.mly"
       (Data.clt)
-# 34257 "parser_cocci_menhir.ml"
+# 34300 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_s_ in
         let _v : 'tv_struct_or_union = 
-# 759 "parser_cocci_menhir.mly"
+# 747 "parser_cocci_menhir.mly"
                  ( P.clt2mcode Ast.Struct s )
-# 34264 "parser_cocci_menhir.ml"
+# 34307 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34279,16 +34349,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let u : (
-# 118 "parser_cocci_menhir.mly"
+# 92 "parser_cocci_menhir.mly"
       (Data.clt)
-# 34285 "parser_cocci_menhir.ml"
+# 34328 "parser_cocci_menhir.ml"
         ) = Obj.magic u in
         let _startpos = _startpos_u_ in
         let _endpos = _endpos_u_ in
         let _v : 'tv_struct_or_union = 
-# 760 "parser_cocci_menhir.mly"
+# 748 "parser_cocci_menhir.mly"
                  ( P.clt2mcode Ast.Union u )
-# 34292 "parser_cocci_menhir.ml"
+# 34335 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34314,7 +34384,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_i_ in
         let _v : 'tv_sub = 
-# 1969 "parser_cocci_menhir.mly"
+# 1957 "parser_cocci_menhir.mly"
          ( (if !Data.in_iso
           then failwith "constraints not allowed in iso file");
           (if !Data.in_generating
@@ -34323,7 +34393,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             P.check_inherited_constraint i
               (function mv -> Ast.MetaExpDecl(Ast.NONE,mv,None)) in
           [i] )
-# 34327 "parser_cocci_menhir.ml"
+# 34370 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34357,7 +34427,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_sub = 
-# 1978 "parser_cocci_menhir.mly"
+# 1966 "parser_cocci_menhir.mly"
   ( (if !Data.in_iso
           then failwith "constraints not allowed in iso file");
           (if !Data.in_generating
@@ -34367,7 +34437,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
               P.check_inherited_constraint i
                 (function mv -> Ast.MetaExpDecl(Ast.NONE,mv,None)))
             l)
-# 34371 "parser_cocci_menhir.ml"
+# 34414 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34389,9 +34459,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_top_eexpr = 
-# 1487 "parser_cocci_menhir.mly"
+# 1475 "parser_cocci_menhir.mly"
         ( Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))) )
-# 34395 "parser_cocci_menhir.ml"
+# 34438 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34420,27 +34490,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let _3 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34426 "parser_cocci_menhir.ml"
+# 34469 "parser_cocci_menhir.ml"
         ) = Obj.magic _3 in
         let _2 : 'tv_initialize_list = Obj.magic _2 in
         let _1 : (
-# 173 "parser_cocci_menhir.mly"
+# 147 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34432 "parser_cocci_menhir.ml"
+# 34475 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_top_init = 
-# 2232 "parser_cocci_menhir.mly"
+# 2220 "parser_cocci_menhir.mly"
     ( if P.struct_initializer _2
     then
       let il = P.drop_dot_commas _2 in
       Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,il,P.clt2mcode "}" _3,false))
     else
       Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3,true)) )
-# 34444 "parser_cocci_menhir.ml"
+# 34487 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34455,9 +34525,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_toplevel_after_dots = 
-# 2220 "parser_cocci_menhir.mly"
+# 2208 "parser_cocci_menhir.mly"
                                      ([])
-# 34461 "parser_cocci_menhir.ml"
+# 34504 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34483,9 +34553,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_after_dots = 
-# 2221 "parser_cocci_menhir.mly"
+# 2209 "parser_cocci_menhir.mly"
                                      (_2)
-# 34489 "parser_cocci_menhir.ml"
+# 34532 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34513,9 +34583,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_after_dots = 
-# 2222 "parser_cocci_menhir.mly"
+# 2210 "parser_cocci_menhir.mly"
                                      ((Ast0.wrap(Ast0.Exp(_1)))::_2)
-# 34519 "parser_cocci_menhir.ml"
+# 34562 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34543,9 +34613,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_after_dots = 
-# 2223 "parser_cocci_menhir.mly"
+# 2211 "parser_cocci_menhir.mly"
                                           (_1@_2)
-# 34549 "parser_cocci_menhir.ml"
+# 34592 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34571,9 +34641,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_after_dots_init = 
-# 2211 "parser_cocci_menhir.mly"
+# 2199 "parser_cocci_menhir.mly"
                                      (_2)
-# 34577 "parser_cocci_menhir.ml"
+# 34620 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34601,9 +34671,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_after_dots_init = 
-# 2212 "parser_cocci_menhir.mly"
+# 2200 "parser_cocci_menhir.mly"
                                      ((Ast0.wrap(Ast0.Exp(_1)))::_2)
-# 34607 "parser_cocci_menhir.ml"
+# 34650 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34631,9 +34701,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_after_dots_init = 
-# 2213 "parser_cocci_menhir.mly"
+# 2201 "parser_cocci_menhir.mly"
                                           (_1@_2)
-# 34637 "parser_cocci_menhir.ml"
+# 34680 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34648,9 +34718,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_toplevel_after_exp = 
-# 2216 "parser_cocci_menhir.mly"
+# 2204 "parser_cocci_menhir.mly"
                                      ([])
-# 34654 "parser_cocci_menhir.ml"
+# 34697 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34678,9 +34748,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_after_exp = 
-# 2217 "parser_cocci_menhir.mly"
+# 2205 "parser_cocci_menhir.mly"
                                      (_1::_2)
-# 34684 "parser_cocci_menhir.ml"
+# 34727 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34695,9 +34765,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in
         let _endpos = _startpos in
         let _v : 'tv_toplevel_after_stm = 
-# 2226 "parser_cocci_menhir.mly"
+# 2214 "parser_cocci_menhir.mly"
                                      ([])
-# 34701 "parser_cocci_menhir.ml"
+# 34744 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34725,9 +34795,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_after_stm = 
-# 2227 "parser_cocci_menhir.mly"
+# 2215 "parser_cocci_menhir.mly"
                                      (_1::_2)
-# 34731 "parser_cocci_menhir.ml"
+# 34774 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34755,9 +34825,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_after_stm = 
-# 2228 "parser_cocci_menhir.mly"
+# 2216 "parser_cocci_menhir.mly"
                                      (_1@_2)
-# 34761 "parser_cocci_menhir.ml"
+# 34804 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34785,9 +34855,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = 
-# 2206 "parser_cocci_menhir.mly"
+# 2194 "parser_cocci_menhir.mly"
                                      ( _1::_2 )
-# 34791 "parser_cocci_menhir.ml"
+# 34834 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34815,9 +34885,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = 
-# 2207 "parser_cocci_menhir.mly"
+# 2195 "parser_cocci_menhir.mly"
                                      ( (Ast0.wrap(Ast0.Exp(_1)))::_2 )
-# 34821 "parser_cocci_menhir.ml"
+# 34864 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34845,9 +34915,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = 
-# 2208 "parser_cocci_menhir.mly"
+# 2196 "parser_cocci_menhir.mly"
                                           ( _1@_2 )
-# 34851 "parser_cocci_menhir.ml"
+# 34894 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34878,9 +34948,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let b : 'tv_toplevel_after_dots_init = Obj.magic b in
         let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
         let a0 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34884 "parser_cocci_menhir.ml"
+# 34927 "parser_cocci_menhir.ml"
         ) = Obj.magic a0 in
         let _startpos = _startpos_a0_ in
         let _endpos = _endpos_b_ in
@@ -34888,15 +34958,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           let w = w0 in
           let a = a0 in
           
-# 1152 "parser_cocci_menhir.mly"
+# 1140 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." a, List.concat w)) )
-# 34894 "parser_cocci_menhir.ml"
+# 34937 "parser_cocci_menhir.ml"
           
         in
         
-# 2199 "parser_cocci_menhir.mly"
+# 2187 "parser_cocci_menhir.mly"
                                              ( a::b )
-# 34900 "parser_cocci_menhir.ml"
+# 34943 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34936,16 +35006,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let b : 'tv_toplevel_after_dots_init = Obj.magic b in
         let c0 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34942 "parser_cocci_menhir.ml"
+# 34985 "parser_cocci_menhir.ml"
         ) = Obj.magic c0 in
         let b0 : 'tv_nest_start = Obj.magic b0 in
         let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
         let a0 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 34949 "parser_cocci_menhir.ml"
+# 34992 "parser_cocci_menhir.ml"
         ) = Obj.magic a0 in
         let _startpos = _startpos_a0_ in
         let _endpos = _endpos_b_ in
@@ -34955,16 +35025,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           let w = w0 in
           let a = a0 in
           
-# 1156 "parser_cocci_menhir.mly"
+# 1144 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b,
                          P.clt2mcode "...>" c, List.concat w, false)) )
-# 34962 "parser_cocci_menhir.ml"
+# 35005 "parser_cocci_menhir.ml"
           
         in
         
-# 2200 "parser_cocci_menhir.mly"
+# 2188 "parser_cocci_menhir.mly"
                                               ( a::b )
-# 34968 "parser_cocci_menhir.ml"
+# 35011 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35004,16 +35074,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let b : 'tv_toplevel_after_dots_init = Obj.magic b in
         let c0 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35010 "parser_cocci_menhir.ml"
+# 35053 "parser_cocci_menhir.ml"
         ) = Obj.magic c0 in
         let b0 : 'tv_nest_start = Obj.magic b0 in
         let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
         let a0 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35017 "parser_cocci_menhir.ml"
+# 35060 "parser_cocci_menhir.ml"
         ) = Obj.magic a0 in
         let _startpos = _startpos_a0_ in
         let _endpos = _endpos_b_ in
@@ -35023,16 +35093,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           let w = w0 in
           let a = a0 in
           
-# 1159 "parser_cocci_menhir.mly"
+# 1147 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b,
                          P.clt2mcode "...+>" c, List.concat w, true)) )
-# 35030 "parser_cocci_menhir.ml"
+# 35073 "parser_cocci_menhir.ml"
           
         in
         
-# 2200 "parser_cocci_menhir.mly"
+# 2188 "parser_cocci_menhir.mly"
                                               ( a::b )
-# 35036 "parser_cocci_menhir.ml"
+# 35079 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35066,16 +35136,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let c0 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35072 "parser_cocci_menhir.ml"
+# 35115 "parser_cocci_menhir.ml"
         ) = Obj.magic c0 in
         let b0 : 'tv_nest_start = Obj.magic b0 in
         let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
         let a0 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35079 "parser_cocci_menhir.ml"
+# 35122 "parser_cocci_menhir.ml"
         ) = Obj.magic a0 in
         let _startpos = _startpos_a0_ in
         let _endpos = _endpos_c0_ in
@@ -35085,16 +35155,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           let w = w0 in
           let a = a0 in
           
-# 1156 "parser_cocci_menhir.mly"
+# 1144 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b,
                          P.clt2mcode "...>" c, List.concat w, false)) )
-# 35092 "parser_cocci_menhir.ml"
+# 35135 "parser_cocci_menhir.ml"
           
         in
         
-# 2201 "parser_cocci_menhir.mly"
+# 2189 "parser_cocci_menhir.mly"
                                        ( [a] )
-# 35098 "parser_cocci_menhir.ml"
+# 35141 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35128,16 +35198,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let c0 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35134 "parser_cocci_menhir.ml"
+# 35177 "parser_cocci_menhir.ml"
         ) = Obj.magic c0 in
         let b0 : 'tv_nest_start = Obj.magic b0 in
         let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in
         let a0 : (
-# 145 "parser_cocci_menhir.mly"
+# 119 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35141 "parser_cocci_menhir.ml"
+# 35184 "parser_cocci_menhir.ml"
         ) = Obj.magic a0 in
         let _startpos = _startpos_a0_ in
         let _endpos = _endpos_c0_ in
@@ -35147,16 +35217,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           let w = w0 in
           let a = a0 in
           
-# 1159 "parser_cocci_menhir.mly"
+# 1147 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b,
                          P.clt2mcode "...+>" c, List.concat w, true)) )
-# 35154 "parser_cocci_menhir.ml"
+# 35197 "parser_cocci_menhir.ml"
           
         in
         
-# 2201 "parser_cocci_menhir.mly"
+# 2189 "parser_cocci_menhir.mly"
                                        ( [a] )
-# 35160 "parser_cocci_menhir.ml"
+# 35203 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35184,9 +35254,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = 
-# 2202 "parser_cocci_menhir.mly"
+# 2190 "parser_cocci_menhir.mly"
                                      ( (Ast0.wrap(Ast0.Exp(_1)))::_2 )
-# 35190 "parser_cocci_menhir.ml"
+# 35233 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35214,9 +35284,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = 
-# 2203 "parser_cocci_menhir.mly"
+# 2191 "parser_cocci_menhir.mly"
                                           ( _1@_2 )
-# 35220 "parser_cocci_menhir.ml"
+# 35263 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35238,9 +35308,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_type_ident = 
-# 2057 "parser_cocci_menhir.mly"
+# 2045 "parser_cocci_menhir.mly"
                        ( _1 )
-# 35244 "parser_cocci_menhir.ml"
+# 35287 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35259,16 +35329,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 35265 "parser_cocci_menhir.ml"
+# 35308 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_type_ident = 
-# 2059 "parser_cocci_menhir.mly"
+# 2047 "parser_cocci_menhir.mly"
          ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) )
-# 35272 "parser_cocci_menhir.ml"
+# 35315 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35299,13 +35369,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 39 "standard.mly"
     ( None )
-# 35303 "parser_cocci_menhir.ml"
+# 35346 "parser_cocci_menhir.ml"
           
         in
         
-# 749 "parser_cocci_menhir.mly"
+# 737 "parser_cocci_menhir.mly"
     ( P.pointerify (P.make_cv cv ty) m )
-# 35309 "parser_cocci_menhir.ml"
+# 35352 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35343,13 +35413,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           
 # 41 "standard.mly"
     ( Some x )
-# 35347 "parser_cocci_menhir.ml"
+# 35390 "parser_cocci_menhir.ml"
           
         in
         
-# 749 "parser_cocci_menhir.mly"
+# 737 "parser_cocci_menhir.mly"
     ( P.pointerify (P.make_cv cv ty) m )
-# 35353 "parser_cocci_menhir.ml"
+# 35396 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35378,24 +35448,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35384 "parser_cocci_menhir.ml"
+# 35427 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_midzero_list_mctype_mctype_ = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35390 "parser_cocci_menhir.ml"
+# 35433 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let _startpos = _startpos_lp_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_typedef_ctype = 
-# 751 "parser_cocci_menhir.mly"
+# 739 "parser_cocci_menhir.mly"
     ( let (mids,code) = t in
       Ast0.wrap
        (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) )
-# 35399 "parser_cocci_menhir.ml"
+# 35442 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35414,16 +35484,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 35420 "parser_cocci_menhir.ml"
+# 35463 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_typedef_ctype = 
-# 754 "parser_cocci_menhir.mly"
+# 742 "parser_cocci_menhir.mly"
         ( tmeta_to_type _1 )
-# 35427 "parser_cocci_menhir.ml"
+# 35470 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35445,9 +35515,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_typedef_ident = 
-# 2077 "parser_cocci_menhir.mly"
+# 2065 "parser_cocci_menhir.mly"
          ( Ast0.wrap(Ast0.TypeName(P.id2mcode _1)) )
-# 35451 "parser_cocci_menhir.ml"
+# 35494 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35466,16 +35536,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 135 "parser_cocci_menhir.mly"
+# 109 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 35472 "parser_cocci_menhir.ml"
+# 35515 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_typedef_ident = 
-# 2078 "parser_cocci_menhir.mly"
+# 2066 "parser_cocci_menhir.mly"
              ( tmeta_to_type _1 )
-# 35479 "parser_cocci_menhir.ml"
+# 35522 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35494,17 +35564,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 134 "parser_cocci_menhir.mly"
+# 108 "parser_cocci_menhir.mly"
        (Parse_aux.info)
-# 35500 "parser_cocci_menhir.ml"
+# 35543 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_typedef_ident = 
-# 2080 "parser_cocci_menhir.mly"
+# 2068 "parser_cocci_menhir.mly"
          ( let (nm,pure,clt) = _1 in
         Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) )
-# 35508 "parser_cocci_menhir.ml"
+# 35551 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35526,9 +35596,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1629 "parser_cocci_menhir.mly"
+# 1617 "parser_cocci_menhir.mly"
                                          ( _1 )
-# 35532 "parser_cocci_menhir.ml"
+# 35575 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35553,16 +35623,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35559 "parser_cocci_menhir.ml"
+# 35602 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1631 "parser_cocci_menhir.mly"
+# 1619 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) )
-# 35566 "parser_cocci_menhir.ml"
+# 35609 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35587,16 +35657,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35593 "parser_cocci_menhir.ml"
+# 35636 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1633 "parser_cocci_menhir.mly"
+# 1621 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) )
-# 35600 "parser_cocci_menhir.ml"
+# 35643 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35624,9 +35694,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1635 "parser_cocci_menhir.mly"
+# 1623 "parser_cocci_menhir.mly"
       ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 35630 "parser_cocci_menhir.ml"
+# 35673 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35651,17 +35721,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35657 "parser_cocci_menhir.ml"
+# 35700 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1637 "parser_cocci_menhir.mly"
+# 1625 "parser_cocci_menhir.mly"
       ( let mcode = P.clt2mcode Ast.Not _1 in
       Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 35665 "parser_cocci_menhir.ml"
+# 35708 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35686,16 +35756,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35692 "parser_cocci_menhir.ml"
+# 35735 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1640 "parser_cocci_menhir.mly"
+# 1628 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) )
-# 35699 "parser_cocci_menhir.ml"
+# 35742 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35729,29 +35799,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35735 "parser_cocci_menhir.ml"
+# 35778 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35741 "parser_cocci_menhir.ml"
+# 35784 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let s : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35746 "parser_cocci_menhir.ml"
+# 35789 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_unary_expr_eexpr_dot_expressions_ = 
-# 1642 "parser_cocci_menhir.mly"
+# 1630 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s,
                                    P.clt2mcode "(" lp,t,
                                    P.clt2mcode ")" rp)) )
-# 35755 "parser_cocci_menhir.ml"
+# 35798 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35773,9 +35843,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1629 "parser_cocci_menhir.mly"
+# 1617 "parser_cocci_menhir.mly"
                                          ( _1 )
-# 35779 "parser_cocci_menhir.ml"
+# 35822 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35800,16 +35870,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35806 "parser_cocci_menhir.ml"
+# 35849 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1631 "parser_cocci_menhir.mly"
+# 1619 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) )
-# 35813 "parser_cocci_menhir.ml"
+# 35856 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35834,16 +35904,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35840 "parser_cocci_menhir.ml"
+# 35883 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1633 "parser_cocci_menhir.mly"
+# 1621 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) )
-# 35847 "parser_cocci_menhir.ml"
+# 35890 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35871,9 +35941,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1635 "parser_cocci_menhir.mly"
+# 1623 "parser_cocci_menhir.mly"
       ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 35877 "parser_cocci_menhir.ml"
+# 35920 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35898,17 +35968,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35904 "parser_cocci_menhir.ml"
+# 35947 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1637 "parser_cocci_menhir.mly"
+# 1625 "parser_cocci_menhir.mly"
       ( let mcode = P.clt2mcode Ast.Not _1 in
       Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 35912 "parser_cocci_menhir.ml"
+# 35955 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35933,16 +36003,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35939 "parser_cocci_menhir.ml"
+# 35982 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1640 "parser_cocci_menhir.mly"
+# 1628 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) )
-# 35946 "parser_cocci_menhir.ml"
+# 35989 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35976,29 +36046,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35982 "parser_cocci_menhir.ml"
+# 36025 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35988 "parser_cocci_menhir.ml"
+# 36031 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let s : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 35993 "parser_cocci_menhir.ml"
+# 36036 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_unary_expr_eexpr_invalid_ = 
-# 1642 "parser_cocci_menhir.mly"
+# 1630 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s,
                                    P.clt2mcode "(" lp,t,
                                    P.clt2mcode ")" rp)) )
-# 36002 "parser_cocci_menhir.ml"
+# 36045 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36020,9 +36090,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1629 "parser_cocci_menhir.mly"
+# 1617 "parser_cocci_menhir.mly"
                                          ( _1 )
-# 36026 "parser_cocci_menhir.ml"
+# 36069 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36047,16 +36117,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36053 "parser_cocci_menhir.ml"
+# 36096 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1631 "parser_cocci_menhir.mly"
+# 1619 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) )
-# 36060 "parser_cocci_menhir.ml"
+# 36103 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36081,16 +36151,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36087 "parser_cocci_menhir.ml"
+# 36130 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1633 "parser_cocci_menhir.mly"
+# 1621 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) )
-# 36094 "parser_cocci_menhir.ml"
+# 36137 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36118,9 +36188,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1635 "parser_cocci_menhir.mly"
+# 1623 "parser_cocci_menhir.mly"
       ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 36124 "parser_cocci_menhir.ml"
+# 36167 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36145,17 +36215,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36151 "parser_cocci_menhir.ml"
+# 36194 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1637 "parser_cocci_menhir.mly"
+# 1625 "parser_cocci_menhir.mly"
       ( let mcode = P.clt2mcode Ast.Not _1 in
       Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 36159 "parser_cocci_menhir.ml"
+# 36202 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36180,16 +36250,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36186 "parser_cocci_menhir.ml"
+# 36229 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1640 "parser_cocci_menhir.mly"
+# 1628 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) )
-# 36193 "parser_cocci_menhir.ml"
+# 36236 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36223,29 +36293,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36229 "parser_cocci_menhir.ml"
+# 36272 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36235 "parser_cocci_menhir.ml"
+# 36278 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let s : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36240 "parser_cocci_menhir.ml"
+# 36283 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_unary_expr_eexpr_nest_expressions_ = 
-# 1642 "parser_cocci_menhir.mly"
+# 1630 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s,
                                    P.clt2mcode "(" lp,t,
                                    P.clt2mcode ")" rp)) )
-# 36249 "parser_cocci_menhir.ml"
+# 36292 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36267,9 +36337,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1629 "parser_cocci_menhir.mly"
+# 1617 "parser_cocci_menhir.mly"
                                          ( _1 )
-# 36273 "parser_cocci_menhir.ml"
+# 36316 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36294,16 +36364,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36300 "parser_cocci_menhir.ml"
+# 36343 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1631 "parser_cocci_menhir.mly"
+# 1619 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) )
-# 36307 "parser_cocci_menhir.ml"
+# 36350 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36328,16 +36398,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36334 "parser_cocci_menhir.ml"
+# 36377 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1633 "parser_cocci_menhir.mly"
+# 1621 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) )
-# 36341 "parser_cocci_menhir.ml"
+# 36384 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36365,9 +36435,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1635 "parser_cocci_menhir.mly"
+# 1623 "parser_cocci_menhir.mly"
       ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 36371 "parser_cocci_menhir.ml"
+# 36414 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36392,17 +36462,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36398 "parser_cocci_menhir.ml"
+# 36441 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1637 "parser_cocci_menhir.mly"
+# 1625 "parser_cocci_menhir.mly"
       ( let mcode = P.clt2mcode Ast.Not _1 in
       Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 36406 "parser_cocci_menhir.ml"
+# 36449 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36427,16 +36497,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36433 "parser_cocci_menhir.ml"
+# 36476 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1640 "parser_cocci_menhir.mly"
+# 1628 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) )
-# 36440 "parser_cocci_menhir.ml"
+# 36483 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36470,29 +36540,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36476 "parser_cocci_menhir.ml"
+# 36519 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36482 "parser_cocci_menhir.ml"
+# 36525 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let s : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36487 "parser_cocci_menhir.ml"
+# 36530 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_unary_expr_expr_invalid_ = 
-# 1642 "parser_cocci_menhir.mly"
+# 1630 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s,
                                    P.clt2mcode "(" lp,t,
                                    P.clt2mcode ")" rp)) )
-# 36496 "parser_cocci_menhir.ml"
+# 36539 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36514,9 +36584,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_expr_bis = 
-# 1648 "parser_cocci_menhir.mly"
+# 1636 "parser_cocci_menhir.mly"
                                                           ( _1 )
-# 36520 "parser_cocci_menhir.ml"
+# 36563 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36541,16 +36611,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36547 "parser_cocci_menhir.ml"
+# 36590 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_bis = 
-# 1650 "parser_cocci_menhir.mly"
+# 1638 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) )
-# 36554 "parser_cocci_menhir.ml"
+# 36597 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36575,16 +36645,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 157 "parser_cocci_menhir.mly"
+# 131 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36581 "parser_cocci_menhir.ml"
+# 36624 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_bis = 
-# 1652 "parser_cocci_menhir.mly"
+# 1640 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) )
-# 36588 "parser_cocci_menhir.ml"
+# 36631 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36612,9 +36682,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_bis = 
-# 1654 "parser_cocci_menhir.mly"
+# 1642 "parser_cocci_menhir.mly"
       ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 36618 "parser_cocci_menhir.ml"
+# 36661 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36639,17 +36709,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36645 "parser_cocci_menhir.ml"
+# 36688 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_bis = 
-# 1656 "parser_cocci_menhir.mly"
+# 1644 "parser_cocci_menhir.mly"
       ( let mcode = P.clt2mcode Ast.Not _1 in
       Ast0.wrap(Ast0.Unary(_2, mcode)) )
-# 36653 "parser_cocci_menhir.ml"
+# 36696 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36674,16 +36744,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           } = _menhir_stack in
         let _2 : 'tv_unary_expr_bis = Obj.magic _2 in
         let _1 : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36680 "parser_cocci_menhir.ml"
+# 36723 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_unary_expr_bis = 
-# 1659 "parser_cocci_menhir.mly"
+# 1647 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) )
-# 36687 "parser_cocci_menhir.ml"
+# 36730 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36717,29 +36787,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
             };
           } = _menhir_stack in
         let rp : (
-# 149 "parser_cocci_menhir.mly"
+# 123 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36723 "parser_cocci_menhir.ml"
+# 36766 "parser_cocci_menhir.ml"
         ) = Obj.magic rp in
         let t : 'tv_ctype = Obj.magic t in
         let lp : (
-# 148 "parser_cocci_menhir.mly"
+# 122 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36729 "parser_cocci_menhir.ml"
+# 36772 "parser_cocci_menhir.ml"
         ) = Obj.magic lp in
         let s : (
-# 126 "parser_cocci_menhir.mly"
+# 100 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36734 "parser_cocci_menhir.ml"
+# 36777 "parser_cocci_menhir.ml"
         ) = Obj.magic s in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_rp_ in
         let _v : 'tv_unary_expr_bis = 
-# 1661 "parser_cocci_menhir.mly"
+# 1649 "parser_cocci_menhir.mly"
       ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s,
                                    P.clt2mcode "(" lp,t,
                                    P.clt2mcode ")" rp)) )
-# 36743 "parser_cocci_menhir.ml"
+# 36786 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36758,16 +36828,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 165 "parser_cocci_menhir.mly"
+# 139 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36764 "parser_cocci_menhir.ml"
+# 36807 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_op = 
-# 1665 "parser_cocci_menhir.mly"
+# 1653 "parser_cocci_menhir.mly"
                   ( P.clt2mcode Ast.GetRef _1 )
-# 36771 "parser_cocci_menhir.ml"
+# 36814 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36786,16 +36856,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36792 "parser_cocci_menhir.ml"
+# 36835 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_op = 
-# 1666 "parser_cocci_menhir.mly"
+# 1654 "parser_cocci_menhir.mly"
            ( P.clt2mcode Ast.DeRef _1 )
-# 36799 "parser_cocci_menhir.ml"
+# 36842 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36814,16 +36884,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36820 "parser_cocci_menhir.ml"
+# 36863 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_op = 
-# 1667 "parser_cocci_menhir.mly"
+# 1655 "parser_cocci_menhir.mly"
            ( P.clt2mcode Ast.UnPlus _1 )
-# 36827 "parser_cocci_menhir.ml"
+# 36870 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36842,16 +36912,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 170 "parser_cocci_menhir.mly"
+# 144 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36848 "parser_cocci_menhir.ml"
+# 36891 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_op = 
-# 1668 "parser_cocci_menhir.mly"
+# 1656 "parser_cocci_menhir.mly"
            ( P.clt2mcode Ast.UnMinus _1 )
-# 36855 "parser_cocci_menhir.ml"
+# 36898 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36870,16 +36940,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 171 "parser_cocci_menhir.mly"
+# 145 "parser_cocci_menhir.mly"
        (Data.clt)
-# 36876 "parser_cocci_menhir.ml"
+# 36919 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_unary_op = 
-# 1669 "parser_cocci_menhir.mly"
+# 1657 "parser_cocci_menhir.mly"
            ( P.clt2mcode Ast.Tilde _1 )
-# 36883 "parser_cocci_menhir.ml"
+# 36926 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36907,9 +36977,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_when_start = 
-# 2330 "parser_cocci_menhir.mly"
+# 2318 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.DOTS((Ast0.wrap(Ast0.Exp(_1)))::_2)) )
-# 36913 "parser_cocci_menhir.ml"
+# 36956 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36937,9 +37007,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : 'tv_when_start = 
-# 2332 "parser_cocci_menhir.mly"
+# 2320 "parser_cocci_menhir.mly"
     ( Ast0.wrap(Ast0.DOTS(_1@_2)) )
-# 36943 "parser_cocci_menhir.ml"
+# 36986 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36961,9 +37031,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos_w_ in
         let _endpos = _endpos_w_ in
         let _v : 'tv_whenppdecs = 
-# 1163 "parser_cocci_menhir.mly"
+# 1151 "parser_cocci_menhir.mly"
     ( w )
-# 36967 "parser_cocci_menhir.ml"
+# 37010 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36997,9 +37067,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = 
-# 2377 "parser_cocci_menhir.mly"
+# 2365 "parser_cocci_menhir.mly"
                                          ( [Ast0.WhenNot w] )
-# 37003 "parser_cocci_menhir.ml"
+# 37046 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37033,9 +37103,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = 
-# 2378 "parser_cocci_menhir.mly"
+# 2366 "parser_cocci_menhir.mly"
                                              ( [Ast0.WhenAlways w] )
-# 37039 "parser_cocci_menhir.ml"
+# 37082 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37065,9 +37135,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = 
-# 2380 "parser_cocci_menhir.mly"
+# 2368 "parser_cocci_menhir.mly"
       ( List.map (function x -> Ast0.WhenModifier(x)) _2 )
-# 37071 "parser_cocci_menhir.ml"
+# 37114 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37101,9 +37171,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = 
-# 2381 "parser_cocci_menhir.mly"
+# 2369 "parser_cocci_menhir.mly"
                                         ( [Ast0.WhenNotTrue e] )
-# 37107 "parser_cocci_menhir.ml"
+# 37150 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37137,9 +37207,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = 
-# 2382 "parser_cocci_menhir.mly"
+# 2370 "parser_cocci_menhir.mly"
                                          ( [Ast0.WhenNotFalse e] )
-# 37143 "parser_cocci_menhir.ml"
+# 37186 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37158,16 +37228,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
           MenhirLib.EngineTypes.next = _menhir_stack;
           } = _menhir_stack in
         let _1 : (
-# 127 "parser_cocci_menhir.mly"
+# 101 "parser_cocci_menhir.mly"
        (string * Data.clt)
-# 37164 "parser_cocci_menhir.ml"
+# 37207 "parser_cocci_menhir.ml"
         ) = Obj.magic _1 in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : 'tv_wrapped_sym_ident = 
-# 1803 "parser_cocci_menhir.mly"
+# 1791 "parser_cocci_menhir.mly"
          ( Ast0.wrap(Ast0.Id(P.sym2mcode _1)) )
-# 37171 "parser_cocci_menhir.ml"
+# 37214 "parser_cocci_menhir.ml"
          in
         _menhir_env.MenhirLib.EngineTypes.stack <- {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37188,106 +37258,106 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct
 
 let rec script_meta_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1829 lexer lexbuf) : (
-# 233 "parser_cocci_menhir.mly"
+    (Obj.magic (MenhirInterpreter.entry 1832 lexer lexbuf) : (
+# 207 "parser_cocci_menhir.mly"
        ((string option (*string*) * string option (*ast*)) * (Ast_cocci.meta_name * Ast_cocci.metavar) option)
-# 37195 "parser_cocci_menhir.ml"
+# 37238 "parser_cocci_menhir.ml"
     ))
 
 and rule_name =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1752 lexer lexbuf) : (
-# 227 "parser_cocci_menhir.mly"
+    (Obj.magic (MenhirInterpreter.entry 1755 lexer lexbuf) : (
+# 201 "parser_cocci_menhir.mly"
       (Ast_cocci.rulename)
-# 37203 "parser_cocci_menhir.ml"
+# 37246 "parser_cocci_menhir.ml"
     ))
 
 and reinit =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1750 lexer lexbuf) : (
-# 205 "parser_cocci_menhir.mly"
+    (Obj.magic (MenhirInterpreter.entry 1753 lexer lexbuf) : (
+# 179 "parser_cocci_menhir.mly"
       (unit)
-# 37211 "parser_cocci_menhir.ml"
+# 37254 "parser_cocci_menhir.ml"
     ))
 
 and plus_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1714 lexer lexbuf) : (
-# 214 "parser_cocci_menhir.mly"
+    (Obj.magic (MenhirInterpreter.entry 1717 lexer lexbuf) : (
+# 188 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 37219 "parser_cocci_menhir.ml"
+# 37262 "parser_cocci_menhir.ml"
     ))
 
 and plus_exp_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1706 lexer lexbuf) : (
-# 217 "parser_cocci_menhir.mly"
+    (Obj.magic (MenhirInterpreter.entry 1709 lexer lexbuf) : (
+# 191 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 37227 "parser_cocci_menhir.ml"
+# 37270 "parser_cocci_menhir.ml"
     ))
 
 and never_used =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1700 lexer lexbuf) : (
-# 242 "parser_cocci_menhir.mly"
+    (Obj.magic (MenhirInterpreter.entry 1703 lexer lexbuf) : (
+# 216 "parser_cocci_menhir.mly"
       (unit)
-# 37235 "parser_cocci_menhir.ml"
+# 37278 "parser_cocci_menhir.ml"
     ))
 
 and minus_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1615 lexer lexbuf) : (
-# 208 "parser_cocci_menhir.mly"
+    (Obj.magic (MenhirInterpreter.entry 1618 lexer lexbuf) : (
+# 182 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 37243 "parser_cocci_menhir.ml"
+# 37286 "parser_cocci_menhir.ml"
     ))
 
 and minus_exp_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1603 lexer lexbuf) : (
-# 211 "parser_cocci_menhir.mly"
+    (Obj.magic (MenhirInterpreter.entry 1606 lexer lexbuf) : (
+# 185 "parser_cocci_menhir.mly"
       (Ast0_cocci.rule)
-# 37251 "parser_cocci_menhir.ml"
+# 37294 "parser_cocci_menhir.ml"
     ))
 
 and meta_main =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1600 lexer lexbuf) : (
-# 231 "parser_cocci_menhir.mly"
+    (Obj.magic (MenhirInterpreter.entry 1603 lexer lexbuf) : (
+# 205 "parser_cocci_menhir.mly"
       ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list)
-# 37259 "parser_cocci_menhir.ml"
+# 37302 "parser_cocci_menhir.ml"
     ))
 
 and iso_rule_name =
   fun lexer lexbuf ->
-    (Obj.magic (MenhirInterpreter.entry 1596 lexer lexbuf) : (
-# 223 "parser_cocci_menhir.mly"
+    (Obj.magic (MenhirInterpreter.entry 1599 lexer lexbuf) : (
+# 197 "parser_cocci_menhir.mly"
       (Ast_cocci.rulename)
-# 37267 "parser_cocci_menhir.ml"
+# 37310 "parser_cocci_menhir.ml"
     ))
 
 and iso_meta_main =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1301 lexer lexbuf) : (
-# 239 "parser_cocci_menhir.mly"
+# 213 "parser_cocci_menhir.mly"
       ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list)
-# 37275 "parser_cocci_menhir.ml"
+# 37318 "parser_cocci_menhir.ml"
     ))
 
 and iso_main =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 18 lexer lexbuf) : (
-# 236 "parser_cocci_menhir.mly"
+# 210 "parser_cocci_menhir.mly"
       (Ast0_cocci.anything list list)
-# 37283 "parser_cocci_menhir.ml"
+# 37326 "parser_cocci_menhir.ml"
     ))
 
 and include_main =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 0 lexer lexbuf) : (
-# 220 "parser_cocci_menhir.mly"
+# 194 "parser_cocci_menhir.mly"
       (Data.incl_iso list)
-# 37291 "parser_cocci_menhir.ml"
+# 37334 "parser_cocci_menhir.ml"
     ))
 
 
index 83e6266..73be925 100644 (file)
@@ -1,3 +1,30 @@
+(*
+ * Copyright 2012, INRIA
+ * Julia Lawall, Gilles Muller
+ * Copyright 2010-2011, INRIA, University of Copenhagen
+ * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix
+ * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen
+ * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
+ * This file is part of Coccinelle.
+ *
+ * Coccinelle is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, according to version 2 of the License.
+ *
+ * Coccinelle is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Coccinelle.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The authors reserve the right to distribute this or future versions of
+ * Coccinelle under other licenses.
+ *)
+
+
+# 0 "./parser_cocci_menhir.mli"
 exception Error
 
 type token = 
index 7eec03b..23c916c 100644 (file)
@@ -424,6 +424,20 @@ metadec:
 list_len:
   pure_ident_or_meta_ident { Common.Left $1 }
 | TInt { let (x,clt) = $1 in Common.Right (int_of_string x) }
+| TVirtual TDot pure_ident
+    { let nm = ("virtual",P.id2name $3) in
+    Iteration.parsed_virtual_identifiers :=
+      Common.union_set [snd nm]
+        !Iteration.parsed_virtual_identifiers;
+    try
+    Common.Right (int_of_string
+                   (List.assoc (snd nm) !Flag.defined_virtual_env))
+    with Not_found | Failure "int_of_string" ->
+      begin
+       Common.Left (Some "virtual",P.id2name $3)
+      end
+    }
+
 
 %inline metakind_fresh:
   TFresh TIdentifier
diff --git a/parsing_cocci/parsing_cocci.mldylib b/parsing_cocci/parsing_cocci.mldylib
new file mode 100644 (file)
index 0000000..ff133dc
--- /dev/null
@@ -0,0 +1,44 @@
+Flag_parsing_cocci
+Type_cocci
+Ast_cocci
+Ast0_cocci
+Pretty_print_cocci
+Unparse_ast0
+Visitor_ast0_types
+Visitor_ast
+Visitor_ast0
+Compute_lines
+Comm_assoc
+Iso_pattern
+Iso_compile
+Single_statement
+Simple_assignments
+Get_metas
+Ast0toast
+Check_meta
+Top_level
+Type_infer
+Test_exps
+Unitary_ast0
+Arity
+Index
+Context_neg
+Adjust_pragmas
+Insert_plus
+Function_prototypes
+Unify_ast
+Semantic_cocci
+Data
+Free_vars
+Safe_for_multi_decls
+Parse_aux
+Disjdistr
+Lexer_cocci
+Parser_cocci_menhir
+Lexer_cli
+Lexer_script
+Get_constants2
+Id_utils
+Adjacency
+Parse_cocci
+Command_line
\ No newline at end of file
diff --git a/parsing_cocci/parsing_cocci.mllib b/parsing_cocci/parsing_cocci.mllib
new file mode 100644 (file)
index 0000000..ff133dc
--- /dev/null
@@ -0,0 +1,44 @@
+Flag_parsing_cocci
+Type_cocci
+Ast_cocci
+Ast0_cocci
+Pretty_print_cocci
+Unparse_ast0
+Visitor_ast0_types
+Visitor_ast
+Visitor_ast0
+Compute_lines
+Comm_assoc
+Iso_pattern
+Iso_compile
+Single_statement
+Simple_assignments
+Get_metas
+Ast0toast
+Check_meta
+Top_level
+Type_infer
+Test_exps
+Unitary_ast0
+Arity
+Index
+Context_neg
+Adjust_pragmas
+Insert_plus
+Function_prototypes
+Unify_ast
+Semantic_cocci
+Data
+Free_vars
+Safe_for_multi_decls
+Parse_aux
+Disjdistr
+Lexer_cocci
+Parser_cocci_menhir
+Lexer_cli
+Lexer_script
+Get_constants2
+Id_utils
+Adjacency
+Parse_cocci
+Command_line
\ No newline at end of file
index 7530d17..12613d4 100644 (file)
@@ -59,11 +59,13 @@ let is_simple_ast_assign left op minus_left =
   ((Ast.unwrap_mcode op) = Ast.SimpleAssign)
 
 let warning e msg =
-  Common.pr2
-    ("the simple assignment expression on line "^
-     (string_of_int (Ast0.get_line e))^
-     " contains transformations\n"^
-     "that prevent it from matching a declaration ("^msg^")\n");
+  if not !Flag.sgrep_mode2
+  then
+    Common.pr2
+      ("the simple assignment expression on line "^
+       (string_of_int (Ast0.get_line e))^
+       " contains transformations\n"^
+       "that prevent it from matching a declaration ("^msg^")\n");
   e
 
 let rebuild e1 left right op simple =
index 4d946f7..82e48cb 100644 (file)
@@ -256,14 +256,14 @@ and left_statement s =
   | Ast0.Seq(lbrace,body,rbrace) -> modif_before_mcode lbrace
   | Ast0.ExprStatement(Some exp,sem) -> left_expression exp
   | Ast0.ExprStatement(None,sem) -> modif_before_mcode sem
-  | Ast0.IfThen(iff,lp,exp,rp,branch1,(info,aft)) -> modif_before_mcode iff
-  | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,(info,aft)) ->
+  | Ast0.IfThen(iff,lp,exp,rp,branch1,aft) -> modif_before_mcode iff
+  | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,aft) ->
       modif_before_mcode iff
-  | Ast0.While(whl,lp,exp,rp,body,(info,aft)) -> modif_before_mcode whl
+  | Ast0.While(whl,lp,exp,rp,body,aft) -> modif_before_mcode whl
   | Ast0.Do(d,body,whl,lp,exp,rp,sem) -> modif_before_mcode d
-  | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,(info,aft)) ->
+  | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,aft) ->
       modif_before_mcode fr
-  | Ast0.Iterator(nm,lp,args,rp,body,(info,aft)) -> left_ident nm
+  | Ast0.Iterator(nm,lp,args,rp,body,aft) -> left_ident nm
   | Ast0.Switch(switch,lp,exp,rp,lb,decls,cases,rb) ->
       modif_before_mcode switch
   | Ast0.Break(br,sem) -> modif_before_mcode br
@@ -298,14 +298,14 @@ and right_statement s =
   | Ast0.Decl(_,decl) -> right_declaration decl
   | Ast0.Seq(lbrace,body,rbrace) -> modif_after_mcode rbrace
   | Ast0.ExprStatement(exp,sem) -> modif_after_mcode sem
-  | Ast0.IfThen(iff,lp,exp,rp,branch1,(info,aft)) -> modif_after_mcodekind aft
-  | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,(info,aft)) ->
+  | Ast0.IfThen(iff,lp,exp,rp,branch1,(_,aft,_)) -> modif_after_mcodekind aft
+  | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,(_,aft,_)) ->
       modif_after_mcodekind aft
-  | Ast0.While(whl,lp,exp,rp,body,(info,aft)) -> modif_after_mcodekind aft
+  | Ast0.While(whl,lp,exp,rp,body,(_,aft,_)) -> modif_after_mcodekind aft
   | Ast0.Do(d,body,whl,lp,exp,rp,sem) -> modif_after_mcode sem
-  | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,(info,aft)) ->
+  | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,(_,aft,_)) ->
       modif_after_mcodekind aft
-  | Ast0.Iterator(nm,lp,args,rp,body,(info,aft)) ->
+  | Ast0.Iterator(nm,lp,args,rp,body,(_,aft,_)) ->
       modif_after_mcodekind aft
   | Ast0.Switch(switch,lp,exp,rp,lb,decls,cases,rb) -> modif_after_mcode rb
   | Ast0.Break(br,sem) -> modif_after_mcode sem
index 63e1403..52d745e 100644 (file)
@@ -469,10 +469,6 @@ and statement arity s =
          dots force_newline (statement arity) body;
          end_block(); print_string arity; mcode print_string rbrace
       | Ast0.Decl(_,decl) ->
-         Printf.printf "statement mcodekind %s\n"
-           (Dumper.dump (Ast0.get_mcodekind s));
-         Printf.printf "decl mcodekind %s\n"
-           (Dumper.dump (Ast0.get_mcodekind decl));
          print_string arity; declaration decl
       | Ast0.Seq(lbrace,body,rbrace) ->
          print_string arity; mcode print_string lbrace; start_block();
@@ -481,26 +477,26 @@ and statement arity s =
       | Ast0.ExprStatement(exp,sem) ->
          print_string arity; print_option expression exp;
          mcode print_string sem
-      | Ast0.IfThen(iff,lp,exp,rp,branch1,(info,aft)) ->
+      | Ast0.IfThen(iff,lp,exp,rp,branch1,(info,aft,adj)) ->
          print_string arity;
          mcode print_string iff; print_string " "; mcode print_string_box lp;
          expression exp; close_box(); mcode print_string rp; print_string " ";
          statement arity branch1;
-         mcode (function _ -> ()) ((),(),info,aft,ref [],-1)
-      | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,(info,aft)) ->
+         mcode (function _ -> ()) ((),(),info,aft,ref [],adj)
+      | Ast0.IfThenElse(iff,lp,exp,rp,branch1,els,branch2,(info,aft,adj)) ->
          print_string arity;
          mcode print_string iff; print_string " "; mcode print_string_box lp;
          expression exp; close_box(); mcode print_string rp; print_string " ";
          statement arity branch1;
          print_string arity; mcode print_string els; print_string " ";
          statement arity branch2;
-         mcode (function _ -> ()) ((),(),info,aft,ref [],-1)
-      | Ast0.While(whl,lp,exp,rp,body,(info,aft)) ->
+         mcode (function _ -> ()) ((),(),info,aft,ref [],adj)
+      | Ast0.While(whl,lp,exp,rp,body,(info,aft,adj)) ->
          print_string arity;
          mcode print_string whl; print_string " "; mcode print_string_box lp;
          expression exp; close_box(); mcode print_string rp; print_string " ";
          statement arity body;
-         mcode (function _ -> ()) ((),(),info,aft,ref [],-1)
+         mcode (function _ -> ()) ((),(),info,aft,ref [],adj)
       | Ast0.Do(d,body,whl,lp,exp,rp,sem) ->
          print_string arity; mcode print_string d; print_string " ";
          statement arity body;
@@ -508,7 +504,7 @@ and statement arity s =
          mcode print_string whl; print_string " "; mcode print_string_box lp;
          expression exp; close_box(); mcode print_string rp;
          mcode print_string sem
-      | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,(info,aft)) ->
+      | Ast0.For(fr,lp,first,e2,sem2,e3,rp,body,(info,aft,adj)) ->
          print_string arity;
          mcode print_string fr; mcode print_string_box lp;
          (match Ast0.unwrap first with
@@ -518,14 +514,14 @@ and statement arity s =
          print_option expression e2; mcode print_string sem2;
          print_option expression e3; close_box();
          mcode print_string rp; print_string " "; statement arity body;
-         mcode (function _ -> ()) ((),(),info,aft,ref [],-1)
-      | Ast0.Iterator(nm,lp,args,rp,body,(info,aft)) ->
+         mcode (function _ -> ()) ((),(),info,aft,ref [],adj)
+      | Ast0.Iterator(nm,lp,args,rp,body,(info,aft,adj)) ->
          print_string arity;
          ident nm; print_string " "; mcode print_string_box lp;
          let _ = dots (function _ -> ()) expression args in
          close_box(); mcode print_string rp; print_string " ";
          statement arity body;
-         mcode (function _ -> ()) ((),(),info,aft,ref [],-1)
+         mcode (function _ -> ()) ((),(),info,aft,ref [],adj)
       |        Ast0.Switch(switch,lp,exp,rp,lb,decls,cases,rb) ->
          print_string arity;
          mcode print_string switch; print_string " ";
index 96e10b1..3dbe6ce 100644 (file)
@@ -105,8 +105,10 @@ distclean: clean
 
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 -include .depend
 endif
 endif
+endif
 
 include ../Makefile.common
index 263e7e8..ab8d987 100644 (file)
@@ -56,6 +56,7 @@ OPTLIB=$(LIB:.cma=.cmxa)
 OBJS = $(SRC:.ml=.cmo)
 OPTOBJS = $(SRC:.ml=.cmx)
 
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 all: $(LIB)
 all.opt:
        @$(MAKE) $(OPTLIB) BUILD_OPT=yes
@@ -68,6 +69,16 @@ $(LIB):  $(OBJS)
 
 clean::
        rm -f $(LIB) $(TARGET).top
+else
+all:
+       cd .. && $(OCAMLBUILD) popl09/popl09.cma
+
+all.opt:
+       cd .. && $(OCAMLBUILD) popl09/popl09.cmxa
+
+clean::
+       cd .. && $(OCAMLBUILD) -clean
+endif
 
 
 $(OPTLIB): $(OPTOBJS)
@@ -105,8 +116,10 @@ distclean: clean
 
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 -include .depend
 endif
 endif
+endif
 
 include ../Makefile.common
diff --git a/popl09/popl09.mldylib b/popl09/popl09.mldylib
new file mode 100644 (file)
index 0000000..fdd3e01
--- /dev/null
@@ -0,0 +1,7 @@
+Ast_popl
+Asttopopl
+Insert_quantifiers
+Pretty_print_popl
+Flag_popl
+Popltoctl
+Popl
diff --git a/popl09/popl09.mllib b/popl09/popl09.mllib
new file mode 100644 (file)
index 0000000..fdd3e01
--- /dev/null
@@ -0,0 +1,7 @@
+Ast_popl
+Asttopopl
+Insert_quantifiers
+Pretty_print_popl
+Flag_popl
+Popltoctl
+Popl
index be01e6d..272e646 100644 (file)
@@ -22,6 +22,7 @@
 # Coccinelle under other licenses.
 
 
+
 #############################################################################
 # Configuration section
 #############################################################################
@@ -80,6 +81,7 @@ OPTOBJS = $(OBJS:.cmo=.cmx)
 CTLOBJS = $(CTLSOURCES:.ml=.cmo)
 CTLOPTOBJS = $(CTLOBJS:.cmo=.cmx)
 
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 all: $(LIB)
 
 all.opt:
@@ -92,7 +94,7 @@ $(LIB): $(OBJS)
        $(OCAMLC_CMD) -a -o $(LIB) $(OBJS)
 
 clean::
-       rm -f $(LIB)
+       rm -f $(TARGET).cma $(TARGET).a $(TARGET).o $(TARGET).cmxa
 
 
 $(OPTLIB): $(OPTOBJS)
@@ -104,7 +106,14 @@ $(EXEC): $(OBJS) main.cmo $(LIBS)
 
 $(CTLEXEC): $(CTLOBJS) $(LIBS)
        $(OCAMLC_CMD) -o $(CTLEXEC) $(SYSLIBS) $(LIBS) $(CTLOBJS)
-
+else
+all:
+       cd .. && $(OCAMLBUILD) python/python.cma
+all.opt:
+       cd .. && $(OCAMLBUILD) python/python.cmxa
+clean::
+       cd .. && $(OCAMLBUILD) -clean
+endif
 
 clean::
        rm -f $(OPTLIB) $(LIB:.cma=.a)
@@ -112,11 +121,12 @@ clean::
        rm -f $(TARGET).byte
        rm -f $(CTLTARGET)
        rm -f .depend
+       rm -f coccipython.cmxa coccipython.a
 
 distclean::
        $(MAKE) -C coccilib $@
        rm -f pycocci.ml
-       rm -f *.cm[iox] *.o  *.annot
+       rm -f *.cm[ioxa] *.o  *.annot
 
 ##############################################################################
 # Generic ocaml rules
@@ -146,8 +156,10 @@ clean::
 
 ifneq ($(MAKECMDGOALS),clean)
 ifneq ($(MAKECMDGOALS),distclean)
+ifneq ($(FEATURE_OCAMLBUILD),yes)
 -include .depend
 endif
 endif
+endif
 
 include ../Makefile.common
diff --git a/python/coccipython.a b/python/coccipython.a
new file mode 100644 (file)
index 0000000..9bf1d4f
Binary files /dev/null and b/python/coccipython.a differ
diff --git a/python/coccipython.cmxa b/python/coccipython.cmxa
new file mode 100644 (file)
index 0000000..28fa94b
Binary files /dev/null and b/python/coccipython.cmxa differ
diff --git a/python/python.mldylib b/python/python.mldylib
new file mode 100644 (file)
index 0000000..baa2301
--- /dev/null
@@ -0,0 +1,2 @@
+Pycocci
+Pycocci_aux
\ No newline at end of file
diff --git a/python/python.mllib b/python/python.mllib
new file mode 100644 (file)
index 0000000..baa2301
--- /dev/null
@@ -0,0 +1,2 @@
+Pycocci
+Pycocci_aux
\ No newline at end of file
index d5ba698..1e39b52 100644 (file)
@@ -248,6 +248,7 @@ let
     { name = "pycaml"; ocamls = ps: [ ps.pycaml ]; flags = [ "--enable-pycaml" ]; }
   ];
 
+  # Tests using several different types of shells.
   shellCfgs = map mkCfgShell [
     { name = "bash"; selShell = pkgs: "${pkgs.bash}/bin/bash"; }
     { name = "dash"; selShell = pkgs: "${pkgs.dash}/bin/dash"; }
@@ -257,11 +258,39 @@ let
     # { name = "tcsh"; selShell = pkgs: "${pkgs.tcsh}/bin/tcsh"; }
   ];
 
+  #
+  # Configurations for the compilation of coccinelle using ocamlbuild.
+  #
+
+  ocamlbuildZeroCfg = mkCfgMinimal {
+    name  = "ocamlbuild-zero";
+    flags = [ "--enable-ocamlbuild" "--enable-release" ];
+  };
+
+  ocamlbuildFullCfg = mkCfgDefault {
+    name  = "ocamlbuild-full";
+    flags = [ "--enable-ocamlbuild" "--enable-release" ];
+  };
+
+  ocamlbuildCfgs = map mkCfgOcaml [
+    { name = "ocamlbuild-400nat"; selOcaml = selOcaml400;
+      flags = [ "--enable-ocamlbuild" "--enable-release=yes" ]; }
+    { name = "ocamlbuild-400byte"; selOcaml = selOcaml400;
+      flags = [ "--enable-ocamlbuild" ]; }
+    { name = "ocamlbuild-312"; selOcaml = selOcaml312;
+      flags = [ "--enable-ocamlbuild" "--enable-release" ]; }
+    { name = "ocamlbuild-311"; selOcaml = selOcaml311;
+      flags = [ "--enable-ocamlbuild" ]; }
+    { name = "ocamlbuild-310"; selOcaml = selOcaml310;
+      flags = [ "--enable-ocamlbuild" "--enable-release" ]; }
+  ] ++ [ ocamlbuildZeroCfg ocamlbuildFullCfg ];
+
   altCfgs =
     [ debugCfg manyOcamlCfg ]
     ++ minimalCfgs
     ++ ocamlCfgs ++ pythonCfgs
-    ++ pkgCfgs ++ shellCfgs;
+    ++ pkgCfgs ++ shellCfgs
+    ++ ocamlbuildCfgs;
 
 
   #
@@ -533,7 +562,7 @@ let
         ocaml findlib menhir
         python pcre patchelf
       ];
-      configureFlagsArray = [ "--enable-release" ];
+      configureFlags = "--enable-release";
 
       buildPhase = ''
         export TARGETDIR="$TMPDIR/dists"
diff --git a/setup/Makefile.am b/setup/Makefile.am
new file mode 100644 (file)
index 0000000..ead04d3
--- /dev/null
@@ -0,0 +1,21 @@
+# This is a makefile that is not used by this project,
+# except for one purpose only:
+#
+# to all automake -ac in the root directory to (re)generate
+# the files install-sh and missing in the setup subdirectory.
+#
+# The following files (with respect to the top directory)
+# have been included in order not to have a dependency on
+# automake:
+#
+# * setup/{Makefile.am, Makefile.in, install-sh, missing}
+# * configure
+# * Makefile.am
+#
+# Note: Makefile.in in the top directory is not generated
+# from Makefile.am in the top directory! That Makefile.in
+# is the official source file, and that Makefile.am is a
+# placeholder to fool automake (which we do not really use).
+
+all:
+       echo "dummy makefile, do not use"
diff --git a/setup/Makefile.in b/setup/Makefile.in
new file mode 100644 (file)
index 0000000..50b01d7
--- /dev/null
@@ -0,0 +1,524 @@
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This is a makefile that is not used by this project,
+# except for one purpose only:
+#
+# to all automake -ac in the root directory to (re)generate
+# the files install-sh and missing in the setup subdirectory.
+#
+# The following files (with respect to the top directory)
+# have been included in order not to have a dependency on
+# automake:
+#
+# * setup/{Makefile.am, Makefile.in, install-sh, missing}
+# * configure
+# * Makefile.am
+#
+# Note: Makefile.in in the top directory is not generated
+# from Makefile.am in the top directory! That Makefile.in
+# is the official source file, and that Makefile.am is a
+# placeholder to fool automake (which we do not really use).
+VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = setup
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in install-sh \
+       missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/setup/cocci.m4 \
+       $(top_srcdir)/setup/ocaml.m4 $(top_srcdir)/setup/pkg.m4 \
+       $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAMLP4 = @CAMLP4@
+CAMLP4BOOT = @CAMLP4BOOT@
+CAMLP4O = @CAMLP4O@
+CAMLP4OF = @CAMLP4OF@
+CAMLP4OOF = @CAMLP4OOF@
+CAMLP4ORF = @CAMLP4ORF@
+CAMLP4PROF = @CAMLP4PROF@
+CAMLP4R = @CAMLP4R@
+CAMLP4RF = @CAMLP4RF@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COCCI_OCAML_EXTERNAL = @COCCI_OCAML_EXTERNAL@
+COCCI_SRCDIR = @COCCI_SRCDIR@
+COCCI_VERSION = @COCCI_VERSION@
+CONFIGURE_FLAGS = @CONFIGURE_FLAGS@
+CONFVERSION = @CONFVERSION@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DYNLINK_IS_NATIVE = @DYNLINK_IS_NATIVE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+FEATURE_OCAML = @FEATURE_OCAML@
+FEATURE_OCAMLBUILD = @FEATURE_OCAMLBUILD@
+FEATURE_PYTHON = @FEATURE_PYTHON@
+FEATURE_camlp4 = @FEATURE_camlp4@
+FEATURE_dynlink = @FEATURE_dynlink@
+FEATURE_menhirLib = @FEATURE_menhirLib@
+FEATURE_pcre = @FEATURE_pcre@
+FEATURE_pycaml = @FEATURE_pycaml@
+FLAGS_camlp4 = @FLAGS_camlp4@
+FLAGS_dynlink = @FLAGS_dynlink@
+FLAGS_menhirLib = @FLAGS_menhirLib@
+FLAGS_pcre = @FLAGS_pcre@
+FLAGS_pycaml = @FLAGS_pycaml@
+GIT = @GIT@
+GLOBAL_camlp4 = @GLOBAL_camlp4@
+GLOBAL_dynlink = @GLOBAL_dynlink@
+GLOBAL_menhirLib = @GLOBAL_menhirLib@
+GLOBAL_pcre = @GLOBAL_pcre@
+GLOBAL_pycaml = @GLOBAL_pycaml@
+HAVE_PCRE = @HAVE_PCRE@
+HAVE_PYTHON = @HAVE_PYTHON@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LOCALLIB_camlp4 = @LOCALLIB_camlp4@
+LOCALLIB_dynlink = @LOCALLIB_dynlink@
+LOCALLIB_menhirLib = @LOCALLIB_menhirLib@
+LOCALLIB_pcre = @LOCALLIB_pcre@
+LOCALLIB_pycaml = @LOCALLIB_pycaml@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAKETARGET_ALL = @MAKETARGET_ALL@
+MAKETARGET_SPATCH = @MAKETARGET_SPATCH@
+MAKE_camlp4 = @MAKE_camlp4@
+MAKE_dynlink = @MAKE_dynlink@
+MAKE_menhirLib = @MAKE_menhirLib@
+MAKE_pcre = @MAKE_pcre@
+MAKE_pycaml = @MAKE_pycaml@
+MENHIR = @MENHIR@
+MKDIR_P = @MKDIR_P@
+MODULESOPT_camlp4 = @MODULESOPT_camlp4@
+MODULESOPT_dynlink = @MODULESOPT_dynlink@
+MODULESOPT_menhirLib = @MODULESOPT_menhirLib@
+MODULESOPT_pcre = @MODULESOPT_pcre@
+MODULESOPT_pycaml = @MODULESOPT_pycaml@
+MODULES_camlp4 = @MODULES_camlp4@
+MODULES_dynlink = @MODULES_dynlink@
+MODULES_menhirLib = @MODULES_menhirLib@
+MODULES_pcre = @MODULES_pcre@
+MODULES_profiling = @MODULES_profiling@
+MODULES_pycaml = @MODULES_pycaml@
+OBJEXT = @OBJEXT@
+OCAML = @OCAML@
+OCAMLATLEAST310 = @OCAMLATLEAST310@
+OCAMLATLEAST311 = @OCAMLATLEAST311@
+OCAMLBEST = @OCAMLBEST@
+OCAMLBUILD = @OCAMLBUILD@
+OCAMLC = @OCAMLC@
+OCAMLCDOTOPT = @OCAMLCDOTOPT@
+OCAMLCOCCI_FILE = @OCAMLCOCCI_FILE@
+OCAMLCOCCI_MODULE = @OCAMLCOCCI_MODULE@
+OCAMLCORIG = @OCAMLCORIG@
+OCAMLDEP = @OCAMLDEP@
+OCAMLDOC = @OCAMLDOC@
+OCAMLFIND = @OCAMLFIND@
+OCAMLLEX = @OCAMLLEX@
+OCAMLLEXDOTOPT = @OCAMLLEXDOTOPT@
+OCAMLLIB = @OCAMLLIB@
+OCAMLMKLIB = @OCAMLMKLIB@
+OCAMLMKTOP = @OCAMLMKTOP@
+OCAMLOPT = @OCAMLOPT@
+OCAMLOPTDOTOPT = @OCAMLOPTDOTOPT@
+OCAMLPROF = @OCAMLPROF@
+OCAMLVERSION = @OCAMLVERSION@
+OCAMLYACC = @OCAMLYACC@
+OCAML_PKG_bigarray = @OCAML_PKG_bigarray@
+OCAML_PKG_camlp4 = @OCAML_PKG_camlp4@
+OCAML_PKG_dynlink = @OCAML_PKG_dynlink@
+OCAML_PKG_menhirLib = @OCAML_PKG_menhirLib@
+OCAML_PKG_num = @OCAML_PKG_num@
+OCAML_PKG_pcre = @OCAML_PKG_pcre@
+OCAML_PKG_pycaml = @OCAML_PKG_pycaml@
+OCAML_PKG_str = @OCAML_PKG_str@
+OCAML_PKG_unix = @OCAML_PKG_unix@
+OPTFLAGS_camlp4 = @OPTFLAGS_camlp4@
+OPTFLAGS_dynlink = @OPTFLAGS_dynlink@
+OPTFLAGS_menhirLib = @OPTFLAGS_menhirLib@
+OPTFLAGS_pcre = @OPTFLAGS_pcre@
+OPTFLAGS_pycaml = @OPTFLAGS_pycaml@
+OPTIMIZED_dynlink = @OPTIMIZED_dynlink@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATCH = @PATCH@
+PATCHELF = @PATCHELF@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_bigarray = @PATH_bigarray@
+PATH_camlp4 = @PATH_camlp4@
+PATH_dynlink = @PATH_dynlink@
+PATH_menhirLib = @PATH_menhirLib@
+PATH_num = @PATH_num@
+PATH_pcre = @PATH_pcre@
+PATH_pycaml = @PATH_pycaml@
+PATH_str = @PATH_str@
+PATH_unix = @PATH_unix@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PDFLATEX = @PDFLATEX@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_ORIG = @PKG_CONFIG_ORIG@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PYCOCCI_FILE = @PYCOCCI_FILE@
+PYCOCCI_MODULE = @PYCOCCI_MODULE@
+PYTHON = @PYTHON@
+PYTHON_CFLAGS = @PYTHON_CFLAGS@
+PYTHON_LIBS = @PYTHON_LIBS@
+PYVER = @PYVER@
+PYVER_MAJOR = @PYVER_MAJOR@
+REGEXP_FILE = @REGEXP_FILE@
+REGEXP_MODULE = @REGEXP_MODULE@
+RUNTIME_CAMLP4O_CMD = @RUNTIME_CAMLP4O_CMD@
+RUNTIME_CAMLP4_CMD = @RUNTIME_CAMLP4_CMD@
+RUNTIME_OCAMLC_CMD = @RUNTIME_OCAMLC_CMD@
+RUNTIME_OCAMLDEP_CMD = @RUNTIME_OCAMLDEP_CMD@
+RUNTIME_OCAMLFIND_CMD = @RUNTIME_OCAMLFIND_CMD@
+RUNTIME_OCAMLOPT_CMD = @RUNTIME_OCAMLOPT_CMD@
+SET_MAKE = @SET_MAKE@
+SHAREDIR = @SHAREDIR@
+SHELL = @SHELL@
+SPATCHNAME = @SPATCHNAME@
+STRIP = @STRIP@
+SUBSTITUTED_MENHIR = @SUBSTITUTED_MENHIR@
+SUBSTITUTED_OCAMLFIND = @SUBSTITUTED_OCAMLFIND@
+SUBSTITUTED_OCAMLLEX = @SUBSTITUTED_OCAMLLEX@
+SUBSTITUTED_OCAMLPROF = @SUBSTITUTED_OCAMLPROF@
+SUBSTITUTED_OCAMLYACC = @SUBSTITUTED_OCAMLYACC@
+SUBSTITUTED_PDFLATEX = @SUBSTITUTED_PDFLATEX@
+SUBSTITUTED_PKG_CONFIG = @SUBSTITUTED_PKG_CONFIG@
+SUBSTITUTED_PYTHON = @SUBSTITUTED_PYTHON@
+TAR = @TAR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_camlp4 = @enable_camlp4@
+enable_dynlink = @enable_dynlink@
+enable_menhirLib = @enable_menhirLib@
+enable_ocaml = @enable_ocaml@
+enable_opt = @enable_opt@
+enable_pcre = @enable_pcre@
+enable_pcre_syntax = @enable_pcre_syntax@
+enable_pycaml = @enable_pycaml@
+enable_python = @enable_python@
+enable_release = @enable_release@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+with_MENHIR = @with_MENHIR@
+with_OCAMLFIND = @with_OCAMLFIND@
+with_OCAMLLEX = @with_OCAMLLEX@
+with_OCAMLPROF = @with_OCAMLPROF@
+with_OCAMLYACC = @with_OCAMLYACC@
+with_PDFLATEX = @with_PDFLATEX@
+with_PKG_CONFIG = @with_PKG_CONFIG@
+with_PYTHON = @with_PYTHON@
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu setup/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu setup/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+all:
+       echo "dummy makefile, do not use"
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
index b087ba0..0332b0b 100755 (executable)
@@ -31,6 +31,23 @@ if test -z "${BASH_SOURCE}"; then
   BASH_SOURCE=$0
 fi
 
+
+#
+# Before we actually try to substitute a given
+# command, we first try to execute the original command 
+#
+
+# Check if the given program exists.
+if command -v "$1" > /dev/null; then
+  # exits the script if the command succeeds.
+  $@ && exit $?
+fi
+
+
+#
+# Trying a substitute
+#
+
 cmdline="$@"
 scriptdir=$(dirname "${BASH_SOURCE}")
 responsefile="${scriptdir}/replies.txt"
@@ -48,11 +65,19 @@ pythonprefix() {
   python -c "import sys; print(sys.prefix)"
 }
 
+pythonversion() {
+  python -c "import sys; print('%d.%d' % (sys.version_info[0], sys.version_info[1]))"
+}
+
 pythonexists() {
   local version=$1
   local prefix="$(pythonprefix)"
   test $? = 0
 
+  if test -z "$version"; then
+    version="$(pythonversion)"
+  fi
+
   if test ! -f "${prefix}/include/python${version}/Python.h"; then
     echo "error: ${prefix}/include/python${version}/Python.h not found (a development version of python is not installed?)" 1>&2
     false
@@ -105,7 +130,7 @@ done < "${responsefile}"
 if test -n "${found}"; then
   MATCH=no
   if test -n "${replace}"; then
-    MATCH="$(echo "$cmdline" | sed -r "${replace}")"
+    MATCH="$(echo "$cmdline" | sed -E "${replace}")"
   fi
 
   if test -n "${response}"; then
@@ -116,6 +141,7 @@ if test -n "${found}"; then
   exit 0
 else
   # fallback case
-  echo "fake-subst.sh: no substitution for: ${cmdline}" 1>&2
-  exit 1
+  echo "fake-subst.sh: no substitution for: ${cmdline}. Running the 
+original." 1>&2
+  exec $@
 fi
dissimilarity index 92%
index 7692392..377bb86 100755 (executable)
@@ -1,4 +1,527 @@
-#! /bin/sh -e
-
-echo "error: no suitable install program found, therefore refusing to install $@" 1>&2
-exit 1
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-11-20.07; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""       $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+       shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+       case $mode in
+         *' '* | *'    '* | *'
+'*       | *'*'* | *'?'* | *'['*)
+           echo "$0: invalid mode: $mode" >&2
+           exit 1;;
+       esac
+       shift;;
+
+    -o) chowncmd="$chownprog $2"
+       shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+       # Protect names problematic for 'test' and other utilities.
+       case $dst_arg in
+         -* | [=\(\)!]) dst_arg=./$dst_arg;;
+       esac
+       shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)        shift
+       break;;
+
+    -*)        echo "$0: invalid option: $1" >&2
+       exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call 'install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names problematic for 'test' and other utilities.
+  case $src in
+    -* | [=\(\)!]) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+    dst=$dst_arg
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+       echo "$0: $dst_arg: Is a directory" >&2
+       exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+       (dirname "$dst") 2>/dev/null ||
+       expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+            X"$dst" : 'X\(//\)[^/]' \| \
+            X"$dst" : 'X\(//\)$' \| \
+            X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+       echo X"$dst" |
+           sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)[^/].*/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\).*/{
+                  s//\1/
+                  q
+                }
+                s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+       # Create intermediate dirs using mode 755 as modified by the umask.
+       # This is like FreeBSD 'install' as of 1997-10-28.
+       umask=`umask`
+       case $stripcmd.$umask in
+         # Optimize common cases.
+         *[2367][2367]) mkdir_umask=$umask;;
+         .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+         *[0-7])
+           mkdir_umask=`expr $umask + 22 \
+             - $umask % 100 % 40 + $umask % 20 \
+             - $umask % 10 % 4 + $umask % 2
+           `;;
+         *) mkdir_umask=$umask,go-w;;
+       esac
+
+       # With -d, create the new directory with the user-specified mode.
+       # Otherwise, rely on $mkdir_umask.
+       if test -n "$dir_arg"; then
+         mkdir_mode=-m$mode
+       else
+         mkdir_mode=
+       fi
+
+       posix_mkdir=false
+       case $umask in
+         *[123567][0-7][0-7])
+           # POSIX mkdir -p sets u+wx bits regardless of umask, which
+           # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+           ;;
+         *)
+           tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+           trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+           if (umask $mkdir_umask &&
+               exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+           then
+             if test -z "$dir_arg" || {
+                  # Check for POSIX incompatibilities with -m.
+                  # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                  # other-writable bit of parent directory when it shouldn't.
+                  # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                  ls_ld_tmpdir=`ls -ld "$tmpdir"`
+                  case $ls_ld_tmpdir in
+                    d????-?r-*) different_mode=700;;
+                    d????-?--*) different_mode=755;;
+                    *) false;;
+                  esac &&
+                  $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+                    ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+                    test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                  }
+                }
+             then posix_mkdir=:
+             fi
+             rmdir "$tmpdir/d" "$tmpdir"
+           else
+             # Remove any dirs left behind by ancient mkdir implementations.
+             rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+           fi
+           trap '' 0;;
+       esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+       umask $mkdir_umask &&
+       $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+       /*) prefix='/';;
+       [-=\(\)!]*) prefix='./';;
+       *)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+       test X"$d" = X && continue
+
+       prefix=$prefix$d
+       if test -d "$prefix"; then
+         prefixes=
+       else
+         if $posix_mkdir; then
+           (umask=$mkdir_umask &&
+            $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+           # Don't fail if two instances are running concurrently.
+           test -d "$prefix" || exit 1
+         else
+           case $prefix in
+             *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+             *) qprefix=$prefix;;
+           esac
+           prefixes="$prefixes '$qprefix'"
+         fi
+       fi
+       prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+       # Don't fail if two instances are running concurrently.
+       (umask $mkdir_umask &&
+        eval "\$doit_exec \$mkdirprog $prefixes") ||
+         test -d "$dstdir" || exit 1
+       obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"    2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+       # Now remove or move aside any old file at destination location.
+       # We try this two ways since rm can't unlink itself on some
+       # systems and the destination file might be busy for other
+       # reasons.  In this case, the final cleanup might fail but the new
+       # file should still install successfully.
+       {
+         test ! -f "$dst" ||
+         $doit $rmcmd -f "$dst" 2>/dev/null ||
+         { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+           { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+         } ||
+         { echo "$0: cannot unlink or rename $dst" >&2
+           (exit 1); exit 1
+         }
+       } &&
+
+       # Now rename the file to the real destination.
+       $doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/setup/log_ocamlfind.sh b/setup/log_ocamlfind.sh
new file mode 100644 (file)
index 0000000..45bde24
--- /dev/null
@@ -0,0 +1,9 @@
+#! /bin/sh -e
+
+set -e
+
+# wrapper around ocaml-findlib that logs its
+# invocations to ocamlfind.log
+
+echo "ocamlfind $@" >> ocamlfind.log
+exec ocamlfind "$@"
diff --git a/setup/missing b/setup/missing
new file mode 100755 (executable)
index 0000000..9a55648
--- /dev/null
@@ -0,0 +1,330 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2012-01-06.18; # UTC
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try '$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, 'missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file 'aclocal.m4'
+  autoconf     touch file 'configure'
+  autoheader   touch file 'config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all 'Makefile.in' files
+  bison        create 'y.tab.[ch]', if possible, from existing .[ch]
+  flex         create 'lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create 'lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown '$1' option"
+    echo 1>&2 "Try '$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+  s/^gnu-//; t
+  s/^gnu//; t
+  s/^g//; t'`
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).  This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+  lex*|yacc*)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running '$TOOL --version' or '$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'acinclude.m4' or '${configure_ac}'.  You might want
+         to install the Automake and Perl packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+         you modified '${configure_ac}'.  You might want to install the
+         Autoconf and GNU m4 packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'acconfig.h' or '${configure_ac}'.  You might want
+         to install the Autoconf and GNU m4 packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
+         You might want to install the Automake and Perl packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  autom4te*)
+    echo 1>&2 "\
+WARNING: '$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get '$1' as part of Autoconf from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo "#! /bin/sh"
+       echo "# Created by GNU Automake missing as a replacement of"
+       echo "#  $ $@"
+       echo "exit 0"
+       chmod +x $file
+       exit 1
+    fi
+    ;;
+
+  bison*|yacc*)
+    echo 1>&2 "\
+WARNING: '$1' $msg.  You should only need it if
+         you modified a '.y' file.  You may need the Bison package
+         in order for those modifications to take effect.  You can get
+         Bison from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG=\${$#}
+       case $LASTARG in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f y.tab.h; then
+       echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex*|flex*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+         you modified a '.l' file.  You may need the Flex package
+         in order for those modifications to take effect.  You can get
+         Flex from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG=\${$#}
+       case $LASTARG in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f lex.yy.c; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+        you modified a dependency of a manual page.  You may need the
+        Help2man package in order for those modifications to take
+        effect.  You can get Help2man from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo ".ab help2man is required to generate this page"
+       exit $?
+    fi
+    ;;
+
+  makeinfo*)
+    echo 1>&2 "\
+WARNING: '$1' is $msg.  You should only need it if
+         you modified a '.texi' or '.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy 'make' (AIX,
+         DU, IRIX).  You might want to install the Texinfo package or
+         the GNU make package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+       /^@setfilename/{
+         s/.* \([^ ]*\) *$/\1/
+         p
+         q
+       }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: '$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the 'README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing '$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/setup/pkg.m4 b/setup/pkg.m4
new file mode 100644 (file)
index 0000000..9a71878
--- /dev/null
@@ -0,0 +1,159 @@
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+# 
+# Copyright Â© 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=m4_default([$1], [0.9.0])
+       AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+               PKG_CONFIG=""
+       fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_default([$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+    pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+    PKG_CHECK_EXISTS([$3],
+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes ],
+                    [pkg_failed=yes])
+ else
+    pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+       AC_MSG_RESULT([no])
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+        else 
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+       m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+        ])
+elif test $pkg_failed = untried; then
+       AC_MSG_RESULT([no])
+       m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+        ])
+else
+       $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+       $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+       $3
+fi[]dnl
+])# PKG_CHECK_MODULES
index 8406cb2..c6378c9 100644 (file)
@@ -50,6 +50,12 @@ $(checkpcre)
 
 
 
+pkg-config --short-errors --print-errors --cflags --libs libpcre
+
+$(checkpcre)
+
+
+
 pkg-config --cflags libpcre
 
 
diff --git a/setup/wrapper-menhir.sh b/setup/wrapper-menhir.sh
new file mode 100755 (executable)
index 0000000..70c80c3
--- /dev/null
@@ -0,0 +1,33 @@
+#! /bin/sh -e
+
+set -e
+
+# This wrapper is a work-around to fool ocamlbuild to
+# use menhir but actually using ocamlyacc for some files.
+# Since this wrapper makes some assumptions about how
+# ocamlbuild works, it may break in the future.
+# In particular: the paths to the files may change.
+
+# $1: path to menhir
+# $2: path to ocamlyacc
+
+OCAMLYACC="$1"
+MENHIR="$2"
+shift 2
+
+case "$@" in
+
+# use ocamlyacc for parsing_c/parsing_c.mly
+  *raw-depend*parsing_c/parser_c.mly*)
+    # echo "Notice: using ocamlyacc instead of menhir: skipping apriori dependency generation" 1>&2
+  ;;
+  *parsing_c/parser_c.mly*)
+    # echo "Notice: invoking ocamlyacc instead of menhir." 1>&2
+    exec $OCAMLYACC parsing_c/parser_c.mly
+  ;;
+
+# execute with menhir
+  *)
+    exec $MENHIR "$@"
+  ;;
+esac
index 8fb206a..c9abb50 100755 (executable)
@@ -30,6 +30,9 @@ case "$@" in
   *prepare_ocamlcocci.ml*)
     noprofile=1
   ;;
+  *coccilib.ml*)
+    noprofile=1
+  ;;
 esac
 
 if test -n "$noprofile"; then
diff --git a/setup/wrapper-ocamlyacc.sh b/setup/wrapper-ocamlyacc.sh
new file mode 100644 (file)
index 0000000..fe2b8e9
--- /dev/null
@@ -0,0 +1,26 @@
+#! /bin/sh -e
+
+set -e
+
+# this command acts as a replacement for ocamlyacc that selectively
+# runs menhir instead for some files.
+
+# $1: path to menhir
+# $2: path to ocamlyacc
+
+MENHIR="$1"
+OCAMLYACC="$2"
+shift 2
+
+domenhir=
+case "$@" in
+  *parsing_cocci_menhir.mly*)
+    domenhir=1
+  ;;
+esac
+
+if test -n "$domenhir"; then
+  exec $OCAMLC "$@"
+else
+  exec $OCAMLYACC "$@"
+fi
index 597515a..f85dcc8 100644 (file)
 #define  __initdata_or_module
 #define  __pminit
 #define  __pminitdata
+#define  __irq_entry
 
 #define  __cacheline_aligned
 #define  ____cacheline_aligned
diff --git a/test.ml b/test.ml
deleted file mode 100644 (file)
index d1176b7..0000000
--- a/test.ml
+++ /dev/null
@@ -1 +0,0 @@
-let foo_ctl () = failwith "there is no foo_ctl formula"
index 2acebfa..88845c4 100644 (file)
@@ -61,7 +61,7 @@ let testone prefix x compare_with_expected_flag =
       | Some None ->
           pr2 "no modification on the input file";
           cfile
-      | None -> raise Impossible
+      | None -> raise (Impossible 163)
     in
     if compare_with_expected_flag
     then
@@ -96,7 +96,7 @@ let testall expected_score_file update_score_file =
   begin
     expected_result_files +> List.iter (fun res ->
       let x =
-        if res =~ "\\(.*\\).res" then matched1 res else raise Impossible in
+        if res =~ "\\(.*\\).res" then matched1 res else raise (Impossible 164) in
       let base = if x =~ "\\(.*\\)_ver[0-9]+" then matched1 x else x in
       let cfile      = "tests/" ^ x ^ ".c" in
       let cocci_file = "tests/" ^ base ^ ".cocci" in
index fb9e4eb..12149fb 100644 (file)
Binary files a/tests/SCORE_expected.sexp and b/tests/SCORE_expected.sexp differ
index fb9e4eb..12149fb 100644 (file)
Binary files a/tests/SCORE_expected_orig.sexp and b/tests/SCORE_expected_orig.sexp differ
index 64e75df..ab9c2a9 100644 (file)
@@ -1,9 +1,4 @@
-@@
-identifier I;
-expression E;
-@@
-
 struct i2c_client I = {
        .name = E,
-       .foo = 16
+       .foo = 16,
 };
index 168c1a0..586fc3b 100644 (file)
@@ -1,8 +1,3 @@
-@@
-identifier I;
-expression E;
-@@
-
 struct i2c_client I = {
        .foo = 16,
        .dev = {
index 3f9502a..c587129 100644 (file)
@@ -5,6 +5,12 @@ int main () {
   }
 }
 
+int main () {
+  xxx();
+  if(y)
+    rrr();
+}
+
 
 int d() {}
 
index 1569e75..f749386 100644 (file)
@@ -11,6 +11,16 @@ int main () {
 }
 }
 
+int main () {
+  foo();
+  xxx();
+  foo();
+  if(y) {
+    foo();
+    rrr();
+  }
+}
+
 
 int d() {}
 
diff --git a/tests/dropbr.c b/tests/dropbr.c
new file mode 100644 (file)
index 0000000..29c096a
--- /dev/null
@@ -0,0 +1,5 @@
+int main () {
+  if (a) {
+    bar();
+  }
+}
diff --git a/tests/dropbr.cocci b/tests/dropbr.cocci
new file mode 100644 (file)
index 0000000..0f94da2
--- /dev/null
@@ -0,0 +1,9 @@
+@@
+@@
+
+if (...)
+- {
+- bar(
++ foo(
+  );
+- }
diff --git a/tests/dropbr.res b/tests/dropbr.res
new file mode 100644 (file)
index 0000000..d895567
--- /dev/null
@@ -0,0 +1,4 @@
+int main () {
+  if (a)
+    foo();
+}
diff --git a/tests/fieldcount.c b/tests/fieldcount.c
new file mode 100644 (file)
index 0000000..6e116fb
--- /dev/null
@@ -0,0 +1,11 @@
+struct foo {
+  int a;
+#define FOO 12
+#define BAR 20
+  int b;
+#ifdef FOO
+  int c;
+#else
+  int d;
+#endif
+};
diff --git a/tests/fieldcount.cocci b/tests/fieldcount.cocci
new file mode 100644 (file)
index 0000000..725621c
--- /dev/null
@@ -0,0 +1,14 @@
+@r@
+field list[n] fs;
+identifier I,x;
+@@
+
+struct I { fs int x; ...};
+
+@script:ocaml@
+n << r.n;
+x << r.x;
+i << r.I;
+@@
+
+Printf.printf "%s at offset %d in %s\n" x n i
diff --git a/tests/inner.c b/tests/inner.c
new file mode 100644 (file)
index 0000000..aa33535
--- /dev/null
@@ -0,0 +1,4 @@
+struct ty x[] = {
+  {
+ a,
+  }};
diff --git a/tests/inner.cocci b/tests/inner.cocci
new file mode 100644 (file)
index 0000000..d85b0a2
--- /dev/null
@@ -0,0 +1,11 @@
+@@
+identifier ty,x;
+expression a;
+initializer list is;
+@@
+
+struct ty x[] = {...,
+  {is,
+- a
++ .i = foo(a)
+  ,...}, ...};
diff --git a/tests/inner2.c b/tests/inner2.c
new file mode 100644 (file)
index 0000000..568d2ce
--- /dev/null
@@ -0,0 +1,4 @@
+struct ty x =
+  {
+ .i = a,
+  };
diff --git a/tests/inner2.cocci b/tests/inner2.cocci
new file mode 100644 (file)
index 0000000..9f49f5e
--- /dev/null
@@ -0,0 +1,11 @@
+@@
+identifier ty,x;
+expression a;
+initializer list is;
+@@
+
+struct ty x = 
+  {is,
+- .i = a,
++ foo(a),
+  ...};
diff --git a/tests/iterprint.c b/tests/iterprint.c
new file mode 100644 (file)
index 0000000..027312f
--- /dev/null
@@ -0,0 +1,6 @@
+int main () {
+ for(bit = 0; bit < size; bit++) {
+   if (test_bit(bit, bitmap))
+     x = 12;
+ }
+}
diff --git a/tests/iterprint.cocci b/tests/iterprint.cocci
new file mode 100644 (file)
index 0000000..c81be02
--- /dev/null
@@ -0,0 +1,12 @@
+@@
+expression bitmap, size;
+identifier bit;
+statement S1;
+iterator name for_each_set_bit;
+@@
+-for(bit = 0; bit < size; bit++)
++for_each_set_bit(bit, bitmap, size)
+-{
+-   if (test_bit(bit, bitmap))
+        S1
+-}
diff --git a/tests/iterprint.res b/tests/iterprint.res
new file mode 100644 (file)
index 0000000..b586447
--- /dev/null
@@ -0,0 +1,4 @@
+int main () {
+ for_each_set_bit(bit, bitmap, size)
+     x = 12;
+}
diff --git a/tests/retest.c b/tests/retest.c
new file mode 100644 (file)
index 0000000..19a8dd9
--- /dev/null
@@ -0,0 +1,6 @@
+int main () {
+  foo();
+  if (x)
+    return 3;
+  bar();
+}
diff --git a/tests/retest.cocci b/tests/retest.cocci
new file mode 100644 (file)
index 0000000..0ad99de
--- /dev/null
@@ -0,0 +1,7 @@
+@@
+expression e;
+statement S;
+@@
+
+- if (e) S
++ if (f(e)) S
\ No newline at end of file
diff --git a/tests/retest.res b/tests/retest.res
new file mode 100644 (file)
index 0000000..55ca2b8
--- /dev/null
@@ -0,0 +1,6 @@
+int main () {
+  foo();
+  if (f(x))
+    return 3;
+  bar();
+}
diff --git a/tests/unl.c b/tests/unl.c
new file mode 100644 (file)
index 0000000..705fc03
--- /dev/null
@@ -0,0 +1,10 @@
+int main () {
+  if (new_pe == NULL) {
+    return NULL;
+  }
+}
+
+int main () {
+  if (new_pe == NULL)
+    return NULL;
+}
diff --git a/tests/unl.cocci b/tests/unl.cocci
new file mode 100644 (file)
index 0000000..2c3ee8d
--- /dev/null
@@ -0,0 +1,7 @@
+@@
+expression e;
+statement S;
+@@
+
+- if (e) S
++ if (unlikely(e)) S
diff --git a/tests/unl.res b/tests/unl.res
new file mode 100644 (file)
index 0000000..d074d1d
--- /dev/null
@@ -0,0 +1,10 @@
+int main () {
+  if (unlikely(new_pe == NULL)) {
+    return NULL;
+  }
+}
+
+int main () {
+  if (unlikely(new_pe == NULL))
+    return NULL;
+}
index a0db9e0..40325dc 100644 (file)
@@ -3,7 +3,7 @@ static int cmm_ioctl()
 {
        dev_link_t *link;
        char *ioctl_names[CM_IOC_MAXNR + 1] = {
-               [_IOC_NR(CM_IOSDBGLVL)] "CM4000_DBGLVL",
+         [_IOC_NR(CM_IOSDBGLVL)] "CM4000_DBGLVL",
        };
 
 }
index 53cc4a1..eb56d52 100644 (file)
@@ -29,9 +29,26 @@ endif
 OCAMLCFLAGS ?= -g
 OPTFLAGS ?= -g
 
-PROGS=spp gitgrep splitpatch extract_c_and_res #generate_dependencies
+SYSLIBS = str.cma unix.cma bigarray.cma
+
+INCLUDE=-I ../commons -I ../extra -I  ../parsing_c
+LIBS=../commons/commons.cma ../globals/globals.cma \
+     ../parsing_c/parsing_c.cma ../extra/extra.cma
+
+OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDE)
+OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDE)
+OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDE)
+OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDE)
+OCAMLYACC_CMD=$(OCAMLYACC) -v
+
 
-all: $(SUBDIRS) $(PROGS)
+PROGS=spp gitgrep splitpatch extract_c_and_res \
+       gitsort alloc_free bridge \
+       process_isoprofile
+       #generate_dependencies
+
+ifneq ($(FEATURE_OCAMLBUILD),yes)
+all: $(PROGS)
 
 all.opt:
        @$(MAKE) $(PROGS) BUILD_OPT=yes
@@ -42,8 +59,8 @@ gitgrep: gitgrep.ml
 gitsort: gitsort.ml
        $(OCAMLOPT) -o gitsort str.cmxa gitsort.ml
 
-isoprof: process_isoprofile.ml
-       $(OCAMLC) -g -o isoprof str.cma process_isoprofile.ml
+process_isoprofile: process_isoprofile.ml
+       $(OCAMLC) -g -o process_isoprofile str.cma process_isoprofile.ml
 
 alloc_free: alloc_free.ml
        $(OCAMLOPT) -o alloc_free str.cmxa alloc_free.ml
@@ -55,21 +72,6 @@ bridge: bridge.ml
 install_bridge: bridge
        cp -f bridge /usr/local/bin
 
-.PHONY: $(SUBDIRS)
-
-
-SYSLIBS = str.cma unix.cma bigarray.cma
-
-INCLUDE=-I ../commons -I ../extra -I  ../parsing_c
-LIBS=../commons/commons.cma ../globals/globals.cma \
-     ../parsing_c/parsing_c.cma ../extra/extra.cma
-
-OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDE)
-OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDE)
-OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDE)
-OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDE)
-OCAMLYACC_CMD=$(OCAMLYACC) -v
-
 spp: spp.ml
        $(OCAMLC_CMD) -o $@ $(SYSLIBS) $(INCLUDE) $(LIBS) $+
 
@@ -81,6 +83,28 @@ extract_c_and_res: extract_c_and_res.cmo
 
 generate_dependencies: generate_dependencies.cmo
        $(OCAMLC_CMD) -o $@ $(SYSLIBS) $(INCLUDE) $(LIBS)  $+
+else
+.PHONY: $(PROGS) $(PROGS:%.opt) isoprof
+
+all: $(PROGS)
+all.opt: $(PROGS:%=%.opt)
+
+$(PROGS):
+       cd .. && $(OCAMLBUILD) tools/$@.byte
+       cp ../_build/tools/$@.byte $@
+
+$(PROGS:%=%.opt):
+       cd .. && $(OCAMLBUILD) tools/$(@:%.opt=%).native
+       cp ../_build/tools/$(@:%.opt=%).native $(@:%.opt=%)
+
+clean::
+       cd .. && $(OCAMLBUILD) -clean
+       rm -f $(PROGS)
+endif
+
+isoprof: process_isoprofile
+       cp process_isoprofile isoprof
+
 
 .SUFFIXES: .ml .mli .cmo .cmi .cmx
 
@@ -91,8 +115,8 @@ generate_dependencies: generate_dependencies.cmo
 .ml.cmx:
        $(OCAMLOPT_CMD) -c $<
 
-clean:
-       rm -f $(PROGS)
+clean::
+       rm -f $(PROGS) isoprof
        rm -f *.cm[ioxa] *.o *.a *.cmxa *.annot
        rm -f .depend
 
diff --git a/tools/all.itarget b/tools/all.itarget
new file mode 100644 (file)
index 0000000..11dad52
--- /dev/null
@@ -0,0 +1,8 @@
+gitgrep.byte
+gitsort.byte
+process_isoprofile.byte
+alloc_free.byte
+bridge.byte
+spp.byte
+splitpatch.byte
+extract_c_and_res.byte
diff --git a/tools/all.opt.itarget b/tools/all.opt.itarget
new file mode 100644 (file)
index 0000000..9668abc
--- /dev/null
@@ -0,0 +1,8 @@
+gitgrep.native
+gitsort.native
+process_isoprofile.native
+alloc_free.native
+bridge.native
+spp.native
+splitpatch.native
+extract_c_and_res.native
diff --git a/tools/cstripenv.ml b/tools/cstripenv.ml
new file mode 100644 (file)
index 0000000..f0613c2
--- /dev/null
@@ -0,0 +1,107 @@
+(*
+ * Copyright 2012, INRIA
+ * Julia Lawall, Gilles Muller
+ * Copyright 2010-2011, INRIA, University of Copenhagen
+ * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix
+ * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen
+ * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
+ * This file is part of Coccinelle.
+ *
+ * Coccinelle is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, according to version 2 of the License.
+ *
+ * Coccinelle is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Coccinelle.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The authors reserve the right to distribute this or future versions of
+ * Coccinelle under other licenses.
+ *)
+
+
+# 0 "./cstripenv.ml"
+(* This tool strips code from a C file that relies on the external
+ * macro and type environment, which we would obtain via commandline
+ * parameters and includes.
+ * The resulting file is more likely to be analyzable without the
+ * headers, although it does affect the semantics of the original
+ * program.
+ * 
+ * It does so by removing toplevel elements that cannot be parsed
+ * correctly because of macro's. Macro's that are interpreted as
+ * functions are still kept.
+ * It also removes expressions that have an unknown type, and
+ * remapping unknown types in types of declarations.
+ *)
+
+
+(* Visitor that hides tokens that cannot be parsed.
+ *)
+let hide_visitor =
+  { Visitor_c.default_visitor_c with
+    Visitor_c.ktoplevel = fun (f, self) p ->
+      begin
+       match p with
+         Ast_c.NotParsedCorrectly ii ->
+            let first_i = List.hd ii in          
+           let last_i  = List.hd (List.rev ii) in
+           Ast_c.put_annot_info first_i Token_annot.Exclude_start Token_annot.Unit;
+           Ast_c.put_annot_info last_i Token_annot.Exclude_end Token_annot.Unit
+       | _ -> ()
+      end;
+      f p
+  }
+
+(* todo: remap visitor *)
+
+(*
+    Visitor_c.ktype = fun (f, bigf) ft ->
+      let (_, (t, _)) = ft in
+      begin match t with
+        Ast_c.NoType     -> Common.pr2 "no type"
+      | Ast_c.BaseType _ -> Common.pr2 "base type"
+      | Ast_c.TypeName (nm, optTp) -> begin
+          match optTp with
+           None -> Common.pr2 ("type name " ^ (Ast_c.str_of_name nm) ^ " without fullType")
+         | Some _ -> Common.pr2 ("type name " ^ (Ast_c.str_of_name nm) ^ " with fullType")
+          end
+      | Ast_c.Pointer _  -> Common.pr2 "pointer"
+      | Ast_c.ParenType _ -> Common.pr2 "parens"
+      | _                -> Common.pr2 "other"
+      end;
+      f ft;
+    *)
+
+let stripenv source_file dest_file =
+  let (ast2,_) = Parse_c.parse_c_and_cpp source_file in
+  let ast = Parse_c.program_of_program2 ast2 in
+  ignore (Type_annoter_c.annotate_program !Type_annoter_c.initial_env ast);
+  ignore (Visitor_c.vk_program hide_visitor ast);
+  Unparse_c.pp_program_default ast2 dest_file
+
+let main () =
+  Common.print_to_stderr := true;
+  Flag_parsing_c.show_parsing_error := true;
+
+  let source = ref None in
+  let dest = ref None in
+  let path_arg ref path = ref := Some path in
+  Arg.parse_argv Sys.argv
+    [("--output",Arg.String (path_arg dest),"path to the output file")]
+    (path_arg source) "cstripenv <source.c>";
+  let source_file =
+    match !source with
+      None      -> raise (Arg.Bad "a source file argument is required")
+    | Some path -> path in
+  let dest_file =
+    match !dest with
+      None      -> raise (Arg.Bad "an output file argument is required")
+    | Some path -> path in
+  stripenv source_file dest_file
+
+let _ = main ()
similarity index 71%
rename from tools/generate_dependencies.ml
rename to tools/obsolete/generate_dependencies.ml
index 82cd19c..1554698 100644 (file)
@@ -1,30 +1,3 @@
-(*
- * Copyright 2012, INRIA
- * Julia Lawall, Gilles Muller
- * Copyright 2010-2011, INRIA, University of Copenhagen
- * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix
- * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen
- * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
- * This file is part of Coccinelle.
- *
- * Coccinelle is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, according to version 2 of the License.
- *
- * Coccinelle is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Coccinelle.  If not, see <http://www.gnu.org/licenses/>.
- *
- * The authors reserve the right to distribute this or future versions of
- * Coccinelle under other licenses.
- *)
-
-
-# 0 "./generate_dependencies.ml"
 open Common
 
 (*****************************************************************************)
diff --git a/version b/version
index d65492e..b7975fd 100644 (file)
--- a/version
+++ b/version
@@ -1 +1 @@
-1.0.0-rc15
\ No newline at end of file
+1.0.0-rc16
\ No newline at end of file
diff --git a/version.ml b/version.ml
new file mode 100644 (file)
index 0000000..4f58314
--- /dev/null
@@ -0,0 +1,2 @@
+let version_date = "Fri, 7 Dec 2012 12:29:06 +0100"
+let configure_flags = "--enable-release --disable-python --disable-pcre-syntax"