
// line 1 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
package gherkin.lexer;

import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.ArrayList;
import java.util.regex.Pattern;
import gherkin.lexer.Lexer;
import gherkin.lexer.Listener;
import gherkin.lexer.LexingError;

public class Cs implements Lexer {
  
// line 150 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"


  private final Listener listener;

  public Cs(Listener listener) {
    this.listener = listener;
  }

  
// line 26 "java/src/main/java/gherkin/lexer/Cs.java"
private static byte[] init__lexer_actions_0()
{
	return new byte [] {
	    0,    1,    0,    1,    1,    1,    2,    1,    3,    1,    4,    1,
	    5,    1,    6,    1,    7,    1,    8,    1,    9,    1,   10,    1,
	   11,    1,   12,    1,   13,    1,   16,    1,   17,    1,   18,    1,
	   19,    1,   20,    1,   21,    1,   22,    1,   23,    2,    2,   18,
	    2,    3,    4,    2,   13,    0,    2,   14,   15,    2,   17,    0,
	    2,   17,    1,    2,   17,   16,    2,   17,   19,    2,   18,    6,
	    2,   18,    7,    2,   18,    8,    2,   18,    9,    2,   18,   10,
	    2,   18,   16,    2,   20,   21,    2,   22,    0,    2,   22,    1,
	    2,   22,   16,    2,   22,   19,    3,    4,   14,   15,    3,    5,
	   14,   15,    3,   11,   14,   15,    3,   12,   14,   15,    3,   13,
	   14,   15,    3,   14,   15,   18,    3,   17,    0,   11,    3,   17,
	   14,   15,    4,    2,   14,   15,   18,    4,    3,    4,   14,   15,
	    4,   17,    0,   14,   15,    5,   17,    0,   11,   14,   15
	};
}

private static final byte _lexer_actions[] = init__lexer_actions_0();


private static short[] init__lexer_key_offsets_0()
{
	return new short [] {
	    0,    0,   18,   19,   20,   37,   38,   39,   41,   43,   48,   53,
	   58,   63,   67,   71,   73,   74,   75,   76,   77,   78,   79,   80,
	   81,   82,   83,   84,   85,   86,   87,   88,   89,   91,   93,   98,
	  105,  110,  112,  115,  118,  121,  124,  127,  130,  131,  133,  134,
	  135,  136,  137,  138,  139,  140,  141,  142,  143,  144,  159,  161,
	  163,  165,  167,  169,  171,  173,  175,  177,  179,  181,  183,  185,
	  187,  189,  206,  207,  208,  209,  210,  211,  212,  213,  214,  215,
	  216,  217,  218,  219,  220,  221,  222,  223,  224,  225,  226,  239,
	  241,  243,  245,  247,  249,  251,  253,  255,  257,  259,  261,  263,
	  265,  267,  269,  272,  290,  291,  292,  293,  294,  295,  296,  297,
	  300,  301,  302,  303,  304,  305,  306,  307,  308,  309,  310,  311,
	  318,  320,  322,  324,  326,  328,  330,  332,  334,  336,  338,  339,
	  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,  352,  364,
	  366,  368,  370,  372,  374,  376,  378,  380,  382,  384,  386,  388,
	  390,  392,  394,  396,  398,  400,  402,  404,  406,  408,  410,  412,
	  414,  416,  418,  420,  422,  424,  426,  428,  430,  432,  434,  436,
	  438,  440,  442,  444,  446,  448,  450,  452,  454,  457,  459,  461,
	  463,  465,  467,  469,  471,  473,  476,  478,  480,  482,  484,  486,
	  488,  490,  492,  494,  496,  498,  500,  502,  504,  506,  508,  510,
	  512,  514,  515,  516,  517,  518,  519,  520,  521,  522,  523,  524,
	  525,  526,  527,  528,  529,  530,  531,  546,  548,  550,  552,  554,
	  556,  558,  560,  562,  564,  566,  568,  570,  572,  574,  576,  579,
	  597,  598,  599,  600,  601,  602,  603,  604,  605,  606,  607,  608,
	  609,  610,  611,  612,  613,  614,  615,  616,  620,  626,  629,  631,
	  637,  654,  656,  659,  661,  663,  665,  667,  669,  671,  673,  675,
	  677,  679,  681,  683,  685,  687,  689,  691,  693,  695,  697,  699,
	  701,  703,  705,  707,  709,  711,  713,  715,  717,  719,  721,  723,
	  725,  728,  730,  734,  736,  738,  740,  742,  744,  746,  748,  750,
	  752,  754,  756,  758,  760,  762,  764,  766,  768,  770,  772,  774,
	  776,  778,  780,  782,  784,  786,  788,  790,  792,  794,  796,  798,
	  800,  802,  804,  805,  806,  807,  808,  809,  811,  813,  815,  817,
	  819,  822,  824,  827,  829,  831,  833,  835,  837,  839,  841,  843,
	  845,  847,  849,  851,  853,  855,  857,  859,  861,  863,  865,  867,
	  869,  871,  873,  875,  877,  879,  881,  883,  885,  887,  889,  891,
	  894,  912,  913,  914,  915,  916,  917,  919,  921,  923,  925,  927,
	  929,  931,  933,  935,  937,  939,  941,  943,  945,  947,  949,  951,
	  953,  955,  957,  959,  961,  963,  965,  967,  969,  971,  973,  975,
	  977,  980,  982,  985,  987,  989,  991,  993,  995,  997,  999, 1001,
	 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025,
	 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047
	};
}

private static final short _lexer_key_offsets[] = init__lexer_key_offsets_0();


private static byte[] init__lexer_trans_keys_0()
{
	return new byte [] {
	  -17,   10,   32,   34,   35,   37,   42,   64,   65,   75,   78,   79,
	   80,   83,   90,  124,    9,   13,  -69,  -65,   10,   32,   34,   35,
	   37,   42,   64,   65,   75,   78,   79,   80,   83,   90,  124,    9,
	   13,   34,   34,   10,   13,   10,   13,   10,   32,   34,    9,   13,
	   10,   32,   34,    9,   13,   10,   32,   34,    9,   13,   10,   32,
	   34,    9,   13,   10,   32,    9,   13,   10,   32,    9,   13,   10,
	   13,   10,   95,   70,   69,   65,   84,   85,   82,   69,   95,   69,
	   78,   68,   95,   37,   32,   10,   13,   10,   13,   13,   32,   64,
	    9,   10,    9,   10,   13,   32,   64,   11,   12,   10,   32,   64,
	    9,   13,   32,  108,   10,   13,  116,   10,   13,   97,   10,   13,
	  107,  -61,   10,   13,  -87,   10,   13,   10,   13,   32,  101,  100,
	  111,  121,  -59,  -66,  110,  116,  101,  120,  116,   58,   10,   10,
	   10,   32,   35,   37,   42,   64,   65,   75,   78,   79,   80,   83,
	   90,    9,   13,   10,   95,   10,   70,   10,   69,   10,   65,   10,
	   84,   10,   85,   10,   82,   10,   69,   10,   95,   10,   69,   10,
	   78,   10,   68,   10,   95,   10,   37,   10,   32,   10,   32,   34,
	   35,   37,   42,   64,   65,   75,   78,   79,   80,   83,   90,  124,
	    9,   13,  -61,  -95,  -60, -115,  114,  116,   32,   83,   99,  -61,
	  -87,  110,  -61,  -95,  -59, -103,  101,   58,   10,   10,   10,   32,
	   35,   37,   42,   64,   65,   75,   80,   83,   90,    9,   13,   10,
	   95,   10,   70,   10,   69,   10,   65,   10,   84,   10,   85,   10,
	   82,   10,   69,   10,   95,   10,   69,   10,   78,   10,   68,   10,
	   95,   10,   37,   10,   32,   10,   32,  108,   10,   32,   34,   35,
	   37,   42,   64,   65,   75,   78,   79,   80,   83,   90,  116,  124,
	    9,   13,  115,  110,  111,  118,   97,   32,  115,  -59,   97,  111,
	 -103,  -61,  -83,  107,  108,   97,  100,  121,   58,   10,   10,   10,
	   32,   35,   80,  124,    9,   13,   10,  111,  -59,   10,  -66,   10,
	   10,   97,   10,  100,   10,   97,   10,  118,   10,  101,   10,  107,
	   10,   58,  107,  -59,  107,  122,  -66,   97,  100,   97,  118,  101,
	  107,   58,   10,   10,   10,   32,   35,   37,   64,   75,   78,   79,
	   80,   83,    9,   13,   10,   95,   10,   70,   10,   69,   10,   65,
	   10,   84,   10,   85,   10,   82,   10,   69,   10,   95,   10,   69,
	   10,   78,   10,   68,   10,   95,   10,   37,   10,  111,   10,  110,
	   10,  116,   10,  101,   10,  120,   10,  116,   10,   58,  -61,   10,
	  -95,   10,  -60,   10, -115,   10,   10,  114,   10,  116,   10,   32,
	   10,   83,   10,   99,  -61,   10,  -87,   10,   10,  110,  -61,   10,
	  -95,   10,  -59,   10, -103,   10,   10,  101,   10,  115,   10,  110,
	   10,  111,   10,  118,   10,   97,   10,   32,   10,  115,  -59,   10,
	  111, -103,   10,  -61,   10,  -83,   10,   10,  107,   10,  108,   10,
	   97,   10,  100,   10,  121,  -59,   10,  122,  -66,   10,   10,   97,
	   10,  100,   10,   97,   10,  118,   10,  101,   10,  107,   10,   97,
	   10,  100,  -61,   10,  -83,   10,   10,   99,  -61,   10,  -87,   10,
	   10,  110,  -61,   10,  -95,   10,  -59,   10, -103,   10,  117,  100,
	   97,  100,  -61,  -83,   99,  -61,  -87,  110,  -61,  -95,  -59, -103,
	   58,   10,   10,   10,   32,   35,   37,   42,   64,   65,   75,   78,
	   79,   80,   83,   90,    9,   13,   10,   95,   10,   70,   10,   69,
	   10,   65,   10,   84,   10,   85,   10,   82,   10,   69,   10,   95,
	   10,   69,   10,   78,   10,   68,   10,   95,   10,   37,   10,   32,
	   10,   32,  108,   10,   32,   34,   35,   37,   42,   64,   65,   75,
	   78,   79,   80,   83,   90,  116,  124,    9,   13,   97,   32,  112,
	  -59, -103,  101,  100,  112,  111,  107,  108,   97,  100,  117,   97,
	  107,  -61,  -87,   32,   32,  124,    9,   13,   10,   32,   92,  124,
	    9,   13,   10,   92,  124,   10,   92,   10,   32,   92,  124,    9,
	   13,   10,   32,   34,   35,   37,   42,   64,   65,   75,   78,   79,
	   80,   83,   90,  124,    9,   13,   10,  101,   10,  100,  111,   10,
	  121,  -59,   10,  -66,   10,   10,  110,   10,  116,   10,  101,   10,
	  120,   10,  116,   10,   58,  -61,   10,  -95,   10,  -60,   10, -115,
	   10,   10,  114,   10,  116,   10,   32,   10,   83,   10,   99,  -61,
	   10,  -87,   10,   10,  110,  -61,   10,  -95,   10,  -59,   10, -103,
	   10,   10,  101,   10,  115,   10,  110,   10,  111,   10,  118,   10,
	   97,   10,   32,   10,  115,   10,   97,  111,   10,  107,  -59,   10,
	  107,  122,  -66,   10,   10,   97,   10,  100,   10,   97,   10,  118,
	   10,  101,   10,  107,   10,  117,   10,  100,   10,   97,   10,  100,
	  -61,   10,  -83,   10,   10,   99,  -61,   10,  -87,   10,   10,  110,
	  -61,   10,  -95,   10,  -59,   10, -103,   10,   10,   97,   10,   32,
	   10,  112,  -59,   10, -103,   10,   10,  101,   10,  100,   10,  112,
	   10,  111,   10,  107,   10,  108,   10,   97,   10,  100,   10,  117,
	   97,  107,  -61,  -87,   32,   10,  101,   10,  100,   10,  121,  -59,
	   10,  -66,   10,   10,   97,  111,   10,  107,  -59,   10,  107,  -66,
	   10,   10,   97,   10,  100,   10,   97,   10,  118,   10,  101,   10,
	  107,   10,   58,   10,  117,   10,  100,   10,   99,  -61,   10,  -87,
	   10,   10,  110,  -61,   10,  -95,   10,  -59,   10, -103,   10,   10,
	   97,   10,   32,   10,  112,  -59,   10, -103,   10,   10,  101,   10,
	  100,   10,  112,   10,  111,   10,  107,   10,  108,   10,   97,   10,
	  100,   10,  117,   10,   32,  108,   10,   32,   34,   35,   37,   42,
	   64,   65,   75,   78,   79,   80,   83,   90,  116,  124,    9,   13,
	   97,  107,  -61,  -87,   32,   10,  101,   10,  100,   10,  121,  -59,
	   10,  -66,   10,  -61,   10,  -95,   10,  -60,   10, -115,   10,   10,
	  114,   10,  116,   10,   32,   10,   83,   10,   99,  -61,   10,  -87,
	   10,   10,  110,  -61,   10,  -95,   10,  -59,   10, -103,   10,   10,
	  101,   10,   58,   10,  115,   10,  110,   10,  111,   10,  118,   10,
	   97,   10,   32,   10,  115,   10,   97,  111,   10,  107,  -59,   10,
	  107,  -66,   10,   10,   97,   10,  100,   10,   97,   10,  118,   10,
	  101,   10,  107,   10,  117,   10,  100,   10,   99,  -61,   10,  -87,
	   10,   10,  110,  -61,   10,  -95,   10,  -59,   10, -103,   10,   10,
	   97,   10,   32,   10,  112,  -59,   10, -103,   10,   10,  101,   10,
	  100,   10,  112,   10,  111,   10,  107,   10,  108,   10,   97,   10,
	  100,   10,  117,    0
	};
}

private static final byte _lexer_trans_keys[] = init__lexer_trans_keys_0();


private static byte[] init__lexer_single_lengths_0()
{
	return new byte [] {
	    0,   16,    1,    1,   15,    1,    1,    2,    2,    3,    3,    3,
	    3,    2,    2,    2,    1,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    2,    2,    3,    5,
	    3,    2,    3,    3,    3,    3,    3,    3,    1,    2,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,   13,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,   15,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,   11,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    3,   16,    1,    1,    1,    1,    1,    1,    1,    3,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    5,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    1,    3,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,   10,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    3,    2,    2,    2,
	    2,    2,    2,    2,    2,    3,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,   13,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    3,   16,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,    2,    4,    3,    2,    4,
	   15,    2,    3,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    3,    2,    4,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    1,    1,    1,    1,    1,    2,    2,    2,    2,    2,
	    3,    2,    3,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    3,
	   16,    1,    1,    1,    1,    1,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    3,    2,    3,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    0
	};
}

private static final byte _lexer_single_lengths[] = init__lexer_single_lengths_0();


private static byte[] init__lexer_range_lengths_0()
{
	return new byte [] {
	    0,    1,    0,    0,    1,    0,    0,    0,    0,    1,    1,    1,
	    1,    1,    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1,    1,
	    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    1,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    1,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    1,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    1,    1,    0,    0,    1,
	    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
	};
}

private static final byte _lexer_range_lengths[] = init__lexer_range_lengths_0();


private static short[] init__lexer_index_offsets_0()
{
	return new short [] {
	    0,    0,   18,   20,   22,   39,   41,   43,   46,   49,   54,   59,
	   64,   69,   73,   77,   80,   82,   84,   86,   88,   90,   92,   94,
	   96,   98,  100,  102,  104,  106,  108,  110,  112,  115,  118,  123,
	  130,  135,  138,  142,  146,  150,  154,  158,  162,  164,  167,  169,
	  171,  173,  175,  177,  179,  181,  183,  185,  187,  189,  204,  207,
	  210,  213,  216,  219,  222,  225,  228,  231,  234,  237,  240,  243,
	  246,  249,  266,  268,  270,  272,  274,  276,  278,  280,  282,  284,
	  286,  288,  290,  292,  294,  296,  298,  300,  302,  304,  306,  319,
	  322,  325,  328,  331,  334,  337,  340,  343,  346,  349,  352,  355,
	  358,  361,  364,  368,  386,  388,  390,  392,  394,  396,  398,  400,
	  404,  406,  408,  410,  412,  414,  416,  418,  420,  422,  424,  426,
	  433,  436,  439,  442,  445,  448,  451,  454,  457,  460,  463,  465,
	  469,  471,  473,  475,  477,  479,  481,  483,  485,  487,  489,  501,
	  504,  507,  510,  513,  516,  519,  522,  525,  528,  531,  534,  537,
	  540,  543,  546,  549,  552,  555,  558,  561,  564,  567,  570,  573,
	  576,  579,  582,  585,  588,  591,  594,  597,  600,  603,  606,  609,
	  612,  615,  618,  621,  624,  627,  630,  633,  636,  640,  643,  646,
	  649,  652,  655,  658,  661,  664,  668,  671,  674,  677,  680,  683,
	  686,  689,  692,  695,  698,  701,  704,  707,  710,  713,  716,  719,
	  722,  725,  727,  729,  731,  733,  735,  737,  739,  741,  743,  745,
	  747,  749,  751,  753,  755,  757,  759,  774,  777,  780,  783,  786,
	  789,  792,  795,  798,  801,  804,  807,  810,  813,  816,  819,  823,
	  841,  843,  845,  847,  849,  851,  853,  855,  857,  859,  861,  863,
	  865,  867,  869,  871,  873,  875,  877,  879,  883,  889,  893,  896,
	  902,  919,  922,  926,  929,  932,  935,  938,  941,  944,  947,  950,
	  953,  956,  959,  962,  965,  968,  971,  974,  977,  980,  983,  986,
	  989,  992,  995,  998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022,
	 1025, 1029, 1032, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061,
	 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097,
	 1100, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133,
	 1136, 1139, 1142, 1144, 1146, 1148, 1150, 1152, 1155, 1158, 1161, 1164,
	 1167, 1171, 1174, 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202,
	 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238,
	 1241, 1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274,
	 1278, 1296, 1298, 1300, 1302, 1304, 1306, 1309, 1312, 1315, 1318, 1321,
	 1324, 1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357,
	 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 1384, 1387, 1390, 1393,
	 1396, 1400, 1403, 1407, 1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431,
	 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458, 1461, 1464, 1467,
	 1470, 1473, 1476, 1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500
	};
}

private static final short _lexer_index_offsets[] = init__lexer_index_offsets_0();


private static short[] init__lexer_indicies_0()
{
	return new short [] {
	    1,    3,    2,    4,    5,    6,    7,    8,    9,   10,   11,   12,
	   13,   14,   15,   16,    2,    0,   17,    0,    2,    0,    3,    2,
	    4,    5,    6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
	   16,    2,    0,   18,    0,   19,    0,   21,   22,   20,   24,   25,
	   23,   28,   27,   29,   27,   26,   32,   31,   33,   31,   30,   32,
	   31,   34,   31,   30,   32,   31,   35,   31,   30,   37,   36,   36,
	    0,    3,   38,   38,    0,   40,   41,   39,    3,    0,   42,    0,
	   43,    0,   44,    0,   45,    0,   46,    0,   47,    0,   48,    0,
	   49,    0,   50,    0,   51,    0,   52,    0,   53,    0,   54,    0,
	   55,    0,   56,    0,   58,   59,   57,   61,   62,   60,    0,    0,
	    0,    0,   63,   64,   65,   64,   64,   67,   66,   63,    3,   68,
	    8,   68,    0,   69,   70,    0,   58,   59,   71,   57,   61,   62,
	   72,   60,   61,   62,   73,   60,   74,   61,   62,   60,   75,   61,
	   62,   60,   61,   62,   56,   60,   76,    0,   77,   78,    0,   79,
	    0,   80,    0,   76,    0,   81,    0,   82,    0,   83,    0,   84,
	    0,   85,    0,   86,    0,   88,   87,   90,   89,   90,   91,   92,
	   93,   94,   92,   95,   96,   97,   98,   99,  100,  101,   91,   89,
	   90,  102,   89,   90,  103,   89,   90,  104,   89,   90,  105,   89,
	   90,  106,   89,   90,  107,   89,   90,  108,   89,   90,  109,   89,
	   90,  110,   89,   90,  111,   89,   90,  112,   89,   90,  113,   89,
	   90,  114,   89,   90,  115,   89,   90,  116,   89,  118,  117,  119,
	  120,  121,  122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
	  117,    0,  132,    0,  133,    0,  134,    0,  135,    0,  136,    0,
	  137,    0,  138,    0,  139,    0,  140,    0,  141,    0,  142,    0,
	  143,    0,  144,    0,  145,    0,  146,    0,  147,    0,  148,    0,
	  149,    0,  151,  150,  153,  152,  153,  154,  155,  156,  157,  155,
	  158,  159,  160,  161,  162,  154,  152,  153,  163,  152,  153,  164,
	  152,  153,  165,  152,  153,  166,  152,  153,  167,  152,  153,  168,
	  152,  153,  169,  152,  153,  170,  152,  153,  171,  152,  153,  172,
	  152,  153,  173,  152,  153,  174,  152,  153,  175,  152,  153,  176,
	  152,  153,  177,  152,  153,  178,  179,  152,  118,  117,  119,  120,
	  121,  122,  123,  124,  125,  126,  127,  128,  129,  130,  180,  131,
	  117,    0,  181,    0,  182,    0,  183,    0,  184,    0,  185,    0,
	  186,    0,  139,    0,  187,  188,  189,    0,  190,    0,  191,    0,
	  192,    0,  193,    0,  194,    0,  195,    0,  196,    0,  197,    0,
	  198,    0,  200,  199,  202,  201,  202,  203,  204,  205,  204,  203,
	  201,  202,  206,  201,  207,  202,  201,  208,  202,  201,  202,  209,
	  201,  202,  210,  201,  202,  211,  201,  202,  212,  201,  202,  213,
	  201,  202,  214,  201,  202,  215,  201,   76,    0,  216,  217,  218,
	    0,  219,    0,  220,    0,  221,    0,  222,    0,  223,    0,  224,
	    0,  225,    0,  226,    0,  228,  227,  230,  229,  230,  231,  232,
	  233,  232,  234,  235,  236,  237,  238,  231,  229,  230,  239,  229,
	  230,  240,  229,  230,  241,  229,  230,  242,  229,  230,  243,  229,
	  230,  244,  229,  230,  245,  229,  230,  246,  229,  230,  247,  229,
	  230,  248,  229,  230,  249,  229,  230,  250,  229,  230,  251,  229,
	  230,  252,  229,  230,  253,  229,  230,  254,  229,  230,  255,  229,
	  230,  256,  229,  230,  257,  229,  230,  258,  229,  230,  259,  229,
	  260,  230,  229,  261,  230,  229,  262,  230,  229,  263,  230,  229,
	  230,  264,  229,  230,  265,  229,  230,  266,  229,  230,  267,  229,
	  230,  268,  229,  269,  230,  229,  270,  230,  229,  230,  271,  229,
	  272,  230,  229,  273,  230,  229,  274,  230,  229,  275,  230,  229,
	  230,  258,  229,  230,  276,  229,  230,  277,  229,  230,  278,  229,
	  230,  279,  229,  230,  280,  229,  230,  281,  229,  230,  267,  229,
	  282,  230,  283,  229,  284,  230,  229,  285,  230,  229,  286,  230,
	  229,  230,  287,  229,  230,  288,  229,  230,  289,  229,  230,  290,
	  229,  230,  258,  229,  291,  230,  292,  229,  293,  230,  229,  230,
	  294,  229,  230,  295,  229,  230,  296,  229,  230,  297,  229,  230,
	  298,  229,  230,  258,  229,  230,  299,  229,  230,  300,  229,  301,
	  230,  229,  258,  230,  229,  230,  302,  229,  303,  230,  229,  304,
	  230,  229,  230,  305,  229,  306,  230,  229,  307,  230,  229,  308,
	  230,  229,  258,  230,  229,  309,    0,   76,    0,  310,    0,  311,
	    0,  312,    0,   85,    0,  313,    0,  314,    0,  315,    0,  316,
	    0,  317,    0,  318,    0,  319,    0,  320,    0,  321,    0,  323,
	  322,  325,  324,  325,  326,  327,  328,  329,  327,  330,  331,  332,
	  333,  334,  335,  336,  326,  324,  325,  337,  324,  325,  338,  324,
	  325,  339,  324,  325,  340,  324,  325,  341,  324,  325,  342,  324,
	  325,  343,  324,  325,  344,  324,  325,  345,  324,  325,  346,  324,
	  325,  347,  324,  325,  348,  324,  325,  349,  324,  325,  350,  324,
	  325,  351,  324,  325,  352,  353,  324,  118,  117,  119,  120,  121,
	  122,  123,  124,  125,  126,  127,  128,  129,  130,  354,  131,  117,
	    0,  355,    0,  356,    0,  357,    0,  358,    0,  359,    0,  360,
	    0,  361,    0,  362,    0,  363,    0,  364,    0,  365,    0,  366,
	    0,  367,    0,   76,    0,  368,    0,  369,    0,  370,    0,  371,
	    0,  351,    0,  372,  373,  372,    0,  376,  375,  377,  378,  375,
	  374,    0,  380,  381,  379,    0,  380,  379,  376,  382,  380,  381,
	  382,  379,  376,  383,  384,  385,  386,  387,  388,  389,  390,  391,
	  392,  393,  394,  395,  396,  383,    0,  325,  397,  324,  325,  398,
	  399,  324,  325,  400,  324,  401,  325,  324,  397,  325,  324,  325,
	  402,  324,  325,  403,  324,  325,  404,  324,  325,  405,  324,  325,
	  406,  324,  325,  351,  324,  407,  325,  324,  408,  325,  324,  409,
	  325,  324,  410,  325,  324,  325,  411,  324,  325,  412,  324,  325,
	  413,  324,  325,  414,  324,  325,  415,  324,  416,  325,  324,  417,
	  325,  324,  325,  418,  324,  419,  325,  324,  420,  325,  324,  421,
	  325,  324,  422,  325,  324,  325,  406,  324,  325,  423,  324,  325,
	  424,  324,  325,  425,  324,  325,  426,  324,  325,  427,  324,  325,
	  428,  324,  325,  414,  324,  325,  429,  430,  324,  325,  397,  324,
	  431,  325,  432,  433,  324,  434,  325,  324,  325,  435,  324,  325,
	  436,  324,  325,  437,  324,  325,  438,  324,  325,  439,  324,  325,
	  406,  324,  325,  440,  324,  325,  397,  324,  325,  441,  324,  325,
	  442,  324,  443,  325,  324,  406,  325,  324,  325,  444,  324,  445,
	  325,  324,  446,  325,  324,  325,  447,  324,  448,  325,  324,  449,
	  325,  324,  450,  325,  324,  406,  325,  324,  325,  451,  324,  325,
	  452,  324,  325,  453,  324,  454,  325,  324,  455,  325,  324,  325,
	  456,  324,  325,  457,  324,  325,  458,  324,  325,  459,  324,  325,
	  460,  324,  325,  461,  324,  325,  462,  324,  325,  463,  324,  325,
	  397,  324,  464,    0,  465,    0,  466,    0,  467,    0,  177,    0,
	  153,  468,  152,  153,  469,  152,  153,  470,  152,  471,  153,  152,
	  468,  153,  152,  153,  472,  473,  152,  153,  468,  152,  474,  153,
	  475,  152,  476,  153,  152,  153,  477,  152,  153,  478,  152,  153,
	  479,  152,  153,  480,  152,  153,  481,  152,  153,  482,  152,  153,
	  177,  152,  153,  483,  152,  153,  468,  152,  153,  484,  152,  485,
	  153,  152,  486,  153,  152,  153,  487,  152,  488,  153,  152,  489,
	  153,  152,  490,  153,  152,  482,  153,  152,  153,  491,  152,  153,
	  492,  152,  153,  493,  152,  494,  153,  152,  495,  153,  152,  153,
	  496,  152,  153,  497,  152,  153,  498,  152,  153,  499,  152,  153,
	  500,  152,  153,  501,  152,  153,  502,  152,  153,  503,  152,  153,
	  468,  152,   90,  504,  505,   89,  118,  117,  119,  120,  121,  122,
	  123,  124,  125,  126,  127,  128,  129,  130,  506,  131,  117,    0,
	  507,    0,  508,    0,  509,    0,  510,    0,  116,    0,   90,  511,
	   89,   90,  512,   89,   90,  513,   89,  514,   90,   89,  511,   90,
	   89,  515,   90,   89,  516,   90,   89,  517,   90,   89,  518,   90,
	   89,   90,  519,   89,   90,  520,   89,   90,  521,   89,   90,  522,
	   89,   90,  523,   89,  524,   90,   89,  525,   90,   89,   90,  526,
	   89,  527,   90,   89,  528,   90,   89,  529,   90,   89,  530,   90,
	   89,   90,  531,   89,   90,  116,   89,   90,  532,   89,   90,  533,
	   89,   90,  534,   89,   90,  535,   89,   90,  536,   89,   90,  537,
	   89,   90,  522,   89,   90,  538,  539,   89,   90,  511,   89,  540,
	   90,  541,   89,  542,   90,   89,   90,  543,   89,   90,  544,   89,
	   90,  545,   89,   90,  546,   89,   90,  547,   89,   90,  531,   89,
	   90,  548,   89,   90,  511,   89,   90,  549,   89,  550,   90,   89,
	  551,   90,   89,   90,  552,   89,  553,   90,   89,  554,   90,   89,
	  555,   90,   89,  531,   90,   89,   90,  556,   89,   90,  557,   89,
	   90,  558,   89,  559,   90,   89,  560,   90,   89,   90,  561,   89,
	   90,  562,   89,   90,  563,   89,   90,  564,   89,   90,  565,   89,
	   90,  566,   89,   90,  567,   89,   90,  568,   89,   90,  511,   89,
	  569,    0
	};
}

private static final short _lexer_indicies[] = init__lexer_indicies_0();


private static short[] init__lexer_trans_targs_0()
{
	return new short [] {
	    0,    2,    4,    4,    5,   15,   17,   31,   34,   37,   45,   74,
	  112,  119,  235,  264,  283,    3,    6,    7,    8,    9,    8,    8,
	    9,    8,   10,   10,   10,   11,   10,   10,   10,   11,   12,   13,
	   14,    4,   14,   15,    4,   16,   18,   19,   20,   21,   22,   23,
	   24,   25,   26,   27,   28,   29,   30,  478,   32,   33,    4,   16,
	   33,    4,   16,   35,   36,    4,   35,   34,   36,   38,   44,   39,
	   40,   41,   42,   43,   31,   46,   49,   47,   48,   50,   51,   52,
	   53,   54,   55,   56,   57,   56,   57,   57,    4,   58,   72,  407,
	  415,  419,  437,  444,  456,  464,   59,   60,   61,   62,   63,   64,
	   65,   66,   67,   68,   69,   70,   71,    4,   73,    4,    4,    5,
	   15,   17,   31,   34,   37,   45,   74,  112,  119,  235,  264,  283,
	   75,   76,   77,   78,   79,   80,   81,   82,   83,   84,   85,   86,
	   87,   88,   89,   90,   91,   92,   93,   94,   93,   94,   94,    4,
	   95,  109,  110,  368,  372,  385,  393,   96,   97,   98,   99,  100,
	  101,  102,  103,  104,  105,  106,  107,  108,    4,   73,  111,  367,
	  362,  113,  114,  115,  116,  117,  118,  120,  142,  143,  121,  122,
	  123,  124,  125,  126,  127,  128,  129,  130,  131,  130,  131,  131,
	    4,  132,  133,  134,  135,  136,  137,  138,  139,  140,  141,   73,
	  144,  229,  231,  145,  146,  147,  148,  149,  150,  151,  152,  153,
	  154,  153,  154,  154,    4,  155,  169,  176,  193,  200,  221,  156,
	  157,  158,  159,  160,  161,  162,  163,  164,  165,  166,  167,  168,
	    4,  170,  171,  172,  173,  174,  175,   73,  177,  178,  179,  180,
	  181,  182,  183,  184,  185,  186,  187,  188,  189,  190,  191,  192,
	  194,  195,  196,  197,  198,  199,  201,  209,  202,  203,  204,  205,
	  206,  207,  208,  210,  217,  211,  212,  213,  214,  215,  216,  218,
	  219,  220,  222,  223,  224,  225,  226,  227,  228,  230,  232,  233,
	  234,  236,  237,  238,  239,  240,  241,  242,  243,  244,  245,  246,
	  245,  246,  246,    4,  247,  261,  262,  290,  300,  317,  324,  340,
	  348,  248,  249,  250,  251,  252,  253,  254,  255,  256,  257,  258,
	  259,  260,    4,   73,  263,  289,  278,  265,  266,  267,  268,  269,
	  270,  271,  272,  273,  274,  275,  276,  277,  279,  280,  281,  282,
	  283,  284,  285,  287,  288,  286,  284,  285,  286,  284,  287,  288,
	    5,   15,   17,   31,   34,   37,   45,   74,  112,  119,  235,  264,
	  283,  261,  291,  294,  292,  293,  295,  296,  297,  298,  299,  301,
	  302,  303,  304,  305,  306,  307,  308,  309,  310,  311,  312,  313,
	  314,  315,  316,  318,  319,  320,  321,  322,  323,  325,  326,  327,
	  334,  336,  328,  329,  330,  331,  332,  333,  335,  337,  338,  339,
	  341,  342,  343,  344,  345,  346,  347,  349,  350,  351,  352,  353,
	  354,  355,  356,  357,  358,  359,  360,  361,  363,  364,  365,  366,
	  109,  369,  370,  371,  373,  374,  375,  383,  376,  377,  378,  379,
	  380,  381,  382,  384,  386,  387,  388,  389,  390,  391,  392,  394,
	  395,  396,  397,  398,  399,  400,  401,  402,  403,  404,  405,  406,
	  408,  414,  409,  410,  411,  412,  413,   72,  416,  417,  418,  420,
	  421,  422,  423,  424,  425,  426,  427,  428,  429,  430,  431,  432,
	  433,  434,  435,  436,  438,  439,  440,  441,  442,  443,  445,  446,
	  447,  454,  448,  449,  450,  451,  452,  453,  455,  457,  458,  459,
	  460,  461,  462,  463,  465,  466,  467,  468,  469,  470,  471,  472,
	  473,  474,  475,  476,  477,    0
	};
}

private static final short _lexer_trans_targs[] = init__lexer_trans_targs_0();


private static short[] init__lexer_trans_actions_0()
{
	return new short [] {
	   43,    0,    0,   54,    3,    1,    0,   29,    1,   29,   29,   29,
	   29,   29,   29,   29,   35,    0,    0,    0,    7,  139,   48,    0,
	  102,    9,    5,   45,  134,   45,    0,   33,  122,   33,   33,    0,
	   11,  106,    0,    0,  114,   25,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,   57,  149,  126,
	    0,  110,   23,    0,   27,  118,   27,   51,    0,    0,    0,   57,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,   57,  144,    0,   54,    0,   72,   33,   84,   84,
	   84,   84,   84,   84,   84,   84,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,   15,   15,   31,  130,   60,
	   57,   31,   63,   57,   63,   63,   63,   63,   63,   63,   63,   66,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,   57,  144,    0,   54,    0,   78,
	   33,   84,   84,   84,   84,   84,   84,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,   19,   19,   19,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,   57,  144,    0,   54,    0,
	   81,   84,    0,    0,    0,    0,    0,    0,    0,    0,    0,   21,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   57,
	  144,    0,   54,    0,   69,   33,   84,   84,   84,   84,   84,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	   13,    0,    0,    0,    0,    0,    0,   13,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   57,  144,
	    0,   54,    0,   75,   33,   84,   84,   84,   84,   84,   84,   84,
	   84,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,   17,   17,   17,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,   37,   37,   54,   37,   87,    0,    0,   39,    0,    0,
	   93,   90,   41,   96,   90,   96,   96,   96,   96,   96,   96,   96,
	   99,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	   15,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0
	};
}

private static final short _lexer_trans_actions[] = init__lexer_trans_actions_0();


private static short[] init__lexer_eof_actions_0()
{
	return new short [] {
	    0,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43
	};
}

private static final short _lexer_eof_actions[] = init__lexer_eof_actions_0();


static final int lexer_start = 1;
static final int lexer_first_final = 478;

static final int lexer_en_main = 1;


// line 159 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"

  public void scan(String source)  {
    String input = source + "\n%_FEATURE_END_%";
    byte[] data = null;
    try {
      data = input.getBytes("UTF-8");
    } catch(UnsupportedEncodingException e) {
      throw new RuntimeException(e);
    }
    int cs, p = 0, pe = data.length;
    int eof = pe;

    int lineNumber = 1;
    int lastNewline = 0;

    int contentStart = -1;
    int currentLine = -1;
    int docstringContentTypeStart = -1;
    int docstringContentTypeEnd = -1;
    int startCol = -1;
    int nextKeywordStart = -1;
    int keywordStart = -1;
    String keyword = null;
    List<String> currentRow = null;

    
// line 673 "java/src/main/java/gherkin/lexer/Cs.java"
	{
	cs = lexer_start;
	}

// line 185 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
    
// line 680 "java/src/main/java/gherkin/lexer/Cs.java"
	{
	int _klen;
	int _trans = 0;
	int _acts;
	int _nacts;
	int _keys;
	int _goto_targ = 0;

	_goto: while (true) {
	switch ( _goto_targ ) {
	case 0:
	if ( p == pe ) {
		_goto_targ = 4;
		continue _goto;
	}
	if ( cs == 0 ) {
		_goto_targ = 5;
		continue _goto;
	}
case 1:
	_match: do {
	_keys = _lexer_key_offsets[cs];
	_trans = _lexer_index_offsets[cs];
	_klen = _lexer_single_lengths[cs];
	if ( _klen > 0 ) {
		int _lower = _keys;
		int _mid;
		int _upper = _keys + _klen - 1;
		while (true) {
			if ( _upper < _lower )
				break;

			_mid = _lower + ((_upper-_lower) >> 1);
			if ( data[p] < _lexer_trans_keys[_mid] )
				_upper = _mid - 1;
			else if ( data[p] > _lexer_trans_keys[_mid] )
				_lower = _mid + 1;
			else {
				_trans += (_mid - _keys);
				break _match;
			}
		}
		_keys += _klen;
		_trans += _klen;
	}

	_klen = _lexer_range_lengths[cs];
	if ( _klen > 0 ) {
		int _lower = _keys;
		int _mid;
		int _upper = _keys + (_klen<<1) - 2;
		while (true) {
			if ( _upper < _lower )
				break;

			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
			if ( data[p] < _lexer_trans_keys[_mid] )
				_upper = _mid - 2;
			else if ( data[p] > _lexer_trans_keys[_mid+1] )
				_lower = _mid + 2;
			else {
				_trans += ((_mid - _keys)>>1);
				break _match;
			}
		}
		_trans += _klen;
	}
	} while (false);

	_trans = _lexer_indicies[_trans];
	cs = _lexer_trans_targs[_trans];

	if ( _lexer_trans_actions[_trans] != 0 ) {
		_acts = _lexer_trans_actions[_trans];
		_nacts = (int) _lexer_actions[_acts++];
		while ( _nacts-- > 0 )
	{
			switch ( _lexer_actions[_acts++] )
			{
	case 0:
// line 16 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      contentStart = p;
      currentLine = lineNumber;
      if(keyword != null) {
        startCol = p - lastNewline - (keyword.length() + 1);
      }
    }
	break;
	case 1:
// line 24 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      currentLine = lineNumber;
      startCol = p - lastNewline;
    }
	break;
	case 2:
// line 29 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      contentStart = p;
    }
	break;
	case 3:
// line 33 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      docstringContentTypeStart = p;
    }
	break;
	case 4:
// line 37 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      docstringContentTypeEnd = p;
    }
	break;
	case 5:
// line 41 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      String con = unindent(startCol, substring(data, contentStart, nextKeywordStart-1).replaceFirst("(\\r?\\n)?([\\t ])*\\Z", "").replace("\\\"\\\"\\\"", "\"\"\""));
      String conType = substring(data, docstringContentTypeStart, docstringContentTypeEnd).trim();
      listener.docString(conType, con, currentLine);
    }
	break;
	case 6:
// line 47 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.feature(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
	break;
	case 7:
// line 54 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.background(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
	break;
	case 8:
// line 61 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.scenario(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
	break;
	case 9:
// line 68 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.scenarioOutline(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
	break;
	case 10:
// line 75 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.examples(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
	break;
	case 11:
// line 82 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      listener.step(keyword, substring(data, contentStart, p).trim(), currentLine);
    }
	break;
	case 12:
// line 86 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      listener.comment(substring(data, contentStart, p).trim(), lineNumber);
      keywordStart = -1;
    }
	break;
	case 13:
// line 91 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      listener.tag(substring(data, contentStart, p).trim(), currentLine);
      keywordStart = -1;
    }
	break;
	case 14:
// line 96 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      lineNumber++;
    }
	break;
	case 15:
// line 100 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      lastNewline = p + 1;
    }
	break;
	case 16:
// line 104 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      if(keywordStart == -1) keywordStart = p;
    }
	break;
	case 17:
// line 108 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      keyword = substring(data, keywordStart, p).replaceFirst(":$","");
      keywordStart = -1;
    }
	break;
	case 18:
// line 113 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      nextKeywordStart = p;
    }
	break;
	case 19:
// line 117 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      p = p - 1;
      currentRow = new ArrayList<String>();
      currentLine = lineNumber;
    }
	break;
	case 20:
// line 123 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      contentStart = p;
    }
	break;
	case 21:
// line 127 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      String con = substring(data, contentStart, p).trim();
      currentRow.add(con
        .replace("\\|", "|")
        .replace("\\n", "\n")
        .replace("\\\\", "\\")
      );
    }
	break;
	case 22:
// line 136 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      listener.row(currentRow, currentLine);
    }
	break;
	case 23:
// line 140 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      if(cs < lexer_first_final) {
        String content = currentLineContent(data, lastNewline);
        throw new LexingError("Lexing error on line " + lineNumber + ": '" + content + "'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.");
      } else {
        listener.eof();
      }
    }
	break;
// line 941 "java/src/main/java/gherkin/lexer/Cs.java"
			}
		}
	}

case 2:
	if ( cs == 0 ) {
		_goto_targ = 5;
		continue _goto;
	}
	if ( ++p != pe ) {
		_goto_targ = 1;
		continue _goto;
	}
case 4:
	if ( p == eof )
	{
	int __acts = _lexer_eof_actions[cs];
	int __nacts = (int) _lexer_actions[__acts++];
	while ( __nacts-- > 0 ) {
		switch ( _lexer_actions[__acts++] ) {
	case 23:
// line 140 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
	{
      if(cs < lexer_first_final) {
        String content = currentLineContent(data, lastNewline);
        throw new LexingError("Lexing error on line " + lineNumber + ": '" + content + "'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.");
      } else {
        listener.eof();
      }
    }
	break;
// line 973 "java/src/main/java/gherkin/lexer/Cs.java"
		}
	}
	}

case 5:
	}
	break; }
	}

// line 186 "/home/son/work/github/os97673/gherkin/tasks/../ragel/i18n/cs.java.rl"
  }

  private String keywordContent(byte[] data, int p, int eof, int nextKeywordStart, int contentStart) {
    int endPoint = (nextKeywordStart == -1 || (p == eof)) ? p : nextKeywordStart;
    return substring(data, contentStart, endPoint);
  }

  private String[] nameAndUnindentedDescription(int startCol, String text) {
    String[] lines = text.split("\n");
    String name = lines.length > 0 ? lines[0].trim() : "";
    StringBuffer description = new StringBuffer();
    for(int i = 1; i < lines.length; i++) {
      description.append(lines[i]);
      description.append("\n");
    }
    return new String[]{name, unindent(startCol+2, description.toString()).replaceAll("\\s+$", "")};
  }

  private String unindent(int startCol, String text) {
    return Pattern.compile("^[\t ]{0," + startCol + "}", Pattern.MULTILINE).matcher(text).replaceAll("");
  }

  private String currentLineContent(byte[] data, int lastNewline) {
    return substring(data, lastNewline, data.length).trim();
  }

  private String substring(byte[] data, int start, int end) {
    try {
      return new String(data, start, end-start, "utf-8");
    } catch(java.io.UnsupportedEncodingException e) {
      throw new RuntimeException("Internal error", e);
    }
  }
}
