diff --git a/.editorconfig b/.editorconfig
index 915ad66..12032e6 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -9,8 +9,8 @@
 
 [*.{c,h}]
 trim_trailing_whitespace = true
-indent_style = tab
-indent_size = 8
+indent_style = space
+indent_size = 2
 
 [Makefile]
 trim_trailing_whitespace = true
diff --git a/Makefile b/Makefile
index 6ff8b88..cc7d9b2 100644
--- a/Makefile
+++ b/Makefile
@@ -20,7 +20,7 @@
 INSTALL_PREFIX?=/usr/local
 CLANG_CHECK?=clang-check
 
-.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug ubsan asan mingw archive bench astyle update-spec afl clang-check
+.PHONY: all cmake_build spec leakcheck clean fuzztest dingus upload test update-site upload-site debug ubsan asan mingw archive bench format update-spec afl clang-check
 
 all: cmake_build man/man3/cmark.3
 
@@ -115,6 +115,7 @@
 	esac
 	re2c --case-insensitive -b -i --no-generation-date -8 \
 		--encoding-policy substitute -o $@ $<
+	clang-format -style llvm -i $@
 
 # We include entities.inc in the repository, so normally this
 # doesn't need to be regenerated:
@@ -167,9 +168,8 @@
 		  done \
 	} 2>&1  | grep 'real' | awk '{print $$2}' | python3 'bench/stats.py'
 
-astyle:
-	astyle --style=linux -t -p -r  'src/*.c' --exclude=scanners.c
-	astyle --style=linux -t -p -r  'src/*.h' --exclude=html_unescape.h
+format:
+	clang-format -style llvm -i src/*.c src/*.h
 
 operf: $(CMARK)
 	operf $< < $(BENCHINP) > /dev/null
diff --git a/man/man3/cmark.3 b/man/man3/cmark.3
index 1359fcc..4c539e8 100644
--- a/man/man3/cmark.3
+++ b/man/man3/cmark.3
@@ -1,4 +1,4 @@
-.TH cmark 3 "July 13, 2015" "LOCAL" "Library Functions Manual"
+.TH cmark 3 "July 27, 2015" "LOCAL" "Library Functions Manual"
 .SH
 NAME
 .PP
@@ -24,7 +24,7 @@
 Creating and Destroying Nodes
 
 .PP
-\fIcmark_node*\f[] \fBcmark_node_new\f[](\fIcmark_node_type type\f[])
+\fIcmark_node *\f[] \fBcmark_node_new\f[](\fIcmark_node_type type\f[])
 
 .PP
 Creates a new node of type \f[I]type\f[]. Note that the node may have
@@ -41,34 +41,34 @@
 Tree Traversal
 
 .PP
-\fIcmark_node*\f[] \fBcmark_node_next\f[](\fIcmark_node *node\f[])
+\fIcmark_node *\f[] \fBcmark_node_next\f[](\fIcmark_node *node\f[])
 
 .PP
 Returns the next node in the sequence after \f[I]node\f[], or NULL if
 there is none.
 
 .PP
-\fIcmark_node*\f[] \fBcmark_node_previous\f[](\fIcmark_node *node\f[])
+\fIcmark_node *\f[] \fBcmark_node_previous\f[](\fIcmark_node *node\f[])
 
 .PP
 Returns the previous node in the sequence after \f[I]node\f[], or NULL
 if there is none.
 
 .PP
-\fIcmark_node*\f[] \fBcmark_node_parent\f[](\fIcmark_node *node\f[])
+\fIcmark_node *\f[] \fBcmark_node_parent\f[](\fIcmark_node *node\f[])
 
 .PP
 Returns the parent of \f[I]node\f[], or NULL if there is none.
 
 .PP
-\fIcmark_node*\f[] \fBcmark_node_first_child\f[](\fIcmark_node *node\f[])
+\fIcmark_node *\f[] \fBcmark_node_first_child\f[](\fIcmark_node *node\f[])
 
 .PP
 Returns the first child of \f[I]node\f[], or NULL if \f[I]node\f[] has
 no children.
 
 .PP
-\fIcmark_node*\f[] \fBcmark_node_last_child\f[](\fIcmark_node *node\f[])
+\fIcmark_node *\f[] \fBcmark_node_last_child\f[](\fIcmark_node *node\f[])
 
 .PP
 Returns the last child of \f[I]node\f[], or NULL if \f[I]node\f[] has no
@@ -130,7 +130,7 @@
 \f[C]ENTER\f[] event for leaf nodes.
 
 .PP
-\fIcmark_iter*\f[] \fBcmark_iter_new\f[](\fIcmark_node *root\f[])
+\fIcmark_iter *\f[] \fBcmark_iter_new\f[](\fIcmark_node *root\f[])
 
 .PP
 Creates a new iterator starting at \f[I]root\f[]. The current node and
@@ -152,7 +152,7 @@
 \f[C]CMARK_EVENT_DONE\f[]).
 
 .PP
-\fIcmark_node*\f[] \fBcmark_iter_get_node\f[](\fIcmark_iter *iter\f[])
+\fIcmark_node *\f[] \fBcmark_iter_get_node\f[](\fIcmark_iter *iter\f[])
 
 .PP
 Returns the current node.
@@ -164,7 +164,7 @@
 Returns the current event type.
 
 .PP
-\fIcmark_node*\f[] \fBcmark_iter_get_root\f[](\fIcmark_iter *iter\f[])
+\fIcmark_node *\f[] \fBcmark_iter_get_root\f[](\fIcmark_iter *iter\f[])
 
 .PP
 Returns the root node.
@@ -181,7 +181,7 @@
 Accessors
 
 .PP
-\fIvoid*\f[] \fBcmark_node_get_user_data\f[](\fIcmark_node *node\f[])
+\fIvoid *\f[] \fBcmark_node_get_user_data\f[](\fIcmark_node *node\f[])
 
 .PP
 Returns the user data of \f[I]node\f[].
@@ -200,14 +200,14 @@
 Returns the type of \f[I]node\f[], or \f[C]CMARK_NODE_NONE\f[] on error.
 
 .PP
-\fIconst char*\f[] \fBcmark_node_get_type_string\f[](\fIcmark_node *node\f[])
+\fIconst char *\f[] \fBcmark_node_get_type_string\f[](\fIcmark_node *node\f[])
 
 .PP
 Like \f[I]cmark_node_get_type\f[], but returns a string representation
 of the type, or \f[C]"<unknown>"\f[].
 
 .PP
-\fIconst char*\f[] \fBcmark_node_get_literal\f[](\fIcmark_node *node\f[])
+\fIconst char *\f[] \fBcmark_node_get_literal\f[](\fIcmark_node *node\f[])
 
 .PP
 Returns the string contents of \f[I]node\f[], or NULL if none.
@@ -288,7 +288,7 @@
 Sets the "tightness" of a list. Returns 1 on success, 0 on failure.
 
 .PP
-\fIconst char*\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[])
+\fIconst char *\f[] \fBcmark_node_get_fence_info\f[](\fIcmark_node *node\f[])
 
 .PP
 Returns the info string from a fenced code block, or NULL if none.
@@ -301,7 +301,7 @@
 0 on failure.
 
 .PP
-\fIconst char*\f[] \fBcmark_node_get_url\f[](\fIcmark_node *node\f[])
+\fIconst char *\f[] \fBcmark_node_get_url\f[](\fIcmark_node *node\f[])
 
 .PP
 Gets the URL of a link or image \f[I]node\f[], or NULL if none.
@@ -314,7 +314,7 @@
 on failure.
 
 .PP
-\fIconst char*\f[] \fBcmark_node_get_title\f[](\fIcmark_node *node\f[])
+\fIconst char *\f[] \fBcmark_node_get_title\f[](\fIcmark_node *node\f[])
 
 .PP
 Gets the title of a link or image \f[I]node\f[], or NULL if none.
diff --git a/src/bench.h b/src/bench.h
index bbea2c6..744dea3 100644
--- a/src/bench.h
+++ b/src/bench.h
@@ -9,15 +9,15 @@
 float _cmark_end_time;
 float _cmark_save_time;
 
-#define start_timer() \
-	_cmark_save_time = _cmark_start_time; \
-	_cmark_start_time = (float)clock()/CLOCKS_PER_SEC
+#define start_timer()                                                          \
+  _cmark_save_time = _cmark_start_time;                                        \
+  _cmark_start_time = (float)clock() / CLOCKS_PER_SEC
 
-#define end_timer(M) \
-	_cmark_end_time = (float)clock()/CLOCKS_PER_SEC; \
-	fprintf(stderr, "[TIME] (%s:%d) %4.f ns " M "\n", __FILE__, \
-		__LINE__, (_cmark_end_time - _cmark_start_time) * 1000000); \
-	_cmark_start_time = _cmark_save_time;
+#define end_timer(M)                                                           \
+  _cmark_end_time = (float)clock() / CLOCKS_PER_SEC;                           \
+  fprintf(stderr, "[TIME] (%s:%d) %4.f ns " M "\n", __FILE__, __LINE__,        \
+          (_cmark_end_time - _cmark_start_time) * 1000000);                    \
+  _cmark_start_time = _cmark_save_time;
 
 #else
 #define start_timer()
diff --git a/src/blocks.c b/src/blocks.c
index 8828a11..c466fc2 100644
--- a/src/blocks.c
+++ b/src/blocks.c
@@ -19,1036 +19,998 @@
 
 #define peek_at(i, n) (i)->data[n]
 
-static inline bool
-S_is_line_end_char(char c)
-{
-	return (c == '\n' || c == '\r');
+static inline bool S_is_line_end_char(char c) {
+  return (c == '\n' || c == '\r');
 }
 
-static void
-S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len,
-              bool eof);
+static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer,
+                          size_t len, bool eof);
 
-static void
-S_process_line(cmark_parser *parser, const unsigned char *buffer,
-               bufsize_t bytes);
+static void S_process_line(cmark_parser *parser, const unsigned char *buffer,
+                           bufsize_t bytes);
 
-static cmark_node* make_block(cmark_node_type tag, int start_line, int start_column)
-{
-	cmark_node* e;
+static cmark_node *make_block(cmark_node_type tag, int start_line,
+                              int start_column) {
+  cmark_node *e;
 
-	e = (cmark_node *)calloc(1, sizeof(*e));
-	if(e != NULL) {
-		e->type = tag;
-		e->open = true;
-		e->start_line = start_line;
-		e->start_column = start_column;
-		e->end_line = start_line;
-		cmark_strbuf_init(&e->string_content, 32);
-	}
+  e = (cmark_node *)calloc(1, sizeof(*e));
+  if (e != NULL) {
+    e->type = tag;
+    e->open = true;
+    e->start_line = start_line;
+    e->start_column = start_column;
+    e->end_line = start_line;
+    cmark_strbuf_init(&e->string_content, 32);
+  }
 
-	return e;
+  return e;
 }
 
 // Create a root document node.
-static cmark_node* make_document()
-{
-	cmark_node *e = make_block(NODE_DOCUMENT, 1, 1);
-	return e;
+static cmark_node *make_document() {
+  cmark_node *e = make_block(NODE_DOCUMENT, 1, 1);
+  return e;
 }
 
-cmark_parser *cmark_parser_new(int options)
-{
-	cmark_parser *parser = (cmark_parser*)malloc(sizeof(cmark_parser));
-	cmark_node *document = make_document();
-	cmark_strbuf *line = (cmark_strbuf*)malloc(sizeof(cmark_strbuf));
-	cmark_strbuf *buf  = (cmark_strbuf*)malloc(sizeof(cmark_strbuf));
-	cmark_strbuf_init(line, 256);
-	cmark_strbuf_init(buf, 0);
+cmark_parser *cmark_parser_new(int options) {
+  cmark_parser *parser = (cmark_parser *)malloc(sizeof(cmark_parser));
+  cmark_node *document = make_document();
+  cmark_strbuf *line = (cmark_strbuf *)malloc(sizeof(cmark_strbuf));
+  cmark_strbuf *buf = (cmark_strbuf *)malloc(sizeof(cmark_strbuf));
+  cmark_strbuf_init(line, 256);
+  cmark_strbuf_init(buf, 0);
 
-	parser->refmap = cmark_reference_map_new();
-	parser->root = document;
-	parser->current = document;
-	parser->line_number = 0;
-	parser->offset = 0;
-	parser->column = 0;
-	parser->first_nonspace = 0;
-	parser->first_nonspace_column = 0;
-	parser->indent = 0;
-	parser->blank = false;
-	parser->curline = line;
-	parser->last_line_length = 0;
-	parser->linebuf = buf;
-	parser->options = options;
+  parser->refmap = cmark_reference_map_new();
+  parser->root = document;
+  parser->current = document;
+  parser->line_number = 0;
+  parser->offset = 0;
+  parser->column = 0;
+  parser->first_nonspace = 0;
+  parser->first_nonspace_column = 0;
+  parser->indent = 0;
+  parser->blank = false;
+  parser->curline = line;
+  parser->last_line_length = 0;
+  parser->linebuf = buf;
+  parser->options = options;
 
-	return parser;
+  return parser;
 }
 
-void cmark_parser_free(cmark_parser *parser)
-{
-	cmark_strbuf_free(parser->curline);
-	free(parser->curline);
-	cmark_strbuf_free(parser->linebuf);
-	free(parser->linebuf);
-	cmark_reference_map_free(parser->refmap);
-	free(parser);
+void cmark_parser_free(cmark_parser *parser) {
+  cmark_strbuf_free(parser->curline);
+  free(parser->curline);
+  cmark_strbuf_free(parser->linebuf);
+  free(parser->linebuf);
+  cmark_reference_map_free(parser->refmap);
+  free(parser);
 }
 
-static cmark_node*
-finalize(cmark_parser *parser, cmark_node* b);
+static cmark_node *finalize(cmark_parser *parser, cmark_node *b);
 
 // Returns true if line has only space characters, else false.
-static bool is_blank(cmark_strbuf *s, bufsize_t offset)
-{
-	while (offset < s->size) {
-		switch (s->ptr[offset]) {
-		case '\r':
-		case '\n':
-			return true;
-		case ' ':
-			offset++;
-			break;
-		case '\t':
-			offset++;
-			break;
-		default:
-			return false;
-		}
-	}
+static bool is_blank(cmark_strbuf *s, bufsize_t offset) {
+  while (offset < s->size) {
+    switch (s->ptr[offset]) {
+    case '\r':
+    case '\n':
+      return true;
+    case ' ':
+      offset++;
+      break;
+    case '\t':
+      offset++;
+      break;
+    default:
+      return false;
+    }
+  }
 
-	return true;
+  return true;
 }
 
-static inline bool can_contain(cmark_node_type parent_type, cmark_node_type child_type)
-{
-	return ( parent_type == NODE_DOCUMENT ||
-	         parent_type == NODE_BLOCK_QUOTE ||
-	         parent_type == NODE_ITEM ||
-	         (parent_type == NODE_LIST && child_type == NODE_ITEM) );
+static inline bool can_contain(cmark_node_type parent_type,
+                               cmark_node_type child_type) {
+  return (parent_type == NODE_DOCUMENT || parent_type == NODE_BLOCK_QUOTE ||
+          parent_type == NODE_ITEM ||
+          (parent_type == NODE_LIST && child_type == NODE_ITEM));
 }
 
-static inline bool accepts_lines(cmark_node_type block_type)
-{
-	return (block_type == NODE_PARAGRAPH ||
-	        block_type == NODE_HEADER ||
-	        block_type == NODE_CODE_BLOCK);
+static inline bool accepts_lines(cmark_node_type block_type) {
+  return (block_type == NODE_PARAGRAPH || block_type == NODE_HEADER ||
+          block_type == NODE_CODE_BLOCK);
 }
 
-static void add_line(cmark_node* node, cmark_chunk *ch, bufsize_t offset)
-{
-	assert(node->open);
-	cmark_strbuf_put(&node->string_content, ch->data + offset, ch->len - offset);
+static void add_line(cmark_node *node, cmark_chunk *ch, bufsize_t offset) {
+  assert(node->open);
+  cmark_strbuf_put(&node->string_content, ch->data + offset, ch->len - offset);
 }
 
-static void remove_trailing_blank_lines(cmark_strbuf *ln)
-{
-	bufsize_t i;
-	unsigned char c;
+static void remove_trailing_blank_lines(cmark_strbuf *ln) {
+  bufsize_t i;
+  unsigned char c;
 
-	for (i = ln->size - 1; i >= 0; --i) {
-		c = ln->ptr[i];
+  for (i = ln->size - 1; i >= 0; --i) {
+    c = ln->ptr[i];
 
-		if (c != ' ' && c != '\t' && !S_is_line_end_char(c))
-			break;
-	}
+    if (c != ' ' && c != '\t' && !S_is_line_end_char(c))
+      break;
+  }
 
-	if (i < 0) {
-		cmark_strbuf_clear(ln);
-		return;
-	}
+  if (i < 0) {
+    cmark_strbuf_clear(ln);
+    return;
+  }
 
+  for (; i < ln->size; ++i) {
+    c = ln->ptr[i];
 
-	for(; i < ln->size; ++i) {
-		c = ln->ptr[i];
+    if (!S_is_line_end_char(c))
+      continue;
 
-		if (!S_is_line_end_char(c))
-			continue;
-
-		cmark_strbuf_truncate(ln, i);
-		break;
-	}
+    cmark_strbuf_truncate(ln, i);
+    break;
+  }
 }
 
 // Check to see if a node ends with a blank line, descending
 // if needed into lists and sublists.
-static bool ends_with_blank_line(cmark_node* node)
-{
-	cmark_node *cur = node;
-	while (cur != NULL) {
-		if (cur->last_line_blank) {
-			return true;
-		}
-		if (cur->type == NODE_LIST || cur->type == NODE_ITEM) {
-			cur = cur->last_child;
-		} else {
-			cur = NULL;
-		}
-	}
-	return false;
+static bool ends_with_blank_line(cmark_node *node) {
+  cmark_node *cur = node;
+  while (cur != NULL) {
+    if (cur->last_line_blank) {
+      return true;
+    }
+    if (cur->type == NODE_LIST || cur->type == NODE_ITEM) {
+      cur = cur->last_child;
+    } else {
+      cur = NULL;
+    }
+  }
+  return false;
 }
 
 // Break out of all containing lists
-static int break_out_of_lists(cmark_parser *parser, cmark_node ** bptr)
-{
-	cmark_node *container = *bptr;
-	cmark_node *b = parser->root;
-	// find first containing NODE_LIST:
-	while (b && b->type != NODE_LIST) {
-		b = b->last_child;
-	}
-	if (b) {
-		while (container && container != b) {
-			container = finalize(parser, container);
-		}
-		finalize(parser, b);
-		*bptr = b->parent;
-	}
-	return 0;
+static int break_out_of_lists(cmark_parser *parser, cmark_node **bptr) {
+  cmark_node *container = *bptr;
+  cmark_node *b = parser->root;
+  // find first containing NODE_LIST:
+  while (b && b->type != NODE_LIST) {
+    b = b->last_child;
+  }
+  if (b) {
+    while (container && container != b) {
+      container = finalize(parser, container);
+    }
+    finalize(parser, b);
+    *bptr = b->parent;
+  }
+  return 0;
 }
 
+static cmark_node *finalize(cmark_parser *parser, cmark_node *b) {
+  bufsize_t pos;
+  cmark_node *item;
+  cmark_node *subitem;
+  cmark_node *parent;
 
-static cmark_node*
-finalize(cmark_parser *parser, cmark_node* b)
-{
-	bufsize_t pos;
-	cmark_node* item;
-	cmark_node* subitem;
-	cmark_node* parent;
+  parent = b->parent;
 
-	parent = b->parent;
+  assert(b->open); // shouldn't call finalize on closed blocks
+  b->open = false;
 
-	assert(b->open);  // shouldn't call finalize on closed blocks
-	b->open = false;
+  if (parser->curline->size == 0) {
+    // end of input - line number has not been incremented
+    b->end_line = parser->line_number;
+    b->end_column = parser->last_line_length;
+  } else if (b->type == NODE_DOCUMENT ||
+             (b->type == NODE_CODE_BLOCK && b->as.code.fenced) ||
+             (b->type == NODE_HEADER && b->as.header.setext)) {
+    b->end_line = parser->line_number;
+    b->end_column = parser->curline->size;
+    if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\n')
+      b->end_column -= 1;
+    if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\r')
+      b->end_column -= 1;
+  } else {
+    b->end_line = parser->line_number - 1;
+    b->end_column = parser->last_line_length;
+  }
 
-	if (parser->curline->size == 0) {
-		// end of input - line number has not been incremented
-		b->end_line = parser->line_number;
-		b->end_column = parser->last_line_length;
-	} else if (b->type == NODE_DOCUMENT ||
-	           (b->type == NODE_CODE_BLOCK && b->as.code.fenced) ||
-	           (b->type == NODE_HEADER && b->as.header.setext)) {
-		b->end_line = parser->line_number;
-		b->end_column = parser->curline->size;
-		if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\n')
-			b->end_column -= 1;
-		if (b->end_column && parser->curline->ptr[b->end_column - 1] == '\r')
-			b->end_column -= 1;
-	} else {
-		b->end_line = parser->line_number - 1;
-		b->end_column = parser->last_line_length;
-	}
+  switch (b->type) {
+  case NODE_PARAGRAPH:
+    while (cmark_strbuf_at(&b->string_content, 0) == '[' &&
+           (pos = cmark_parse_reference_inline(&b->string_content,
+                                               parser->refmap))) {
 
-	switch (b->type) {
-	case NODE_PARAGRAPH:
-		while (cmark_strbuf_at(&b->string_content, 0) == '[' &&
-		       (pos = cmark_parse_reference_inline(&b->string_content, parser->refmap))) {
+      cmark_strbuf_drop(&b->string_content, pos);
+    }
+    if (is_blank(&b->string_content, 0)) {
+      // remove blank node (former reference def)
+      cmark_node_free(b);
+    }
+    break;
 
-			cmark_strbuf_drop(&b->string_content, pos);
-		}
-		if (is_blank(&b->string_content, 0)) {
-			// remove blank node (former reference def)
-			cmark_node_free(b);
-		}
-		break;
+  case NODE_CODE_BLOCK:
+    if (!b->as.code.fenced) { // indented code
+      remove_trailing_blank_lines(&b->string_content);
+      cmark_strbuf_putc(&b->string_content, '\n');
+    } else {
 
-	case NODE_CODE_BLOCK:
-		if (!b->as.code.fenced) { // indented code
-			remove_trailing_blank_lines(&b->string_content);
-			cmark_strbuf_putc(&b->string_content, '\n');
-		} else {
+      // first line of contents becomes info
+      for (pos = 0; pos < b->string_content.size; ++pos) {
+        if (S_is_line_end_char(b->string_content.ptr[pos]))
+          break;
+      }
+      assert(pos < b->string_content.size);
 
-			// first line of contents becomes info
-			for (pos = 0; pos < b->string_content.size; ++pos) {
-				if (S_is_line_end_char(b->string_content.ptr[pos]))
-					break;
-			}
-			assert(pos < b->string_content.size);
+      cmark_strbuf tmp = GH_BUF_INIT;
+      houdini_unescape_html_f(&tmp, b->string_content.ptr, pos);
+      cmark_strbuf_trim(&tmp);
+      cmark_strbuf_unescape(&tmp);
+      b->as.code.info = cmark_chunk_buf_detach(&tmp);
 
-			cmark_strbuf tmp = GH_BUF_INIT;
-			houdini_unescape_html_f(
-			    &tmp,
-			    b->string_content.ptr,
-			    pos
-			);
-			cmark_strbuf_trim(&tmp);
-			cmark_strbuf_unescape(&tmp);
-			b->as.code.info = cmark_chunk_buf_detach(&tmp);
+      if (b->string_content.ptr[pos] == '\r')
+        pos += 1;
+      if (b->string_content.ptr[pos] == '\n')
+        pos += 1;
+      cmark_strbuf_drop(&b->string_content, pos);
+    }
+    b->as.code.literal = cmark_chunk_buf_detach(&b->string_content);
+    break;
 
-			if (b->string_content.ptr[pos] == '\r')
-				pos += 1;
-			if (b->string_content.ptr[pos] == '\n')
-				pos += 1;
-			cmark_strbuf_drop(&b->string_content, pos);
-		}
-		b->as.code.literal = cmark_chunk_buf_detach(&b->string_content);
-		break;
+  case NODE_HTML:
+    b->as.literal = cmark_chunk_buf_detach(&b->string_content);
+    break;
 
-	case NODE_HTML:
-		b->as.literal = cmark_chunk_buf_detach(&b->string_content);
-		break;
+  case NODE_LIST:            // determine tight/loose status
+    b->as.list.tight = true; // tight by default
+    item = b->first_child;
 
-	case NODE_LIST: // determine tight/loose status
-		b->as.list.tight = true; // tight by default
-		item = b->first_child;
+    while (item) {
+      // check for non-final non-empty list item ending with blank line:
+      if (item->last_line_blank && item->next) {
+        b->as.list.tight = false;
+        break;
+      }
+      // recurse into children of list item, to see if there are
+      // spaces between them:
+      subitem = item->first_child;
+      while (subitem) {
+        if (ends_with_blank_line(subitem) && (item->next || subitem->next)) {
+          b->as.list.tight = false;
+          break;
+        }
+        subitem = subitem->next;
+      }
+      if (!(b->as.list.tight)) {
+        break;
+      }
+      item = item->next;
+    }
 
-		while (item) {
-			// check for non-final non-empty list item ending with blank line:
-			if (item->last_line_blank && item->next) {
-				b->as.list.tight = false;
-				break;
-			}
-			// recurse into children of list item, to see if there are
-			// spaces between them:
-			subitem = item->first_child;
-			while (subitem) {
-				if (ends_with_blank_line(subitem) &&
-				    (item->next || subitem->next)) {
-					b->as.list.tight = false;
-					break;
-				}
-				subitem = subitem->next;
-			}
-			if (!(b->as.list.tight)) {
-				break;
-			}
-			item = item->next;
-		}
+    break;
 
-		break;
-
-	default:
-		break;
-	}
-	return parent;
+  default:
+    break;
+  }
+  return parent;
 }
 
 // Add a node as child of another.  Return pointer to child.
-static cmark_node* add_child(cmark_parser *parser, cmark_node* parent,
-                             cmark_node_type block_type, int start_column)
-{
-	assert(parent);
+static cmark_node *add_child(cmark_parser *parser, cmark_node *parent,
+                             cmark_node_type block_type, int start_column) {
+  assert(parent);
 
-	// if 'parent' isn't the kind of node that can accept this child,
-	// then back up til we hit a node that can.
-	while (!can_contain(parent->type, block_type)) {
-		parent = finalize(parser, parent);
-	}
+  // if 'parent' isn't the kind of node that can accept this child,
+  // then back up til we hit a node that can.
+  while (!can_contain(parent->type, block_type)) {
+    parent = finalize(parser, parent);
+  }
 
-	cmark_node* child = make_block(block_type, parser->line_number, start_column);
-	child->parent = parent;
+  cmark_node *child = make_block(block_type, parser->line_number, start_column);
+  child->parent = parent;
 
-	if (parent->last_child) {
-		parent->last_child->next = child;
-		child->prev = parent->last_child;
-	} else {
-		parent->first_child = child;
-		child->prev = NULL;
-	}
-	parent->last_child = child;
-	return child;
+  if (parent->last_child) {
+    parent->last_child->next = child;
+    child->prev = parent->last_child;
+  } else {
+    parent->first_child = child;
+    child->prev = NULL;
+  }
+  parent->last_child = child;
+  return child;
 }
 
-
 // Walk through node and all children, recursively, parsing
 // string content into inline content where appropriate.
-static void process_inlines(cmark_node* root, cmark_reference_map *refmap, int options)
-{
-	cmark_iter *iter = cmark_iter_new(root);
-	cmark_node *cur;
-	cmark_event_type ev_type;
+static void process_inlines(cmark_node *root, cmark_reference_map *refmap,
+                            int options) {
+  cmark_iter *iter = cmark_iter_new(root);
+  cmark_node *cur;
+  cmark_event_type ev_type;
 
-	while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
-		cur = cmark_iter_get_node(iter);
-		if (ev_type == CMARK_EVENT_ENTER) {
-			if (cur->type == NODE_PARAGRAPH ||
-			    cur->type == NODE_HEADER) {
-				cmark_parse_inlines(cur, refmap, options);
-			}
-		}
-	}
+  while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
+    cur = cmark_iter_get_node(iter);
+    if (ev_type == CMARK_EVENT_ENTER) {
+      if (cur->type == NODE_PARAGRAPH || cur->type == NODE_HEADER) {
+        cmark_parse_inlines(cur, refmap, options);
+      }
+    }
+  }
 
-	cmark_iter_free(iter);
+  cmark_iter_free(iter);
 }
 
 // Attempts to parse a list item marker (bullet or enumerated).
 // On success, returns length of the marker, and populates
 // data with the details.  On failure, returns 0.
-static bufsize_t parse_list_marker(cmark_chunk *input, bufsize_t pos, cmark_list **dataptr)
-{
-	unsigned char c;
-	bufsize_t startpos;
-	cmark_list *data;
+static bufsize_t parse_list_marker(cmark_chunk *input, bufsize_t pos,
+                                   cmark_list **dataptr) {
+  unsigned char c;
+  bufsize_t startpos;
+  cmark_list *data;
 
-	startpos = pos;
-	c = peek_at(input, pos);
+  startpos = pos;
+  c = peek_at(input, pos);
 
-	if (c == '*' || c == '-' || c == '+') {
-		pos++;
-		if (!cmark_isspace(peek_at(input, pos))) {
-			return 0;
-		}
-		data = (cmark_list *)calloc(1, sizeof(*data));
-		if(data == NULL) {
-			return 0;
-		} else {
-			data->marker_offset = 0; // will be adjusted later
-			data->list_type = CMARK_BULLET_LIST;
-			data->bullet_char = c;
-			data->start = 1;
-			data->delimiter = CMARK_PERIOD_DELIM;
-			data->tight = false;
-		}
-	} else if (cmark_isdigit(c)) {
-		int start = 0;
-		int digits = 0;
+  if (c == '*' || c == '-' || c == '+') {
+    pos++;
+    if (!cmark_isspace(peek_at(input, pos))) {
+      return 0;
+    }
+    data = (cmark_list *)calloc(1, sizeof(*data));
+    if (data == NULL) {
+      return 0;
+    } else {
+      data->marker_offset = 0; // will be adjusted later
+      data->list_type = CMARK_BULLET_LIST;
+      data->bullet_char = c;
+      data->start = 1;
+      data->delimiter = CMARK_PERIOD_DELIM;
+      data->tight = false;
+    }
+  } else if (cmark_isdigit(c)) {
+    int start = 0;
+    int digits = 0;
 
-		do {
-			start = (10 * start) + (peek_at(input, pos) - '0');
-			pos++;
-			digits++;
-			// We limit to 9 digits to avoid overflow,
-			// assuming max int is 2^31 - 1
-			// This also seems to be the limit for 'start' in some browsers.
-		} while (digits < 9 && cmark_isdigit(peek_at(input, pos)));
+    do {
+      start = (10 * start) + (peek_at(input, pos) - '0');
+      pos++;
+      digits++;
+      // We limit to 9 digits to avoid overflow,
+      // assuming max int is 2^31 - 1
+      // This also seems to be the limit for 'start' in some browsers.
+    } while (digits < 9 && cmark_isdigit(peek_at(input, pos)));
 
-		c = peek_at(input, pos);
-		if (c == '.' || c == ')') {
-			pos++;
-			if (!cmark_isspace(peek_at(input, pos))) {
-				return 0;
-			}
-			data = (cmark_list *)calloc(1, sizeof(*data));
-			if(data == NULL) {
-				return 0;
-			} else {
-				data->marker_offset = 0; // will be adjusted later
-				data->list_type = CMARK_ORDERED_LIST;
-				data->bullet_char = 0;
-				data->start = start;
-				data->delimiter = (c == '.' ? CMARK_PERIOD_DELIM : CMARK_PAREN_DELIM);
-				data->tight = false;
-			}
-		} else {
-			return 0;
-		}
+    c = peek_at(input, pos);
+    if (c == '.' || c == ')') {
+      pos++;
+      if (!cmark_isspace(peek_at(input, pos))) {
+        return 0;
+      }
+      data = (cmark_list *)calloc(1, sizeof(*data));
+      if (data == NULL) {
+        return 0;
+      } else {
+        data->marker_offset = 0; // will be adjusted later
+        data->list_type = CMARK_ORDERED_LIST;
+        data->bullet_char = 0;
+        data->start = start;
+        data->delimiter = (c == '.' ? CMARK_PERIOD_DELIM : CMARK_PAREN_DELIM);
+        data->tight = false;
+      }
+    } else {
+      return 0;
+    }
 
-	} else {
-		return 0;
-	}
+  } else {
+    return 0;
+  }
 
-	*dataptr = data;
-	return (pos - startpos);
+  *dataptr = data;
+  return (pos - startpos);
 }
 
 // Return 1 if list item belongs in list, else 0.
-static int lists_match(cmark_list *list_data, cmark_list *item_data)
-{
-	return (list_data->list_type == item_data->list_type &&
-	        list_data->delimiter == item_data->delimiter &&
-	        // list_data->marker_offset == item_data.marker_offset &&
-	        list_data->bullet_char == item_data->bullet_char);
+static int lists_match(cmark_list *list_data, cmark_list *item_data) {
+  return (list_data->list_type == item_data->list_type &&
+          list_data->delimiter == item_data->delimiter &&
+          // list_data->marker_offset == item_data.marker_offset &&
+          list_data->bullet_char == item_data->bullet_char);
 }
 
-static cmark_node *finalize_document(cmark_parser *parser)
-{
-	while (parser->current != parser->root) {
-		parser->current = finalize(parser, parser->current);
-	}
+static cmark_node *finalize_document(cmark_parser *parser) {
+  while (parser->current != parser->root) {
+    parser->current = finalize(parser, parser->current);
+  }
 
-	finalize(parser, parser->root);
-	process_inlines(parser->root, parser->refmap, parser->options);
+  finalize(parser, parser->root);
+  process_inlines(parser->root, parser->refmap, parser->options);
 
-	return parser->root;
+  return parser->root;
 }
 
-cmark_node *cmark_parse_file(FILE *f, int options)
-{
-	unsigned char buffer[4096];
-	cmark_parser *parser = cmark_parser_new(options);
-	size_t bytes;
-	cmark_node *document;
+cmark_node *cmark_parse_file(FILE *f, int options) {
+  unsigned char buffer[4096];
+  cmark_parser *parser = cmark_parser_new(options);
+  size_t bytes;
+  cmark_node *document;
 
-	while ((bytes = fread(buffer, 1, sizeof(buffer), f)) > 0) {
-		bool eof = bytes < sizeof(buffer);
-		S_parser_feed(parser, buffer, bytes, eof);
-		if (eof) {
-			break;
-		}
-	}
+  while ((bytes = fread(buffer, 1, sizeof(buffer), f)) > 0) {
+    bool eof = bytes < sizeof(buffer);
+    S_parser_feed(parser, buffer, bytes, eof);
+    if (eof) {
+      break;
+    }
+  }
 
-	document = cmark_parser_finish(parser);
-	cmark_parser_free(parser);
-	return document;
+  document = cmark_parser_finish(parser);
+  cmark_parser_free(parser);
+  return document;
 }
 
-cmark_node *cmark_parse_document(const char *buffer, size_t len, int options)
-{
-	cmark_parser *parser = cmark_parser_new(options);
-	cmark_node *document;
+cmark_node *cmark_parse_document(const char *buffer, size_t len, int options) {
+  cmark_parser *parser = cmark_parser_new(options);
+  cmark_node *document;
 
-	S_parser_feed(parser, (const unsigned char *)buffer, len, true);
+  S_parser_feed(parser, (const unsigned char *)buffer, len, true);
 
-	document = cmark_parser_finish(parser);
-	cmark_parser_free(parser);
-	return document;
+  document = cmark_parser_finish(parser);
+  cmark_parser_free(parser);
+  return document;
 }
 
-void
-cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len)
-{
-	S_parser_feed(parser, (const unsigned char *)buffer, len, false);
+void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len) {
+  S_parser_feed(parser, (const unsigned char *)buffer, len, false);
 }
 
-static void
-S_parser_feed(cmark_parser *parser, const unsigned char *buffer, size_t len,
-              bool eof)
-{
-	const unsigned char *end = buffer + len;
-	static const uint8_t repl[] = {239, 191, 189};
+static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer,
+                          size_t len, bool eof) {
+  const unsigned char *end = buffer + len;
+  static const uint8_t repl[] = {239, 191, 189};
 
-	while (buffer < end) {
-		const unsigned char *eol;
-		bufsize_t chunk_len;
-		bool process = false;
-		for (eol = buffer; eol < end; ++eol) {
-			if (S_is_line_end_char(*eol)) {
-				if (eol < end && *eol == '\r')
-					eol++;
-				if (eol < end && *eol == '\n')
-					eol++;
-				process = true;
-				break;
-			}
-			if (*eol == '\0' && eol < end) {
-				break;
-			}
-		}
-		if (eol >= end && eof) {
-			process = true;
-		}
+  while (buffer < end) {
+    const unsigned char *eol;
+    bufsize_t chunk_len;
+    bool process = false;
+    for (eol = buffer; eol < end; ++eol) {
+      if (S_is_line_end_char(*eol)) {
+        if (eol < end && *eol == '\r')
+          eol++;
+        if (eol < end && *eol == '\n')
+          eol++;
+        process = true;
+        break;
+      }
+      if (*eol == '\0' && eol < end) {
+        break;
+      }
+    }
+    if (eol >= end && eof) {
+      process = true;
+    }
 
-		chunk_len = cmark_strbuf_check_bufsize(eol - buffer);
-		if (process) {
-			if (parser->linebuf->size > 0) {
-				cmark_strbuf_put(parser->linebuf, buffer, chunk_len);
-				S_process_line(parser, parser->linebuf->ptr,
-				               parser->linebuf->size);
-				cmark_strbuf_clear(parser->linebuf);
-			} else {
-				S_process_line(parser, buffer, chunk_len);
-			}
-		} else {
-			if (eol < end && *eol == '\0') {
-				// omit NULL byte
-				cmark_strbuf_put(parser->linebuf, buffer, chunk_len);
-				// add replacement character
-				cmark_strbuf_put(parser->linebuf, repl, 3);
-				chunk_len += 1; // so we advance the buffer past NULL
-			} else {
-				cmark_strbuf_put(parser->linebuf, buffer, chunk_len);
-			}
-		}
+    chunk_len = cmark_strbuf_check_bufsize(eol - buffer);
+    if (process) {
+      if (parser->linebuf->size > 0) {
+        cmark_strbuf_put(parser->linebuf, buffer, chunk_len);
+        S_process_line(parser, parser->linebuf->ptr, parser->linebuf->size);
+        cmark_strbuf_clear(parser->linebuf);
+      } else {
+        S_process_line(parser, buffer, chunk_len);
+      }
+    } else {
+      if (eol < end && *eol == '\0') {
+        // omit NULL byte
+        cmark_strbuf_put(parser->linebuf, buffer, chunk_len);
+        // add replacement character
+        cmark_strbuf_put(parser->linebuf, repl, 3);
+        chunk_len += 1; // so we advance the buffer past NULL
+      } else {
+        cmark_strbuf_put(parser->linebuf, buffer, chunk_len);
+      }
+    }
 
-		buffer += chunk_len;
-	}
+    buffer += chunk_len;
+  }
 }
 
-static void chop_trailing_hashtags(cmark_chunk *ch)
-{
-	bufsize_t n, orig_n;
+static void chop_trailing_hashtags(cmark_chunk *ch) {
+  bufsize_t n, orig_n;
 
-	cmark_chunk_rtrim(ch);
-	orig_n = n = ch->len - 1;
+  cmark_chunk_rtrim(ch);
+  orig_n = n = ch->len - 1;
 
-	// if string ends in space followed by #s, remove these:
-	while (n >= 0 && peek_at(ch, n) == '#')
-		n--;
+  // if string ends in space followed by #s, remove these:
+  while (n >= 0 && peek_at(ch, n) == '#')
+    n--;
 
-	// Check for a space before the final #s:
-	if (n != orig_n && n >= 0 &&
-	    (peek_at(ch, n) == ' ' || peek_at(ch, n) == '\t')) {
-		ch->len = n;
-		cmark_chunk_rtrim(ch);
-	}
+  // Check for a space before the final #s:
+  if (n != orig_n && n >= 0 &&
+      (peek_at(ch, n) == ' ' || peek_at(ch, n) == '\t')) {
+    ch->len = n;
+    cmark_chunk_rtrim(ch);
+  }
 }
 
-static void
-S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input)
-{
-	char c;
-	int chars_to_tab = TAB_STOP - (parser->column % TAB_STOP);
+static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) {
+  char c;
+  int chars_to_tab = TAB_STOP - (parser->column % TAB_STOP);
 
-	parser->first_nonspace = parser->offset;
-	parser->first_nonspace_column = parser->column;
-	while ((c = peek_at(input, parser->first_nonspace))) {
-		if (c == ' ') {
-			parser->first_nonspace += 1;
-			parser->first_nonspace_column += 1;
-			chars_to_tab = chars_to_tab - 1;
-			if (chars_to_tab == 0) {
-				chars_to_tab = TAB_STOP;
-			}
-		} else if (c == '\t') {
-			parser->first_nonspace += 1;
-			parser->first_nonspace_column += chars_to_tab;
-			chars_to_tab = TAB_STOP;
-		} else {
-			break;
-		}
-	}
+  parser->first_nonspace = parser->offset;
+  parser->first_nonspace_column = parser->column;
+  while ((c = peek_at(input, parser->first_nonspace))) {
+    if (c == ' ') {
+      parser->first_nonspace += 1;
+      parser->first_nonspace_column += 1;
+      chars_to_tab = chars_to_tab - 1;
+      if (chars_to_tab == 0) {
+        chars_to_tab = TAB_STOP;
+      }
+    } else if (c == '\t') {
+      parser->first_nonspace += 1;
+      parser->first_nonspace_column += chars_to_tab;
+      chars_to_tab = TAB_STOP;
+    } else {
+      break;
+    }
+  }
 
-	parser->indent = parser->first_nonspace_column - parser->column;
-	parser->blank = S_is_line_end_char(peek_at(input, parser->first_nonspace));
+  parser->indent = parser->first_nonspace_column - parser->column;
+  parser->blank = S_is_line_end_char(peek_at(input, parser->first_nonspace));
 }
 
-static void
-S_advance_offset(cmark_parser *parser, cmark_chunk *input, bufsize_t count, bool columns)
-{
-	char c;
-	int chars_to_tab;
-	while (count > 0 && (c = peek_at(input, parser->offset))) {
-		if (c == '\t') {
-			chars_to_tab = 4 - (parser->column % TAB_STOP);
-			parser->column += chars_to_tab;
-			parser->offset += 1;
-			count -= (columns ? chars_to_tab : 1);
-		} else {
-			parser->offset += 1;
-			parser->column += 1; // assume ascii; block starts are ascii
-			count -= 1;
-		}
-	}
+static void S_advance_offset(cmark_parser *parser, cmark_chunk *input,
+                             bufsize_t count, bool columns) {
+  char c;
+  int chars_to_tab;
+  while (count > 0 && (c = peek_at(input, parser->offset))) {
+    if (c == '\t') {
+      chars_to_tab = 4 - (parser->column % TAB_STOP);
+      parser->column += chars_to_tab;
+      parser->offset += 1;
+      count -= (columns ? chars_to_tab : 1);
+    } else {
+      parser->offset += 1;
+      parser->column += 1; // assume ascii; block starts are ascii
+      count -= 1;
+    }
+  }
 }
 
+static void S_process_line(cmark_parser *parser, const unsigned char *buffer,
+                           bufsize_t bytes) {
+  cmark_node *last_matched_container;
+  bufsize_t matched = 0;
+  int lev = 0;
+  int i;
+  cmark_list *data = NULL;
+  bool all_matched = true;
+  cmark_node *container;
+  bool indented;
+  cmark_chunk input;
+  bool maybe_lazy;
 
-static void
-S_process_line(cmark_parser *parser, const unsigned char *buffer, bufsize_t bytes)
-{
-	cmark_node* last_matched_container;
-	bufsize_t matched = 0;
-	int lev = 0;
-	int i;
-	cmark_list *data = NULL;
-	bool all_matched = true;
-	cmark_node* container;
-	bool indented;
-	cmark_chunk input;
-	bool maybe_lazy;
+  if (parser->options & CMARK_OPT_VALIDATE_UTF8) {
+    utf8proc_check(parser->curline, buffer, bytes);
+  } else {
+    cmark_strbuf_put(parser->curline, buffer, bytes);
+  }
+  parser->offset = 0;
+  parser->column = 0;
+  parser->blank = false;
 
-	if (parser->options & CMARK_OPT_VALIDATE_UTF8) {
-		utf8proc_check(parser->curline, buffer, bytes);
-	} else {
-		cmark_strbuf_put(parser->curline, buffer, bytes);
-	}
-	parser->offset = 0;
-	parser->column = 0;
-	parser->blank = false;
+  input.data = parser->curline->ptr;
+  input.len = parser->curline->size;
 
-	input.data = parser->curline->ptr;
-	input.len = parser->curline->size;
+  // container starts at the document root.
+  container = parser->root;
 
-	// container starts at the document root.
-	container = parser->root;
+  parser->line_number++;
 
-	parser->line_number++;
+  // for each containing node, try to parse the associated line start.
+  // bail out on failure:  container will point to the last matching node.
 
-	// for each containing node, try to parse the associated line start.
-	// bail out on failure:  container will point to the last matching node.
+  while (container->last_child && container->last_child->open) {
+    container = container->last_child;
 
-	while (container->last_child && container->last_child->open) {
-		container = container->last_child;
+    S_find_first_nonspace(parser, &input);
 
-		S_find_first_nonspace(parser, &input);
+    if (container->type == NODE_BLOCK_QUOTE) {
+      matched =
+          parser->indent <= 3 && peek_at(&input, parser->first_nonspace) == '>';
+      if (matched) {
+        S_advance_offset(parser, &input, parser->indent + 1, true);
+        if (peek_at(&input, parser->offset) == ' ')
+          parser->offset++;
+      } else {
+        all_matched = false;
+      }
 
-		if (container->type == NODE_BLOCK_QUOTE) {
-			matched = parser->indent <= 3 && peek_at(&input, parser->first_nonspace) == '>';
-			if (matched) {
-				S_advance_offset(parser, &input, parser->indent + 1, true);
-				if (peek_at(&input, parser->offset) == ' ')
-					parser->offset++;
-			} else {
-				all_matched = false;
-			}
+    } else if (container->type == NODE_ITEM) {
+      if (parser->indent >=
+          container->as.list.marker_offset + container->as.list.padding) {
+        S_advance_offset(parser, &input, container->as.list.marker_offset +
+                                             container->as.list.padding,
+                         true);
+      } else if (parser->blank) {
+        S_advance_offset(parser, &input,
+                         parser->first_nonspace - parser->offset, false);
+      } else {
+        all_matched = false;
+      }
 
-		} else if (container->type == NODE_ITEM) {
-			if (parser->indent >= container->as.list.marker_offset +
-			    container->as.list.padding) {
-				S_advance_offset(parser, &input,
-				                 container->as.list.marker_offset +
-				                 container->as.list.padding, true);
-			} else if (parser->blank) {
-				S_advance_offset(parser, &input,
-				                 parser->first_nonspace - parser->offset, false);
-			} else {
-				all_matched = false;
-			}
+    } else if (container->type == NODE_CODE_BLOCK) {
 
-		} else if (container->type == NODE_CODE_BLOCK) {
+      if (!container->as.code.fenced) { // indented
+        if (parser->indent >= CODE_INDENT) {
+          S_advance_offset(parser, &input, CODE_INDENT, true);
+        } else if (parser->blank) {
+          S_advance_offset(parser, &input,
+                           parser->first_nonspace - parser->offset, false);
+        } else {
+          all_matched = false;
+        }
+      } else { // fenced
+        matched = 0;
+        if (parser->indent <= 3 && (peek_at(&input, parser->first_nonspace) ==
+                                    container->as.code.fence_char)) {
+          matched = scan_close_code_fence(&input, parser->first_nonspace);
+        }
+        if (matched >= container->as.code.fence_length) {
+          // closing fence - and since we're at
+          // the end of a line, we can return:
+          all_matched = false;
+          S_advance_offset(parser, &input, matched, false);
+          parser->current = finalize(parser, container);
+          goto finished;
+        } else {
+          // skip opt. spaces of fence parser->offset
+          i = container->as.code.fence_offset;
+          while (i > 0 && peek_at(&input, parser->offset) == ' ') {
+            S_advance_offset(parser, &input, 1, false);
+            i--;
+          }
+        }
+      }
+    } else if (container->type == NODE_HEADER) {
 
-			if (!container->as.code.fenced) { // indented
-				if (parser->indent >= CODE_INDENT) {
-					S_advance_offset(parser, &input, CODE_INDENT, true);
-				} else if (parser->blank) {
-					S_advance_offset(parser, &input,
-					                 parser->first_nonspace - parser->offset,
-					                 false);
-				} else {
-					all_matched = false;
-				}
-			} else { // fenced
-				matched = 0;
-				if (parser->indent <= 3 &&
-				    (peek_at(&input, parser->first_nonspace) ==
-				     container->as.code.fence_char)) {
-					matched = scan_close_code_fence(&input,
-					                                parser->first_nonspace);
-				}
-				if (matched >= container->as.code.fence_length) {
-					// closing fence - and since we're at
-					// the end of a line, we can return:
-					all_matched = false;
-					S_advance_offset(parser, &input, matched, false);
-					parser->current = finalize(parser, container);
-					goto finished;
-				} else {
-					// skip opt. spaces of fence parser->offset
-					i = container->as.code.fence_offset;
-					while (i > 0 &&
-					       peek_at(&input, parser->offset) == ' ') {
-						S_advance_offset(parser, &input, 1, false);
-						i--;
-					}
-				}
-			}
-		} else if (container->type == NODE_HEADER) {
+      // a header can never contain more than one line
+      all_matched = false;
 
-			// a header can never contain more than one line
-			all_matched = false;
+    } else if (container->type == NODE_HTML) {
 
-		} else if (container->type == NODE_HTML) {
+      switch (container->as.html_block_type) {
+      case 1:
+      case 2:
+      case 3:
+      case 4:
+      case 5:
+        // these types of blocks can accept blanks
+        break;
+      case 6:
+      case 7:
+        if (parser->blank) {
+          all_matched = false;
+        }
+        break;
+      default:
+        fprintf(stderr, "Error (%s:%d): Unknown HTML block type %d\n", __FILE__,
+                __LINE__, container->as.html_block_type);
+        exit(1);
+      }
 
-			switch (container->as.html_block_type) {
-			case 1:
-			case 2:
-			case 3:
-			case 4:
-			case 5:
-				// these types of blocks can accept blanks
-				break;
-			case 6:
-			case 7:
-				if (parser->blank) {
-					all_matched = false;
-				}
-				break;
-			default:
-				fprintf(stderr,
-				        "Error (%s:%d): Unknown HTML block type %d\n",
-				        __FILE__, __LINE__,
-				        container->as.html_block_type);
-				exit(1);
-			}
+    } else if (container->type == NODE_PARAGRAPH) {
 
-		} else if (container->type == NODE_PARAGRAPH) {
+      if (parser->blank) {
+        all_matched = false;
+      }
+    }
 
-			if (parser->blank) {
-				all_matched = false;
-			}
+    if (!all_matched) {
+      container = container->parent; // back up to last matching node
+      break;
+    }
+  }
 
-		}
+  last_matched_container = container;
 
-		if (!all_matched) {
-			container = container->parent;  // back up to last matching node
-			break;
-		}
-	}
+  // check to see if we've hit 2nd blank line, break out of list:
+  if (parser->blank && container->last_line_blank) {
+    break_out_of_lists(parser, &container);
+  }
 
-	last_matched_container = container;
+  maybe_lazy = parser->current->type == NODE_PARAGRAPH;
+  // try new container starts:
+  while (container->type != NODE_CODE_BLOCK && container->type != NODE_HTML) {
 
-	// check to see if we've hit 2nd blank line, break out of list:
-	if (parser->blank && container->last_line_blank) {
-		break_out_of_lists(parser, &container);
-	}
+    S_find_first_nonspace(parser, &input);
+    indented = parser->indent >= CODE_INDENT;
 
-	maybe_lazy = parser->current->type == NODE_PARAGRAPH;
-	// try new container starts:
-	while (container->type != NODE_CODE_BLOCK &&
-	       container->type != NODE_HTML) {
+    if (!indented && peek_at(&input, parser->first_nonspace) == '>') {
 
-		S_find_first_nonspace(parser, &input);
-		indented = parser->indent >= CODE_INDENT;
+      S_advance_offset(parser, &input,
+                       parser->first_nonspace + 1 - parser->offset, false);
+      // optional following character
+      if (peek_at(&input, parser->offset) == ' ')
+        S_advance_offset(parser, &input, 1, false);
+      container =
+          add_child(parser, container, NODE_BLOCK_QUOTE, parser->offset + 1);
 
-		if (!indented && peek_at(&input, parser->first_nonspace) == '>') {
+    } else if (!indented && (matched = scan_atx_header_start(
+                                 &input, parser->first_nonspace))) {
 
-			S_advance_offset(parser, &input, parser->first_nonspace + 1 - parser->offset, false);
-			// optional following character
-			if (peek_at(&input, parser->offset) == ' ')
-				S_advance_offset(parser, &input, 1, false);
-			container = add_child(parser, container, NODE_BLOCK_QUOTE, parser->offset + 1);
+      S_advance_offset(parser, &input,
+                       parser->first_nonspace + matched - parser->offset,
+                       false);
+      container = add_child(parser, container, NODE_HEADER, parser->offset + 1);
 
-		} else if (!indented && (matched = scan_atx_header_start(&input, parser->first_nonspace))) {
+      bufsize_t hashpos =
+          cmark_chunk_strchr(&input, '#', parser->first_nonspace);
+      int level = 0;
 
-			S_advance_offset(parser, &input,
-			                 parser->first_nonspace + matched - parser->offset, false);
-			container = add_child(parser, container, NODE_HEADER, parser->offset + 1);
+      while (peek_at(&input, hashpos) == '#') {
+        level++;
+        hashpos++;
+      }
+      container->as.header.level = level;
+      container->as.header.setext = false;
 
-			bufsize_t hashpos = cmark_chunk_strchr(&input, '#', parser->first_nonspace);
-			int level = 0;
+    } else if (!indented && (matched = scan_open_code_fence(
+                                 &input, parser->first_nonspace))) {
 
-			while (peek_at(&input, hashpos) == '#') {
-				level++;
-				hashpos++;
-			}
-			container->as.header.level = level;
-			container->as.header.setext = false;
+      container = add_child(parser, container, NODE_CODE_BLOCK,
+                            parser->first_nonspace + 1);
+      container->as.code.fenced = true;
+      container->as.code.fence_char = peek_at(&input, parser->first_nonspace);
+      container->as.code.fence_length = matched;
+      container->as.code.fence_offset = parser->first_nonspace - parser->offset;
+      container->as.code.info = cmark_chunk_literal("");
+      S_advance_offset(parser, &input,
+                       parser->first_nonspace + matched - parser->offset,
+                       false);
 
-		} else if (!indented && (matched = scan_open_code_fence(&input, parser->first_nonspace))) {
+    } else if (!indented && ((matched = scan_html_block_start(
+                                  &input, parser->first_nonspace)) ||
+                             (container->type != NODE_PARAGRAPH &&
+                              (matched = scan_html_block_start_7(
+                                   &input, parser->first_nonspace))))) {
 
-			container = add_child(parser, container, NODE_CODE_BLOCK, parser->first_nonspace + 1);
-			container->as.code.fenced = true;
-			container->as.code.fence_char = peek_at(&input, parser->first_nonspace);
-			container->as.code.fence_length = matched;
-			container->as.code.fence_offset = parser->first_nonspace - parser->offset;
-			container->as.code.info = cmark_chunk_literal("");
-			S_advance_offset(parser, &input, parser->first_nonspace + matched - parser->offset, false);
+      container =
+          add_child(parser, container, NODE_HTML, parser->first_nonspace + 1);
+      container->as.html_block_type = matched;
+      // note, we don't adjust parser->offset because the tag is part of the
+      // text
 
-		} else if (!indented &&
-		           ((matched = scan_html_block_start(&input, parser->first_nonspace)) ||
-		            (container->type != NODE_PARAGRAPH &&
-		             (matched = scan_html_block_start_7(&input, parser->first_nonspace))))) {
-
-			container = add_child(parser, container, NODE_HTML, parser->first_nonspace + 1);
-			container->as.html_block_type = matched;
-			// note, we don't adjust parser->offset because the tag is part of the text
-
-		} else if (!indented &&
-		           container->type == NODE_PARAGRAPH &&
-		           (lev = scan_setext_header_line(&input, parser->first_nonspace)) &&
-		           // check that there is only one line in the paragraph:
-		           (cmark_strbuf_strrchr(&container->string_content, '\n',
-		                                 cmark_strbuf_len(&container->string_content) - 2) < 0)) {
-
-			container->type = NODE_HEADER;
-			container->as.header.level = lev;
-			container->as.header.setext = true;
-			S_advance_offset(parser, &input, input.len - 1 - parser->offset, false);
+    } else if (!indented && container->type == NODE_PARAGRAPH &&
+               (lev =
+                    scan_setext_header_line(&input, parser->first_nonspace)) &&
+               // check that there is only one line in the paragraph:
+               (cmark_strbuf_strrchr(
+                    &container->string_content, '\n',
+                    cmark_strbuf_len(&container->string_content) - 2) < 0)) {
 
-		} else if (!indented &&
-		           !(container->type == NODE_PARAGRAPH &&
-		             !all_matched) &&
-		           (matched = scan_hrule(&input, parser->first_nonspace))) {
+      container->type = NODE_HEADER;
+      container->as.header.level = lev;
+      container->as.header.setext = true;
+      S_advance_offset(parser, &input, input.len - 1 - parser->offset, false);
 
-			// it's only now that we know the line is not part of a setext header:
-			container = add_child(parser, container, NODE_HRULE, parser->first_nonspace + 1);
-			container = finalize(parser, container);
-			S_advance_offset(parser, &input, input.len - 1 - parser->offset, false);
+    } else if (!indented &&
+               !(container->type == NODE_PARAGRAPH && !all_matched) &&
+               (matched = scan_hrule(&input, parser->first_nonspace))) {
 
-		} else if ((matched = parse_list_marker(&input, parser->first_nonspace, &data)) &&
-		           (!indented || container->type == NODE_LIST)) {
-			// Note that we can have new list items starting with >= 4
-			// spaces indent, as long as the list container is still open.
+      // it's only now that we know the line is not part of a setext header:
+      container =
+          add_child(parser, container, NODE_HRULE, parser->first_nonspace + 1);
+      container = finalize(parser, container);
+      S_advance_offset(parser, &input, input.len - 1 - parser->offset, false);
 
-			// compute padding:
-			S_advance_offset(parser, &input, parser->first_nonspace + matched - parser->offset, false);
-			i = 0;
-			while (i <= 5 && peek_at(&input, parser->offset + i) == ' ') {
-				i++;
-			}
-			// i = number of spaces after marker, up to 5
-			if (i >= 5 || i < 1 ||
-			    S_is_line_end_char(peek_at(&input, parser->offset))) {
-				data->padding = matched + 1;
-				if (i > 0) {
-					S_advance_offset(parser, &input, 1, false);
-				}
-			} else {
-				data->padding = matched + i;
-				S_advance_offset(parser, &input, i, true);
-			}
+    } else if ((matched =
+                    parse_list_marker(&input, parser->first_nonspace, &data)) &&
+               (!indented || container->type == NODE_LIST)) {
+      // Note that we can have new list items starting with >= 4
+      // spaces indent, as long as the list container is still open.
 
-			// check container; if it's a list, see if this list item
-			// can continue the list; otherwise, create a list container.
+      // compute padding:
+      S_advance_offset(parser, &input,
+                       parser->first_nonspace + matched - parser->offset,
+                       false);
+      i = 0;
+      while (i <= 5 && peek_at(&input, parser->offset + i) == ' ') {
+        i++;
+      }
+      // i = number of spaces after marker, up to 5
+      if (i >= 5 || i < 1 ||
+          S_is_line_end_char(peek_at(&input, parser->offset))) {
+        data->padding = matched + 1;
+        if (i > 0) {
+          S_advance_offset(parser, &input, 1, false);
+        }
+      } else {
+        data->padding = matched + i;
+        S_advance_offset(parser, &input, i, true);
+      }
 
-			data->marker_offset = parser->indent;
+      // check container; if it's a list, see if this list item
+      // can continue the list; otherwise, create a list container.
 
-			if (container->type != NODE_LIST ||
-			    !lists_match(&container->as.list, data)) {
-				container = add_child(parser, container, NODE_LIST,
-				                      parser->first_nonspace + 1);
+      data->marker_offset = parser->indent;
 
-				memcpy(&container->as.list, data, sizeof(*data));
-			}
+      if (container->type != NODE_LIST ||
+          !lists_match(&container->as.list, data)) {
+        container =
+            add_child(parser, container, NODE_LIST, parser->first_nonspace + 1);
 
-			// add the list item
-			container = add_child(parser, container, NODE_ITEM,
-			                      parser->first_nonspace + 1);
-			/* TODO: static */
-			memcpy(&container->as.list, data, sizeof(*data));
-			free(data);
+        memcpy(&container->as.list, data, sizeof(*data));
+      }
 
-		} else if (indented && !maybe_lazy && !parser->blank) {
-			S_advance_offset(parser, &input, CODE_INDENT, true);
-			container = add_child(parser, container, NODE_CODE_BLOCK, parser->offset + 1);
-			container->as.code.fenced = false;
-			container->as.code.fence_char = 0;
-			container->as.code.fence_length = 0;
-			container->as.code.fence_offset = 0;
-			container->as.code.info = cmark_chunk_literal("");
+      // add the list item
+      container =
+          add_child(parser, container, NODE_ITEM, parser->first_nonspace + 1);
+      /* TODO: static */
+      memcpy(&container->as.list, data, sizeof(*data));
+      free(data);
 
-		} else {
-			break;
-		}
+    } else if (indented && !maybe_lazy && !parser->blank) {
+      S_advance_offset(parser, &input, CODE_INDENT, true);
+      container =
+          add_child(parser, container, NODE_CODE_BLOCK, parser->offset + 1);
+      container->as.code.fenced = false;
+      container->as.code.fence_char = 0;
+      container->as.code.fence_length = 0;
+      container->as.code.fence_offset = 0;
+      container->as.code.info = cmark_chunk_literal("");
 
-		if (accepts_lines(container->type)) {
-			// if it's a line container, it can't contain other containers
-			break;
-		}
-		maybe_lazy = false;
-	}
+    } else {
+      break;
+    }
 
-	// what remains at parser->offset is a text line.  add the text to the
-	// appropriate container.
+    if (accepts_lines(container->type)) {
+      // if it's a line container, it can't contain other containers
+      break;
+    }
+    maybe_lazy = false;
+  }
 
-	S_find_first_nonspace(parser, &input);
+  // what remains at parser->offset is a text line.  add the text to the
+  // appropriate container.
 
-	if (parser->blank && container->last_child) {
-		container->last_child->last_line_blank = true;
-	}
+  S_find_first_nonspace(parser, &input);
 
-	// block quote lines are never blank as they start with >
-	// and we don't count blanks in fenced code for purposes of tight/loose
-	// lists or breaking out of lists.  we also don't set last_line_blank
-	// on an empty list item.
-	container->last_line_blank = (parser->blank &&
-	                              container->type != NODE_BLOCK_QUOTE &&
-	                              container->type != NODE_HEADER &&
-	                              !(container->type == NODE_CODE_BLOCK &&
-	                                container->as.code.fenced) &&
-	                              !(container->type == NODE_ITEM &&
-	                                container->first_child == NULL &&
-	                                container->start_line == parser->line_number));
+  if (parser->blank && container->last_child) {
+    container->last_child->last_line_blank = true;
+  }
 
-	cmark_node *cont = container;
-	while (cont->parent) {
-		cont->parent->last_line_blank = false;
-		cont = cont->parent;
-	}
+  // block quote lines are never blank as they start with >
+  // and we don't count blanks in fenced code for purposes of tight/loose
+  // lists or breaking out of lists.  we also don't set last_line_blank
+  // on an empty list item.
+  container->last_line_blank =
+      (parser->blank && container->type != NODE_BLOCK_QUOTE &&
+       container->type != NODE_HEADER &&
+       !(container->type == NODE_CODE_BLOCK && container->as.code.fenced) &&
+       !(container->type == NODE_ITEM && container->first_child == NULL &&
+         container->start_line == parser->line_number));
 
-	if (parser->current != last_matched_container &&
-	    container == last_matched_container &&
-	    !parser->blank &&
-	    parser->current->type == NODE_PARAGRAPH &&
-	    cmark_strbuf_len(&parser->current->string_content) > 0) {
+  cmark_node *cont = container;
+  while (cont->parent) {
+    cont->parent->last_line_blank = false;
+    cont = cont->parent;
+  }
 
-		add_line(parser->current, &input, parser->offset);
+  if (parser->current != last_matched_container &&
+      container == last_matched_container && !parser->blank &&
+      parser->current->type == NODE_PARAGRAPH &&
+      cmark_strbuf_len(&parser->current->string_content) > 0) {
 
-	} else { // not a lazy continuation
+    add_line(parser->current, &input, parser->offset);
 
-		// finalize any blocks that were not matched and set cur to container:
-		while (parser->current != last_matched_container) {
-			parser->current = finalize(parser, parser->current);
-			assert(parser->current != NULL);
-		}
+  } else { // not a lazy continuation
 
-		if (container->type == NODE_CODE_BLOCK) {
+    // finalize any blocks that were not matched and set cur to container:
+    while (parser->current != last_matched_container) {
+      parser->current = finalize(parser, parser->current);
+      assert(parser->current != NULL);
+    }
 
-			add_line(container, &input, parser->offset);
+    if (container->type == NODE_CODE_BLOCK) {
 
-		} else if (container->type == NODE_HTML) {
+      add_line(container, &input, parser->offset);
 
-			add_line(container, &input, parser->offset);
+    } else if (container->type == NODE_HTML) {
 
-			int matches_end_condition;
-			switch (container->as.html_block_type) {
-			case 1:
-				// </script>, </style>, </pre>
-				matches_end_condition =
-				    scan_html_block_end_1(&input, parser->first_nonspace);
-				break;
-			case 2:
-				// -->
-				matches_end_condition =
-				    scan_html_block_end_2(&input, parser->first_nonspace);
-				break;
-			case 3:
-				// ?>
-				matches_end_condition =
-				    scan_html_block_end_3(&input, parser->first_nonspace);
-				break;
-			case 4:
-				// >
-				matches_end_condition =
-				    scan_html_block_end_4(&input, parser->first_nonspace);
-				break;
-			case 5:
-				// ]]>
-				matches_end_condition =
-				    scan_html_block_end_5(&input, parser->first_nonspace);
-				break;
-			default:
-				matches_end_condition = 0;
-				break;
-			}
+      add_line(container, &input, parser->offset);
 
-			if (matches_end_condition) {
-				container = finalize(parser, container);
-				assert(parser->current != NULL);
-			}
+      int matches_end_condition;
+      switch (container->as.html_block_type) {
+      case 1:
+        // </script>, </style>, </pre>
+        matches_end_condition =
+            scan_html_block_end_1(&input, parser->first_nonspace);
+        break;
+      case 2:
+        // -->
+        matches_end_condition =
+            scan_html_block_end_2(&input, parser->first_nonspace);
+        break;
+      case 3:
+        // ?>
+        matches_end_condition =
+            scan_html_block_end_3(&input, parser->first_nonspace);
+        break;
+      case 4:
+        // >
+        matches_end_condition =
+            scan_html_block_end_4(&input, parser->first_nonspace);
+        break;
+      case 5:
+        // ]]>
+        matches_end_condition =
+            scan_html_block_end_5(&input, parser->first_nonspace);
+        break;
+      default:
+        matches_end_condition = 0;
+        break;
+      }
 
-		} else if (parser->blank) {
+      if (matches_end_condition) {
+        container = finalize(parser, container);
+        assert(parser->current != NULL);
+      }
 
-			// ??? do nothing
+    } else if (parser->blank) {
 
-		} else if (accepts_lines(container->type)) {
+      // ??? do nothing
 
-			if (container->type == NODE_HEADER &&
-			    container->as.header.setext == false) {
-				chop_trailing_hashtags(&input);
-			}
-			add_line(container, &input, parser->first_nonspace);
+    } else if (accepts_lines(container->type)) {
 
-		} else {
-			// create paragraph container for line
-			container = add_child(parser, container, NODE_PARAGRAPH, parser->first_nonspace + 1);
-			add_line(container, &input, parser->first_nonspace);
+      if (container->type == NODE_HEADER &&
+          container->as.header.setext == false) {
+        chop_trailing_hashtags(&input);
+      }
+      add_line(container, &input, parser->first_nonspace);
 
-		}
+    } else {
+      // create paragraph container for line
+      container = add_child(parser, container, NODE_PARAGRAPH,
+                            parser->first_nonspace + 1);
+      add_line(container, &input, parser->first_nonspace);
+    }
 
-		parser->current = container;
-	}
+    parser->current = container;
+  }
 finished:
-	parser->last_line_length = parser->curline->size;
-	if (parser->last_line_length &&
-	    parser->curline->ptr[parser->last_line_length - 1] == '\n')
-		parser->last_line_length -= 1;
-	if (parser->last_line_length &&
-	    parser->curline->ptr[parser->last_line_length - 1] == '\r')
-		parser->last_line_length -= 1;
+  parser->last_line_length = parser->curline->size;
+  if (parser->last_line_length &&
+      parser->curline->ptr[parser->last_line_length - 1] == '\n')
+    parser->last_line_length -= 1;
+  if (parser->last_line_length &&
+      parser->curline->ptr[parser->last_line_length - 1] == '\r')
+    parser->last_line_length -= 1;
 
-	cmark_strbuf_clear(parser->curline);
-
+  cmark_strbuf_clear(parser->curline);
 }
 
-cmark_node *cmark_parser_finish(cmark_parser *parser)
-{
-	if (parser->linebuf->size) {
-		S_process_line(parser, parser->linebuf->ptr,
-		               parser->linebuf->size);
-		cmark_strbuf_clear(parser->linebuf);
-	}
+cmark_node *cmark_parser_finish(cmark_parser *parser) {
+  if (parser->linebuf->size) {
+    S_process_line(parser, parser->linebuf->ptr, parser->linebuf->size);
+    cmark_strbuf_clear(parser->linebuf);
+  }
 
-	finalize_document(parser);
+  finalize_document(parser);
 
-	if (parser->options & CMARK_OPT_NORMALIZE) {
-		cmark_consolidate_text_nodes(parser->root);
-	}
+  if (parser->options & CMARK_OPT_NORMALIZE) {
+    cmark_consolidate_text_nodes(parser->root);
+  }
 
-	cmark_strbuf_free(parser->curline);
+  cmark_strbuf_free(parser->curline);
 
 #if CMARK_DEBUG_NODES
-	if (cmark_node_check(parser->root, stderr)) {
-		abort();
-	}
+  if (cmark_node_check(parser->root, stderr)) {
+    abort();
+  }
 #endif
-	return parser->root;
+  return parser->root;
 }
diff --git a/src/buffer.c b/src/buffer.c
index 509eb6c..9d31881 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -16,323 +16,301 @@
 unsigned char cmark_strbuf__initbuf[1];
 
 #ifndef MIN
-#define MIN(x,y)  ((x<y) ? x : y)
+#define MIN(x, y) ((x < y) ? x : y)
 #endif
 
-void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size)
-{
-	buf->asize = 0;
-	buf->size = 0;
-	buf->ptr = cmark_strbuf__initbuf;
+void cmark_strbuf_init(cmark_strbuf *buf, bufsize_t initial_size) {
+  buf->asize = 0;
+  buf->size = 0;
+  buf->ptr = cmark_strbuf__initbuf;
 
-	if (initial_size > 0)
-		cmark_strbuf_grow(buf, initial_size);
+  if (initial_size > 0)
+    cmark_strbuf_grow(buf, initial_size);
 }
 
-void cmark_strbuf_overflow_err()
-{
-	fprintf(stderr, "String buffer overflow");
-	abort();
+void cmark_strbuf_overflow_err() {
+  fprintf(stderr, "String buffer overflow");
+  abort();
 }
 
-static inline void
-S_strbuf_grow_by(cmark_strbuf *buf, size_t add)
-{
-	size_t target_size = (size_t)buf->size + add;
+static inline void S_strbuf_grow_by(cmark_strbuf *buf, size_t add) {
+  size_t target_size = (size_t)buf->size + add;
 
-	if (target_size < add             /* Integer overflow. */
-	    || target_size > BUFSIZE_MAX  /* Truncation overflow. */
-	   ) {
-		cmark_strbuf_overflow_err();
-		return; /* unreachable */
-	}
+  if (target_size < add            /* Integer overflow. */
+      || target_size > BUFSIZE_MAX /* Truncation overflow. */
+      ) {
+    cmark_strbuf_overflow_err();
+    return; /* unreachable */
+  }
 
-	if ((bufsize_t)target_size >= buf->asize)
-		cmark_strbuf_grow(buf, (bufsize_t)target_size);
+  if ((bufsize_t)target_size >= buf->asize)
+    cmark_strbuf_grow(buf, (bufsize_t)target_size);
 }
 
-void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size)
-{
-	unsigned char *new_ptr;
+void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) {
+  unsigned char *new_ptr;
 
-	if (target_size < buf->asize)
-		return;
+  if (target_size < buf->asize)
+    return;
 
-	if (buf->asize == 0) {
-		new_ptr = NULL;
-	} else {
-		new_ptr = buf->ptr;
-	}
+  if (buf->asize == 0) {
+    new_ptr = NULL;
+  } else {
+    new_ptr = buf->ptr;
+  }
 
-	/* Oversize the buffer by 50% to guarantee amortized linear time
-	 * complexity on append operations. */
-	size_t new_size = (size_t)target_size + (size_t)target_size / 2;
+  /* Oversize the buffer by 50% to guarantee amortized linear time
+   * complexity on append operations. */
+  size_t new_size = (size_t)target_size + (size_t)target_size / 2;
 
-	/* Account for terminating null byte. */
-	new_size += 1;
+  /* Account for terminating null byte. */
+  new_size += 1;
 
-	/* round allocation up to multiple of 8 */
-	new_size = (new_size + 7) & ~7;
+  /* round allocation up to multiple of 8 */
+  new_size = (new_size + 7) & ~7;
 
-	if (new_size < (size_t)target_size  /* Integer overflow. */
-	    || new_size > BUFSIZE_MAX       /* Truncation overflow. */
-	   ) {
-		if (target_size >= BUFSIZE_MAX) {
-			/* No space for terminating null byte. */
-			cmark_strbuf_overflow_err();
-			return; /* unreachable */
-		}
-		/* Oversize by the maximum possible amount. */
-		new_size = BUFSIZE_MAX;
-	}
+  if (new_size < (size_t)target_size /* Integer overflow. */
+      || new_size > BUFSIZE_MAX      /* Truncation overflow. */
+      ) {
+    if (target_size >= BUFSIZE_MAX) {
+      /* No space for terminating null byte. */
+      cmark_strbuf_overflow_err();
+      return; /* unreachable */
+    }
+    /* Oversize by the maximum possible amount. */
+    new_size = BUFSIZE_MAX;
+  }
 
-	new_ptr = (unsigned char *)realloc(new_ptr, new_size);
+  new_ptr = (unsigned char *)realloc(new_ptr, new_size);
 
-	if (!new_ptr) {
-		perror("realloc in cmark_strbuf_grow");
-		abort();
-	}
+  if (!new_ptr) {
+    perror("realloc in cmark_strbuf_grow");
+    abort();
+  }
 
-	buf->asize = (bufsize_t)new_size;
-	buf->ptr   = new_ptr;
+  buf->asize = (bufsize_t)new_size;
+  buf->ptr = new_ptr;
 }
 
-bufsize_t cmark_strbuf_len(const cmark_strbuf *buf)
-{
-	return buf->size;
+bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) { return buf->size; }
+
+void cmark_strbuf_free(cmark_strbuf *buf) {
+  if (!buf)
+    return;
+
+  if (buf->ptr != cmark_strbuf__initbuf)
+    free(buf->ptr);
+
+  cmark_strbuf_init(buf, 0);
 }
 
-void cmark_strbuf_free(cmark_strbuf *buf)
-{
-	if (!buf) return;
+void cmark_strbuf_clear(cmark_strbuf *buf) {
+  buf->size = 0;
 
-	if (buf->ptr != cmark_strbuf__initbuf)
-		free(buf->ptr);
-
-	cmark_strbuf_init(buf, 0);
+  if (buf->asize > 0)
+    buf->ptr[0] = '\0';
 }
 
-void cmark_strbuf_clear(cmark_strbuf *buf)
-{
-	buf->size = 0;
-
-	if (buf->asize > 0)
-		buf->ptr[0] = '\0';
+void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data,
+                      bufsize_t len) {
+  if (len <= 0 || data == NULL) {
+    cmark_strbuf_clear(buf);
+  } else {
+    if (data != buf->ptr) {
+      if (len >= buf->asize)
+        cmark_strbuf_grow(buf, len);
+      memmove(buf->ptr, data, len);
+    }
+    buf->size = len;
+    buf->ptr[buf->size] = '\0';
+  }
 }
 
-void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, bufsize_t len)
-{
-	if (len <= 0 || data == NULL) {
-		cmark_strbuf_clear(buf);
-	} else {
-		if (data != buf->ptr) {
-			if (len >= buf->asize)
-				cmark_strbuf_grow(buf, len);
-			memmove(buf->ptr, data, len);
-		}
-		buf->size = len;
-		buf->ptr[buf->size] = '\0';
-	}
+void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) {
+  cmark_strbuf_set(buf, (const unsigned char *)string,
+                   string ? cmark_strbuf_safe_strlen(string) : 0);
 }
 
-void cmark_strbuf_sets(cmark_strbuf *buf, const char *string)
-{
-	cmark_strbuf_set(buf, (const unsigned char *)string,
-	                 string ? cmark_strbuf_safe_strlen(string) : 0);
+void cmark_strbuf_putc(cmark_strbuf *buf, int c) {
+  S_strbuf_grow_by(buf, 1);
+  buf->ptr[buf->size++] = c;
+  buf->ptr[buf->size] = '\0';
 }
 
-void cmark_strbuf_putc(cmark_strbuf *buf, int c)
-{
-	S_strbuf_grow_by(buf, 1);
-	buf->ptr[buf->size++] = c;
-	buf->ptr[buf->size] = '\0';
+void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data,
+                      bufsize_t len) {
+  if (len <= 0)
+    return;
+
+  S_strbuf_grow_by(buf, len);
+  memmove(buf->ptr + buf->size, data, len);
+  buf->size += len;
+  buf->ptr[buf->size] = '\0';
 }
 
-void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t len)
-{
-	if (len <= 0)
-		return;
-
-	S_strbuf_grow_by(buf, len);
-	memmove(buf->ptr + buf->size, data, len);
-	buf->size += len;
-	buf->ptr[buf->size] = '\0';
+void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) {
+  cmark_strbuf_put(buf, (const unsigned char *)string,
+                   cmark_strbuf_safe_strlen(string));
 }
 
-void cmark_strbuf_puts(cmark_strbuf *buf, const char *string)
-{
-	cmark_strbuf_put(buf, (const unsigned char *)string,
-	                 cmark_strbuf_safe_strlen(string));
+void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize,
+                            const cmark_strbuf *buf) {
+  bufsize_t copylen;
+
+  assert(buf);
+  if (!data || datasize <= 0)
+    return;
+
+  data[0] = '\0';
+
+  if (buf->size == 0 || buf->asize <= 0)
+    return;
+
+  copylen = buf->size;
+  if (copylen > datasize - 1)
+    copylen = datasize - 1;
+  memmove(data, buf->ptr, copylen);
+  data[copylen] = '\0';
 }
 
-void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, const cmark_strbuf *buf)
-{
-	bufsize_t copylen;
-
-	assert(buf);
-	if (!data || datasize <= 0)
-		return;
-
-	data[0] = '\0';
-
-	if (buf->size == 0 || buf->asize <= 0)
-		return;
-
-	copylen = buf->size;
-	if (copylen > datasize - 1)
-		copylen = datasize - 1;
-	memmove(data, buf->ptr, copylen);
-	data[copylen] = '\0';
+void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b) {
+  cmark_strbuf t = *buf_a;
+  *buf_a = *buf_b;
+  *buf_b = t;
 }
 
-void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b)
-{
-	cmark_strbuf t = *buf_a;
-	*buf_a = *buf_b;
-	*buf_b = t;
+unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) {
+  unsigned char *data = buf->ptr;
+
+  if (buf->asize == 0) {
+    /* return an empty string */
+    return (unsigned char *)calloc(1, 1);
+  }
+
+  cmark_strbuf_init(buf, 0);
+  return data;
 }
 
-unsigned char *cmark_strbuf_detach(cmark_strbuf *buf)
-{
-	unsigned char *data = buf->ptr;
-
-	if (buf->asize == 0) {
-		/* return an empty string */
-		return (unsigned char *)calloc(1, 1);
-	}
-
-	cmark_strbuf_init(buf, 0);
-	return data;
+int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b) {
+  int result = memcmp(a->ptr, b->ptr, MIN(a->size, b->size));
+  return (result != 0) ? result
+                       : (a->size < b->size) ? -1 : (a->size > b->size) ? 1 : 0;
 }
 
-int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b)
-{
-	int result = memcmp(a->ptr, b->ptr, MIN(a->size, b->size));
-	return (result != 0) ? result :
-	       (a->size < b->size) ? -1 : (a->size > b->size) ? 1 : 0;
+bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos) {
+  if (pos >= buf->size)
+    return -1;
+  if (pos < 0)
+    pos = 0;
+
+  const unsigned char *p =
+      (unsigned char *)memchr(buf->ptr + pos, c, buf->size - pos);
+  if (!p)
+    return -1;
+
+  return (bufsize_t)(p - (const unsigned char *)buf->ptr);
 }
 
-bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos)
-{
-	if (pos >= buf->size)
-		return -1;
-	if (pos < 0)
-		pos = 0;
+bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos) {
+  if (pos < 0 || buf->size == 0)
+    return -1;
+  if (pos >= buf->size)
+    pos = buf->size - 1;
 
-	const unsigned char *p = (unsigned char *)memchr(buf->ptr + pos, c, buf->size - pos);
-	if (!p)
-		return -1;
+  for (bufsize_t i = pos; i >= 0; i--) {
+    if (buf->ptr[i] == (unsigned char)c)
+      return i;
+  }
 
-	return (bufsize_t)(p - (const unsigned char *)buf->ptr);
+  return -1;
 }
 
-bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos)
-{
-	if (pos < 0 || buf->size == 0)
-		return -1;
-	if (pos >= buf->size)
-		pos = buf->size - 1;
+void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len) {
+  if (len < 0)
+    len = 0;
 
-	for (bufsize_t i = pos; i >= 0; i--) {
-		if (buf->ptr[i] == (unsigned char) c)
-			return i;
-	}
-
-	return -1;
+  if (len < buf->size) {
+    buf->size = len;
+    buf->ptr[buf->size] = '\0';
+  }
 }
 
-void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len)
-{
-	if (len < 0)
-		len = 0;
+void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n) {
+  if (n > 0) {
+    if (n > buf->size)
+      n = buf->size;
+    buf->size = buf->size - n;
+    if (buf->size)
+      memmove(buf->ptr, buf->ptr + n, buf->size);
 
-	if (len < buf->size) {
-		buf->size = len;
-		buf->ptr[buf->size] = '\0';
-	}
+    buf->ptr[buf->size] = '\0';
+  }
 }
 
-void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n)
-{
-	if (n > 0) {
-		if (n > buf->size)
-			n = buf->size;
-		buf->size = buf->size - n;
-		if (buf->size)
-			memmove(buf->ptr, buf->ptr + n, buf->size);
+void cmark_strbuf_rtrim(cmark_strbuf *buf) {
+  if (!buf->size)
+    return;
 
-		buf->ptr[buf->size] = '\0';
-	}
+  while (buf->size > 0) {
+    if (!cmark_isspace(buf->ptr[buf->size - 1]))
+      break;
+
+    buf->size--;
+  }
+
+  buf->ptr[buf->size] = '\0';
 }
 
-void cmark_strbuf_rtrim(cmark_strbuf *buf)
-{
-	if (!buf->size)
-		return;
+void cmark_strbuf_trim(cmark_strbuf *buf) {
+  bufsize_t i = 0;
 
-	while (buf->size > 0) {
-		if (!cmark_isspace(buf->ptr[buf->size - 1]))
-			break;
+  if (!buf->size)
+    return;
 
-		buf->size--;
-	}
+  while (i < buf->size && cmark_isspace(buf->ptr[i]))
+    i++;
 
-	buf->ptr[buf->size] = '\0';
-}
+  cmark_strbuf_drop(buf, i);
 
-void cmark_strbuf_trim(cmark_strbuf *buf)
-{
-	bufsize_t i = 0;
-
-	if (!buf->size)
-		return;
-
-	while (i < buf->size && cmark_isspace(buf->ptr[i]))
-		i++;
-
-	cmark_strbuf_drop(buf, i);
-
-	cmark_strbuf_rtrim(buf);
+  cmark_strbuf_rtrim(buf);
 }
 
 // Destructively modify string, collapsing consecutive
 // space and newline characters into a single space.
-void cmark_strbuf_normalize_whitespace(cmark_strbuf *s)
-{
-	bool last_char_was_space = false;
-	bufsize_t r, w;
+void cmark_strbuf_normalize_whitespace(cmark_strbuf *s) {
+  bool last_char_was_space = false;
+  bufsize_t r, w;
 
-	for (r = 0, w = 0; r < s->size; ++r) {
-		switch (s->ptr[r]) {
-		case ' ':
-		case '\n':
-			if (last_char_was_space)
-				break;
+  for (r = 0, w = 0; r < s->size; ++r) {
+    switch (s->ptr[r]) {
+    case ' ':
+    case '\n':
+      if (last_char_was_space)
+        break;
 
-			s->ptr[w++] = ' ';
-			last_char_was_space = true;
-			break;
+      s->ptr[w++] = ' ';
+      last_char_was_space = true;
+      break;
 
-		default:
-			s->ptr[w++] = s->ptr[r];
-			last_char_was_space = false;
-		}
-	}
+    default:
+      s->ptr[w++] = s->ptr[r];
+      last_char_was_space = false;
+    }
+  }
 
-	cmark_strbuf_truncate(s, w);
+  cmark_strbuf_truncate(s, w);
 }
 
 // Destructively unescape a string: remove backslashes before punctuation chars.
-extern void cmark_strbuf_unescape(cmark_strbuf *buf)
-{
-	bufsize_t r, w;
+extern void cmark_strbuf_unescape(cmark_strbuf *buf) {
+  bufsize_t r, w;
 
-	for (r = 0, w = 0; r < buf->size; ++r) {
-		if (buf->ptr[r] == '\\' && cmark_ispunct(buf->ptr[r + 1]))
-			r++;
+  for (r = 0, w = 0; r < buf->size; ++r) {
+    if (buf->ptr[r] == '\\' && cmark_ispunct(buf->ptr[r + 1]))
+      r++;
 
-		buf->ptr[w++] = buf->ptr[r];
-	}
+    buf->ptr[w++] = buf->ptr[r];
+  }
 
-	cmark_strbuf_truncate(buf, w);
+  cmark_strbuf_truncate(buf, w);
 }
diff --git a/src/buffer.h b/src/buffer.h
index 36ae0a1..e99db72 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -14,13 +14,14 @@
 typedef int bufsize_t;
 
 typedef struct {
-	unsigned char *ptr;
-	bufsize_t asize, size;
+  unsigned char *ptr;
+  bufsize_t asize, size;
 } cmark_strbuf;
 
 extern unsigned char cmark_strbuf__initbuf[];
 
-#define GH_BUF_INIT { cmark_strbuf__initbuf, 0, 0 }
+#define GH_BUF_INIT                                                            \
+  { cmark_strbuf__initbuf, 0, 0 }
 #define BUFSIZE_MAX INT_MAX
 
 /**
@@ -44,19 +45,21 @@
 int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b);
 
 unsigned char *cmark_strbuf_detach(cmark_strbuf *buf);
-void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, const cmark_strbuf *buf);
+void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize,
+                            const cmark_strbuf *buf);
 
-static inline const char *cmark_strbuf_cstr(const cmark_strbuf *buf)
-{
-	return (char *)buf->ptr;
+static inline const char *cmark_strbuf_cstr(const cmark_strbuf *buf) {
+  return (char *)buf->ptr;
 }
 
 #define cmark_strbuf_at(buf, n) ((buf)->ptr[n])
 
-void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, bufsize_t len);
+void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data,
+                      bufsize_t len);
 void cmark_strbuf_sets(cmark_strbuf *buf, const char *string);
 void cmark_strbuf_putc(cmark_strbuf *buf, int c);
-void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, bufsize_t len);
+void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data,
+                      bufsize_t len);
 void cmark_strbuf_puts(cmark_strbuf *buf, const char *string);
 void cmark_strbuf_clear(cmark_strbuf *buf);
 
@@ -72,17 +75,15 @@
 /* Print error and abort. */
 void cmark_strbuf_overflow_err(void);
 
-static inline bufsize_t
-cmark_strbuf_check_bufsize(size_t size) {
-	if (size > BUFSIZE_MAX) {
-		cmark_strbuf_overflow_err();
-	}
-	return (bufsize_t)size;
+static inline bufsize_t cmark_strbuf_check_bufsize(size_t size) {
+  if (size > BUFSIZE_MAX) {
+    cmark_strbuf_overflow_err();
+  }
+  return (bufsize_t)size;
 }
 
-static inline bufsize_t
-cmark_strbuf_safe_strlen(const char *str) {
-	return cmark_strbuf_check_bufsize(strlen(str));
+static inline bufsize_t cmark_strbuf_safe_strlen(const char *str) {
+  return cmark_strbuf_check_bufsize(strlen(str));
 }
 
 #ifdef __cplusplus
diff --git a/src/chunk.h b/src/chunk.h
index f23a02d..db1bf0d 100644
--- a/src/chunk.h
+++ b/src/chunk.h
@@ -7,115 +7,109 @@
 #include "cmark_ctype.h"
 #include "buffer.h"
 
-#define CMARK_CHUNK_EMPTY { NULL, 0, 0 }
+#define CMARK_CHUNK_EMPTY                                                      \
+  { NULL, 0, 0 }
 
 typedef struct {
-	unsigned char *data;
-	bufsize_t len;
-	bufsize_t alloc;  // also implies a NULL-terminated string
+  unsigned char *data;
+  bufsize_t len;
+  bufsize_t alloc; // also implies a NULL-terminated string
 } cmark_chunk;
 
-static inline void cmark_chunk_free(cmark_chunk *c)
-{
-	if (c->alloc)
-		free(c->data);
+static inline void cmark_chunk_free(cmark_chunk *c) {
+  if (c->alloc)
+    free(c->data);
 
-	c->data = NULL;
-	c->alloc = 0;
-	c->len = 0;
+  c->data = NULL;
+  c->alloc = 0;
+  c->len = 0;
 }
 
-static inline void cmark_chunk_ltrim(cmark_chunk *c)
-{
-	assert(!c->alloc);
+static inline void cmark_chunk_ltrim(cmark_chunk *c) {
+  assert(!c->alloc);
 
-	while (c->len && cmark_isspace(c->data[0])) {
-		c->data++;
-		c->len--;
-	}
+  while (c->len && cmark_isspace(c->data[0])) {
+    c->data++;
+    c->len--;
+  }
 }
 
-static inline void cmark_chunk_rtrim(cmark_chunk *c)
-{
-	while (c->len > 0) {
-		if (!cmark_isspace(c->data[c->len - 1]))
-			break;
+static inline void cmark_chunk_rtrim(cmark_chunk *c) {
+  while (c->len > 0) {
+    if (!cmark_isspace(c->data[c->len - 1]))
+      break;
 
-		c->len--;
-	}
+    c->len--;
+  }
 }
 
-static inline void cmark_chunk_trim(cmark_chunk *c)
-{
-	cmark_chunk_ltrim(c);
-	cmark_chunk_rtrim(c);
+static inline void cmark_chunk_trim(cmark_chunk *c) {
+  cmark_chunk_ltrim(c);
+  cmark_chunk_rtrim(c);
 }
 
-static inline bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, bufsize_t offset)
-{
-	const unsigned char *p = (unsigned char *)memchr(ch->data + offset, c, ch->len - offset);
-	return p ? (bufsize_t)(p - ch->data) : ch->len;
+static inline bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c,
+                                           bufsize_t offset) {
+  const unsigned char *p =
+      (unsigned char *)memchr(ch->data + offset, c, ch->len - offset);
+  return p ? (bufsize_t)(p - ch->data) : ch->len;
 }
 
-static inline const char *cmark_chunk_to_cstr(cmark_chunk *c)
-{
-	unsigned char *str;
+static inline const char *cmark_chunk_to_cstr(cmark_chunk *c) {
+  unsigned char *str;
 
-	if (c->alloc) {
-		return (char *)c->data;
-	}
-	str = (unsigned char *)malloc(c->len + 1);
-	if(str != NULL) {
-		if(c->len > 0) {
-			memcpy(str, c->data, c->len);
-		}
-		str[c->len] = 0;
-	}
-	c->data  = str;
-	c->alloc = 1;
+  if (c->alloc) {
+    return (char *)c->data;
+  }
+  str = (unsigned char *)malloc(c->len + 1);
+  if (str != NULL) {
+    if (c->len > 0) {
+      memcpy(str, c->data, c->len);
+    }
+    str[c->len] = 0;
+  }
+  c->data = str;
+  c->alloc = 1;
 
-	return (char *)str;
+  return (char *)str;
 }
 
-static inline void cmark_chunk_set_cstr(cmark_chunk *c, const char *str)
-{
-	if (c->alloc) {
-		free(c->data);
-	}
-	if (str == NULL) {
-		c->len   = 0;
-		c->data  = NULL;
-		c->alloc = 0;
-	} else {
-		c->len   = cmark_strbuf_safe_strlen(str);
-		c->data  = (unsigned char *)malloc(c->len + 1);
-		c->alloc = 1;
-		memcpy(c->data, str, c->len + 1);
-	}
+static inline void cmark_chunk_set_cstr(cmark_chunk *c, const char *str) {
+  if (c->alloc) {
+    free(c->data);
+  }
+  if (str == NULL) {
+    c->len = 0;
+    c->data = NULL;
+    c->alloc = 0;
+  } else {
+    c->len = cmark_strbuf_safe_strlen(str);
+    c->data = (unsigned char *)malloc(c->len + 1);
+    c->alloc = 1;
+    memcpy(c->data, str, c->len + 1);
+  }
 }
 
-static inline cmark_chunk cmark_chunk_literal(const char *data)
-{
-	bufsize_t len = data ? cmark_strbuf_safe_strlen(data) : 0;
-	cmark_chunk c = {(unsigned char *)data, len, 0};
-	return c;
+static inline cmark_chunk cmark_chunk_literal(const char *data) {
+  bufsize_t len = data ? cmark_strbuf_safe_strlen(data) : 0;
+  cmark_chunk c = {(unsigned char *)data, len, 0};
+  return c;
 }
 
-static inline cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos, bufsize_t len)
-{
-	cmark_chunk c = {ch->data + pos, len, 0};
-	return c;
+static inline cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, bufsize_t pos,
+                                          bufsize_t len) {
+  cmark_chunk c = {ch->data + pos, len, 0};
+  return c;
 }
 
-static inline cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf)
-{
-	cmark_chunk c;
+static inline cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) {
+  cmark_chunk c;
 
-	c.len = buf->size;
-	c.data = cmark_strbuf_detach(buf);
-	c.alloc = 1;
+  c.len = buf->size;
+  c.data = cmark_strbuf_detach(buf);
+  c.alloc = 1;
 
-	return c;
+  return c;
 }
 
 #endif
diff --git a/src/cmark.c b/src/cmark.c
index ca9807b..3491199 100644
--- a/src/cmark.c
+++ b/src/cmark.c
@@ -6,26 +6,18 @@
 #include "cmark.h"
 #include "buffer.h"
 
-int cmark_version()
-{
-	return CMARK_VERSION;
+int cmark_version() { return CMARK_VERSION; }
+
+const char *cmark_version_string() { return CMARK_VERSION_STRING; }
+
+char *cmark_markdown_to_html(const char *text, size_t len, int options) {
+  cmark_node *doc;
+  char *result;
+
+  doc = cmark_parse_document(text, len, options);
+
+  result = cmark_render_html(doc, options);
+  cmark_node_free(doc);
+
+  return result;
 }
-
-const char *cmark_version_string()
-{
-	return CMARK_VERSION_STRING;
-}
-
-char *cmark_markdown_to_html(const char *text, size_t len, int options)
-{
-	cmark_node *doc;
-	char *result;
-
-	doc = cmark_parse_document(text, len, options);
-
-	result = cmark_render_html(doc, options);
-	cmark_node_free(doc);
-
-	return result;
-}
-
diff --git a/src/cmark.h b/src/cmark.h
index 4a85f26..3ad4486 100644
--- a/src/cmark.h
+++ b/src/cmark.h
@@ -30,49 +30,48 @@
  */
 
 typedef enum {
-	/* Error status */
-	CMARK_NODE_NONE,
+  /* Error status */
+  CMARK_NODE_NONE,
 
-	/* Block */
-	CMARK_NODE_DOCUMENT,
-	CMARK_NODE_BLOCK_QUOTE,
-	CMARK_NODE_LIST,
-	CMARK_NODE_ITEM,
-	CMARK_NODE_CODE_BLOCK,
-	CMARK_NODE_HTML,
-	CMARK_NODE_PARAGRAPH,
-	CMARK_NODE_HEADER,
-	CMARK_NODE_HRULE,
+  /* Block */
+  CMARK_NODE_DOCUMENT,
+  CMARK_NODE_BLOCK_QUOTE,
+  CMARK_NODE_LIST,
+  CMARK_NODE_ITEM,
+  CMARK_NODE_CODE_BLOCK,
+  CMARK_NODE_HTML,
+  CMARK_NODE_PARAGRAPH,
+  CMARK_NODE_HEADER,
+  CMARK_NODE_HRULE,
 
-	CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT,
-	CMARK_NODE_LAST_BLOCK  = CMARK_NODE_HRULE,
+  CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT,
+  CMARK_NODE_LAST_BLOCK = CMARK_NODE_HRULE,
 
-	/* Inline */
-	CMARK_NODE_TEXT,
-	CMARK_NODE_SOFTBREAK,
-	CMARK_NODE_LINEBREAK,
-	CMARK_NODE_CODE,
-	CMARK_NODE_INLINE_HTML,
-	CMARK_NODE_EMPH,
-	CMARK_NODE_STRONG,
-	CMARK_NODE_LINK,
-	CMARK_NODE_IMAGE,
+  /* Inline */
+  CMARK_NODE_TEXT,
+  CMARK_NODE_SOFTBREAK,
+  CMARK_NODE_LINEBREAK,
+  CMARK_NODE_CODE,
+  CMARK_NODE_INLINE_HTML,
+  CMARK_NODE_EMPH,
+  CMARK_NODE_STRONG,
+  CMARK_NODE_LINK,
+  CMARK_NODE_IMAGE,
 
-	CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT,
-	CMARK_NODE_LAST_INLINE  = CMARK_NODE_IMAGE,
+  CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT,
+  CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE,
 } cmark_node_type;
 
+typedef enum {
+  CMARK_NO_LIST,
+  CMARK_BULLET_LIST,
+  CMARK_ORDERED_LIST
+} cmark_list_type;
 
 typedef enum {
-	CMARK_NO_LIST,
-	CMARK_BULLET_LIST,
-	CMARK_ORDERED_LIST
-}  cmark_list_type;
-
-typedef enum {
-	CMARK_NO_DELIM,
-	CMARK_PERIOD_DELIM,
-	CMARK_PAREN_DELIM
+  CMARK_NO_DELIM,
+  CMARK_PERIOD_DELIM,
+  CMARK_PAREN_DELIM
 } cmark_delim_type;
 
 typedef struct cmark_node cmark_node;
@@ -80,10 +79,10 @@
 typedef struct cmark_iter cmark_iter;
 
 typedef enum {
-	CMARK_EVENT_NONE,
-	CMARK_EVENT_DONE,
-	CMARK_EVENT_ENTER,
-	CMARK_EVENT_EXIT
+  CMARK_EVENT_NONE,
+  CMARK_EVENT_DONE,
+  CMARK_EVENT_ENTER,
+  CMARK_EVENT_EXIT
 } cmark_event_type;
 
 /**
@@ -94,13 +93,11 @@
  * other required properties, which it is the caller's responsibility
  * to assign.
  */
-CMARK_EXPORT cmark_node*
-cmark_node_new(cmark_node_type type);
+CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type);
 
 /** Frees the memory allocated for a node.
  */
-CMARK_EXPORT void
-cmark_node_free(cmark_node *node);
+CMARK_EXPORT void cmark_node_free(cmark_node *node);
 
 /**
  * ## Tree Traversal
@@ -109,29 +106,24 @@
 /** Returns the next node in the sequence after 'node', or NULL if
  * there is none.
  */
-CMARK_EXPORT cmark_node*
-cmark_node_next(cmark_node *node);
+CMARK_EXPORT cmark_node *cmark_node_next(cmark_node *node);
 
 /** Returns the previous node in the sequence after 'node', or NULL if
  * there is none.
  */
-CMARK_EXPORT cmark_node*
-cmark_node_previous(cmark_node *node);
+CMARK_EXPORT cmark_node *cmark_node_previous(cmark_node *node);
 
 /** Returns the parent of 'node', or NULL if there is none.
  */
-CMARK_EXPORT cmark_node*
-cmark_node_parent(cmark_node *node);
+CMARK_EXPORT cmark_node *cmark_node_parent(cmark_node *node);
 
 /** Returns the first child of 'node', or NULL if 'node' has no children.
  */
-CMARK_EXPORT cmark_node*
-cmark_node_first_child(cmark_node *node);
+CMARK_EXPORT cmark_node *cmark_node_first_child(cmark_node *node);
 
 /** Returns the last child of 'node', or NULL if 'node' has no children.
  */
-CMARK_EXPORT cmark_node*
-cmark_node_last_child(cmark_node *node);
+CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node);
 
 /**
  * ## Iterator
@@ -182,48 +174,41 @@
  * type are undefined until `cmark_iter_next` is called for the first time.
  */
 CMARK_EXPORT
-cmark_iter*
-cmark_iter_new(cmark_node *root);
+cmark_iter *cmark_iter_new(cmark_node *root);
 
 /** Frees the memory allocated for an iterator.
  */
 CMARK_EXPORT
-void
-cmark_iter_free(cmark_iter *iter);
+void cmark_iter_free(cmark_iter *iter);
 
 /** Advances to the next node and returns the event type (`CMARK_EVENT_ENTER`,
  * `CMARK_EVENT_EXIT` or `CMARK_EVENT_DONE`).
  */
 CMARK_EXPORT
-cmark_event_type
-cmark_iter_next(cmark_iter *iter);
+cmark_event_type cmark_iter_next(cmark_iter *iter);
 
 /** Returns the current node.
  */
 CMARK_EXPORT
-cmark_node*
-cmark_iter_get_node(cmark_iter *iter);
+cmark_node *cmark_iter_get_node(cmark_iter *iter);
 
 /** Returns the current event type.
  */
 CMARK_EXPORT
-cmark_event_type
-cmark_iter_get_event_type(cmark_iter *iter);
+cmark_event_type cmark_iter_get_event_type(cmark_iter *iter);
 
 /** Returns the root node.
  */
 CMARK_EXPORT
-cmark_node*
-cmark_iter_get_root(cmark_iter *iter);
+cmark_node *cmark_iter_get_root(cmark_iter *iter);
 
 /** Resets the iterator so that the current node is 'current' and
  * the event type is 'event_type'.  The new current node must be a
  * descendant of the root node or the root node itself.
  */
 CMARK_EXPORT
-void
-cmark_iter_reset(cmark_iter *iter, cmark_node *current,
-                 cmark_event_type event_type);
+void cmark_iter_reset(cmark_iter *iter, cmark_node *current,
+                      cmark_event_type event_type);
 
 /**
  * ## Accessors
@@ -231,144 +216,120 @@
 
 /** Returns the user data of 'node'.
  */
-CMARK_EXPORT void*
-cmark_node_get_user_data(cmark_node *node);
+CMARK_EXPORT void *cmark_node_get_user_data(cmark_node *node);
 
 /** Sets arbitrary user data for 'node'.  Returns 1 on success,
  * 0 on failure.
  */
-CMARK_EXPORT int
-cmark_node_set_user_data(cmark_node *node, void *user_data);
+CMARK_EXPORT int cmark_node_set_user_data(cmark_node *node, void *user_data);
 
 /** Returns the type of 'node', or `CMARK_NODE_NONE` on error.
  */
-CMARK_EXPORT cmark_node_type
-cmark_node_get_type(cmark_node *node);
+CMARK_EXPORT cmark_node_type cmark_node_get_type(cmark_node *node);
 
 /** Like 'cmark_node_get_type', but returns a string representation
     of the type, or `"<unknown>"`.
  */
 CMARK_EXPORT
-const char*
-cmark_node_get_type_string(cmark_node *node);
+const char *cmark_node_get_type_string(cmark_node *node);
 
 /** Returns the string contents of 'node', or NULL if none.
  */
-CMARK_EXPORT const char*
-cmark_node_get_literal(cmark_node *node);
+CMARK_EXPORT const char *cmark_node_get_literal(cmark_node *node);
 
 /** Sets the string contents of 'node'.  Returns 1 on success,
  * 0 on failure.
  */
-CMARK_EXPORT int
-cmark_node_set_literal(cmark_node *node, const char *content);
+CMARK_EXPORT int cmark_node_set_literal(cmark_node *node, const char *content);
 
 /** Returns the header level of 'node', or 0 if 'node' is not a header.
  */
-CMARK_EXPORT int
-cmark_node_get_header_level(cmark_node *node);
+CMARK_EXPORT int cmark_node_get_header_level(cmark_node *node);
 
 /** Sets the header level of 'node', returning 1 on success and 0 on error.
  */
-CMARK_EXPORT int
-cmark_node_set_header_level(cmark_node *node, int level);
+CMARK_EXPORT int cmark_node_set_header_level(cmark_node *node, int level);
 
 /** Returns the list type of 'node', or `CMARK_NO_LIST` if 'node'
  * is not a list.
  */
-CMARK_EXPORT cmark_list_type
-cmark_node_get_list_type(cmark_node *node);
+CMARK_EXPORT cmark_list_type cmark_node_get_list_type(cmark_node *node);
 
 /** Sets the list type of 'node', returning 1 on success and 0 on error.
  */
-CMARK_EXPORT int
-cmark_node_set_list_type(cmark_node *node, cmark_list_type type);
+CMARK_EXPORT int cmark_node_set_list_type(cmark_node *node,
+                                          cmark_list_type type);
 
 /** Returns the list delimiter type of 'node', or `CMARK_NO_DELIM` if 'node'
  * is not a list.
  */
-CMARK_EXPORT cmark_delim_type
-cmark_node_get_list_delim(cmark_node *node);
+CMARK_EXPORT cmark_delim_type cmark_node_get_list_delim(cmark_node *node);
 
 /** Sets the list delimiter type of 'node', returning 1 on success and 0
  * on error.
  */
-CMARK_EXPORT int
-cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim);
+CMARK_EXPORT int cmark_node_set_list_delim(cmark_node *node,
+                                           cmark_delim_type delim);
 
 /** Returns starting number of 'node', if it is an ordered list, otherwise 0.
  */
-CMARK_EXPORT int
-cmark_node_get_list_start(cmark_node *node);
+CMARK_EXPORT int cmark_node_get_list_start(cmark_node *node);
 
 /** Sets starting number of 'node', if it is an ordered list. Returns 1
  * on success, 0 on failure.
  */
-CMARK_EXPORT int
-cmark_node_set_list_start(cmark_node *node, int start);
+CMARK_EXPORT int cmark_node_set_list_start(cmark_node *node, int start);
 
 /** Returns 1 if 'node' is a tight list, 0 otherwise.
  */
-CMARK_EXPORT int
-cmark_node_get_list_tight(cmark_node *node);
+CMARK_EXPORT int cmark_node_get_list_tight(cmark_node *node);
 
 /** Sets the "tightness" of a list.  Returns 1 on success, 0 on failure.
  */
-CMARK_EXPORT int
-cmark_node_set_list_tight(cmark_node *node, int tight);
+CMARK_EXPORT int cmark_node_set_list_tight(cmark_node *node, int tight);
 
 /** Returns the info string from a fenced code block, or NULL if none.
  */
-CMARK_EXPORT const char*
-cmark_node_get_fence_info(cmark_node *node);
+CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node);
 
 /** Sets the info string in a fenced code block, returning 1 on
  * success and 0 on failure.
  */
-CMARK_EXPORT int
-cmark_node_set_fence_info(cmark_node *node, const char *info);
+CMARK_EXPORT int cmark_node_set_fence_info(cmark_node *node, const char *info);
 
 /** Gets the URL of a link or image 'node', or NULL if none.
  */
-CMARK_EXPORT const char*
-cmark_node_get_url(cmark_node *node);
+CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node);
 
 /** Sets the URL of a link or image 'node'. Returns 1 on success,
  * 0 on failure.
  */
-CMARK_EXPORT int
-cmark_node_set_url(cmark_node *node, const char *url);
+CMARK_EXPORT int cmark_node_set_url(cmark_node *node, const char *url);
 
 /** Gets the title of a link or image 'node', or NULL if none.
  */
-CMARK_EXPORT const char*
-cmark_node_get_title(cmark_node *node);
+CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node);
 
 /** Sets the title of a link or image 'node'. Returns 1 on success,
  * 0 on failure.
  */
-CMARK_EXPORT int
-cmark_node_set_title(cmark_node *node, const char *title);
+CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title);
 
 /** Returns the line on which 'node' begins.
  */
-CMARK_EXPORT int
-cmark_node_get_start_line(cmark_node *node);
+CMARK_EXPORT int cmark_node_get_start_line(cmark_node *node);
 
 /** Returns the column at which 'node' begins.
  */
-CMARK_EXPORT int
-cmark_node_get_start_column(cmark_node *node);
+CMARK_EXPORT int cmark_node_get_start_column(cmark_node *node);
 
 /** Returns the line on which 'node' ends.
  */
-CMARK_EXPORT int
-cmark_node_get_end_line(cmark_node *node);
+CMARK_EXPORT int cmark_node_get_end_line(cmark_node *node);
 
 /** Returns the column at which 'node' ends.
  */
-CMARK_EXPORT int
-cmark_node_get_end_column(cmark_node *node);
+CMARK_EXPORT int cmark_node_get_end_column(cmark_node *node);
 
 /**
  * ## Tree Manipulation
@@ -377,35 +338,30 @@
 /** Unlinks a 'node', removing it from the tree, but not freeing its
  * memory.  (Use 'cmark_node_free' for that.)
  */
-CMARK_EXPORT void
-cmark_node_unlink(cmark_node *node);
+CMARK_EXPORT void cmark_node_unlink(cmark_node *node);
 
 /** Inserts 'sibling' before 'node'.  Returns 1 on success, 0 on failure.
  */
-CMARK_EXPORT int
-cmark_node_insert_before(cmark_node *node, cmark_node *sibling);
+CMARK_EXPORT int cmark_node_insert_before(cmark_node *node,
+                                          cmark_node *sibling);
 
 /** Inserts 'sibling' after 'node'. Returns 1 on success, 0 on failure.
  */
-CMARK_EXPORT int
-cmark_node_insert_after(cmark_node *node, cmark_node *sibling);
+CMARK_EXPORT int cmark_node_insert_after(cmark_node *node, cmark_node *sibling);
 
 /** Adds 'child' to the beginning of the children of 'node'.
  * Returns 1 on success, 0 on failure.
  */
-CMARK_EXPORT int
-cmark_node_prepend_child(cmark_node *node, cmark_node *child);
+CMARK_EXPORT int cmark_node_prepend_child(cmark_node *node, cmark_node *child);
 
 /** Adds 'child' to the end of the children of 'node'.
  * Returns 1 on success, 0 on failure.
  */
-CMARK_EXPORT int
-cmark_node_append_child(cmark_node *node, cmark_node *child);
+CMARK_EXPORT int cmark_node_append_child(cmark_node *node, cmark_node *child);
 
 /** Consolidates adjacent text nodes.
  */
-CMARK_EXPORT void
-cmark_consolidate_text_nodes(cmark_node *root);
+CMARK_EXPORT void cmark_consolidate_text_nodes(cmark_node *root);
 
 /**
  * ## Parsing
@@ -552,28 +508,28 @@
  */
 
 #ifndef CMARK_NO_SHORT_NAMES
-#define NODE_DOCUMENT             CMARK_NODE_DOCUMENT
-#define NODE_BLOCK_QUOTE          CMARK_NODE_BLOCK_QUOTE
-#define NODE_LIST                 CMARK_NODE_LIST
-#define NODE_ITEM                 CMARK_NODE_ITEM
-#define NODE_CODE_BLOCK           CMARK_NODE_CODE_BLOCK
-#define NODE_HTML                 CMARK_NODE_HTML
-#define NODE_PARAGRAPH            CMARK_NODE_PARAGRAPH
-#define NODE_HEADER		    CMARK_NODE_HEADER
-#define NODE_HRULE                CMARK_NODE_HRULE
-#define NODE_TEXT                 CMARK_NODE_TEXT
-#define NODE_SOFTBREAK            CMARK_NODE_SOFTBREAK
-#define NODE_LINEBREAK            CMARK_NODE_LINEBREAK
-#define NODE_CODE                 CMARK_NODE_CODE
-#define NODE_INLINE_HTML          CMARK_NODE_INLINE_HTML
-#define NODE_EMPH                 CMARK_NODE_EMPH
-#define NODE_STRONG               CMARK_NODE_STRONG
-#define NODE_LINK                 CMARK_NODE_LINK
-#define NODE_IMAGE                CMARK_NODE_IMAGE
-#define BULLET_LIST               CMARK_BULLET_LIST
-#define ORDERED_LIST              CMARK_ORDERED_LIST
-#define PERIOD_DELIM              CMARK_PERIOD_DELIM
-#define PAREN_DELIM               CMARK_PAREN_DELIM
+#define NODE_DOCUMENT CMARK_NODE_DOCUMENT
+#define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE
+#define NODE_LIST CMARK_NODE_LIST
+#define NODE_ITEM CMARK_NODE_ITEM
+#define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK
+#define NODE_HTML CMARK_NODE_HTML
+#define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH
+#define NODE_HEADER CMARK_NODE_HEADER
+#define NODE_HRULE CMARK_NODE_HRULE
+#define NODE_TEXT CMARK_NODE_TEXT
+#define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK
+#define NODE_LINEBREAK CMARK_NODE_LINEBREAK
+#define NODE_CODE CMARK_NODE_CODE
+#define NODE_INLINE_HTML CMARK_NODE_INLINE_HTML
+#define NODE_EMPH CMARK_NODE_EMPH
+#define NODE_STRONG CMARK_NODE_STRONG
+#define NODE_LINK CMARK_NODE_LINK
+#define NODE_IMAGE CMARK_NODE_IMAGE
+#define BULLET_LIST CMARK_BULLET_LIST
+#define ORDERED_LIST CMARK_ORDERED_LIST
+#define PERIOD_DELIM CMARK_PERIOD_DELIM
+#define PAREN_DELIM CMARK_PAREN_DELIM
 #endif
 
 #ifdef __cplusplus
diff --git a/src/cmark_ctype.c b/src/cmark_ctype.c
index 5de8199..863c35e 100644
--- a/src/cmark_ctype.c
+++ b/src/cmark_ctype.c
@@ -5,49 +5,38 @@
 /** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other
  */
 static const int8_t cmark_ctype_class[256] = {
-	/*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
-	/* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
-	/* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	/* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-	/* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2,
-	/* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-	/* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2,
-	/* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-	/* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0,
-	/* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	/* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	/* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	/* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	/* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	/* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	/* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	/* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
+    /*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
+    /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
+    /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    /* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    /* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2,
+    /* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+    /* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2,
+    /* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+    /* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0,
+    /* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    /* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    /* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    /* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    /* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    /* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    /* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    /* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 
 /**
  * Returns 1 if c is a "whitespace" character as defined by the spec.
  */
-int cmark_isspace(char c)
-{
-	return cmark_ctype_class[(int8_t)c] == 1;
-}
+int cmark_isspace(char c) { return cmark_ctype_class[(int8_t)c] == 1; }
 
 /**
  * Returns 1 if c is an ascii punctuation character.
  */
-int cmark_ispunct(char c)
-{
-	return cmark_ctype_class[(int8_t)c] == 2;
+int cmark_ispunct(char c) { return cmark_ctype_class[(int8_t)c] == 2; }
+
+int cmark_isalnum(char c) {
+  int8_t result;
+  result = cmark_ctype_class[(int8_t)c];
+  return (result == 3 || result == 4);
 }
 
-int cmark_isalnum(char c)
-{
-	int8_t result;
-	result = cmark_ctype_class[(int8_t)c];
-	return (result == 3 || result == 4);
-}
-
-int cmark_isdigit(char c)
-{
-	return cmark_ctype_class[(int8_t)c] == 3;
-}
+int cmark_isdigit(char c) { return cmark_ctype_class[(int8_t)c] == 3; }
diff --git a/src/commonmark.c b/src/commonmark.c
index 5964c60..da81623 100644
--- a/src/commonmark.c
+++ b/src/commonmark.c
@@ -20,445 +20,408 @@
 
 // Functions to convert cmark_nodes to commonmark strings.
 
-static inline void outc(cmark_renderer *renderer,
-                        cmark_escaping escape,
-                        int32_t c,
-                        unsigned char nextc)
-{
-	bool needs_escaping = false;
-	char encoded[20];
+static inline void outc(cmark_renderer *renderer, cmark_escaping escape,
+                        int32_t c, unsigned char nextc) {
+  bool needs_escaping = false;
+  char encoded[20];
 
-	needs_escaping =
-	    escape != LITERAL &&
-	    ((escape == NORMAL &&
-	      (c == '*' || c == '_' || c == '[' || c == ']' || c == '#' ||
-	       c == '<' || c == '>' || c == '\\' || c == '`' || c == '!' ||
-	       (c == '&' && isalpha(nextc)) ||
-	       (c == '!' && nextc == '[') ||
-	       (renderer->begin_line &&
-	        (c == '-' || c == '+' || c == '=')) ||
-	       ((c == '.' || c == ')') &&
-	        isdigit(renderer->buffer->ptr[renderer->buffer->size - 1])))) ||
-	     (escape == URL &&
-	      (c == '`' || c == '<' || c == '>' || isspace(c) ||
-	       c == '\\' || c == ')' || c == '(')) ||
-	     (escape == TITLE &&
-	      (c == '`' || c == '<' || c == '>' || c == '"' ||
-	       c == '\\')));
+  needs_escaping =
+      escape != LITERAL &&
+      ((escape == NORMAL &&
+        (c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' ||
+         c == '>' || c == '\\' || c == '`' || c == '!' ||
+         (c == '&' && isalpha(nextc)) || (c == '!' && nextc == '[') ||
+         (renderer->begin_line && (c == '-' || c == '+' || c == '=')) ||
+         ((c == '.' || c == ')') &&
+          isdigit(renderer->buffer->ptr[renderer->buffer->size - 1])))) ||
+       (escape == URL && (c == '`' || c == '<' || c == '>' || isspace(c) ||
+                          c == '\\' || c == ')' || c == '(')) ||
+       (escape == TITLE &&
+        (c == '`' || c == '<' || c == '>' || c == '"' || c == '\\')));
 
-	if (needs_escaping) {
-		if (isspace(c)) {
-			// use percent encoding for spaces
-			sprintf(encoded, "%%%2x", c);
-			cmark_strbuf_puts(renderer->buffer, encoded);
-			renderer->column += 3;
-		} else {
-			cmark_render_ascii(renderer, "\\");
-			cmark_render_code_point(renderer, c);
-		}
-	} else {
-		cmark_render_code_point(renderer, c);
-	}
+  if (needs_escaping) {
+    if (isspace(c)) {
+      // use percent encoding for spaces
+      sprintf(encoded, "%%%2x", c);
+      cmark_strbuf_puts(renderer->buffer, encoded);
+      renderer->column += 3;
+    } else {
+      cmark_render_ascii(renderer, "\\");
+      cmark_render_code_point(renderer, c);
+    }
+  } else {
+    cmark_render_code_point(renderer, c);
+  }
 }
 
-static int
-longest_backtick_sequence(const char *code)
-{
-	int longest = 0;
-	int current = 0;
-	size_t i = 0;
-	size_t code_len = safe_strlen(code);
-	while (i <= code_len) {
-		if (code[i] == '`') {
-			current++;
-		} else {
-			if (current > longest) {
-				longest = current;
-			}
-			current = 0;
-		}
-		i++;
-	}
-	return longest;
+static int longest_backtick_sequence(const char *code) {
+  int longest = 0;
+  int current = 0;
+  size_t i = 0;
+  size_t code_len = safe_strlen(code);
+  while (i <= code_len) {
+    if (code[i] == '`') {
+      current++;
+    } else {
+      if (current > longest) {
+        longest = current;
+      }
+      current = 0;
+    }
+    i++;
+  }
+  return longest;
 }
 
-static int
-shortest_unused_backtick_sequence(const char *code)
-{
-	int32_t used = 1;
-	int current = 0;
-	size_t i = 0;
-	size_t code_len = safe_strlen(code);
-	while (i <= code_len) {
-		if (code[i] == '`') {
-			current++;
-		} else {
-			if (current) {
-				used |= (1 << current);
-			}
-			current = 0;
-		}
-		i++;
-	}
-	// return number of first bit that is 0:
-	i = 0;
-	while (used & 1) {
-		used = used >> 1;
-		i++;
-	}
-	return i;
+static int shortest_unused_backtick_sequence(const char *code) {
+  int32_t used = 1;
+  int current = 0;
+  size_t i = 0;
+  size_t code_len = safe_strlen(code);
+  while (i <= code_len) {
+    if (code[i] == '`') {
+      current++;
+    } else {
+      if (current) {
+        used |= (1 << current);
+      }
+      current = 0;
+    }
+    i++;
+  }
+  // return number of first bit that is 0:
+  i = 0;
+  while (used & 1) {
+    used = used >> 1;
+    i++;
+  }
+  return i;
 }
 
-static bool
-is_autolink(cmark_node *node)
-{
-	cmark_chunk *title;
-	cmark_chunk *url;
-	cmark_node *link_text;
-	char *realurl;
-	int realurllen;
+static bool is_autolink(cmark_node *node) {
+  cmark_chunk *title;
+  cmark_chunk *url;
+  cmark_node *link_text;
+  char *realurl;
+  int realurllen;
 
-	if (node->type != CMARK_NODE_LINK) {
-		return false;
-	}
+  if (node->type != CMARK_NODE_LINK) {
+    return false;
+  }
 
-	url = &node->as.link.url;
-	if (url->len == 0 || scan_scheme(url, 0) == 0) {
-		return false;
-	}
+  url = &node->as.link.url;
+  if (url->len == 0 || scan_scheme(url, 0) == 0) {
+    return false;
+  }
 
-	title = &node->as.link.title;
-	// if it has a title, we can't treat it as an autolink:
-	if (title->len > 0) {
-		return false;
-	}
+  title = &node->as.link.title;
+  // if it has a title, we can't treat it as an autolink:
+  if (title->len > 0) {
+    return false;
+  }
 
-	link_text = node->first_child;
-	cmark_consolidate_text_nodes(link_text);
-	realurl = (char*)url->data;
-	realurllen = url->len;
-	if (strncmp(realurl, "mailto:", 7) == 0) {
-		realurl += 7;
-		realurllen -= 7;
-	}
-	return (realurllen == link_text->as.literal.len &&
-	        strncmp(realurl,
-	                (char*)link_text->as.literal.data,
-	                link_text->as.literal.len) == 0);
+  link_text = node->first_child;
+  cmark_consolidate_text_nodes(link_text);
+  realurl = (char *)url->data;
+  realurllen = url->len;
+  if (strncmp(realurl, "mailto:", 7) == 0) {
+    realurl += 7;
+    realurllen -= 7;
+  }
+  return (realurllen == link_text->as.literal.len &&
+          strncmp(realurl, (char *)link_text->as.literal.data,
+                  link_text->as.literal.len) == 0);
 }
 
 // if node is a block node, returns node.
 // otherwise returns first block-level node that is an ancestor of node.
-static cmark_node*
-get_containing_block(cmark_node *node)
-{
-	while (node &&
-	       (node->type < CMARK_NODE_FIRST_BLOCK ||
-	        node->type > CMARK_NODE_LAST_BLOCK)) {
-		node = node->parent;
-	}
-	return node;
+static cmark_node *get_containing_block(cmark_node *node) {
+  while (node && (node->type < CMARK_NODE_FIRST_BLOCK ||
+                  node->type > CMARK_NODE_LAST_BLOCK)) {
+    node = node->parent;
+  }
+  return node;
 }
 
-static int
-S_render_node(cmark_renderer *renderer,
-              cmark_node *node,
-              cmark_event_type ev_type,
-              int options)
-{
-	cmark_node *tmp;
-	int list_number;
-	cmark_delim_type list_delim;
-	int numticks;
-	int i;
-	bool entering = (ev_type == CMARK_EVENT_ENTER);
-	const char *info, *code, *title;
-	size_t info_len, code_len;
-	char listmarker[20];
-	char *emph_delim;
-	bufsize_t marker_width;
+static int S_render_node(cmark_renderer *renderer, cmark_node *node,
+                         cmark_event_type ev_type, int options) {
+  cmark_node *tmp;
+  int list_number;
+  cmark_delim_type list_delim;
+  int numticks;
+  int i;
+  bool entering = (ev_type == CMARK_EVENT_ENTER);
+  const char *info, *code, *title;
+  size_t info_len, code_len;
+  char listmarker[20];
+  char *emph_delim;
+  bufsize_t marker_width;
 
-	// Don't adjust tight list status til we've started the list.
-	// Otherwise we loose the blank line between a paragraph and
-	// a following list.
-	if (!(node->type == CMARK_NODE_ITEM && node->prev == NULL &&
-	      entering)) {
-		tmp = get_containing_block(node);
-		renderer->in_tight_list_item =
-		    (tmp->type == CMARK_NODE_ITEM &&
-		     cmark_node_get_list_tight(tmp->parent)) ||
-		    (tmp &&
-		     tmp->parent &&
-		     tmp->parent->type == CMARK_NODE_ITEM &&
-		     cmark_node_get_list_tight(tmp->parent->parent));
-	}
+  // Don't adjust tight list status til we've started the list.
+  // Otherwise we loose the blank line between a paragraph and
+  // a following list.
+  if (!(node->type == CMARK_NODE_ITEM && node->prev == NULL && entering)) {
+    tmp = get_containing_block(node);
+    renderer->in_tight_list_item =
+        (tmp->type == CMARK_NODE_ITEM &&
+         cmark_node_get_list_tight(tmp->parent)) ||
+        (tmp && tmp->parent && tmp->parent->type == CMARK_NODE_ITEM &&
+         cmark_node_get_list_tight(tmp->parent->parent));
+  }
 
-	switch (node->type) {
-	case CMARK_NODE_DOCUMENT:
-		break;
+  switch (node->type) {
+  case CMARK_NODE_DOCUMENT:
+    break;
 
-	case CMARK_NODE_BLOCK_QUOTE:
-		if (entering) {
-			LIT("> ");
-			cmark_strbuf_puts(renderer->prefix, "> ");
-		} else {
-			cmark_strbuf_truncate(renderer->prefix,
-			                      renderer->prefix->size - 2);
-			BLANKLINE();
-		}
-		break;
+  case CMARK_NODE_BLOCK_QUOTE:
+    if (entering) {
+      LIT("> ");
+      cmark_strbuf_puts(renderer->prefix, "> ");
+    } else {
+      cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 2);
+      BLANKLINE();
+    }
+    break;
 
-	case CMARK_NODE_LIST:
-		if (!entering && node->next &&
-		    (node->next->type == CMARK_NODE_CODE_BLOCK ||
-		     node->next->type == CMARK_NODE_LIST)) {
-			// this ensures 2 blank lines after list,
-			// if before code block or list:
-			LIT("\n");
-		}
-		break;
+  case CMARK_NODE_LIST:
+    if (!entering && node->next && (node->next->type == CMARK_NODE_CODE_BLOCK ||
+                                    node->next->type == CMARK_NODE_LIST)) {
+      // this ensures 2 blank lines after list,
+      // if before code block or list:
+      LIT("\n");
+    }
+    break;
 
-	case CMARK_NODE_ITEM:
-		if (cmark_node_get_list_type(node->parent) ==
-		    CMARK_BULLET_LIST) {
-			marker_width = 2;
-		} else {
-			list_number = cmark_node_get_list_start(node->parent);
-			list_delim = cmark_node_get_list_delim(node->parent);
-			tmp = node;
-			while (tmp->prev) {
-				tmp = tmp->prev;
-				list_number += 1;
-			}
-			// we ensure a width of at least 4 so
-			// we get nice transition from single digits
-			// to double
-			sprintf(listmarker,
-				"%d%s%s", list_number,
-				list_delim == CMARK_PAREN_DELIM ?
-				")" : ".",
-				list_number < 10 ? "  " : " ");
-			marker_width = safe_strlen(listmarker);
-		}
-		if (entering) {
-			if (cmark_node_get_list_type(node->parent) ==
-			    CMARK_BULLET_LIST) {
-				LIT("* ");
-				cmark_strbuf_puts(renderer->prefix, "  ");
-			} else {
-				LIT(listmarker);
-				for (i = marker_width; i--;) {
-					cmark_strbuf_putc(renderer->prefix, ' ');
-				}
-			}
-		} else {
-			cmark_strbuf_truncate(renderer->prefix,
-			                      renderer->prefix->size -
-			                      marker_width);
-			CR();
-		}
-		break;
+  case CMARK_NODE_ITEM:
+    if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
+      marker_width = 2;
+    } else {
+      list_number = cmark_node_get_list_start(node->parent);
+      list_delim = cmark_node_get_list_delim(node->parent);
+      tmp = node;
+      while (tmp->prev) {
+        tmp = tmp->prev;
+        list_number += 1;
+      }
+      // we ensure a width of at least 4 so
+      // we get nice transition from single digits
+      // to double
+      sprintf(listmarker, "%d%s%s", list_number,
+              list_delim == CMARK_PAREN_DELIM ? ")" : ".",
+              list_number < 10 ? "  " : " ");
+      marker_width = safe_strlen(listmarker);
+    }
+    if (entering) {
+      if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
+        LIT("* ");
+        cmark_strbuf_puts(renderer->prefix, "  ");
+      } else {
+        LIT(listmarker);
+        for (i = marker_width; i--;) {
+          cmark_strbuf_putc(renderer->prefix, ' ');
+        }
+      }
+    } else {
+      cmark_strbuf_truncate(renderer->prefix,
+                            renderer->prefix->size - marker_width);
+      CR();
+    }
+    break;
 
-	case CMARK_NODE_HEADER:
-		if (entering) {
-			for (int i = cmark_node_get_header_level(node); i > 0; i--) {
-				LIT("#");
-			}
-			LIT(" ");
-			renderer->no_wrap = true;
-		} else {
-			renderer->no_wrap = false;
-			BLANKLINE();
-		}
-		break;
+  case CMARK_NODE_HEADER:
+    if (entering) {
+      for (int i = cmark_node_get_header_level(node); i > 0; i--) {
+        LIT("#");
+      }
+      LIT(" ");
+      renderer->no_wrap = true;
+    } else {
+      renderer->no_wrap = false;
+      BLANKLINE();
+    }
+    break;
 
-	case CMARK_NODE_CODE_BLOCK:
-		BLANKLINE();
-		info = cmark_node_get_fence_info(node);
-		info_len = safe_strlen(info);
-		code = cmark_node_get_literal(node);
-		code_len = safe_strlen(code);
-		// use indented form if no info, and code doesn't
-		// begin or end with a blank line, and code isn't
-		// first thing in a list item
-		if (info_len == 0 &&
-		    (code_len > 2 &&
-		     !isspace(code[0]) &&
-		     !(isspace(code[code_len - 1]) &&
-		       isspace(code[code_len - 2]))) &&
-		    !(node->prev == NULL && node->parent &&
-		      node->parent->type == CMARK_NODE_ITEM)) {
-			LIT("    ");
-			cmark_strbuf_puts(renderer->prefix, "    ");
-			OUT(cmark_node_get_literal(node), false, LITERAL);
-			cmark_strbuf_truncate(renderer->prefix,
-			                      renderer->prefix->size - 4);
-		} else {
-			numticks = longest_backtick_sequence(code) + 1;
-			if (numticks < 3) {
-				numticks = 3;
-			}
-			for (i = 0; i < numticks; i++) {
-				LIT("`");
-			}
-			LIT(" ");
-			OUT(info, false, LITERAL);
-			CR();
-			OUT(cmark_node_get_literal(node), false, LITERAL);
-			CR();
-			for (i = 0; i < numticks; i++) {
-				LIT("`");
-			}
-		}
-		BLANKLINE();
-		break;
+  case CMARK_NODE_CODE_BLOCK:
+    BLANKLINE();
+    info = cmark_node_get_fence_info(node);
+    info_len = safe_strlen(info);
+    code = cmark_node_get_literal(node);
+    code_len = safe_strlen(code);
+    // use indented form if no info, and code doesn't
+    // begin or end with a blank line, and code isn't
+    // first thing in a list item
+    if (info_len == 0 &&
+        (code_len > 2 && !isspace(code[0]) &&
+         !(isspace(code[code_len - 1]) && isspace(code[code_len - 2]))) &&
+        !(node->prev == NULL && node->parent &&
+          node->parent->type == CMARK_NODE_ITEM)) {
+      LIT("    ");
+      cmark_strbuf_puts(renderer->prefix, "    ");
+      OUT(cmark_node_get_literal(node), false, LITERAL);
+      cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 4);
+    } else {
+      numticks = longest_backtick_sequence(code) + 1;
+      if (numticks < 3) {
+        numticks = 3;
+      }
+      for (i = 0; i < numticks; i++) {
+        LIT("`");
+      }
+      LIT(" ");
+      OUT(info, false, LITERAL);
+      CR();
+      OUT(cmark_node_get_literal(node), false, LITERAL);
+      CR();
+      for (i = 0; i < numticks; i++) {
+        LIT("`");
+      }
+    }
+    BLANKLINE();
+    break;
 
-	case CMARK_NODE_HTML:
-		BLANKLINE();
-		OUT(cmark_node_get_literal(node), false, LITERAL);
-		BLANKLINE();
-		break;
+  case CMARK_NODE_HTML:
+    BLANKLINE();
+    OUT(cmark_node_get_literal(node), false, LITERAL);
+    BLANKLINE();
+    break;
 
-	case CMARK_NODE_HRULE:
-		BLANKLINE();
-		LIT("-----");
-		BLANKLINE();
-		break;
+  case CMARK_NODE_HRULE:
+    BLANKLINE();
+    LIT("-----");
+    BLANKLINE();
+    break;
 
-	case CMARK_NODE_PARAGRAPH:
-		if (!entering) {
-			BLANKLINE();
-		}
-		break;
+  case CMARK_NODE_PARAGRAPH:
+    if (!entering) {
+      BLANKLINE();
+    }
+    break;
 
-	case CMARK_NODE_TEXT:
-		OUT(cmark_node_get_literal(node), true, NORMAL);
-		break;
+  case CMARK_NODE_TEXT:
+    OUT(cmark_node_get_literal(node), true, NORMAL);
+    break;
 
-	case CMARK_NODE_LINEBREAK:
-		if (!(CMARK_OPT_HARDBREAKS & options)) {
-			LIT("\\");
-		}
-		CR();
-		break;
+  case CMARK_NODE_LINEBREAK:
+    if (!(CMARK_OPT_HARDBREAKS & options)) {
+      LIT("\\");
+    }
+    CR();
+    break;
 
-	case CMARK_NODE_SOFTBREAK:
-		if (renderer->width == 0 &&
-		    !(CMARK_OPT_HARDBREAKS & options)) {
-			CR();
-		} else {
-			OUT(" ", true, LITERAL);
-		}
-		break;
+  case CMARK_NODE_SOFTBREAK:
+    if (renderer->width == 0 && !(CMARK_OPT_HARDBREAKS & options)) {
+      CR();
+    } else {
+      OUT(" ", true, LITERAL);
+    }
+    break;
 
-	case CMARK_NODE_CODE:
-		code = cmark_node_get_literal(node);
-		code_len = safe_strlen(code);
-		numticks = shortest_unused_backtick_sequence(code);
-		for (i = 0; i < numticks; i++) {
-			LIT("`");
-		}
-		if (code_len == 0 || code[0] == '`') {
-			LIT(" ");
-		}
-		OUT(cmark_node_get_literal(node), true, LITERAL);
-		if (code_len == 0 || code[code_len - 1] == '`') {
-			LIT(" ");
-		}
-		for (i = 0; i < numticks; i++) {
-			LIT("`");
-		}
-		break;
+  case CMARK_NODE_CODE:
+    code = cmark_node_get_literal(node);
+    code_len = safe_strlen(code);
+    numticks = shortest_unused_backtick_sequence(code);
+    for (i = 0; i < numticks; i++) {
+      LIT("`");
+    }
+    if (code_len == 0 || code[0] == '`') {
+      LIT(" ");
+    }
+    OUT(cmark_node_get_literal(node), true, LITERAL);
+    if (code_len == 0 || code[code_len - 1] == '`') {
+      LIT(" ");
+    }
+    for (i = 0; i < numticks; i++) {
+      LIT("`");
+    }
+    break;
 
-	case CMARK_NODE_INLINE_HTML:
-		OUT(cmark_node_get_literal(node), false, LITERAL);
-		break;
+  case CMARK_NODE_INLINE_HTML:
+    OUT(cmark_node_get_literal(node), false, LITERAL);
+    break;
 
-	case CMARK_NODE_STRONG:
-		if (entering) {
-			LIT("**");
-		} else {
-			LIT("**");
-		}
-		break;
+  case CMARK_NODE_STRONG:
+    if (entering) {
+      LIT("**");
+    } else {
+      LIT("**");
+    }
+    break;
 
-	case CMARK_NODE_EMPH:
-		// If we have EMPH(EMPH(x)), we need to use *_x_*
-		// because **x** is STRONG(x):
-		if (node->parent && node->parent->type == CMARK_NODE_EMPH &&
-		    node->next == NULL && node->prev == NULL) {
-			emph_delim = "_";
-		} else {
-			emph_delim = "*";
-		}
-		if (entering) {
-			LIT(emph_delim);
-		} else {
-			LIT(emph_delim);
-		}
-		break;
+  case CMARK_NODE_EMPH:
+    // If we have EMPH(EMPH(x)), we need to use *_x_*
+    // because **x** is STRONG(x):
+    if (node->parent && node->parent->type == CMARK_NODE_EMPH &&
+        node->next == NULL && node->prev == NULL) {
+      emph_delim = "_";
+    } else {
+      emph_delim = "*";
+    }
+    if (entering) {
+      LIT(emph_delim);
+    } else {
+      LIT(emph_delim);
+    }
+    break;
 
-	case CMARK_NODE_LINK:
-		if (is_autolink(node)) {
-			if (entering) {
-				LIT("<");
-				if (strncmp(cmark_node_get_url(node),
-				            "mailto:", 7) == 0) {
-					LIT((char *)cmark_node_get_url(node) + 7);
-				} else {
-					LIT((char *)cmark_node_get_url(node));
-				}
-				LIT(">");
-				// return signal to skip contents of node...
-				return 0;
-			}
-		} else {
-			if (entering) {
-				LIT("[");
-			} else {
-				LIT("](");
-				OUT(cmark_node_get_url(node), false, URL);
-				title = cmark_node_get_title(node);
-				if (safe_strlen(title) > 0) {
-					LIT(" \"");
-					OUT(title, false, TITLE);
-					LIT("\"");
-				}
-				LIT(")");
-			}
-		}
-		break;
+  case CMARK_NODE_LINK:
+    if (is_autolink(node)) {
+      if (entering) {
+        LIT("<");
+        if (strncmp(cmark_node_get_url(node), "mailto:", 7) == 0) {
+          LIT((char *)cmark_node_get_url(node) + 7);
+        } else {
+          LIT((char *)cmark_node_get_url(node));
+        }
+        LIT(">");
+        // return signal to skip contents of node...
+        return 0;
+      }
+    } else {
+      if (entering) {
+        LIT("[");
+      } else {
+        LIT("](");
+        OUT(cmark_node_get_url(node), false, URL);
+        title = cmark_node_get_title(node);
+        if (safe_strlen(title) > 0) {
+          LIT(" \"");
+          OUT(title, false, TITLE);
+          LIT("\"");
+        }
+        LIT(")");
+      }
+    }
+    break;
 
-	case CMARK_NODE_IMAGE:
-		if (entering) {
-			LIT("![");
-		} else {
-			LIT("](");
-			OUT(cmark_node_get_url(node), false, URL);
-			title = cmark_node_get_title(node);
-			if (safe_strlen(title) > 0) {
-				OUT(" \"", true, LITERAL);
-				OUT(title, false, TITLE);
-				LIT("\"");
-			}
-			LIT(")");
-		}
-		break;
+  case CMARK_NODE_IMAGE:
+    if (entering) {
+      LIT("![");
+    } else {
+      LIT("](");
+      OUT(cmark_node_get_url(node), false, URL);
+      title = cmark_node_get_title(node);
+      if (safe_strlen(title) > 0) {
+        OUT(" \"", true, LITERAL);
+        OUT(title, false, TITLE);
+        LIT("\"");
+      }
+      LIT(")");
+    }
+    break;
 
-	default:
-		assert(false);
-		break;
-	}
+  default:
+    assert(false);
+    break;
+  }
 
-	return 1;
+  return 1;
 }
 
-char *cmark_render_commonmark(cmark_node *root, int options, int width)
-{
-	if (options & CMARK_OPT_HARDBREAKS) {
-		// disable breaking on width, since it has
-		// a different meaning with OPT_HARDBREAKS
-		width = 0;
-	}
-	return cmark_render(root, options, width, outc, S_render_node);
+char *cmark_render_commonmark(cmark_node *root, int options, int width) {
+  if (options & CMARK_OPT_HARDBREAKS) {
+    // disable breaking on width, since it has
+    // a different meaning with OPT_HARDBREAKS
+    width = 0;
+  }
+  return cmark_render(root, options, width, outc, S_render_node);
 }
diff --git a/src/houdini.h b/src/houdini.h
index b926cf3..f738e82 100644
--- a/src/houdini.h
+++ b/src/houdini.h
@@ -10,33 +10,39 @@
 #include "buffer.h"
 
 #ifdef HAVE___BUILTIN_EXPECT
-#	define likely(x)	__builtin_expect((x),1)
-#	define unlikely(x)	__builtin_expect((x),0)
+#define likely(x) __builtin_expect((x), 1)
+#define unlikely(x) __builtin_expect((x), 0)
 #else
-#	define likely(x)	(x)
-#	define unlikely(x)	(x)
+#define likely(x) (x)
+#define unlikely(x) (x)
 #endif
 
 #ifdef HOUDINI_USE_LOCALE
-#	define _isxdigit(c) isxdigit(c)
-#	define _isdigit(c) isdigit(c)
+#define _isxdigit(c) isxdigit(c)
+#define _isdigit(c) isdigit(c)
 #else
 /*
  * Helper _isdigit methods -- do not trust the current locale
  * */
-#	define _isxdigit(c) (strchr("0123456789ABCDEFabcdef", (c)) != NULL)
-#	define _isdigit(c) ((c) >= '0' && (c) <= '9')
+#define _isxdigit(c) (strchr("0123456789ABCDEFabcdef", (c)) != NULL)
+#define _isdigit(c) ((c) >= '0' && (c) <= '9')
 #endif
 
-#define HOUDINI_ESCAPED_SIZE(x) (((x) * 12) / 10)
+#define HOUDINI_ESCAPED_SIZE(x) (((x)*12) / 10)
 #define HOUDINI_UNESCAPED_SIZE(x) (x)
 
-extern bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, bufsize_t size);
-extern int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size);
-extern int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size, int secure);
-extern int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size);
-extern void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, bufsize_t size);
-extern int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size);
+extern bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src,
+                                      bufsize_t size);
+extern int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src,
+                               bufsize_t size);
+extern int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src,
+                                bufsize_t size, int secure);
+extern int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src,
+                                 bufsize_t size);
+extern void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src,
+                                    bufsize_t size);
+extern int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src,
+                               bufsize_t size);
 
 #ifdef __cplusplus
 }
diff --git a/src/houdini_href_e.c b/src/houdini_href_e.c
index 7fb958a..9152803 100644
--- a/src/houdini_href_e.c
+++ b/src/houdini_href_e.c
@@ -30,78 +30,71 @@
  *
  */
 static const char HREF_SAFE[] = {
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1,
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
-	0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
+    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 };
 
-int
-houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size)
-{
-	static const uint8_t hex_chars[] = "0123456789ABCDEF";
-	bufsize_t i = 0, org;
-	uint8_t hex_str[3];
+int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) {
+  static const uint8_t hex_chars[] = "0123456789ABCDEF";
+  bufsize_t i = 0, org;
+  uint8_t hex_str[3];
 
-	hex_str[0] = '%';
+  hex_str[0] = '%';
 
-	while (i < size) {
-		org = i;
-		while (i < size && HREF_SAFE[src[i]] != 0)
-			i++;
+  while (i < size) {
+    org = i;
+    while (i < size && HREF_SAFE[src[i]] != 0)
+      i++;
 
-		if (likely(i > org))
-			cmark_strbuf_put(ob, src + org, i - org);
+    if (likely(i > org))
+      cmark_strbuf_put(ob, src + org, i - org);
 
-		/* escaping */
-		if (i >= size)
-			break;
+    /* escaping */
+    if (i >= size)
+      break;
 
-		switch (src[i]) {
-		/* amp appears all the time in URLs, but needs
-		 * HTML-entity escaping to be inside an href */
-		case '&':
-			cmark_strbuf_puts(ob, "&amp;");
-			break;
+    switch (src[i]) {
+    /* amp appears all the time in URLs, but needs
+     * HTML-entity escaping to be inside an href */
+    case '&':
+      cmark_strbuf_puts(ob, "&amp;");
+      break;
 
-		/* the single quote is a valid URL character
-		 * according to the standard; it needs HTML
-		 * entity escaping too */
-		case '\'':
-			cmark_strbuf_puts(ob, "&#x27;");
-			break;
+    /* the single quote is a valid URL character
+     * according to the standard; it needs HTML
+     * entity escaping too */
+    case '\'':
+      cmark_strbuf_puts(ob, "&#x27;");
+      break;
 
-			/* the space can be escaped to %20 or a plus
-			 * sign. we're going with the generic escape
-			 * for now. the plus thing is more commonly seen
-			 * when building GET strings */
+/* the space can be escaped to %20 or a plus
+ * sign. we're going with the generic escape
+ * for now. the plus thing is more commonly seen
+ * when building GET strings */
 #if 0
 		case ' ':
 			cmark_strbuf_putc(ob, '+');
 			break;
 #endif
 
-		/* every other character goes with a %XX escaping */
-		default:
-			hex_str[1] = hex_chars[(src[i] >> 4) & 0xF];
-			hex_str[2] = hex_chars[src[i] & 0xF];
-			cmark_strbuf_put(ob, hex_str, 3);
-		}
+    /* every other character goes with a %XX escaping */
+    default:
+      hex_str[1] = hex_chars[(src[i] >> 4) & 0xF];
+      hex_str[2] = hex_chars[src[i] & 0xF];
+      cmark_strbuf_put(ob, hex_str, 3);
+    }
 
-		i++;
-	}
+    i++;
+  }
 
-	return 1;
+  return 1;
 }
diff --git a/src/houdini_html_e.c b/src/houdini_html_e.c
index 7f4b91f..0e539f0 100644
--- a/src/houdini_html_e.c
+++ b/src/houdini_html_e.c
@@ -16,66 +16,51 @@
  *
  */
 static const char HTML_ESCAPE_TABLE[] = {
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 };
 
-static const char *HTML_ESCAPES[] = {
-	"",
-	"&quot;",
-	"&amp;",
-	"&#39;",
-	"&#47;",
-	"&lt;",
-	"&gt;"
-};
+static const char *HTML_ESCAPES[] = {"",      "&quot;", "&amp;", "&#39;",
+                                     "&#47;", "&lt;",   "&gt;"};
 
-int
-houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size, int secure)
-{
-	bufsize_t i = 0, org, esc = 0;
+int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size,
+                         int secure) {
+  bufsize_t i = 0, org, esc = 0;
 
-	while (i < size) {
-		org = i;
-		while (i < size && (esc = HTML_ESCAPE_TABLE[src[i]]) == 0)
-			i++;
+  while (i < size) {
+    org = i;
+    while (i < size && (esc = HTML_ESCAPE_TABLE[src[i]]) == 0)
+      i++;
 
-		if (i > org)
-			cmark_strbuf_put(ob, src + org, i - org);
+    if (i > org)
+      cmark_strbuf_put(ob, src + org, i - org);
 
-		/* escaping */
-		if (unlikely(i >= size))
-			break;
+    /* escaping */
+    if (unlikely(i >= size))
+      break;
 
-		/* The forward slash is only escaped in secure mode */
-		if ((src[i] == '/' || src[i] == '\'') && !secure) {
-			cmark_strbuf_putc(ob, src[i]);
-		} else {
-			cmark_strbuf_puts(ob, HTML_ESCAPES[esc]);
-		}
+    /* The forward slash is only escaped in secure mode */
+    if ((src[i] == '/' || src[i] == '\'') && !secure) {
+      cmark_strbuf_putc(ob, src[i]);
+    } else {
+      cmark_strbuf_puts(ob, HTML_ESCAPES[esc]);
+    }
 
-		i++;
-	}
+    i++;
+  }
 
-	return 1;
+  return 1;
 }
 
-int
-houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size)
-{
-	return houdini_escape_html0(ob, src, size, 1);
+int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) {
+  return houdini_escape_html0(ob, src, size, 1);
 }
diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c
index 002357d..7bb1f50 100644
--- a/src/houdini_html_u.c
+++ b/src/houdini_html_u.c
@@ -9,145 +9,140 @@
 
 /* Binary tree lookup code for entities added by JGM */
 
-static unsigned char *
-S_lookup(int i, int low, int hi, const unsigned char *s, int len)
-{
-	int j;
-	int cmp = strncmp((char *)s, (char *)cmark_entities[i].entity, len);
-	if (cmp == 0 && cmark_entities[i].entity[len] == 0) {
-		return (unsigned char *)cmark_entities[i].bytes;
-	} else if (cmp < 0 && i > low) {
-		j = i - ((i - low) / 2);
-		if (j == i) j -= 1;
-		return S_lookup(j, low, i - 1, s, len);
-	} else if (cmp > 0 && i < hi) {
-		j = i + ((hi - i) / 2);
-		if (j == i) j += 1;
-		return S_lookup(j, i + 1, hi, s, len);
-	} else {
-		return NULL;
-	}
+static unsigned char *S_lookup(int i, int low, int hi, const unsigned char *s,
+                               int len) {
+  int j;
+  int cmp = strncmp((char *)s, (char *)cmark_entities[i].entity, len);
+  if (cmp == 0 && cmark_entities[i].entity[len] == 0) {
+    return (unsigned char *)cmark_entities[i].bytes;
+  } else if (cmp < 0 && i > low) {
+    j = i - ((i - low) / 2);
+    if (j == i)
+      j -= 1;
+    return S_lookup(j, low, i - 1, s, len);
+  } else if (cmp > 0 && i < hi) {
+    j = i + ((hi - i) / 2);
+    if (j == i)
+      j += 1;
+    return S_lookup(j, i + 1, hi, s, len);
+  } else {
+    return NULL;
+  }
 }
 
-static unsigned char *
-S_lookup_entity(const unsigned char *s, int len)
-{
-	return S_lookup(CMARK_NUM_ENTITIES / 2, 0, CMARK_NUM_ENTITIES - 1, s, len);
+static unsigned char *S_lookup_entity(const unsigned char *s, int len) {
+  return S_lookup(CMARK_NUM_ENTITIES / 2, 0, CMARK_NUM_ENTITIES - 1, s, len);
 }
 
-bufsize_t
-houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, bufsize_t size)
-{
-	bufsize_t i = 0;
+bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src,
+                               bufsize_t size) {
+  bufsize_t i = 0;
 
-	if (size >= 3 && src[0] == '#') {
-		int codepoint  = 0;
-		int num_digits = 0;
+  if (size >= 3 && src[0] == '#') {
+    int codepoint = 0;
+    int num_digits = 0;
 
-		if (_isdigit(src[1])) {
-			for (i = 1; i < size && _isdigit(src[i]); ++i) {
-				codepoint = (codepoint * 10) + (src[i] - '0');
+    if (_isdigit(src[1])) {
+      for (i = 1; i < size && _isdigit(src[i]); ++i) {
+        codepoint = (codepoint * 10) + (src[i] - '0');
 
-				if (codepoint >= 0x110000) {
-					// Keep counting digits but
-					// avoid integer overflow.
-					codepoint = 0x110000;
-				}
-			}
+        if (codepoint >= 0x110000) {
+          // Keep counting digits but
+          // avoid integer overflow.
+          codepoint = 0x110000;
+        }
+      }
 
-			num_digits = i - 1;
-		}
+      num_digits = i - 1;
+    }
 
-		else if (src[1] == 'x' || src[1] == 'X') {
-			for (i = 2; i < size && _isxdigit(src[i]); ++i) {
-				codepoint = (codepoint * 16) + ((src[i] | 32) % 39 - 9);
+    else if (src[1] == 'x' || src[1] == 'X') {
+      for (i = 2; i < size && _isxdigit(src[i]); ++i) {
+        codepoint = (codepoint * 16) + ((src[i] | 32) % 39 - 9);
 
-				if (codepoint >= 0x110000) {
-					// Keep counting digits but
-					// avoid integer overflow.
-					codepoint = 0x110000;
-				}
-			}
+        if (codepoint >= 0x110000) {
+          // Keep counting digits but
+          // avoid integer overflow.
+          codepoint = 0x110000;
+        }
+      }
 
-			num_digits = i - 2;
-		}
+      num_digits = i - 2;
+    }
 
-		if (num_digits >= 1 && num_digits <= 8 &&
-		    i < size && src[i] == ';') {
-			if (codepoint == 0 ||
-			    (codepoint >= 0xD800 && codepoint < 0xE000) ||
-			    codepoint >= 0x110000) {
-				codepoint = 0xFFFD;
-			}
-			utf8proc_encode_char(codepoint, ob);
-			return i + 1;
-		}
-	}
+    if (num_digits >= 1 && num_digits <= 8 && i < size && src[i] == ';') {
+      if (codepoint == 0 || (codepoint >= 0xD800 && codepoint < 0xE000) ||
+          codepoint >= 0x110000) {
+        codepoint = 0xFFFD;
+      }
+      utf8proc_encode_char(codepoint, ob);
+      return i + 1;
+    }
+  }
 
-	else {
-		if (size > CMARK_ENTITY_MAX_LENGTH)
-			size = CMARK_ENTITY_MAX_LENGTH;
+  else {
+    if (size > CMARK_ENTITY_MAX_LENGTH)
+      size = CMARK_ENTITY_MAX_LENGTH;
 
-		for (i = CMARK_ENTITY_MIN_LENGTH; i < size; ++i) {
-			if (src[i] == ' ')
-				break;
+    for (i = CMARK_ENTITY_MIN_LENGTH; i < size; ++i) {
+      if (src[i] == ' ')
+        break;
 
-			if (src[i] == ';') {
-				const unsigned char *entity = S_lookup_entity(src, i);
+      if (src[i] == ';') {
+        const unsigned char *entity = S_lookup_entity(src, i);
 
-				if (entity != NULL) {
-					cmark_strbuf_puts(ob, (const char *)entity);
-					return i + 1;
-				}
+        if (entity != NULL) {
+          cmark_strbuf_puts(ob, (const char *)entity);
+          return i + 1;
+        }
 
-				break;
-			}
-		}
-	}
+        break;
+      }
+    }
+  }
 
-	return 0;
+  return 0;
 }
 
-int
-houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size)
-{
-	bufsize_t i = 0, org, ent;
+int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src,
+                          bufsize_t size) {
+  bufsize_t i = 0, org, ent;
 
-	while (i < size) {
-		org = i;
-		while (i < size && src[i] != '&')
-			i++;
+  while (i < size) {
+    org = i;
+    while (i < size && src[i] != '&')
+      i++;
 
-		if (likely(i > org)) {
-			if (unlikely(org == 0)) {
-				if (i >= size)
-					return 0;
+    if (likely(i > org)) {
+      if (unlikely(org == 0)) {
+        if (i >= size)
+          return 0;
 
-				cmark_strbuf_grow(ob, HOUDINI_UNESCAPED_SIZE(size));
-			}
+        cmark_strbuf_grow(ob, HOUDINI_UNESCAPED_SIZE(size));
+      }
 
-			cmark_strbuf_put(ob, src + org, i - org);
-		}
+      cmark_strbuf_put(ob, src + org, i - org);
+    }
 
-		/* escaping */
-		if (i >= size)
-			break;
+    /* escaping */
+    if (i >= size)
+      break;
 
-		i++;
+    i++;
 
-		ent = houdini_unescape_ent(ob, src + i, size - i);
-		i += ent;
+    ent = houdini_unescape_ent(ob, src + i, size - i);
+    i += ent;
 
-		/* not really an entity */
-		if (ent == 0)
-			cmark_strbuf_putc(ob, '&');
-	}
+    /* not really an entity */
+    if (ent == 0)
+      cmark_strbuf_putc(ob, '&');
+  }
 
-	return 1;
+  return 1;
 }
 
-void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, bufsize_t size)
-{
-	if (!houdini_unescape_html(ob, src, size))
-		cmark_strbuf_put(ob, src, size);
+void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src,
+                             bufsize_t size) {
+  if (!houdini_unescape_html(ob, src, size))
+    cmark_strbuf_put(ob, src, size);
 }
diff --git a/src/html.c b/src/html.c
index 7c4548d..e365c8c 100644
--- a/src/html.c
+++ b/src/html.c
@@ -12,324 +12,304 @@
 
 // Functions to convert cmark_nodes to HTML strings.
 
-static void escape_html(cmark_strbuf *dest, const unsigned char *source, bufsize_t length)
-{
-	houdini_escape_html0(dest, source, length, 0);
+static void escape_html(cmark_strbuf *dest, const unsigned char *source,
+                        bufsize_t length) {
+  houdini_escape_html0(dest, source, length, 0);
 }
 
-static inline void cr(cmark_strbuf *html)
-{
-	if (html->size && html->ptr[html->size - 1] != '\n')
-		cmark_strbuf_putc(html, '\n');
+static inline void cr(cmark_strbuf *html) {
+  if (html->size && html->ptr[html->size - 1] != '\n')
+    cmark_strbuf_putc(html, '\n');
 }
 
 struct render_state {
-	cmark_strbuf* html;
-	cmark_node *plain;
+  cmark_strbuf *html;
+  cmark_node *plain;
 };
 
-static void
-S_render_sourcepos(cmark_node *node, cmark_strbuf *html, int options)
-{
-	char buffer[100];
-	if (CMARK_OPT_SOURCEPOS & options) {
-		sprintf(buffer, " data-sourcepos=\"%d:%d-%d:%d\"",
-			cmark_node_get_start_line(node),
-			cmark_node_get_start_column(node),
-			cmark_node_get_end_line(node),
-			cmark_node_get_end_column(node));
-		cmark_strbuf_puts(html, buffer);
-	}
+static void S_render_sourcepos(cmark_node *node, cmark_strbuf *html,
+                               int options) {
+  char buffer[100];
+  if (CMARK_OPT_SOURCEPOS & options) {
+    sprintf(buffer, " data-sourcepos=\"%d:%d-%d:%d\"",
+            cmark_node_get_start_line(node), cmark_node_get_start_column(node),
+            cmark_node_get_end_line(node), cmark_node_get_end_column(node));
+    cmark_strbuf_puts(html, buffer);
+  }
 }
 
-static int
-S_render_node(cmark_node *node, cmark_event_type ev_type,
-              struct render_state *state, int options)
-{
-	cmark_node *parent;
-	cmark_node *grandparent;
-	cmark_strbuf *html = state->html;
-	char start_header[] = "<h0";
-	char end_header[] = "</h0";
-	bool tight;
-	char buffer[100];
+static int S_render_node(cmark_node *node, cmark_event_type ev_type,
+                         struct render_state *state, int options) {
+  cmark_node *parent;
+  cmark_node *grandparent;
+  cmark_strbuf *html = state->html;
+  char start_header[] = "<h0";
+  char end_header[] = "</h0";
+  bool tight;
+  char buffer[100];
 
-	bool entering = (ev_type == CMARK_EVENT_ENTER);
+  bool entering = (ev_type == CMARK_EVENT_ENTER);
 
-	if (state->plain == node) { // back at original node
-		state->plain = NULL;
-	}
+  if (state->plain == node) { // back at original node
+    state->plain = NULL;
+  }
 
-	if (state->plain != NULL) {
-		switch(node->type) {
-		case CMARK_NODE_TEXT:
-		case CMARK_NODE_CODE:
-		case CMARK_NODE_INLINE_HTML:
-			escape_html(html, node->as.literal.data,
-			            node->as.literal.len);
-			break;
+  if (state->plain != NULL) {
+    switch (node->type) {
+    case CMARK_NODE_TEXT:
+    case CMARK_NODE_CODE:
+    case CMARK_NODE_INLINE_HTML:
+      escape_html(html, node->as.literal.data, node->as.literal.len);
+      break;
 
-		case CMARK_NODE_LINEBREAK:
-		case CMARK_NODE_SOFTBREAK:
-			cmark_strbuf_putc(html, ' ');
-			break;
+    case CMARK_NODE_LINEBREAK:
+    case CMARK_NODE_SOFTBREAK:
+      cmark_strbuf_putc(html, ' ');
+      break;
 
-		default:
-			break;
-		}
-		return 1;
-	}
+    default:
+      break;
+    }
+    return 1;
+  }
 
-	switch (node->type) {
-	case CMARK_NODE_DOCUMENT:
-		break;
+  switch (node->type) {
+  case CMARK_NODE_DOCUMENT:
+    break;
 
-	case CMARK_NODE_BLOCK_QUOTE:
-		if (entering) {
-			cr(html);
-			cmark_strbuf_puts(html, "<blockquote");
-			S_render_sourcepos(node, html, options);
-			cmark_strbuf_puts(html, ">\n");
-		} else {
-			cr(html);
-			cmark_strbuf_puts(html, "</blockquote>\n");
-		}
-		break;
+  case CMARK_NODE_BLOCK_QUOTE:
+    if (entering) {
+      cr(html);
+      cmark_strbuf_puts(html, "<blockquote");
+      S_render_sourcepos(node, html, options);
+      cmark_strbuf_puts(html, ">\n");
+    } else {
+      cr(html);
+      cmark_strbuf_puts(html, "</blockquote>\n");
+    }
+    break;
 
-	case CMARK_NODE_LIST: {
-		cmark_list_type list_type = node->as.list.list_type;
-		int start = node->as.list.start;
+  case CMARK_NODE_LIST: {
+    cmark_list_type list_type = node->as.list.list_type;
+    int start = node->as.list.start;
 
-		if (entering) {
-			cr(html);
-			if (list_type == CMARK_BULLET_LIST) {
-				cmark_strbuf_puts(html, "<ul");
-				S_render_sourcepos(node, html, options);
-				cmark_strbuf_puts(html, ">\n");
-			} else if (start == 1) {
-				cmark_strbuf_puts(html, "<ol");
-				S_render_sourcepos(node, html, options);
-				cmark_strbuf_puts(html, ">\n");
-			} else {
-				sprintf(buffer, "<ol start=\"%d\"", start);
-				cmark_strbuf_puts(html, buffer);
-				S_render_sourcepos(node, html, options);
-				cmark_strbuf_puts(html, ">\n");
-			}
-		} else {
-			cmark_strbuf_puts(html,
-			                  list_type == CMARK_BULLET_LIST ?
-			                  "</ul>\n" : "</ol>\n");
-		}
-		break;
-	}
+    if (entering) {
+      cr(html);
+      if (list_type == CMARK_BULLET_LIST) {
+        cmark_strbuf_puts(html, "<ul");
+        S_render_sourcepos(node, html, options);
+        cmark_strbuf_puts(html, ">\n");
+      } else if (start == 1) {
+        cmark_strbuf_puts(html, "<ol");
+        S_render_sourcepos(node, html, options);
+        cmark_strbuf_puts(html, ">\n");
+      } else {
+        sprintf(buffer, "<ol start=\"%d\"", start);
+        cmark_strbuf_puts(html, buffer);
+        S_render_sourcepos(node, html, options);
+        cmark_strbuf_puts(html, ">\n");
+      }
+    } else {
+      cmark_strbuf_puts(html,
+                        list_type == CMARK_BULLET_LIST ? "</ul>\n" : "</ol>\n");
+    }
+    break;
+  }
 
-	case CMARK_NODE_ITEM:
-		if (entering) {
-			cr(html);
-			cmark_strbuf_puts(html, "<li");
-			S_render_sourcepos(node, html, options);
-			cmark_strbuf_putc(html, '>');
-		} else {
-			cmark_strbuf_puts(html, "</li>\n");
-		}
-		break;
+  case CMARK_NODE_ITEM:
+    if (entering) {
+      cr(html);
+      cmark_strbuf_puts(html, "<li");
+      S_render_sourcepos(node, html, options);
+      cmark_strbuf_putc(html, '>');
+    } else {
+      cmark_strbuf_puts(html, "</li>\n");
+    }
+    break;
 
-	case CMARK_NODE_HEADER:
-		if (entering) {
-			cr(html);
-			start_header[2] = '0' + node->as.header.level;
-			cmark_strbuf_puts(html, start_header);
-			S_render_sourcepos(node, html, options);
-			cmark_strbuf_putc(html, '>');
-		} else {
-			end_header[3] = '0' + node->as.header.level;
-			cmark_strbuf_puts(html, end_header);
-			cmark_strbuf_puts(html, ">\n");
-		}
-		break;
+  case CMARK_NODE_HEADER:
+    if (entering) {
+      cr(html);
+      start_header[2] = '0' + node->as.header.level;
+      cmark_strbuf_puts(html, start_header);
+      S_render_sourcepos(node, html, options);
+      cmark_strbuf_putc(html, '>');
+    } else {
+      end_header[3] = '0' + node->as.header.level;
+      cmark_strbuf_puts(html, end_header);
+      cmark_strbuf_puts(html, ">\n");
+    }
+    break;
 
-	case CMARK_NODE_CODE_BLOCK:
-		cr(html);
+  case CMARK_NODE_CODE_BLOCK:
+    cr(html);
 
-		if (!node->as.code.fenced || node->as.code.info.len == 0) {
-			cmark_strbuf_puts(html, "<pre");
-			S_render_sourcepos(node, html, options);
-			cmark_strbuf_puts(html, "><code>");
-		} else {
-			bufsize_t first_tag = 0;
-			while (first_tag < node->as.code.info.len &&
-			       !cmark_isspace(node->as.code.info.data[first_tag])) {
-				first_tag += 1;
-			}
+    if (!node->as.code.fenced || node->as.code.info.len == 0) {
+      cmark_strbuf_puts(html, "<pre");
+      S_render_sourcepos(node, html, options);
+      cmark_strbuf_puts(html, "><code>");
+    } else {
+      bufsize_t first_tag = 0;
+      while (first_tag < node->as.code.info.len &&
+             !cmark_isspace(node->as.code.info.data[first_tag])) {
+        first_tag += 1;
+      }
 
-			cmark_strbuf_puts(html, "<pre");
-			S_render_sourcepos(node, html, options);
-			cmark_strbuf_puts(html, "><code class=\"language-");
-			escape_html(html, node->as.code.info.data, first_tag);
-			cmark_strbuf_puts(html, "\">");
-		}
+      cmark_strbuf_puts(html, "<pre");
+      S_render_sourcepos(node, html, options);
+      cmark_strbuf_puts(html, "><code class=\"language-");
+      escape_html(html, node->as.code.info.data, first_tag);
+      cmark_strbuf_puts(html, "\">");
+    }
 
-		escape_html(html, node->as.code.literal.data,
-		            node->as.code.literal.len);
-		cmark_strbuf_puts(html, "</code></pre>\n");
-		break;
+    escape_html(html, node->as.code.literal.data, node->as.code.literal.len);
+    cmark_strbuf_puts(html, "</code></pre>\n");
+    break;
 
-	case CMARK_NODE_HTML:
-		cr(html);
-		if (options & CMARK_OPT_SAFE) {
-			cmark_strbuf_puts(html, "<!-- raw HTML omitted -->");
-		} else {
-			cmark_strbuf_put(html, node->as.literal.data,
-			                 node->as.literal.len);
-		}
-		cr(html);
-		break;
+  case CMARK_NODE_HTML:
+    cr(html);
+    if (options & CMARK_OPT_SAFE) {
+      cmark_strbuf_puts(html, "<!-- raw HTML omitted -->");
+    } else {
+      cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len);
+    }
+    cr(html);
+    break;
 
-	case CMARK_NODE_HRULE:
-		cr(html);
-		cmark_strbuf_puts(html, "<hr");
-		S_render_sourcepos(node, html, options);
-		cmark_strbuf_puts(html, " />\n");
-		break;
+  case CMARK_NODE_HRULE:
+    cr(html);
+    cmark_strbuf_puts(html, "<hr");
+    S_render_sourcepos(node, html, options);
+    cmark_strbuf_puts(html, " />\n");
+    break;
 
-	case CMARK_NODE_PARAGRAPH:
-		parent = cmark_node_parent(node);
-		grandparent = cmark_node_parent(parent);
-		if (grandparent != NULL &&
-		    grandparent->type == CMARK_NODE_LIST) {
-			tight = grandparent->as.list.tight;
-		} else {
-			tight = false;
-		}
-		if (!tight) {
-			if (entering) {
-				cr(html);
-				cmark_strbuf_puts(html, "<p");
-				S_render_sourcepos(node, html, options);
-				cmark_strbuf_putc(html, '>');
-			} else {
-				cmark_strbuf_puts(html, "</p>\n");
-			}
-		}
-		break;
+  case CMARK_NODE_PARAGRAPH:
+    parent = cmark_node_parent(node);
+    grandparent = cmark_node_parent(parent);
+    if (grandparent != NULL && grandparent->type == CMARK_NODE_LIST) {
+      tight = grandparent->as.list.tight;
+    } else {
+      tight = false;
+    }
+    if (!tight) {
+      if (entering) {
+        cr(html);
+        cmark_strbuf_puts(html, "<p");
+        S_render_sourcepos(node, html, options);
+        cmark_strbuf_putc(html, '>');
+      } else {
+        cmark_strbuf_puts(html, "</p>\n");
+      }
+    }
+    break;
 
-	case CMARK_NODE_TEXT:
-		escape_html(html, node->as.literal.data, node->as.literal.len);
-		break;
+  case CMARK_NODE_TEXT:
+    escape_html(html, node->as.literal.data, node->as.literal.len);
+    break;
 
-	case CMARK_NODE_LINEBREAK:
-		cmark_strbuf_puts(html, "<br />\n");
-		break;
+  case CMARK_NODE_LINEBREAK:
+    cmark_strbuf_puts(html, "<br />\n");
+    break;
 
-	case CMARK_NODE_SOFTBREAK:
-		if (options & CMARK_OPT_HARDBREAKS) {
-			cmark_strbuf_puts(html, "<br />\n");
-		} else {
-			cmark_strbuf_putc(html, '\n');
-		}
-		break;
+  case CMARK_NODE_SOFTBREAK:
+    if (options & CMARK_OPT_HARDBREAKS) {
+      cmark_strbuf_puts(html, "<br />\n");
+    } else {
+      cmark_strbuf_putc(html, '\n');
+    }
+    break;
 
-	case CMARK_NODE_CODE:
-		cmark_strbuf_puts(html, "<code>");
-		escape_html(html, node->as.literal.data, node->as.literal.len);
-		cmark_strbuf_puts(html, "</code>");
-		break;
+  case CMARK_NODE_CODE:
+    cmark_strbuf_puts(html, "<code>");
+    escape_html(html, node->as.literal.data, node->as.literal.len);
+    cmark_strbuf_puts(html, "</code>");
+    break;
 
-	case CMARK_NODE_INLINE_HTML:
-		if (options & CMARK_OPT_SAFE) {
-			cmark_strbuf_puts(html, "<!-- raw HTML omitted -->");
-		} else {
-			cmark_strbuf_put(html, node->as.literal.data,
-			                 node->as.literal.len);
-		}
-		break;
+  case CMARK_NODE_INLINE_HTML:
+    if (options & CMARK_OPT_SAFE) {
+      cmark_strbuf_puts(html, "<!-- raw HTML omitted -->");
+    } else {
+      cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len);
+    }
+    break;
 
-	case CMARK_NODE_STRONG:
-		if (entering) {
-			cmark_strbuf_puts(html, "<strong>");
-		} else {
-			cmark_strbuf_puts(html, "</strong>");
-		}
-		break;
+  case CMARK_NODE_STRONG:
+    if (entering) {
+      cmark_strbuf_puts(html, "<strong>");
+    } else {
+      cmark_strbuf_puts(html, "</strong>");
+    }
+    break;
 
-	case CMARK_NODE_EMPH:
-		if (entering) {
-			cmark_strbuf_puts(html, "<em>");
-		} else {
-			cmark_strbuf_puts(html, "</em>");
-		}
-		break;
+  case CMARK_NODE_EMPH:
+    if (entering) {
+      cmark_strbuf_puts(html, "<em>");
+    } else {
+      cmark_strbuf_puts(html, "</em>");
+    }
+    break;
 
-	case CMARK_NODE_LINK:
-		if (entering) {
-			cmark_strbuf_puts(html, "<a href=\"");
-			if (!((options & CMARK_OPT_SAFE) &&
-			      scan_dangerous_url(&node->as.link.url, 0))) {
-				houdini_escape_href(html,
-				                    node->as.link.url.data,
-				                    node->as.link.url.len);
+  case CMARK_NODE_LINK:
+    if (entering) {
+      cmark_strbuf_puts(html, "<a href=\"");
+      if (!((options & CMARK_OPT_SAFE) &&
+            scan_dangerous_url(&node->as.link.url, 0))) {
+        houdini_escape_href(html, node->as.link.url.data,
+                            node->as.link.url.len);
+      }
+      if (node->as.link.title.len) {
+        cmark_strbuf_puts(html, "\" title=\"");
+        escape_html(html, node->as.link.title.data, node->as.link.title.len);
+      }
+      cmark_strbuf_puts(html, "\">");
+    } else {
+      cmark_strbuf_puts(html, "</a>");
+    }
+    break;
 
-			}
-			if (node->as.link.title.len) {
-				cmark_strbuf_puts(html, "\" title=\"");
-				escape_html(html,
-				            node->as.link.title.data,
-				            node->as.link.title.len);
-			}
-			cmark_strbuf_puts(html, "\">");
-		} else {
-			cmark_strbuf_puts(html, "</a>");
-		}
-		break;
+  case CMARK_NODE_IMAGE:
+    if (entering) {
+      cmark_strbuf_puts(html, "<img src=\"");
+      if (!((options & CMARK_OPT_SAFE) &&
+            scan_dangerous_url(&node->as.link.url, 0))) {
+        houdini_escape_href(html, node->as.link.url.data,
+                            node->as.link.url.len);
+      }
+      cmark_strbuf_puts(html, "\" alt=\"");
+      state->plain = node;
+    } else {
+      if (node->as.link.title.len) {
+        cmark_strbuf_puts(html, "\" title=\"");
+        escape_html(html, node->as.link.title.data, node->as.link.title.len);
+      }
 
-	case CMARK_NODE_IMAGE:
-		if (entering) {
-			cmark_strbuf_puts(html, "<img src=\"");
-			if (!((options & CMARK_OPT_SAFE) &&
-			      scan_dangerous_url(&node->as.link.url, 0))) {
-				houdini_escape_href(html,
-				                    node->as.link.url.data,
-				                    node->as.link.url.len);
+      cmark_strbuf_puts(html, "\" />");
+    }
+    break;
 
-			}
-			cmark_strbuf_puts(html, "\" alt=\"");
-			state->plain = node;
-		} else {
-			if (node->as.link.title.len) {
-				cmark_strbuf_puts(html, "\" title=\"");
-				escape_html(html, node->as.link.title.data,
-				            node->as.link.title.len);
-			}
+  default:
+    assert(false);
+    break;
+  }
 
-			cmark_strbuf_puts(html, "\" />");
-		}
-		break;
-
-	default:
-		assert(false);
-		break;
-	}
-
-	// cmark_strbuf_putc(html, 'x');
-	return 1;
+  // cmark_strbuf_putc(html, 'x');
+  return 1;
 }
 
-char *cmark_render_html(cmark_node *root, int options)
-{
-	char *result;
-	cmark_strbuf html = GH_BUF_INIT;
-	cmark_event_type ev_type;
-	cmark_node *cur;
-	struct render_state state = { &html, NULL };
-	cmark_iter *iter = cmark_iter_new(root);
+char *cmark_render_html(cmark_node *root, int options) {
+  char *result;
+  cmark_strbuf html = GH_BUF_INIT;
+  cmark_event_type ev_type;
+  cmark_node *cur;
+  struct render_state state = {&html, NULL};
+  cmark_iter *iter = cmark_iter_new(root);
 
-	while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
-		cur = cmark_iter_get_node(iter);
-		S_render_node(cur, ev_type, &state, options);
-	}
-	result = (char *)cmark_strbuf_detach(&html);
+  while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
+    cur = cmark_iter_get_node(iter);
+    S_render_node(cur, ev_type, &state, options);
+  }
+  result = (char *)cmark_strbuf_detach(&html);
 
-	cmark_iter_free(iter);
-	return result;
+  cmark_iter_free(iter);
+  return result;
 }
diff --git a/src/inlines.c b/src/inlines.c
index c3d860a..ba78278 100644
--- a/src/inlines.c
+++ b/src/inlines.c
@@ -13,7 +13,6 @@
 #include "scanners.h"
 #include "inlines.h"
 
-
 static const char *EMDASH = "\xE2\x80\x94";
 static const char *ENDASH = "\xE2\x80\x93";
 static const char *ELLIPSES = "\xE2\x80\xA6";
@@ -22,7 +21,6 @@
 static const char *LEFTSINGLEQUOTE = "\xE2\x80\x98";
 static const char *RIGHTSINGLEQUOTE = "\xE2\x80\x99";
 
-
 // Macros for creating various kinds of simple.
 #define make_str(s) make_literal(CMARK_NODE_TEXT, s)
 #define make_code(s) make_literal(CMARK_NODE_CODE, s)
@@ -33,209 +31,189 @@
 #define make_strong() make_simple(CMARK_NODE_STRONG)
 
 typedef struct delimiter {
-	struct delimiter *previous;
-	struct delimiter *next;
-	cmark_node *inl_text;
-	bufsize_t position;
-	unsigned char delim_char;
-	bool can_open;
-	bool can_close;
-	bool active;
+  struct delimiter *previous;
+  struct delimiter *next;
+  cmark_node *inl_text;
+  bufsize_t position;
+  unsigned char delim_char;
+  bool can_open;
+  bool can_close;
+  bool active;
 } delimiter;
 
 typedef struct {
-	cmark_chunk input;
-	bufsize_t pos;
-	cmark_reference_map *refmap;
-	delimiter *last_delim;
+  cmark_chunk input;
+  bufsize_t pos;
+  cmark_reference_map *refmap;
+  delimiter *last_delim;
 } subject;
 
-static inline bool
-S_is_line_end_char(char c)
-{
-	return (c == '\n' || c == '\r');
+static inline bool S_is_line_end_char(char c) {
+  return (c == '\n' || c == '\r');
 }
 
-static delimiter*
-S_insert_emph(subject *subj, delimiter *opener, delimiter *closer);
+static delimiter *S_insert_emph(subject *subj, delimiter *opener,
+                                delimiter *closer);
 
-static int parse_inline(subject* subj, cmark_node * parent, int options);
+static int parse_inline(subject *subj, cmark_node *parent, int options);
 
 static void subject_from_buf(subject *e, cmark_strbuf *buffer,
                              cmark_reference_map *refmap);
 static bufsize_t subject_find_special_char(subject *subj, int options);
 
 // Create an inline with a literal string value.
-static inline cmark_node* make_literal(cmark_node_type t, cmark_chunk s)
-{
-	cmark_node * e = (cmark_node *)calloc(1, sizeof(*e));
-	if(e != NULL) {
-		e->type = t;
-		e->as.literal = s;
-		e->next = NULL;
-		e->prev = NULL;
-		e->parent = NULL;
-		e->first_child = NULL;
-		e->last_child = NULL;
-		// These fields aren't used for inlines:
-		e->start_line = 0;
-		e->start_column = 0;
-		e->end_line = 0;
-	}
-	return e;
+static inline cmark_node *make_literal(cmark_node_type t, cmark_chunk s) {
+  cmark_node *e = (cmark_node *)calloc(1, sizeof(*e));
+  if (e != NULL) {
+    e->type = t;
+    e->as.literal = s;
+    e->next = NULL;
+    e->prev = NULL;
+    e->parent = NULL;
+    e->first_child = NULL;
+    e->last_child = NULL;
+    // These fields aren't used for inlines:
+    e->start_line = 0;
+    e->start_column = 0;
+    e->end_line = 0;
+  }
+  return e;
 }
 
 // Create an inline with no value.
-static inline cmark_node* make_simple(cmark_node_type t)
-{
-	cmark_node* e = (cmark_node *)calloc(1, sizeof(*e));
-	if(e != NULL) {
-		e->type = t;
-		e->next = NULL;
-		e->prev = NULL;
-		e->parent = NULL;
-		e->first_child = NULL;
-		e->last_child = NULL;
-		// These fields aren't used for inlines:
-		e->start_line = 0;
-		e->start_column = 0;
-		e->end_line = 0;
-	}
-	return e;
+static inline cmark_node *make_simple(cmark_node_type t) {
+  cmark_node *e = (cmark_node *)calloc(1, sizeof(*e));
+  if (e != NULL) {
+    e->type = t;
+    e->next = NULL;
+    e->prev = NULL;
+    e->parent = NULL;
+    e->first_child = NULL;
+    e->last_child = NULL;
+    // These fields aren't used for inlines:
+    e->start_line = 0;
+    e->start_column = 0;
+    e->end_line = 0;
+  }
+  return e;
 }
 
 // Like make_str, but parses entities.
-static cmark_node *make_str_with_entities(cmark_chunk *content)
-{
-	cmark_strbuf unescaped = GH_BUF_INIT;
+static cmark_node *make_str_with_entities(cmark_chunk *content) {
+  cmark_strbuf unescaped = GH_BUF_INIT;
 
-	if (houdini_unescape_html(&unescaped, content->data, content->len)) {
-		return make_str(cmark_chunk_buf_detach(&unescaped));
-	} else {
-		return make_str(*content);
-	}
+  if (houdini_unescape_html(&unescaped, content->data, content->len)) {
+    return make_str(cmark_chunk_buf_detach(&unescaped));
+  } else {
+    return make_str(*content);
+  }
 }
 
 // Duplicate a chunk by creating a copy of the buffer not by reusing the
 // buffer like cmark_chunk_dup does.
-static cmark_chunk chunk_clone(cmark_chunk *src)
-{
-	cmark_chunk c;
-	bufsize_t len = src->len;
+static cmark_chunk chunk_clone(cmark_chunk *src) {
+  cmark_chunk c;
+  bufsize_t len = src->len;
 
-	c.len   = len;
-	c.data  = (unsigned char *)malloc(len + 1);
-	c.alloc = 1;
-	memcpy(c.data, src->data, len);
-	c.data[len] = '\0';
+  c.len = len;
+  c.data = (unsigned char *)malloc(len + 1);
+  c.alloc = 1;
+  memcpy(c.data, src->data, len);
+  c.data[len] = '\0';
 
-	return c;
+  return c;
 }
 
-static cmark_chunk cmark_clean_autolink(cmark_chunk *url, int is_email)
-{
-	cmark_strbuf buf = GH_BUF_INIT;
+static cmark_chunk cmark_clean_autolink(cmark_chunk *url, int is_email) {
+  cmark_strbuf buf = GH_BUF_INIT;
 
-	cmark_chunk_trim(url);
+  cmark_chunk_trim(url);
 
-	if (url->len == 0) {
-		cmark_chunk result = CMARK_CHUNK_EMPTY;
-		return result;
-	}
+  if (url->len == 0) {
+    cmark_chunk result = CMARK_CHUNK_EMPTY;
+    return result;
+  }
 
-	if (is_email)
-		cmark_strbuf_puts(&buf, "mailto:");
+  if (is_email)
+    cmark_strbuf_puts(&buf, "mailto:");
 
-	houdini_unescape_html_f(&buf, url->data, url->len);
-	return cmark_chunk_buf_detach(&buf);
+  houdini_unescape_html_f(&buf, url->data, url->len);
+  return cmark_chunk_buf_detach(&buf);
 }
 
-static inline cmark_node* make_autolink(cmark_chunk url, int is_email)
-{
-	cmark_node *link = make_simple(CMARK_NODE_LINK);
-	link->as.link.url   = cmark_clean_autolink(&url, is_email);
-	link->as.link.title = cmark_chunk_literal("");
-	cmark_node_append_child(link, make_str_with_entities(&url));
-	return link;
+static inline cmark_node *make_autolink(cmark_chunk url, int is_email) {
+  cmark_node *link = make_simple(CMARK_NODE_LINK);
+  link->as.link.url = cmark_clean_autolink(&url, is_email);
+  link->as.link.title = cmark_chunk_literal("");
+  cmark_node_append_child(link, make_str_with_entities(&url));
+  return link;
 }
 
 static void subject_from_buf(subject *e, cmark_strbuf *buffer,
-                             cmark_reference_map *refmap)
-{
-	e->input.data = buffer->ptr;
-	e->input.len = buffer->size;
-	e->input.alloc = 0;
-	e->pos = 0;
-	e->refmap = refmap;
-	e->last_delim = NULL;
+                             cmark_reference_map *refmap) {
+  e->input.data = buffer->ptr;
+  e->input.len = buffer->size;
+  e->input.alloc = 0;
+  e->pos = 0;
+  e->refmap = refmap;
+  e->last_delim = NULL;
 }
 
-static inline int isbacktick(int c)
-{
-	return (c == '`');
+static inline int isbacktick(int c) { return (c == '`'); }
+
+static inline unsigned char peek_char(subject *subj) {
+  // NULL bytes should have been stripped out by now.  If they're
+  // present, it's a programming error:
+  assert(!(subj->pos < subj->input.len && subj->input.data[subj->pos] == 0));
+  return (subj->pos < subj->input.len) ? subj->input.data[subj->pos] : 0;
 }
 
-static inline unsigned char peek_char(subject *subj)
-{
-	// NULL bytes should have been stripped out by now.  If they're
-	// present, it's a programming error:
-	assert(!(subj->pos < subj->input.len && subj->input.data[subj->pos] == 0));
-	return (subj->pos < subj->input.len) ? subj->input.data[subj->pos] : 0;
-}
-
-static inline unsigned char peek_at(subject *subj, bufsize_t pos)
-{
-	return subj->input.data[pos];
+static inline unsigned char peek_at(subject *subj, bufsize_t pos) {
+  return subj->input.data[pos];
 }
 
 // Return true if there are more characters in the subject.
-static inline int is_eof(subject* subj)
-{
-	return (subj->pos >= subj->input.len);
+static inline int is_eof(subject *subj) {
+  return (subj->pos >= subj->input.len);
 }
 
 // Advance the subject.  Doesn't check for eof.
 #define advance(subj) (subj)->pos += 1
 
-static inline bool
-skip_spaces(subject *subj)
-{
-	bool skipped = false;
-	while (peek_char(subj) == ' ' || peek_char(subj) == '\t') {
-		advance(subj);
-		skipped = true;
-	}
-	return skipped;
+static inline bool skip_spaces(subject *subj) {
+  bool skipped = false;
+  while (peek_char(subj) == ' ' || peek_char(subj) == '\t') {
+    advance(subj);
+    skipped = true;
+  }
+  return skipped;
 }
 
-static inline bool
-skip_line_end(subject *subj)
-{
-	bool seen_line_end_char = false;
-	if (peek_char(subj) == '\r') {
-		advance(subj);
-		seen_line_end_char = true;
-	}
-	if (peek_char(subj) == '\n') {
-		advance(subj);
-		seen_line_end_char = true;
-	}
-	return seen_line_end_char || is_eof(subj);
+static inline bool skip_line_end(subject *subj) {
+  bool seen_line_end_char = false;
+  if (peek_char(subj) == '\r') {
+    advance(subj);
+    seen_line_end_char = true;
+  }
+  if (peek_char(subj) == '\n') {
+    advance(subj);
+    seen_line_end_char = true;
+  }
+  return seen_line_end_char || is_eof(subj);
 }
 
 // Take characters while a predicate holds, and return a string.
-static inline cmark_chunk take_while(subject* subj, int (*f)(int))
-{
-	unsigned char c;
-	bufsize_t startpos = subj->pos;
-	bufsize_t len = 0;
+static inline cmark_chunk take_while(subject *subj, int (*f)(int)) {
+  unsigned char c;
+  bufsize_t startpos = subj->pos;
+  bufsize_t len = 0;
 
-	while ((c = peek_char(subj)) && (*f)(c)) {
-		advance(subj);
-		len++;
-	}
+  while ((c = peek_char(subj)) && (*f)(c)) {
+    advance(subj);
+    len++;
+  }
 
-	return cmark_chunk_dup(&subj->input, startpos, len);
+  return cmark_chunk_dup(&subj->input, startpos, len);
 }
 
 // Try to process a backtick code span that began with a
@@ -243,981 +221,944 @@
 // parsed).  Return 0 if you don't find matching closing
 // backticks, otherwise return the position in the subject
 // after the closing backticks.
-static bufsize_t scan_to_closing_backticks(subject* subj, bufsize_t openticklength)
-{
-	// read non backticks
-	unsigned char c;
-	while ((c = peek_char(subj)) && c != '`') {
-		advance(subj);
-	}
-	if (is_eof(subj)) {
-		return 0;  // did not find closing ticks, return 0
-	}
-	bufsize_t numticks = 0;
-	while (peek_char(subj) == '`') {
-		advance(subj);
-		numticks++;
-	}
-	if (numticks != openticklength) {
-		return(scan_to_closing_backticks(subj, openticklength));
-	}
-	return (subj->pos);
+static bufsize_t scan_to_closing_backticks(subject *subj,
+                                           bufsize_t openticklength) {
+  // read non backticks
+  unsigned char c;
+  while ((c = peek_char(subj)) && c != '`') {
+    advance(subj);
+  }
+  if (is_eof(subj)) {
+    return 0; // did not find closing ticks, return 0
+  }
+  bufsize_t numticks = 0;
+  while (peek_char(subj) == '`') {
+    advance(subj);
+    numticks++;
+  }
+  if (numticks != openticklength) {
+    return (scan_to_closing_backticks(subj, openticklength));
+  }
+  return (subj->pos);
 }
 
 // Parse backtick code section or raw backticks, return an inline.
 // Assumes that the subject has a backtick at the current position.
-static cmark_node* handle_backticks(subject *subj)
-{
-	cmark_chunk openticks = take_while(subj, isbacktick);
-	bufsize_t startpos = subj->pos;
-	bufsize_t endpos = scan_to_closing_backticks(subj, openticks.len);
+static cmark_node *handle_backticks(subject *subj) {
+  cmark_chunk openticks = take_while(subj, isbacktick);
+  bufsize_t startpos = subj->pos;
+  bufsize_t endpos = scan_to_closing_backticks(subj, openticks.len);
 
-	if (endpos == 0) { // not found
-		subj->pos = startpos; // rewind
-		return make_str(openticks);
-	} else {
-		cmark_strbuf buf = GH_BUF_INIT;
+  if (endpos == 0) {      // not found
+    subj->pos = startpos; // rewind
+    return make_str(openticks);
+  } else {
+    cmark_strbuf buf = GH_BUF_INIT;
 
-		cmark_strbuf_set(&buf, subj->input.data + startpos, endpos - startpos - openticks.len);
-		cmark_strbuf_trim(&buf);
-		cmark_strbuf_normalize_whitespace(&buf);
+    cmark_strbuf_set(&buf, subj->input.data + startpos,
+                     endpos - startpos - openticks.len);
+    cmark_strbuf_trim(&buf);
+    cmark_strbuf_normalize_whitespace(&buf);
 
-		return make_code(cmark_chunk_buf_detach(&buf));
-	}
+    return make_code(cmark_chunk_buf_detach(&buf));
+  }
 }
 
 // Scan ***, **, or * and return number scanned, or 0.
 // Advances position.
-static int
-scan_delims(subject* subj, unsigned char c, bool * can_open, bool * can_close)
-{
-	int numdelims = 0;
-	bufsize_t before_char_pos;
-	int32_t after_char = 0;
-	int32_t before_char = 0;
-	int len;
-	bool left_flanking, right_flanking;
+static int scan_delims(subject *subj, unsigned char c, bool *can_open,
+                       bool *can_close) {
+  int numdelims = 0;
+  bufsize_t before_char_pos;
+  int32_t after_char = 0;
+  int32_t before_char = 0;
+  int len;
+  bool left_flanking, right_flanking;
 
-	if (subj->pos == 0) {
-		before_char = 10;
-	} else {
-		before_char_pos = subj->pos - 1;
-		// walk back to the beginning of the UTF_8 sequence:
-		while (peek_at(subj, before_char_pos) >> 6 == 2 &&
-		       before_char_pos > 0) {
-			before_char_pos -= 1;
-		}
-		len = utf8proc_iterate(subj->input.data + before_char_pos,
-		                       subj->pos - before_char_pos, &before_char);
-		if (len == -1) {
-			before_char = 10;
-		}
-	}
+  if (subj->pos == 0) {
+    before_char = 10;
+  } else {
+    before_char_pos = subj->pos - 1;
+    // walk back to the beginning of the UTF_8 sequence:
+    while (peek_at(subj, before_char_pos) >> 6 == 2 && before_char_pos > 0) {
+      before_char_pos -= 1;
+    }
+    len = utf8proc_iterate(subj->input.data + before_char_pos,
+                           subj->pos - before_char_pos, &before_char);
+    if (len == -1) {
+      before_char = 10;
+    }
+  }
 
-	if (c == '\'' || c == '"') {
-		numdelims++;
-		advance(subj);  // limit to 1 delim for quotes
-	} else {
-		while (peek_char(subj) == c) {
-			numdelims++;
-			advance(subj);
-		}
-	}
+  if (c == '\'' || c == '"') {
+    numdelims++;
+    advance(subj); // limit to 1 delim for quotes
+  } else {
+    while (peek_char(subj) == c) {
+      numdelims++;
+      advance(subj);
+    }
+  }
 
-	len = utf8proc_iterate(subj->input.data + subj->pos,
-	                       subj->input.len - subj->pos, &after_char);
-	if (len == -1) {
-		after_char = 10;
-	}
-	left_flanking = numdelims > 0 && !utf8proc_is_space(after_char) &&
-	                !(utf8proc_is_punctuation(after_char) &&
-	                  !utf8proc_is_space(before_char) &&
-	                  !utf8proc_is_punctuation(before_char));
-	right_flanking = numdelims > 0 && !utf8proc_is_space(before_char) &&
-	                 !(utf8proc_is_punctuation(before_char) &&
-	                   !utf8proc_is_space(after_char) &&
-	                   !utf8proc_is_punctuation(after_char));
-	if (c == '_') {
-		*can_open = left_flanking &&
-		            (!right_flanking || utf8proc_is_punctuation(before_char));
-		*can_close = right_flanking &&
-		             (!left_flanking || utf8proc_is_punctuation(after_char));
-	} else if (c == '\'' || c == '"') {
-		*can_open = left_flanking && !right_flanking;
-		*can_close = right_flanking;
-	} else {
-		*can_open = left_flanking;
-		*can_close = right_flanking;
-	}
-	return numdelims;
+  len = utf8proc_iterate(subj->input.data + subj->pos,
+                         subj->input.len - subj->pos, &after_char);
+  if (len == -1) {
+    after_char = 10;
+  }
+  left_flanking = numdelims > 0 && !utf8proc_is_space(after_char) &&
+                  !(utf8proc_is_punctuation(after_char) &&
+                    !utf8proc_is_space(before_char) &&
+                    !utf8proc_is_punctuation(before_char));
+  right_flanking =
+      numdelims > 0 && !utf8proc_is_space(before_char) &&
+      !(utf8proc_is_punctuation(before_char) &&
+        !utf8proc_is_space(after_char) && !utf8proc_is_punctuation(after_char));
+  if (c == '_') {
+    *can_open = left_flanking &&
+                (!right_flanking || utf8proc_is_punctuation(before_char));
+    *can_close = right_flanking &&
+                 (!left_flanking || utf8proc_is_punctuation(after_char));
+  } else if (c == '\'' || c == '"') {
+    *can_open = left_flanking && !right_flanking;
+    *can_close = right_flanking;
+  } else {
+    *can_open = left_flanking;
+    *can_close = right_flanking;
+  }
+  return numdelims;
 }
 
 /*
 static void print_delimiters(subject *subj)
 {
-	delimiter *delim;
-	delim = subj->last_delim;
-	while (delim != NULL) {
-		printf("Item at stack pos %p, text pos %d: %d %d %d next(%p) prev(%p)\n",
-		       (void*)delim, delim->position, delim->delim_char,
-		       delim->can_open, delim->can_close,
-		       (void*)delim->next, (void*)delim->previous);
-		delim = delim->previous;
-	}
+        delimiter *delim;
+        delim = subj->last_delim;
+        while (delim != NULL) {
+                printf("Item at stack pos %p, text pos %d: %d %d %d next(%p)
+prev(%p)\n",
+                       (void*)delim, delim->position, delim->delim_char,
+                       delim->can_open, delim->can_close,
+                       (void*)delim->next, (void*)delim->previous);
+                delim = delim->previous;
+        }
 }
 */
 
-static void remove_delimiter(subject *subj, delimiter *delim)
-{
-	if (delim == NULL) return;
-	if (delim->next == NULL) {
-		// end of list:
-		assert(delim == subj->last_delim);
-		subj->last_delim = delim->previous;
-	} else {
-		delim->next->previous = delim->previous;
-	}
-	if (delim->previous != NULL) {
-		delim->previous->next = delim->next;
-	}
-	free(delim);
+static void remove_delimiter(subject *subj, delimiter *delim) {
+  if (delim == NULL)
+    return;
+  if (delim->next == NULL) {
+    // end of list:
+    assert(delim == subj->last_delim);
+    subj->last_delim = delim->previous;
+  } else {
+    delim->next->previous = delim->previous;
+  }
+  if (delim->previous != NULL) {
+    delim->previous->next = delim->next;
+  }
+  free(delim);
 }
 
 static void push_delimiter(subject *subj, unsigned char c, bool can_open,
-                           bool can_close, cmark_node *inl_text)
-{
-	delimiter *delim =
-	    (delimiter*)malloc(sizeof(delimiter));
-	if (delim == NULL) {
-		return;
-	}
-	delim->delim_char = c;
-	delim->can_open = can_open;
-	delim->can_close = can_close;
-	delim->inl_text = inl_text;
-	delim->previous = subj->last_delim;
-	delim->next = NULL;
-	if (delim->previous != NULL) {
-		delim->previous->next = delim;
-	}
-	delim->position = subj->pos;
-	delim->active = true;
-	subj->last_delim = delim;
+                           bool can_close, cmark_node *inl_text) {
+  delimiter *delim = (delimiter *)malloc(sizeof(delimiter));
+  if (delim == NULL) {
+    return;
+  }
+  delim->delim_char = c;
+  delim->can_open = can_open;
+  delim->can_close = can_close;
+  delim->inl_text = inl_text;
+  delim->previous = subj->last_delim;
+  delim->next = NULL;
+  if (delim->previous != NULL) {
+    delim->previous->next = delim;
+  }
+  delim->position = subj->pos;
+  delim->active = true;
+  subj->last_delim = delim;
 }
 
 // Assumes the subject has a c at the current position.
-static cmark_node* handle_delim(subject* subj, unsigned char c, bool smart)
-{
-	bufsize_t numdelims;
-	cmark_node * inl_text;
-	bool can_open, can_close;
-	cmark_chunk contents;
+static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) {
+  bufsize_t numdelims;
+  cmark_node *inl_text;
+  bool can_open, can_close;
+  cmark_chunk contents;
 
-	numdelims = scan_delims(subj, c, &can_open, &can_close);
+  numdelims = scan_delims(subj, c, &can_open, &can_close);
 
-	if (c == '\'' && smart) {
-		contents = cmark_chunk_literal(RIGHTSINGLEQUOTE);
-	} else if (c == '"' && smart) {
-		contents = cmark_chunk_literal(can_close ? RIGHTDOUBLEQUOTE : LEFTDOUBLEQUOTE);
-	} else {
-		contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims);
-	}
+  if (c == '\'' && smart) {
+    contents = cmark_chunk_literal(RIGHTSINGLEQUOTE);
+  } else if (c == '"' && smart) {
+    contents =
+        cmark_chunk_literal(can_close ? RIGHTDOUBLEQUOTE : LEFTDOUBLEQUOTE);
+  } else {
+    contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims);
+  }
 
-	inl_text = make_str(contents);
+  inl_text = make_str(contents);
 
-	if ((can_open || can_close) &&
-	    (!(c == '\'' || c == '"') || smart)) {
-		push_delimiter(subj, c, can_open, can_close, inl_text);
-	}
+  if ((can_open || can_close) && (!(c == '\'' || c == '"') || smart)) {
+    push_delimiter(subj, c, can_open, can_close, inl_text);
+  }
 
-	return inl_text;
+  return inl_text;
 }
 
 // Assumes we have a hyphen at the current position.
-static cmark_node* handle_hyphen(subject* subj, bool smart)
-{
-	int startpos = subj->pos;
+static cmark_node *handle_hyphen(subject *subj, bool smart) {
+  int startpos = subj->pos;
 
-	advance(subj);
+  advance(subj);
 
-	if (!smart || peek_char(subj) != '-') {
-		return make_str(cmark_chunk_literal("-"));
-	}
+  if (!smart || peek_char(subj) != '-') {
+    return make_str(cmark_chunk_literal("-"));
+  }
 
-	while (smart && peek_char(subj) == '-') {
-		advance(subj);
-	}
+  while (smart && peek_char(subj) == '-') {
+    advance(subj);
+  }
 
-	int numhyphens = subj->pos - startpos;
-	int en_count = 0;
-	int em_count = 0;
-	int i;
-	cmark_strbuf buf = GH_BUF_INIT;
+  int numhyphens = subj->pos - startpos;
+  int en_count = 0;
+  int em_count = 0;
+  int i;
+  cmark_strbuf buf = GH_BUF_INIT;
 
-	if (numhyphens % 3 == 0) { // if divisible by 3, use all em dashes
-		em_count = numhyphens / 3;
-	} else if (numhyphens % 2 == 0) { // if divisible by 2, use all en dashes
-		en_count = numhyphens / 2;
-	} else if (numhyphens % 3 == 2) { // use one en dash at end
-		en_count = 1;
-		em_count = (numhyphens - 2) / 3;
-	} else { // use two en dashes at the end
-		en_count = 2;
-		em_count = (numhyphens - 4) / 3;
-	}
+  if (numhyphens % 3 == 0) { // if divisible by 3, use all em dashes
+    em_count = numhyphens / 3;
+  } else if (numhyphens % 2 == 0) { // if divisible by 2, use all en dashes
+    en_count = numhyphens / 2;
+  } else if (numhyphens % 3 == 2) { // use one en dash at end
+    en_count = 1;
+    em_count = (numhyphens - 2) / 3;
+  } else { // use two en dashes at the end
+    en_count = 2;
+    em_count = (numhyphens - 4) / 3;
+  }
 
-	for (i = em_count; i > 0; i--) {
-		cmark_strbuf_puts(&buf, EMDASH);
-	}
+  for (i = em_count; i > 0; i--) {
+    cmark_strbuf_puts(&buf, EMDASH);
+  }
 
-	for (i = en_count; i > 0; i--) {
-		cmark_strbuf_puts(&buf, ENDASH);
-	}
+  for (i = en_count; i > 0; i--) {
+    cmark_strbuf_puts(&buf, ENDASH);
+  }
 
-	return make_str(cmark_chunk_buf_detach(&buf));
+  return make_str(cmark_chunk_buf_detach(&buf));
 }
 
 // Assumes we have a period at the current position.
-static cmark_node* handle_period(subject* subj, bool smart)
-{
-	advance(subj);
-	if (smart && peek_char(subj) == '.') {
-		advance(subj);
-		if (peek_char(subj) == '.') {
-			advance(subj);
-			return make_str(cmark_chunk_literal(ELLIPSES));
-		} else {
-			return make_str(cmark_chunk_literal(".."));
-		}
-	} else {
-		return make_str(cmark_chunk_literal("."));
-	}
+static cmark_node *handle_period(subject *subj, bool smart) {
+  advance(subj);
+  if (smart && peek_char(subj) == '.') {
+    advance(subj);
+    if (peek_char(subj) == '.') {
+      advance(subj);
+      return make_str(cmark_chunk_literal(ELLIPSES));
+    } else {
+      return make_str(cmark_chunk_literal(".."));
+    }
+  } else {
+    return make_str(cmark_chunk_literal("."));
+  }
 }
 
-static void process_emphasis(subject *subj, delimiter *stack_bottom)
-{
-	delimiter *closer = subj->last_delim;
-	delimiter *opener;
-	delimiter *old_closer;
-	bool opener_found;
-	delimiter *openers_bottom[128];
+static void process_emphasis(subject *subj, delimiter *stack_bottom) {
+  delimiter *closer = subj->last_delim;
+  delimiter *opener;
+  delimiter *old_closer;
+  bool opener_found;
+  delimiter *openers_bottom[128];
 
-	// initialize openers_bottom:
-	openers_bottom['*'] = stack_bottom;
-	openers_bottom['_'] = stack_bottom;
-	openers_bottom['\''] = stack_bottom;
-	openers_bottom['"'] = stack_bottom;
+  // initialize openers_bottom:
+  openers_bottom['*'] = stack_bottom;
+  openers_bottom['_'] = stack_bottom;
+  openers_bottom['\''] = stack_bottom;
+  openers_bottom['"'] = stack_bottom;
 
-	// move back to first relevant delim.
-	while (closer != NULL && closer->previous != stack_bottom) {
-		closer = closer->previous;
-	}
+  // move back to first relevant delim.
+  while (closer != NULL && closer->previous != stack_bottom) {
+    closer = closer->previous;
+  }
 
-	// now move forward, looking for closers, and handling each
-	while (closer != NULL) {
-		if (closer->can_close &&
-		    (closer->delim_char == '*' || closer->delim_char == '_' ||
-		     closer->delim_char == '"' || closer->delim_char == '\'')) {
-			// Now look backwards for first matching opener:
-			opener = closer->previous;
-			opener_found = false;
-			while (opener != NULL && opener != stack_bottom &&
-			       opener != openers_bottom[closer->delim_char]) {
-				if (opener->delim_char == closer->delim_char &&
-				    opener->can_open) {
-					opener_found = true;
-					break;
-				}
-				opener = opener->previous;
-			}
-			old_closer = closer;
-			if (closer->delim_char == '*' || closer->delim_char == '_') {
-				if (opener_found) {
-					closer = S_insert_emph(subj, opener, closer);
-				} else {
-					closer = closer->next;
-				}
-			} else if (closer->delim_char == '\'') {
-				cmark_chunk_free(&closer->inl_text->as.literal);
-				closer->inl_text->as.literal =
-				    cmark_chunk_literal(RIGHTSINGLEQUOTE);
-				if (opener_found) {
-					cmark_chunk_free(&opener->inl_text->as.literal);
-					opener->inl_text->as.literal =
-					    cmark_chunk_literal(LEFTSINGLEQUOTE);
-				}
-				closer = closer->next;
-			} else if (closer->delim_char == '"') {
-				cmark_chunk_free(&closer->inl_text->as.literal);
-				closer->inl_text->as.literal =
-				    cmark_chunk_literal(RIGHTDOUBLEQUOTE);
-				if (opener_found) {
-					cmark_chunk_free(&opener->inl_text->as.literal);
-					opener->inl_text->as.literal =
-					    cmark_chunk_literal(LEFTDOUBLEQUOTE);
-				}
-				closer = closer->next;
-			}
-			if (!opener_found) {
-				// set lower bound for future searches for openers:
-				openers_bottom[old_closer->delim_char] = old_closer->previous;
-				if (!old_closer->can_open) {
-					// we can remove a closer that can't be an
-					// opener, once we've seen there's no
-					// matching opener:
-					remove_delimiter(subj, old_closer);
-				}
-			}
-		} else {
-			closer = closer->next;
-		}
-	}
-	// free all delimiters in list until stack_bottom:
-	while (subj->last_delim != stack_bottom) {
-		remove_delimiter(subj, subj->last_delim);
-	}
+  // now move forward, looking for closers, and handling each
+  while (closer != NULL) {
+    if (closer->can_close &&
+        (closer->delim_char == '*' || closer->delim_char == '_' ||
+         closer->delim_char == '"' || closer->delim_char == '\'')) {
+      // Now look backwards for first matching opener:
+      opener = closer->previous;
+      opener_found = false;
+      while (opener != NULL && opener != stack_bottom &&
+             opener != openers_bottom[closer->delim_char]) {
+        if (opener->delim_char == closer->delim_char && opener->can_open) {
+          opener_found = true;
+          break;
+        }
+        opener = opener->previous;
+      }
+      old_closer = closer;
+      if (closer->delim_char == '*' || closer->delim_char == '_') {
+        if (opener_found) {
+          closer = S_insert_emph(subj, opener, closer);
+        } else {
+          closer = closer->next;
+        }
+      } else if (closer->delim_char == '\'') {
+        cmark_chunk_free(&closer->inl_text->as.literal);
+        closer->inl_text->as.literal = cmark_chunk_literal(RIGHTSINGLEQUOTE);
+        if (opener_found) {
+          cmark_chunk_free(&opener->inl_text->as.literal);
+          opener->inl_text->as.literal = cmark_chunk_literal(LEFTSINGLEQUOTE);
+        }
+        closer = closer->next;
+      } else if (closer->delim_char == '"') {
+        cmark_chunk_free(&closer->inl_text->as.literal);
+        closer->inl_text->as.literal = cmark_chunk_literal(RIGHTDOUBLEQUOTE);
+        if (opener_found) {
+          cmark_chunk_free(&opener->inl_text->as.literal);
+          opener->inl_text->as.literal = cmark_chunk_literal(LEFTDOUBLEQUOTE);
+        }
+        closer = closer->next;
+      }
+      if (!opener_found) {
+        // set lower bound for future searches for openers:
+        openers_bottom[old_closer->delim_char] = old_closer->previous;
+        if (!old_closer->can_open) {
+          // we can remove a closer that can't be an
+          // opener, once we've seen there's no
+          // matching opener:
+          remove_delimiter(subj, old_closer);
+        }
+      }
+    } else {
+      closer = closer->next;
+    }
+  }
+  // free all delimiters in list until stack_bottom:
+  while (subj->last_delim != stack_bottom) {
+    remove_delimiter(subj, subj->last_delim);
+  }
 }
 
-static delimiter*
-S_insert_emph(subject *subj, delimiter *opener, delimiter *closer)
-{
-	delimiter *delim, *tmp_delim;
-	bufsize_t use_delims;
-	cmark_node *opener_inl = opener->inl_text;
-	cmark_node *closer_inl = closer->inl_text;
-	bufsize_t opener_num_chars = opener_inl->as.literal.len;
-	bufsize_t closer_num_chars = closer_inl->as.literal.len;
-	cmark_node *tmp, *emph, *first_child, *last_child;
+static delimiter *S_insert_emph(subject *subj, delimiter *opener,
+                                delimiter *closer) {
+  delimiter *delim, *tmp_delim;
+  bufsize_t use_delims;
+  cmark_node *opener_inl = opener->inl_text;
+  cmark_node *closer_inl = closer->inl_text;
+  bufsize_t opener_num_chars = opener_inl->as.literal.len;
+  bufsize_t closer_num_chars = closer_inl->as.literal.len;
+  cmark_node *tmp, *emph, *first_child, *last_child;
 
-	// calculate the actual number of characters used from this closer
-	if (closer_num_chars < 3 || opener_num_chars < 3) {
-		use_delims = closer_num_chars <= opener_num_chars ?
-		             closer_num_chars : opener_num_chars;
-	} else { // closer and opener both have >= 3 characters
-		use_delims = closer_num_chars % 2 == 0 ? 2 : 1;
-	}
+  // calculate the actual number of characters used from this closer
+  if (closer_num_chars < 3 || opener_num_chars < 3) {
+    use_delims = closer_num_chars <= opener_num_chars ? closer_num_chars
+                                                      : opener_num_chars;
+  } else { // closer and opener both have >= 3 characters
+    use_delims = closer_num_chars % 2 == 0 ? 2 : 1;
+  }
 
-	// remove used characters from associated inlines.
-	opener_num_chars -= use_delims;
-	closer_num_chars -= use_delims;
-	opener_inl->as.literal.len = opener_num_chars;
-	closer_inl->as.literal.len = closer_num_chars;
+  // remove used characters from associated inlines.
+  opener_num_chars -= use_delims;
+  closer_num_chars -= use_delims;
+  opener_inl->as.literal.len = opener_num_chars;
+  closer_inl->as.literal.len = closer_num_chars;
 
-	// free delimiters between opener and closer
-	delim = closer->previous;
-	while (delim != NULL && delim != opener) {
-		tmp_delim = delim->previous;
-		remove_delimiter(subj, delim);
-		delim = tmp_delim;
-	}
+  // free delimiters between opener and closer
+  delim = closer->previous;
+  while (delim != NULL && delim != opener) {
+    tmp_delim = delim->previous;
+    remove_delimiter(subj, delim);
+    delim = tmp_delim;
+  }
 
-	first_child = opener_inl->next;
-	last_child  = closer_inl->prev;
+  first_child = opener_inl->next;
+  last_child = closer_inl->prev;
 
-	// if opener has 0 characters, remove it and its associated inline
-	if (opener_num_chars == 0) {
-		// replace empty opener inline with emph
-		cmark_chunk_free(&(opener_inl->as.literal));
-		emph = opener_inl;
-		emph->type = use_delims == 1 ?
-			CMARK_NODE_EMPH : CMARK_NODE_STRONG;
-		// remove opener from list
-		remove_delimiter(subj, opener);
-	} else {
-		// create new emph or strong, and splice it in to our inlines
-		// between the opener and closer
-		emph = use_delims == 1 ? make_emph() : make_strong();
-		emph->parent = opener_inl->parent;
-		emph->prev = opener_inl;
-		opener_inl->next = emph;
-	}
+  // if opener has 0 characters, remove it and its associated inline
+  if (opener_num_chars == 0) {
+    // replace empty opener inline with emph
+    cmark_chunk_free(&(opener_inl->as.literal));
+    emph = opener_inl;
+    emph->type = use_delims == 1 ? CMARK_NODE_EMPH : CMARK_NODE_STRONG;
+    // remove opener from list
+    remove_delimiter(subj, opener);
+  } else {
+    // create new emph or strong, and splice it in to our inlines
+    // between the opener and closer
+    emph = use_delims == 1 ? make_emph() : make_strong();
+    emph->parent = opener_inl->parent;
+    emph->prev = opener_inl;
+    opener_inl->next = emph;
+  }
 
-	// push children below emph
-	emph->next = closer_inl;
-	closer_inl->prev = emph;
-	emph->first_child = first_child;
-	emph->last_child  = last_child;
+  // push children below emph
+  emph->next = closer_inl;
+  closer_inl->prev = emph;
+  emph->first_child = first_child;
+  emph->last_child = last_child;
 
-	// fix children pointers
-	first_child->prev = NULL;
-	last_child->next  = NULL;
-	for (tmp = first_child; tmp != NULL; tmp = tmp->next) {
-		tmp->parent = emph;
-	}
+  // fix children pointers
+  first_child->prev = NULL;
+  last_child->next = NULL;
+  for (tmp = first_child; tmp != NULL; tmp = tmp->next) {
+    tmp->parent = emph;
+  }
 
-	// if closer has 0 characters, remove it and its associated inline
-	if (closer_num_chars == 0) {
-		// remove empty closer inline
-		cmark_node_free(closer_inl);
-		// remove closer from list
-		tmp_delim = closer->next;
-		remove_delimiter(subj, closer);
-		closer = tmp_delim;
-	}
+  // if closer has 0 characters, remove it and its associated inline
+  if (closer_num_chars == 0) {
+    // remove empty closer inline
+    cmark_node_free(closer_inl);
+    // remove closer from list
+    tmp_delim = closer->next;
+    remove_delimiter(subj, closer);
+    closer = tmp_delim;
+  }
 
-	return closer;
+  return closer;
 }
 
 // Parse backslash-escape or just a backslash, returning an inline.
-static cmark_node* handle_backslash(subject *subj)
-{
-	advance(subj);
-	unsigned char nextchar = peek_char(subj);
-	if (cmark_ispunct(nextchar)) {  // only ascii symbols and newline can be escaped
-		advance(subj);
-		return make_str(cmark_chunk_dup(&subj->input, subj->pos - 1, 1));
-	} else if (!is_eof(subj) && skip_line_end(subj)) {
-		return make_linebreak();
-	} else {
-		return make_str(cmark_chunk_literal("\\"));
-	}
+static cmark_node *handle_backslash(subject *subj) {
+  advance(subj);
+  unsigned char nextchar = peek_char(subj);
+  if (cmark_ispunct(
+          nextchar)) { // only ascii symbols and newline can be escaped
+    advance(subj);
+    return make_str(cmark_chunk_dup(&subj->input, subj->pos - 1, 1));
+  } else if (!is_eof(subj) && skip_line_end(subj)) {
+    return make_linebreak();
+  } else {
+    return make_str(cmark_chunk_literal("\\"));
+  }
 }
 
 // Parse an entity or a regular "&" string.
 // Assumes the subject has an '&' character at the current position.
-static cmark_node* handle_entity(subject* subj)
-{
-	cmark_strbuf ent = GH_BUF_INIT;
-	bufsize_t len;
+static cmark_node *handle_entity(subject *subj) {
+  cmark_strbuf ent = GH_BUF_INIT;
+  bufsize_t len;
 
-	advance(subj);
+  advance(subj);
 
-	len = houdini_unescape_ent(&ent,
-	                           subj->input.data + subj->pos,
-	                           subj->input.len - subj->pos
-	                          );
+  len = houdini_unescape_ent(&ent, subj->input.data + subj->pos,
+                             subj->input.len - subj->pos);
 
-	if (len == 0)
-		return make_str(cmark_chunk_literal("&"));
+  if (len == 0)
+    return make_str(cmark_chunk_literal("&"));
 
-	subj->pos += len;
-	return make_str(cmark_chunk_buf_detach(&ent));
+  subj->pos += len;
+  return make_str(cmark_chunk_buf_detach(&ent));
 }
 
 // Clean a URL: remove surrounding whitespace and surrounding <>,
 // and remove \ that escape punctuation.
-cmark_chunk cmark_clean_url(cmark_chunk *url)
-{
-	cmark_strbuf buf = GH_BUF_INIT;
+cmark_chunk cmark_clean_url(cmark_chunk *url) {
+  cmark_strbuf buf = GH_BUF_INIT;
 
-	cmark_chunk_trim(url);
+  cmark_chunk_trim(url);
 
-	if (url->len == 0) {
-		cmark_chunk result = CMARK_CHUNK_EMPTY;
-		return result;
-	}
+  if (url->len == 0) {
+    cmark_chunk result = CMARK_CHUNK_EMPTY;
+    return result;
+  }
 
-	if (url->data[0] == '<' && url->data[url->len - 1] == '>') {
-		houdini_unescape_html_f(&buf, url->data + 1, url->len - 2);
-	} else {
-		houdini_unescape_html_f(&buf, url->data, url->len);
-	}
+  if (url->data[0] == '<' && url->data[url->len - 1] == '>') {
+    houdini_unescape_html_f(&buf, url->data + 1, url->len - 2);
+  } else {
+    houdini_unescape_html_f(&buf, url->data, url->len);
+  }
 
-	cmark_strbuf_unescape(&buf);
-	return cmark_chunk_buf_detach(&buf);
+  cmark_strbuf_unescape(&buf);
+  return cmark_chunk_buf_detach(&buf);
 }
 
-cmark_chunk cmark_clean_title(cmark_chunk *title)
-{
-	cmark_strbuf buf = GH_BUF_INIT;
-	unsigned char first, last;
+cmark_chunk cmark_clean_title(cmark_chunk *title) {
+  cmark_strbuf buf = GH_BUF_INIT;
+  unsigned char first, last;
 
-	if (title->len == 0) {
-		cmark_chunk result = CMARK_CHUNK_EMPTY;
-		return result;
-	}
+  if (title->len == 0) {
+    cmark_chunk result = CMARK_CHUNK_EMPTY;
+    return result;
+  }
 
-	first = title->data[0];
-	last = title->data[title->len - 1];
+  first = title->data[0];
+  last = title->data[title->len - 1];
 
-	// remove surrounding quotes if any:
-	if ((first == '\'' && last == '\'') ||
-	    (first == '(' && last == ')') ||
-	    (first == '"' && last == '"')) {
-		houdini_unescape_html_f(&buf, title->data + 1, title->len - 2);
-	} else {
-		houdini_unescape_html_f(&buf, title->data, title->len);
-	}
+  // remove surrounding quotes if any:
+  if ((first == '\'' && last == '\'') || (first == '(' && last == ')') ||
+      (first == '"' && last == '"')) {
+    houdini_unescape_html_f(&buf, title->data + 1, title->len - 2);
+  } else {
+    houdini_unescape_html_f(&buf, title->data, title->len);
+  }
 
-	cmark_strbuf_unescape(&buf);
-	return cmark_chunk_buf_detach(&buf);
+  cmark_strbuf_unescape(&buf);
+  return cmark_chunk_buf_detach(&buf);
 }
 
 // Parse an autolink or HTML tag.
 // Assumes the subject has a '<' character at the current position.
-static cmark_node* handle_pointy_brace(subject* subj)
-{
-	bufsize_t matchlen = 0;
-	cmark_chunk contents;
+static cmark_node *handle_pointy_brace(subject *subj) {
+  bufsize_t matchlen = 0;
+  cmark_chunk contents;
 
-	advance(subj);  // advance past first <
+  advance(subj); // advance past first <
 
-	// first try to match a URL autolink
-	matchlen = scan_autolink_uri(&subj->input, subj->pos);
-	if (matchlen > 0) {
-		contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1);
-		subj->pos += matchlen;
+  // first try to match a URL autolink
+  matchlen = scan_autolink_uri(&subj->input, subj->pos);
+  if (matchlen > 0) {
+    contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1);
+    subj->pos += matchlen;
 
-		return make_autolink(contents, 0);
-	}
+    return make_autolink(contents, 0);
+  }
 
-	// next try to match an email autolink
-	matchlen = scan_autolink_email(&subj->input, subj->pos);
-	if (matchlen > 0) {
-		contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1);
-		subj->pos += matchlen;
+  // next try to match an email autolink
+  matchlen = scan_autolink_email(&subj->input, subj->pos);
+  if (matchlen > 0) {
+    contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1);
+    subj->pos += matchlen;
 
-		return make_autolink(contents, 1);
-	}
+    return make_autolink(contents, 1);
+  }
 
-	// finally, try to match an html tag
-	matchlen = scan_html_tag(&subj->input, subj->pos);
-	if (matchlen > 0) {
-		contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1);
-		subj->pos += matchlen;
-		return make_raw_html(contents);
-	}
+  // finally, try to match an html tag
+  matchlen = scan_html_tag(&subj->input, subj->pos);
+  if (matchlen > 0) {
+    contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1);
+    subj->pos += matchlen;
+    return make_raw_html(contents);
+  }
 
-	// if nothing matches, just return the opening <:
-	return make_str(cmark_chunk_literal("<"));
+  // if nothing matches, just return the opening <:
+  return make_str(cmark_chunk_literal("<"));
 }
 
 // Parse a link label.  Returns 1 if successful.
 // Note:  unescaped brackets are not allowed in labels.
 // The label begins with `[` and ends with the first `]` character
 // encountered.  Backticks in labels do not start code spans.
-static int link_label(subject* subj, cmark_chunk *raw_label)
-{
-	bufsize_t startpos = subj->pos;
-	int length = 0;
-	unsigned char c;
+static int link_label(subject *subj, cmark_chunk *raw_label) {
+  bufsize_t startpos = subj->pos;
+  int length = 0;
+  unsigned char c;
 
-	// advance past [
-	if (peek_char(subj) == '[') {
-		advance(subj);
-	} else {
-		return 0;
-	}
+  // advance past [
+  if (peek_char(subj) == '[') {
+    advance(subj);
+  } else {
+    return 0;
+  }
 
-	while ((c = peek_char(subj)) && c != '[' && c != ']') {
-		if (c == '\\') {
-			advance(subj);
-			length++;
-			if (cmark_ispunct(peek_char(subj))) {
-				advance(subj);
-				length++;
-			}
-		} else {
-			advance(subj);
-			length++;
-		}
-		if (length > MAX_LINK_LABEL_LENGTH) {
-			goto noMatch;
-		}
-	}
+  while ((c = peek_char(subj)) && c != '[' && c != ']') {
+    if (c == '\\') {
+      advance(subj);
+      length++;
+      if (cmark_ispunct(peek_char(subj))) {
+        advance(subj);
+        length++;
+      }
+    } else {
+      advance(subj);
+      length++;
+    }
+    if (length > MAX_LINK_LABEL_LENGTH) {
+      goto noMatch;
+    }
+  }
 
-	if (c == ']') { // match found
-		*raw_label = cmark_chunk_dup(&subj->input, startpos + 1, subj->pos - (startpos + 1));
-		cmark_chunk_trim(raw_label);
-		advance(subj);  // advance past ]
-		return 1;
-	}
+  if (c == ']') { // match found
+    *raw_label =
+        cmark_chunk_dup(&subj->input, startpos + 1, subj->pos - (startpos + 1));
+    cmark_chunk_trim(raw_label);
+    advance(subj); // advance past ]
+    return 1;
+  }
 
 noMatch:
-	subj->pos = startpos; // rewind
-	return 0;
-
+  subj->pos = startpos; // rewind
+  return 0;
 }
 
 // Return a link, an image, or a literal close bracket.
-static cmark_node* handle_close_bracket(subject* subj, cmark_node *parent)
-{
-	bufsize_t initial_pos;
-	bufsize_t starturl, endurl, starttitle, endtitle, endall;
-	bufsize_t n;
-	bufsize_t sps;
-	cmark_reference *ref;
-	bool is_image = false;
-	cmark_chunk url_chunk, title_chunk;
-	cmark_chunk url, title;
-	delimiter *opener;
-	cmark_node *link_text;
-	cmark_node *inl;
-	cmark_chunk raw_label;
-	int found_label;
+static cmark_node *handle_close_bracket(subject *subj, cmark_node *parent) {
+  bufsize_t initial_pos;
+  bufsize_t starturl, endurl, starttitle, endtitle, endall;
+  bufsize_t n;
+  bufsize_t sps;
+  cmark_reference *ref;
+  bool is_image = false;
+  cmark_chunk url_chunk, title_chunk;
+  cmark_chunk url, title;
+  delimiter *opener;
+  cmark_node *link_text;
+  cmark_node *inl;
+  cmark_chunk raw_label;
+  int found_label;
 
-	advance(subj);  // advance past ]
-	initial_pos = subj->pos;
+  advance(subj); // advance past ]
+  initial_pos = subj->pos;
 
-	// look through list of delimiters for a [ or !
-	opener = subj->last_delim;
-	while (opener) {
-		if (opener->delim_char == '[' || opener->delim_char == '!') {
-			break;
-		}
-		opener = opener->previous;
-	}
+  // look through list of delimiters for a [ or !
+  opener = subj->last_delim;
+  while (opener) {
+    if (opener->delim_char == '[' || opener->delim_char == '!') {
+      break;
+    }
+    opener = opener->previous;
+  }
 
-	if (opener == NULL) {
-		return make_str(cmark_chunk_literal("]"));
-	}
+  if (opener == NULL) {
+    return make_str(cmark_chunk_literal("]"));
+  }
 
-	if (!opener->active) {
-		// take delimiter off stack
-		remove_delimiter(subj, opener);
-		return make_str(cmark_chunk_literal("]"));
-	}
+  if (!opener->active) {
+    // take delimiter off stack
+    remove_delimiter(subj, opener);
+    return make_str(cmark_chunk_literal("]"));
+  }
 
-	// If we got here, we matched a potential link/image text.
-	is_image = opener->delim_char == '!';
-	link_text = opener->inl_text->next;
+  // If we got here, we matched a potential link/image text.
+  is_image = opener->delim_char == '!';
+  link_text = opener->inl_text->next;
 
-	// Now we check to see if it's a link/image.
+  // Now we check to see if it's a link/image.
 
-	// First, look for an inline link.
-	if (peek_char(subj) == '(' &&
-	    ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) &&
-	    ((n = scan_link_url(&subj->input, subj->pos + 1 + sps)) > -1)) {
+  // First, look for an inline link.
+  if (peek_char(subj) == '(' &&
+      ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) &&
+      ((n = scan_link_url(&subj->input, subj->pos + 1 + sps)) > -1)) {
 
-		// try to parse an explicit link:
-		starturl = subj->pos + 1 + sps; // after (
-		endurl = starturl + n;
-		starttitle = endurl + scan_spacechars(&subj->input, endurl);
+    // try to parse an explicit link:
+    starturl = subj->pos + 1 + sps; // after (
+    endurl = starturl + n;
+    starttitle = endurl + scan_spacechars(&subj->input, endurl);
 
-		// ensure there are spaces btw url and title
-		endtitle = (starttitle == endurl) ? starttitle :
-		           starttitle + scan_link_title(&subj->input, starttitle);
+    // ensure there are spaces btw url and title
+    endtitle = (starttitle == endurl)
+                   ? starttitle
+                   : starttitle + scan_link_title(&subj->input, starttitle);
 
-		endall = endtitle + scan_spacechars(&subj->input, endtitle);
+    endall = endtitle + scan_spacechars(&subj->input, endtitle);
 
-		if (peek_at(subj, endall) == ')') {
-			subj->pos = endall + 1;
+    if (peek_at(subj, endall) == ')') {
+      subj->pos = endall + 1;
 
-			url_chunk = cmark_chunk_dup(&subj->input, starturl, endurl - starturl);
-			title_chunk = cmark_chunk_dup(&subj->input, starttitle, endtitle - starttitle);
-			url = cmark_clean_url(&url_chunk);
-			title = cmark_clean_title(&title_chunk);
-			cmark_chunk_free(&url_chunk);
-			cmark_chunk_free(&title_chunk);
-			goto match;
+      url_chunk = cmark_chunk_dup(&subj->input, starturl, endurl - starturl);
+      title_chunk =
+          cmark_chunk_dup(&subj->input, starttitle, endtitle - starttitle);
+      url = cmark_clean_url(&url_chunk);
+      title = cmark_clean_title(&title_chunk);
+      cmark_chunk_free(&url_chunk);
+      cmark_chunk_free(&title_chunk);
+      goto match;
 
-		} else {
-			goto noMatch;
-		}
-	}
+    } else {
+      goto noMatch;
+    }
+  }
 
-	// Next, look for a following [link label] that matches in refmap.
-	// skip spaces
-	subj->pos = subj->pos + scan_spacechars(&subj->input, subj->pos);
-	raw_label = cmark_chunk_literal("");
-	found_label = link_label(subj, &raw_label);
-	if (!found_label || raw_label.len == 0) {
-		cmark_chunk_free(&raw_label);
-		raw_label = cmark_chunk_dup(&subj->input, opener->position,
-		                            initial_pos - opener->position - 1);
-	}
+  // Next, look for a following [link label] that matches in refmap.
+  // skip spaces
+  subj->pos = subj->pos + scan_spacechars(&subj->input, subj->pos);
+  raw_label = cmark_chunk_literal("");
+  found_label = link_label(subj, &raw_label);
+  if (!found_label || raw_label.len == 0) {
+    cmark_chunk_free(&raw_label);
+    raw_label = cmark_chunk_dup(&subj->input, opener->position,
+                                initial_pos - opener->position - 1);
+  }
 
-	if (!found_label) {
-		// If we have a shortcut reference link, back up
-		// to before the spacse we skipped.
-		subj->pos = initial_pos;
-	}
+  if (!found_label) {
+    // If we have a shortcut reference link, back up
+    // to before the spacse we skipped.
+    subj->pos = initial_pos;
+  }
 
-	ref = cmark_reference_lookup(subj->refmap, &raw_label);
-	cmark_chunk_free(&raw_label);
+  ref = cmark_reference_lookup(subj->refmap, &raw_label);
+  cmark_chunk_free(&raw_label);
 
-	if (ref != NULL) { // found
-		url   = chunk_clone(&ref->url);
-		title = chunk_clone(&ref->title);
-		goto match;
-	} else {
-		goto noMatch;
-	}
+  if (ref != NULL) { // found
+    url = chunk_clone(&ref->url);
+    title = chunk_clone(&ref->title);
+    goto match;
+  } else {
+    goto noMatch;
+  }
 
 noMatch:
-	// If we fall through to here, it means we didn't match a link:
-	remove_delimiter(subj, opener);  // remove this opener from delimiter list
-	subj->pos = initial_pos;
-	return make_str(cmark_chunk_literal("]"));
+  // If we fall through to here, it means we didn't match a link:
+  remove_delimiter(subj, opener); // remove this opener from delimiter list
+  subj->pos = initial_pos;
+  return make_str(cmark_chunk_literal("]"));
 
 match:
-	inl = opener->inl_text;
-	inl->type = is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK;
-	cmark_chunk_free(&inl->as.literal);
-	inl->first_child = link_text;
-	process_emphasis(subj, opener);
-	inl->as.link.url   = url;
-	inl->as.link.title = title;
-	inl->next = NULL;
-	if (link_text) {
-		cmark_node *tmp;
-		link_text->prev = NULL;
-		for (tmp = link_text; tmp->next != NULL; tmp = tmp->next) {
-			tmp->parent = inl;
-		}
-		tmp->parent = inl;
-		inl->last_child = tmp;
-	}
-	parent->last_child = inl;
+  inl = opener->inl_text;
+  inl->type = is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK;
+  cmark_chunk_free(&inl->as.literal);
+  inl->first_child = link_text;
+  process_emphasis(subj, opener);
+  inl->as.link.url = url;
+  inl->as.link.title = title;
+  inl->next = NULL;
+  if (link_text) {
+    cmark_node *tmp;
+    link_text->prev = NULL;
+    for (tmp = link_text; tmp->next != NULL; tmp = tmp->next) {
+      tmp->parent = inl;
+    }
+    tmp->parent = inl;
+    inl->last_child = tmp;
+  }
+  parent->last_child = inl;
 
-	// Now, if we have a link, we also want to deactivate earlier link
-	// delimiters. (This code can be removed if we decide to allow links
-	// inside links.)
-	remove_delimiter(subj, opener);
-	if (!is_image) {
-		opener = subj->last_delim;
-		while (opener != NULL) {
-			if (opener->delim_char == '[') {
-				if (!opener->active) {
-					break;
-				} else {
-					opener->active = false;
-				}
-			}
-			opener = opener->previous;
-		}
-	}
+  // Now, if we have a link, we also want to deactivate earlier link
+  // delimiters. (This code can be removed if we decide to allow links
+  // inside links.)
+  remove_delimiter(subj, opener);
+  if (!is_image) {
+    opener = subj->last_delim;
+    while (opener != NULL) {
+      if (opener->delim_char == '[') {
+        if (!opener->active) {
+          break;
+        } else {
+          opener->active = false;
+        }
+      }
+      opener = opener->previous;
+    }
+  }
 
-	return NULL;
+  return NULL;
 }
 
 // Parse a hard or soft linebreak, returning an inline.
 // Assumes the subject has a newline at the current position.
-static cmark_node* handle_newline(subject *subj)
-{
-	bufsize_t nlpos = subj->pos;
-	// skip over newline
-	advance(subj);
-	// skip spaces at beginning of line
-	skip_spaces(subj);
-	if (nlpos > 1 &&
-	    peek_at(subj, nlpos - 1) == ' ' &&
-	    peek_at(subj, nlpos - 2) == ' ') {
-		return make_linebreak();
-	} else {
-		return make_softbreak();
-	}
+static cmark_node *handle_newline(subject *subj) {
+  bufsize_t nlpos = subj->pos;
+  // skip over newline
+  advance(subj);
+  // skip spaces at beginning of line
+  skip_spaces(subj);
+  if (nlpos > 1 && peek_at(subj, nlpos - 1) == ' ' &&
+      peek_at(subj, nlpos - 2) == ' ') {
+    return make_linebreak();
+  } else {
+    return make_softbreak();
+  }
 }
 
-static bufsize_t subject_find_special_char(subject *subj, int options)
-{
-	// "\r\n\\`&_*[]<!"
-	static const int8_t SPECIAL_CHARS[256] = {
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 1, 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, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-	};
+static bufsize_t subject_find_special_char(subject *subj, int options) {
+  // "\r\n\\`&_*[]<!"
+  static const int8_t SPECIAL_CHARS[256] = {
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 1, 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, 1, 1, 1, 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,
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 
-	// " ' . -
-	static const char SMART_PUNCT_CHARS[] = {
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	};
+  // " ' . -
+  static const char SMART_PUNCT_CHARS[] = {
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 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, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  };
 
-	bufsize_t n = subj->pos + 1;
+  bufsize_t n = subj->pos + 1;
 
-	while (n < subj->input.len) {
-		if (SPECIAL_CHARS[subj->input.data[n]])
-			return n;
-		if (options & CMARK_OPT_SMART &&
-		    SMART_PUNCT_CHARS[subj->input.data[n]])
-			return n;
-		n++;
-	}
+  while (n < subj->input.len) {
+    if (SPECIAL_CHARS[subj->input.data[n]])
+      return n;
+    if (options & CMARK_OPT_SMART && SMART_PUNCT_CHARS[subj->input.data[n]])
+      return n;
+    n++;
+  }
 
-	return subj->input.len;
+  return subj->input.len;
 }
 
 // Parse an inline, advancing subject, and add it as a child of parent.
 // Return 0 if no inline can be parsed, 1 otherwise.
-static int parse_inline(subject* subj, cmark_node * parent, int options)
-{
-	cmark_node* new_inl = NULL;
-	cmark_chunk contents;
-	unsigned char c;
-	bufsize_t endpos;
-	c = peek_char(subj);
-	if (c == 0) {
-		return 0;
-	}
-	switch(c) {
-	case '\r':
-	case '\n':
-		new_inl = handle_newline(subj);
-		break;
-	case '`':
-		new_inl = handle_backticks(subj);
-		break;
-	case '\\':
-		new_inl = handle_backslash(subj);
-		break;
-	case '&':
-		new_inl = handle_entity(subj);
-		break;
-	case '<':
-		new_inl = handle_pointy_brace(subj);
-		break;
-	case '*':
-	case '_':
-	case '\'':
-	case '"':
-		new_inl = handle_delim(subj, c, options & CMARK_OPT_SMART);
-		break;
-	case '-':
-		new_inl = handle_hyphen(subj, options & CMARK_OPT_SMART);
-		break;
-	case '.':
-		new_inl = handle_period(subj, options & CMARK_OPT_SMART);
-		break;
-	case '[':
-		advance(subj);
-		new_inl = make_str(cmark_chunk_literal("["));
-		push_delimiter(subj, '[', true, false, new_inl);
-		break;
-	case ']':
-		new_inl = handle_close_bracket(subj, parent);
-		break;
-	case '!':
-		advance(subj);
-		if (peek_char(subj) == '[') {
-			advance(subj);
-			new_inl = make_str(cmark_chunk_literal("!["));
-			push_delimiter(subj, '!', false, true, new_inl);
-		} else {
-			new_inl = make_str(cmark_chunk_literal("!"));
-		}
-		break;
-	default:
-		endpos = subject_find_special_char(subj, options);
-		contents = cmark_chunk_dup(&subj->input, subj->pos, endpos - subj->pos);
-		subj->pos = endpos;
+static int parse_inline(subject *subj, cmark_node *parent, int options) {
+  cmark_node *new_inl = NULL;
+  cmark_chunk contents;
+  unsigned char c;
+  bufsize_t endpos;
+  c = peek_char(subj);
+  if (c == 0) {
+    return 0;
+  }
+  switch (c) {
+  case '\r':
+  case '\n':
+    new_inl = handle_newline(subj);
+    break;
+  case '`':
+    new_inl = handle_backticks(subj);
+    break;
+  case '\\':
+    new_inl = handle_backslash(subj);
+    break;
+  case '&':
+    new_inl = handle_entity(subj);
+    break;
+  case '<':
+    new_inl = handle_pointy_brace(subj);
+    break;
+  case '*':
+  case '_':
+  case '\'':
+  case '"':
+    new_inl = handle_delim(subj, c, options & CMARK_OPT_SMART);
+    break;
+  case '-':
+    new_inl = handle_hyphen(subj, options & CMARK_OPT_SMART);
+    break;
+  case '.':
+    new_inl = handle_period(subj, options & CMARK_OPT_SMART);
+    break;
+  case '[':
+    advance(subj);
+    new_inl = make_str(cmark_chunk_literal("["));
+    push_delimiter(subj, '[', true, false, new_inl);
+    break;
+  case ']':
+    new_inl = handle_close_bracket(subj, parent);
+    break;
+  case '!':
+    advance(subj);
+    if (peek_char(subj) == '[') {
+      advance(subj);
+      new_inl = make_str(cmark_chunk_literal("!["));
+      push_delimiter(subj, '!', false, true, new_inl);
+    } else {
+      new_inl = make_str(cmark_chunk_literal("!"));
+    }
+    break;
+  default:
+    endpos = subject_find_special_char(subj, options);
+    contents = cmark_chunk_dup(&subj->input, subj->pos, endpos - subj->pos);
+    subj->pos = endpos;
 
-		// if we're at a newline, strip trailing spaces.
-		if (S_is_line_end_char(peek_char(subj))) {
-			cmark_chunk_rtrim(&contents);
-		}
+    // if we're at a newline, strip trailing spaces.
+    if (S_is_line_end_char(peek_char(subj))) {
+      cmark_chunk_rtrim(&contents);
+    }
 
-		new_inl = make_str(contents);
-	}
-	if (new_inl != NULL) {
-		cmark_node_append_child(parent, new_inl);
-	}
+    new_inl = make_str(contents);
+  }
+  if (new_inl != NULL) {
+    cmark_node_append_child(parent, new_inl);
+  }
 
-	return 1;
+  return 1;
 }
 
 // Parse inlines from parent's string_content, adding as children of parent.
-extern void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap, int options)
-{
-	subject subj;
-	subject_from_buf(&subj, &parent->string_content, refmap);
-	cmark_chunk_rtrim(&subj.input);
+extern void cmark_parse_inlines(cmark_node *parent, cmark_reference_map *refmap,
+                                int options) {
+  subject subj;
+  subject_from_buf(&subj, &parent->string_content, refmap);
+  cmark_chunk_rtrim(&subj.input);
 
-	while (!is_eof(&subj) && parse_inline(&subj, parent, options)) ;
+  while (!is_eof(&subj) && parse_inline(&subj, parent, options))
+    ;
 
-	process_emphasis(&subj, NULL);
+  process_emphasis(&subj, NULL);
 }
 
 // Parse zero or more space characters, including at most one newline.
-static void spnl(subject* subj)
-{
-	skip_spaces(subj);
-	if (skip_line_end(subj)) {
-		skip_spaces(subj);
-	}
+static void spnl(subject *subj) {
+  skip_spaces(subj);
+  if (skip_line_end(subj)) {
+    skip_spaces(subj);
+  }
 }
 
 // Parse reference.  Assumes string begins with '[' character.
 // Modify refmap if a reference is encountered.
 // Return 0 if no reference found, otherwise position of subject
 // after reference is parsed.
-bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refmap)
-{
-	subject subj;
+bufsize_t cmark_parse_reference_inline(cmark_strbuf *input,
+                                       cmark_reference_map *refmap) {
+  subject subj;
 
-	cmark_chunk lab;
-	cmark_chunk url;
-	cmark_chunk title;
+  cmark_chunk lab;
+  cmark_chunk url;
+  cmark_chunk title;
 
-	bufsize_t matchlen = 0;
-	bufsize_t beforetitle;
+  bufsize_t matchlen = 0;
+  bufsize_t beforetitle;
 
-	subject_from_buf(&subj, input, NULL);
+  subject_from_buf(&subj, input, NULL);
 
-	// parse label:
-	if (!link_label(&subj, &lab) || lab.len == 0)
-		return 0;
+  // parse label:
+  if (!link_label(&subj, &lab) || lab.len == 0)
+    return 0;
 
-	// colon:
-	if (peek_char(&subj) == ':') {
-		advance(&subj);
-	} else {
-		return 0;
-	}
+  // colon:
+  if (peek_char(&subj) == ':') {
+    advance(&subj);
+  } else {
+    return 0;
+  }
 
-	// parse link url:
-	spnl(&subj);
-	matchlen = scan_link_url(&subj.input, subj.pos);
-	if (matchlen) {
-		url = cmark_chunk_dup(&subj.input, subj.pos, matchlen);
-		subj.pos += matchlen;
-	} else {
-		return 0;
-	}
+  // parse link url:
+  spnl(&subj);
+  matchlen = scan_link_url(&subj.input, subj.pos);
+  if (matchlen) {
+    url = cmark_chunk_dup(&subj.input, subj.pos, matchlen);
+    subj.pos += matchlen;
+  } else {
+    return 0;
+  }
 
-	// parse optional link_title
-	beforetitle = subj.pos;
-	spnl(&subj);
-	matchlen = scan_link_title(&subj.input, subj.pos);
-	if (matchlen) {
-		title = cmark_chunk_dup(&subj.input, subj.pos, matchlen);
-		subj.pos += matchlen;
-	} else {
-		subj.pos = beforetitle;
-		title = cmark_chunk_literal("");
-	}
+  // parse optional link_title
+  beforetitle = subj.pos;
+  spnl(&subj);
+  matchlen = scan_link_title(&subj.input, subj.pos);
+  if (matchlen) {
+    title = cmark_chunk_dup(&subj.input, subj.pos, matchlen);
+    subj.pos += matchlen;
+  } else {
+    subj.pos = beforetitle;
+    title = cmark_chunk_literal("");
+  }
 
-	// parse final spaces and newline:
-	skip_spaces(&subj);
-	if (!skip_line_end(&subj)) {
-		if (matchlen) { // try rewinding before title
-			subj.pos = beforetitle;
-			skip_spaces(&subj);
-			if (!skip_line_end(&subj)) {
-				return 0;
-			}
-		} else {
-			return 0;
-		}
-	}
-	// insert reference into refmap
-	cmark_reference_create(refmap, &lab, &url, &title);
-	return subj.pos;
+  // parse final spaces and newline:
+  skip_spaces(&subj);
+  if (!skip_line_end(&subj)) {
+    if (matchlen) { // try rewinding before title
+      subj.pos = beforetitle;
+      skip_spaces(&subj);
+      if (!skip_line_end(&subj)) {
+        return 0;
+      }
+    } else {
+      return 0;
+    }
+  }
+  // insert reference into refmap
+  cmark_reference_create(refmap, &lab, &url, &title);
+  return subj.pos;
 }
diff --git a/src/inlines.h b/src/inlines.h
index f8847fc..7e7ee45 100644
--- a/src/inlines.h
+++ b/src/inlines.h
@@ -8,9 +8,11 @@
 cmark_chunk cmark_clean_url(cmark_chunk *url);
 cmark_chunk cmark_clean_title(cmark_chunk *title);
 
-void cmark_parse_inlines(cmark_node* parent, cmark_reference_map *refmap, int options);
+void cmark_parse_inlines(cmark_node *parent, cmark_reference_map *refmap,
+                         int options);
 
-bufsize_t cmark_parse_reference_inline(cmark_strbuf *input, cmark_reference_map *refmap);
+bufsize_t cmark_parse_reference_inline(cmark_strbuf *input,
+                                       cmark_reference_map *refmap);
 
 #ifdef __cplusplus
 }
diff --git a/src/iterator.c b/src/iterator.c
index f18e3bf..81b6f48 100644
--- a/src/iterator.c
+++ b/src/iterator.c
@@ -7,142 +7,112 @@
 #include "iterator.h"
 
 static const int S_leaf_mask =
-    (1 << CMARK_NODE_HTML)        |
-    (1 << CMARK_NODE_HRULE)       |
-    (1 << CMARK_NODE_CODE_BLOCK)  |
-    (1 << CMARK_NODE_TEXT)        |
-    (1 << CMARK_NODE_SOFTBREAK)   |
-    (1 << CMARK_NODE_LINEBREAK)   |
-    (1 << CMARK_NODE_CODE)        |
-    (1 << CMARK_NODE_INLINE_HTML);
+    (1 << CMARK_NODE_HTML) | (1 << CMARK_NODE_HRULE) |
+    (1 << CMARK_NODE_CODE_BLOCK) | (1 << CMARK_NODE_TEXT) |
+    (1 << CMARK_NODE_SOFTBREAK) | (1 << CMARK_NODE_LINEBREAK) |
+    (1 << CMARK_NODE_CODE) | (1 << CMARK_NODE_INLINE_HTML);
 
-cmark_iter*
-cmark_iter_new(cmark_node *root)
-{
-	if (root == NULL) {
-		return NULL;
-	}
-	cmark_iter *iter = (cmark_iter*)malloc(sizeof(cmark_iter));
-	if (iter == NULL) {
-		return NULL;
-	}
-	iter->root         = root;
-	iter->cur.ev_type  = CMARK_EVENT_NONE;
-	iter->cur.node     = NULL;
-	iter->next.ev_type = CMARK_EVENT_ENTER;
-	iter->next.node    = root;
-	return iter;
+cmark_iter *cmark_iter_new(cmark_node *root) {
+  if (root == NULL) {
+    return NULL;
+  }
+  cmark_iter *iter = (cmark_iter *)malloc(sizeof(cmark_iter));
+  if (iter == NULL) {
+    return NULL;
+  }
+  iter->root = root;
+  iter->cur.ev_type = CMARK_EVENT_NONE;
+  iter->cur.node = NULL;
+  iter->next.ev_type = CMARK_EVENT_ENTER;
+  iter->next.node = root;
+  return iter;
 }
 
-void
-cmark_iter_free(cmark_iter *iter)
-{
-	free(iter);
+void cmark_iter_free(cmark_iter *iter) { free(iter); }
+
+static bool S_is_leaf(cmark_node *node) {
+  return (1 << node->type) & S_leaf_mask;
 }
 
-static bool
-S_is_leaf(cmark_node *node)
-{
-	return (1 << node->type) & S_leaf_mask;
+cmark_event_type cmark_iter_next(cmark_iter *iter) {
+  cmark_event_type ev_type = iter->next.ev_type;
+  cmark_node *node = iter->next.node;
+
+  iter->cur.ev_type = ev_type;
+  iter->cur.node = node;
+
+  if (ev_type == CMARK_EVENT_DONE) {
+    return ev_type;
+  }
+
+  /* roll forward to next item, setting both fields */
+  if (ev_type == CMARK_EVENT_ENTER && !S_is_leaf(node)) {
+    if (node->first_child == NULL) {
+      /* stay on this node but exit */
+      iter->next.ev_type = CMARK_EVENT_EXIT;
+    } else {
+      iter->next.ev_type = CMARK_EVENT_ENTER;
+      iter->next.node = node->first_child;
+    }
+  } else if (node == iter->root) {
+    /* don't move past root */
+    iter->next.ev_type = CMARK_EVENT_DONE;
+    iter->next.node = NULL;
+  } else if (node->next) {
+    iter->next.ev_type = CMARK_EVENT_ENTER;
+    iter->next.node = node->next;
+  } else if (node->parent) {
+    iter->next.ev_type = CMARK_EVENT_EXIT;
+    iter->next.node = node->parent;
+  } else {
+    assert(false);
+    iter->next.ev_type = CMARK_EVENT_DONE;
+    iter->next.node = NULL;
+  }
+
+  return ev_type;
 }
 
-cmark_event_type
-cmark_iter_next(cmark_iter *iter)
-{
-	cmark_event_type  ev_type = iter->next.ev_type;
-	cmark_node       *node    = iter->next.node;
-
-	iter->cur.ev_type = ev_type;
-	iter->cur.node    = node;
-
-	if (ev_type == CMARK_EVENT_DONE) {
-		return ev_type;
-	}
-
-	/* roll forward to next item, setting both fields */
-	if (ev_type == CMARK_EVENT_ENTER && !S_is_leaf(node)) {
-		if (node->first_child == NULL) {
-			/* stay on this node but exit */
-			iter->next.ev_type = CMARK_EVENT_EXIT;
-		} else {
-			iter->next.ev_type = CMARK_EVENT_ENTER;
-			iter->next.node    = node->first_child;
-		}
-	} else if (node == iter->root) {
-		/* don't move past root */
-		iter->next.ev_type = CMARK_EVENT_DONE;
-		iter->next.node    = NULL;
-	} else if (node->next) {
-		iter->next.ev_type = CMARK_EVENT_ENTER;
-		iter->next.node    = node->next;
-	} else if (node->parent) {
-		iter->next.ev_type = CMARK_EVENT_EXIT;
-		iter->next.node    = node->parent;
-	} else {
-		assert(false);
-		iter->next.ev_type = CMARK_EVENT_DONE;
-		iter->next.node    = NULL;
-	}
-
-	return ev_type;
+void cmark_iter_reset(cmark_iter *iter, cmark_node *current,
+                      cmark_event_type event_type) {
+  iter->next.ev_type = event_type;
+  iter->next.node = current;
+  cmark_iter_next(iter);
 }
 
-void
-cmark_iter_reset(cmark_iter *iter, cmark_node *current,
-                 cmark_event_type event_type)
-{
-	iter->next.ev_type = event_type;
-	iter->next.node    = current;
-	cmark_iter_next(iter);
+cmark_node *cmark_iter_get_node(cmark_iter *iter) { return iter->cur.node; }
+
+cmark_event_type cmark_iter_get_event_type(cmark_iter *iter) {
+  return iter->cur.ev_type;
 }
 
-cmark_node*
-cmark_iter_get_node(cmark_iter *iter)
-{
-	return iter->cur.node;
-}
+cmark_node *cmark_iter_get_root(cmark_iter *iter) { return iter->root; }
 
-cmark_event_type
-cmark_iter_get_event_type(cmark_iter *iter)
-{
-	return iter->cur.ev_type;
-}
+void cmark_consolidate_text_nodes(cmark_node *root) {
+  cmark_iter *iter = cmark_iter_new(root);
+  cmark_strbuf buf = GH_BUF_INIT;
+  cmark_event_type ev_type;
+  cmark_node *cur, *tmp, *next;
 
-cmark_node*
-cmark_iter_get_root(cmark_iter *iter)
-{
-	return iter->root;
-}
+  while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
+    cur = cmark_iter_get_node(iter);
+    if (ev_type == CMARK_EVENT_ENTER && cur->type == CMARK_NODE_TEXT &&
+        cur->next && cur->next->type == CMARK_NODE_TEXT) {
+      cmark_strbuf_clear(&buf);
+      cmark_strbuf_put(&buf, cur->as.literal.data, cur->as.literal.len);
+      tmp = cur->next;
+      while (tmp && tmp->type == CMARK_NODE_TEXT) {
+        cmark_iter_next(iter); // advance pointer
+        cmark_strbuf_put(&buf, tmp->as.literal.data, tmp->as.literal.len);
+        next = tmp->next;
+        cmark_node_free(tmp);
+        tmp = next;
+      }
+      cmark_chunk_free(&cur->as.literal);
+      cur->as.literal = cmark_chunk_buf_detach(&buf);
+    }
+  }
 
-
-void cmark_consolidate_text_nodes(cmark_node *root)
-{
-	cmark_iter *iter = cmark_iter_new(root);
-	cmark_strbuf buf = GH_BUF_INIT;
-	cmark_event_type ev_type;
-	cmark_node *cur, *tmp, *next;
-
-	while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
-		cur = cmark_iter_get_node(iter);
-		if (ev_type == CMARK_EVENT_ENTER &&
-		    cur->type == CMARK_NODE_TEXT &&
-		    cur->next &&
-		    cur->next->type == CMARK_NODE_TEXT) {
-			cmark_strbuf_clear(&buf);
-			cmark_strbuf_put(&buf, cur->as.literal.data, cur->as.literal.len);
-			tmp = cur->next;
-			while (tmp && tmp->type == CMARK_NODE_TEXT) {
-				cmark_iter_next(iter); // advance pointer
-				cmark_strbuf_put(&buf, tmp->as.literal.data, tmp->as.literal.len);
-				next = tmp->next;
-				cmark_node_free(tmp);
-				tmp = next;
-			}
-			cmark_chunk_free(&cur->as.literal);
-			cur->as.literal = cmark_chunk_buf_detach(&buf);
-		}
-	}
-
-	cmark_strbuf_free(&buf);
-	cmark_iter_free(iter);
+  cmark_strbuf_free(&buf);
+  cmark_iter_free(iter);
 }
diff --git a/src/iterator.h b/src/iterator.h
index 027b10b..9c6bca6 100644
--- a/src/iterator.h
+++ b/src/iterator.h
@@ -8,14 +8,14 @@
 #include "cmark.h"
 
 typedef struct {
-	cmark_event_type  ev_type;
-	cmark_node       *node;
+  cmark_event_type ev_type;
+  cmark_node *node;
 } cmark_iter_state;
 
 struct cmark_iter {
-	cmark_node       *root;
-	cmark_iter_state  cur;
-	cmark_iter_state  next;
+  cmark_node *root;
+  cmark_iter_state cur;
+  cmark_iter_state next;
 };
 
 #ifdef __cplusplus
diff --git a/src/latex.c b/src/latex.c
index 782b0c0..146062e 100644
--- a/src/latex.c
+++ b/src/latex.c
@@ -18,413 +18,391 @@
 #define CR() renderer->cr(renderer)
 #define BLANKLINE() renderer->blankline(renderer)
 
-static inline void outc(cmark_renderer *renderer,
-                        cmark_escaping escape,
-                        int32_t c,
-                        unsigned char nextc)
-{
-	if (escape == LITERAL) {
-		cmark_render_code_point(renderer, c);
-		return;
-	}
+static inline void outc(cmark_renderer *renderer, cmark_escaping escape,
+                        int32_t c, unsigned char nextc) {
+  if (escape == LITERAL) {
+    cmark_render_code_point(renderer, c);
+    return;
+  }
 
-	switch(c) {
-	case 123: // '{'
-	case 125: // '}'
-	case 35: // '#'
-	case 37: // '%'
-	case 38: // '&'
-		cmark_render_ascii(renderer, "\\");
-		cmark_render_code_point(renderer, c);
-		break;
-	case 36: // '$'
-	case 95: // '_'
-		if (escape == NORMAL) {
-			cmark_render_ascii(renderer, "\\");
-		}
-		cmark_render_code_point(renderer, c);
-		break;
-	case 45 : // '-'
-		if (nextc == 45) { // prevent ligature
-			cmark_render_ascii(renderer, "\\-");
-		} else {
-			cmark_render_ascii(renderer, "-");
-		}
-		break;
-	case 126: // '~'
-		if (escape == NORMAL) {
-			cmark_render_ascii(renderer, "\\textasciitilde{}");
-		} else {
-			cmark_render_code_point(renderer, c);
-		}
-		break;
-	case 94: // '^'
-		cmark_render_ascii(renderer, "\\^{}");
-		break;
-	case 92: // '\\'
-		if (escape == URL) {
-			// / acts as path sep even on windows:
-			cmark_render_ascii(renderer, "/");
-		} else {
-			cmark_render_ascii(renderer, "\\textbackslash{}");
-		}
-		break;
-	case 124: // '|'
-		cmark_render_ascii(renderer, "\\textbar{}");
-		break;
-	case 60: // '<'
-		cmark_render_ascii(renderer, "\\textless{}");
-		break;
-	case 62: // '>'
-		cmark_render_ascii(renderer, "\\textgreater{}");
-		break;
-	case 91: // '['
-	case 93: // ']'
-		cmark_render_ascii(renderer, "{");
-		cmark_render_code_point(renderer, c);
-		cmark_render_ascii(renderer, "}");
-		break;
-	case 34: // '"'
-		cmark_render_ascii(renderer, "\\textquotedbl{}");
-		// requires \usepackage[T1]{fontenc}
-		break;
-	case 39: // '\''
-		cmark_render_ascii(renderer, "\\textquotesingle{}");
-		// requires \usepackage{textcomp}
-		break;
-	case 160: // nbsp
-		cmark_render_ascii(renderer, "~");
-		break;
-	case 8230: // hellip
-		cmark_render_ascii(renderer, "\\ldots{}");
-		break;
-	case 8216: // lsquo
-		if (escape == NORMAL) {
-			cmark_render_ascii(renderer, "`");
-		} else {
-			cmark_render_code_point(renderer, c);
-		}
-		break;
-	case 8217: // rsquo
-		if (escape == NORMAL) {
-			cmark_render_ascii(renderer, "\'");
-		} else {
-			cmark_render_code_point(renderer, c);
-		}
-		break;
-	case 8220: // ldquo
-		if (escape == NORMAL) {
-			cmark_render_ascii(renderer, "``");
-		} else {
-			cmark_render_code_point(renderer, c);
-		}
-		break;
-	case 8221: // rdquo
-		if (escape == NORMAL) {
-			cmark_render_ascii(renderer, "''");
-		} else {
-			cmark_render_code_point(renderer, c);
-		}
-		break;
-	case 8212: // emdash
-		if (escape == NORMAL) {
-			cmark_render_ascii(renderer, "---");
-		} else {
-			cmark_render_code_point(renderer, c);
-		}
-		break;
-	case 8211: // endash
-		if (escape == NORMAL) {
-			cmark_render_ascii(renderer, "--");
-		} else {
-			cmark_render_code_point(renderer, c);
-		}
-		break;
-	default:
-		cmark_render_code_point(renderer, c);
-	}
+  switch (c) {
+  case 123: // '{'
+  case 125: // '}'
+  case 35:  // '#'
+  case 37:  // '%'
+  case 38:  // '&'
+    cmark_render_ascii(renderer, "\\");
+    cmark_render_code_point(renderer, c);
+    break;
+  case 36: // '$'
+  case 95: // '_'
+    if (escape == NORMAL) {
+      cmark_render_ascii(renderer, "\\");
+    }
+    cmark_render_code_point(renderer, c);
+    break;
+  case 45:             // '-'
+    if (nextc == 45) { // prevent ligature
+      cmark_render_ascii(renderer, "\\-");
+    } else {
+      cmark_render_ascii(renderer, "-");
+    }
+    break;
+  case 126: // '~'
+    if (escape == NORMAL) {
+      cmark_render_ascii(renderer, "\\textasciitilde{}");
+    } else {
+      cmark_render_code_point(renderer, c);
+    }
+    break;
+  case 94: // '^'
+    cmark_render_ascii(renderer, "\\^{}");
+    break;
+  case 92: // '\\'
+    if (escape == URL) {
+      // / acts as path sep even on windows:
+      cmark_render_ascii(renderer, "/");
+    } else {
+      cmark_render_ascii(renderer, "\\textbackslash{}");
+    }
+    break;
+  case 124: // '|'
+    cmark_render_ascii(renderer, "\\textbar{}");
+    break;
+  case 60: // '<'
+    cmark_render_ascii(renderer, "\\textless{}");
+    break;
+  case 62: // '>'
+    cmark_render_ascii(renderer, "\\textgreater{}");
+    break;
+  case 91: // '['
+  case 93: // ']'
+    cmark_render_ascii(renderer, "{");
+    cmark_render_code_point(renderer, c);
+    cmark_render_ascii(renderer, "}");
+    break;
+  case 34: // '"'
+    cmark_render_ascii(renderer, "\\textquotedbl{}");
+    // requires \usepackage[T1]{fontenc}
+    break;
+  case 39: // '\''
+    cmark_render_ascii(renderer, "\\textquotesingle{}");
+    // requires \usepackage{textcomp}
+    break;
+  case 160: // nbsp
+    cmark_render_ascii(renderer, "~");
+    break;
+  case 8230: // hellip
+    cmark_render_ascii(renderer, "\\ldots{}");
+    break;
+  case 8216: // lsquo
+    if (escape == NORMAL) {
+      cmark_render_ascii(renderer, "`");
+    } else {
+      cmark_render_code_point(renderer, c);
+    }
+    break;
+  case 8217: // rsquo
+    if (escape == NORMAL) {
+      cmark_render_ascii(renderer, "\'");
+    } else {
+      cmark_render_code_point(renderer, c);
+    }
+    break;
+  case 8220: // ldquo
+    if (escape == NORMAL) {
+      cmark_render_ascii(renderer, "``");
+    } else {
+      cmark_render_code_point(renderer, c);
+    }
+    break;
+  case 8221: // rdquo
+    if (escape == NORMAL) {
+      cmark_render_ascii(renderer, "''");
+    } else {
+      cmark_render_code_point(renderer, c);
+    }
+    break;
+  case 8212: // emdash
+    if (escape == NORMAL) {
+      cmark_render_ascii(renderer, "---");
+    } else {
+      cmark_render_code_point(renderer, c);
+    }
+    break;
+  case 8211: // endash
+    if (escape == NORMAL) {
+      cmark_render_ascii(renderer, "--");
+    } else {
+      cmark_render_code_point(renderer, c);
+    }
+    break;
+  default:
+    cmark_render_code_point(renderer, c);
+  }
 }
 
-typedef enum  {
-	NO_LINK,
-	URL_AUTOLINK,
-	EMAIL_AUTOLINK,
-	NORMAL_LINK
-} link_type;
+typedef enum { NO_LINK, URL_AUTOLINK, EMAIL_AUTOLINK, NORMAL_LINK } link_type;
 
-static link_type
-get_link_type(cmark_node *node)
-{
-	size_t title_len, url_len;
-	cmark_node *link_text;
-	char *realurl;
-	int realurllen;
-	bool isemail = false;
+static link_type get_link_type(cmark_node *node) {
+  size_t title_len, url_len;
+  cmark_node *link_text;
+  char *realurl;
+  int realurllen;
+  bool isemail = false;
 
-	if (node->type != CMARK_NODE_LINK) {
-		return NO_LINK;
-	}
+  if (node->type != CMARK_NODE_LINK) {
+    return NO_LINK;
+  }
 
-	const char* url = cmark_node_get_url(node);
-	cmark_chunk url_chunk = cmark_chunk_literal(url);
+  const char *url = cmark_node_get_url(node);
+  cmark_chunk url_chunk = cmark_chunk_literal(url);
 
-	url_len = safe_strlen(url);
-	if (url_len == 0 || scan_scheme(&url_chunk, 0) == 0) {
-		return NO_LINK;
-	}
+  url_len = safe_strlen(url);
+  if (url_len == 0 || scan_scheme(&url_chunk, 0) == 0) {
+    return NO_LINK;
+  }
 
-	const char* title = cmark_node_get_title(node);
-	title_len = safe_strlen(title);
-	// if it has a title, we can't treat it as an autolink:
-	if (title_len > 0) {
-		return NORMAL_LINK;
-	}
+  const char *title = cmark_node_get_title(node);
+  title_len = safe_strlen(title);
+  // if it has a title, we can't treat it as an autolink:
+  if (title_len > 0) {
+    return NORMAL_LINK;
+  }
 
-	link_text = node->first_child;
-	cmark_consolidate_text_nodes(link_text);
-	realurl = (char*)url;
-	realurllen = url_len;
-	if (strncmp(realurl, "mailto:", 7) == 0) {
-		realurl += 7;
-		realurllen -= 7;
-		isemail = true;
-	}
-	if (realurllen == link_text->as.literal.len &&
-	    strncmp(realurl,
-	            (char*)link_text->as.literal.data,
-	            link_text->as.literal.len) == 0) {
-		if (isemail) {
-			return EMAIL_AUTOLINK;
-		} else {
-			return URL_AUTOLINK;
-		}
-	} else {
-		return NORMAL_LINK;
-	}
+  link_text = node->first_child;
+  cmark_consolidate_text_nodes(link_text);
+  realurl = (char *)url;
+  realurllen = url_len;
+  if (strncmp(realurl, "mailto:", 7) == 0) {
+    realurl += 7;
+    realurllen -= 7;
+    isemail = true;
+  }
+  if (realurllen == link_text->as.literal.len &&
+      strncmp(realurl, (char *)link_text->as.literal.data,
+              link_text->as.literal.len) == 0) {
+    if (isemail) {
+      return EMAIL_AUTOLINK;
+    } else {
+      return URL_AUTOLINK;
+    }
+  } else {
+    return NORMAL_LINK;
+  }
 }
 
-static int
-S_get_enumlevel(cmark_node *node)
-{
-	int enumlevel = 0;
-	cmark_node *tmp = node;
-	while (tmp) {
-		if (tmp->type == CMARK_NODE_LIST &&
-		    cmark_node_get_list_type(node) == CMARK_ORDERED_LIST) {
-			enumlevel++;
-		}
-		tmp = tmp->parent;
-	}
-	return enumlevel;
+static int S_get_enumlevel(cmark_node *node) {
+  int enumlevel = 0;
+  cmark_node *tmp = node;
+  while (tmp) {
+    if (tmp->type == CMARK_NODE_LIST &&
+        cmark_node_get_list_type(node) == CMARK_ORDERED_LIST) {
+      enumlevel++;
+    }
+    tmp = tmp->parent;
+  }
+  return enumlevel;
 }
 
-static int
-S_render_node(cmark_renderer *renderer,
-              cmark_node *node,
-              cmark_event_type ev_type,
-              int options)
-{
-	int list_number;
-	char list_number_string[20];
-	bool entering = (ev_type == CMARK_EVENT_ENTER);
-	cmark_list_type list_type;
-	const char* roman_numerals[] = { "", "i", "ii", "iii", "iv", "v",
-	                                 "vi", "vii", "viii", "ix", "x"
-	                               };
+static int S_render_node(cmark_renderer *renderer, cmark_node *node,
+                         cmark_event_type ev_type, int options) {
+  int list_number;
+  char list_number_string[20];
+  bool entering = (ev_type == CMARK_EVENT_ENTER);
+  cmark_list_type list_type;
+  const char *roman_numerals[] = {"",   "i",   "ii",   "iii", "iv", "v",
+                                  "vi", "vii", "viii", "ix",  "x"};
 
-	// avoid warning about unused parameter:
-	(void)(options);
+  // avoid warning about unused parameter:
+  (void)(options);
 
-	switch (node->type) {
-	case CMARK_NODE_DOCUMENT:
-		break;
+  switch (node->type) {
+  case CMARK_NODE_DOCUMENT:
+    break;
 
-	case CMARK_NODE_BLOCK_QUOTE:
-		if (entering) {
-			LIT("\\begin{quote}");
-			CR();
-		} else {
-			LIT("\\end{quote}");
-			BLANKLINE();
-		}
-		break;
+  case CMARK_NODE_BLOCK_QUOTE:
+    if (entering) {
+      LIT("\\begin{quote}");
+      CR();
+    } else {
+      LIT("\\end{quote}");
+      BLANKLINE();
+    }
+    break;
 
-	case CMARK_NODE_LIST:
-		list_type = cmark_node_get_list_type(node);
-		if (entering) {
-			LIT("\\begin{");
-			LIT(list_type == CMARK_ORDERED_LIST ?
-			    "enumerate" : "itemize");
-			LIT("}");
-			CR();
-			list_number = cmark_node_get_list_start(node);
-			if (list_number > 1) {
-				sprintf(list_number_string,
-				        "%d", list_number);
-				LIT("\\setcounter{enum");
-				LIT((char *)roman_numerals[S_get_enumlevel(node)]);
-				LIT("}{");
-				OUT(list_number_string, false, NORMAL);
-				LIT("}");
-				CR();
-			}
-		} else {
-			LIT("\\end{");
-			LIT(list_type == CMARK_ORDERED_LIST ?
-			    "enumerate" : "itemize");
-			LIT("}");
-			BLANKLINE();
-		}
-		break;
+  case CMARK_NODE_LIST:
+    list_type = cmark_node_get_list_type(node);
+    if (entering) {
+      LIT("\\begin{");
+      LIT(list_type == CMARK_ORDERED_LIST ? "enumerate" : "itemize");
+      LIT("}");
+      CR();
+      list_number = cmark_node_get_list_start(node);
+      if (list_number > 1) {
+        sprintf(list_number_string, "%d", list_number);
+        LIT("\\setcounter{enum");
+        LIT((char *)roman_numerals[S_get_enumlevel(node)]);
+        LIT("}{");
+        OUT(list_number_string, false, NORMAL);
+        LIT("}");
+        CR();
+      }
+    } else {
+      LIT("\\end{");
+      LIT(list_type == CMARK_ORDERED_LIST ? "enumerate" : "itemize");
+      LIT("}");
+      BLANKLINE();
+    }
+    break;
 
-	case CMARK_NODE_ITEM:
-		if (entering) {
-			LIT("\\item ");
-		} else {
-			CR();
-		}
-		break;
+  case CMARK_NODE_ITEM:
+    if (entering) {
+      LIT("\\item ");
+    } else {
+      CR();
+    }
+    break;
 
-	case CMARK_NODE_HEADER:
-		if (entering) {
-			switch (cmark_node_get_header_level(node)) {
-			case 1:
-				LIT("\\section");
-				break;
-			case 2:
-				LIT("\\subsection");
-				break;
-			case 3:
-				LIT("\\subsubsection");
-				break;
-			case 4:
-				LIT("\\paragraph");
-				break;
-			case 5:
-				LIT("\\subparagraph");
-				break;
-			}
-			LIT("{");
-		} else {
-			LIT("}");
-			BLANKLINE();
-		}
-		break;
+  case CMARK_NODE_HEADER:
+    if (entering) {
+      switch (cmark_node_get_header_level(node)) {
+      case 1:
+        LIT("\\section");
+        break;
+      case 2:
+        LIT("\\subsection");
+        break;
+      case 3:
+        LIT("\\subsubsection");
+        break;
+      case 4:
+        LIT("\\paragraph");
+        break;
+      case 5:
+        LIT("\\subparagraph");
+        break;
+      }
+      LIT("{");
+    } else {
+      LIT("}");
+      BLANKLINE();
+    }
+    break;
 
-	case CMARK_NODE_CODE_BLOCK:
-		CR();
-		LIT("\\begin{verbatim}");
-		CR();
-		OUT(cmark_node_get_literal(node), false, LITERAL);
-		CR();
-		LIT("\\end{verbatim}");
-		BLANKLINE();
-		break;
+  case CMARK_NODE_CODE_BLOCK:
+    CR();
+    LIT("\\begin{verbatim}");
+    CR();
+    OUT(cmark_node_get_literal(node), false, LITERAL);
+    CR();
+    LIT("\\end{verbatim}");
+    BLANKLINE();
+    break;
 
-	case CMARK_NODE_HTML:
-		break;
+  case CMARK_NODE_HTML:
+    break;
 
-	case CMARK_NODE_HRULE:
-		BLANKLINE();
-		LIT("\\begin{center}\\rule{0.5\\linewidth}{\\linethickness}\\end{center}");
-		BLANKLINE();
-		break;
+  case CMARK_NODE_HRULE:
+    BLANKLINE();
+    LIT("\\begin{center}\\rule{0.5\\linewidth}{\\linethickness}\\end{center}");
+    BLANKLINE();
+    break;
 
-	case CMARK_NODE_PARAGRAPH:
-		if (!entering) {
-			BLANKLINE();
-		}
-		break;
+  case CMARK_NODE_PARAGRAPH:
+    if (!entering) {
+      BLANKLINE();
+    }
+    break;
 
-	case CMARK_NODE_TEXT:
-		OUT(cmark_node_get_literal(node), true, NORMAL);
-		break;
+  case CMARK_NODE_TEXT:
+    OUT(cmark_node_get_literal(node), true, NORMAL);
+    break;
 
-	case CMARK_NODE_LINEBREAK:
-		LIT("\\\\");
-		CR();
-		break;
+  case CMARK_NODE_LINEBREAK:
+    LIT("\\\\");
+    CR();
+    break;
 
-	case CMARK_NODE_SOFTBREAK:
-		if (renderer->width == 0) {
-			CR();
-		} else {
-			OUT(" ", true, NORMAL);
-		}
-		break;
+  case CMARK_NODE_SOFTBREAK:
+    if (renderer->width == 0) {
+      CR();
+    } else {
+      OUT(" ", true, NORMAL);
+    }
+    break;
 
-	case CMARK_NODE_CODE:
-		LIT("\\texttt{");
-		OUT(cmark_node_get_literal(node), false, NORMAL);
-		LIT("}");
-		break;
+  case CMARK_NODE_CODE:
+    LIT("\\texttt{");
+    OUT(cmark_node_get_literal(node), false, NORMAL);
+    LIT("}");
+    break;
 
-	case CMARK_NODE_INLINE_HTML:
-		break;
+  case CMARK_NODE_INLINE_HTML:
+    break;
 
-	case CMARK_NODE_STRONG:
-		if (entering) {
-			LIT("\\textbf{");
-		} else {
-			LIT("}");
-		}
-		break;
+  case CMARK_NODE_STRONG:
+    if (entering) {
+      LIT("\\textbf{");
+    } else {
+      LIT("}");
+    }
+    break;
 
-	case CMARK_NODE_EMPH:
-		if (entering) {
-			LIT("\\emph{");
-		} else {
-			LIT("}");
-		}
-		break;
+  case CMARK_NODE_EMPH:
+    if (entering) {
+      LIT("\\emph{");
+    } else {
+      LIT("}");
+    }
+    break;
 
-	case CMARK_NODE_LINK:
-		if (entering) {
-			const char* url = cmark_node_get_url(node);
-			// requires \usepackage{hyperref}
-			switch(get_link_type(node)) {
-			case URL_AUTOLINK:
-				LIT("\\url{");
-				OUT(url, false, URL);
-				break;
-			case EMAIL_AUTOLINK:
-				LIT("\\href{");
-				OUT(url, false, URL);
-				LIT("}\\nolinkurl{");
-				break;
-			case NORMAL_LINK:
-				LIT("\\href{");
-				OUT(url, false, URL);
-				LIT("}{");
-				break;
-			case NO_LINK:
-				LIT("{");  // error?
-			}
-		} else {
-			LIT("}");
-		}
+  case CMARK_NODE_LINK:
+    if (entering) {
+      const char *url = cmark_node_get_url(node);
+      // requires \usepackage{hyperref}
+      switch (get_link_type(node)) {
+      case URL_AUTOLINK:
+        LIT("\\url{");
+        OUT(url, false, URL);
+        break;
+      case EMAIL_AUTOLINK:
+        LIT("\\href{");
+        OUT(url, false, URL);
+        LIT("}\\nolinkurl{");
+        break;
+      case NORMAL_LINK:
+        LIT("\\href{");
+        OUT(url, false, URL);
+        LIT("}{");
+        break;
+      case NO_LINK:
+        LIT("{"); // error?
+      }
+    } else {
+      LIT("}");
+    }
 
-		break;
+    break;
 
-	case CMARK_NODE_IMAGE:
-		if (entering) {
-			LIT("\\protect\\includegraphics{");
-			// requires \include{graphicx}
-			OUT(cmark_node_get_url(node), false, URL);
-			LIT("}");
-			return 0;
-		}
-		break;
+  case CMARK_NODE_IMAGE:
+    if (entering) {
+      LIT("\\protect\\includegraphics{");
+      // requires \include{graphicx}
+      OUT(cmark_node_get_url(node), false, URL);
+      LIT("}");
+      return 0;
+    }
+    break;
 
-	default:
-		assert(false);
-		break;
-	}
+  default:
+    assert(false);
+    break;
+  }
 
-	return 1;
+  return 1;
 }
 
-char *cmark_render_latex(cmark_node *root, int options, int width)
-{
-	return cmark_render(root, options, width, outc, S_render_node);
+char *cmark_render_latex(cmark_node *root, int options, int width) {
+  return cmark_render(root, options, width, outc, S_render_node);
 }
diff --git a/src/main.c b/src/main.c
index 7fae7e4..239d793 100644
--- a/src/main.c
+++ b/src/main.c
@@ -12,190 +12,183 @@
 #endif
 
 typedef enum {
-	FORMAT_NONE,
-	FORMAT_HTML,
-	FORMAT_XML,
-	FORMAT_MAN,
-	FORMAT_COMMONMARK,
-	FORMAT_LATEX
+  FORMAT_NONE,
+  FORMAT_HTML,
+  FORMAT_XML,
+  FORMAT_MAN,
+  FORMAT_COMMONMARK,
+  FORMAT_LATEX
 } writer_format;
 
-void print_usage()
-{
-	printf("Usage:   cmark [FILE*]\n");
-	printf("Options:\n");
-	printf("  --to, -t FORMAT  Specify output format (html, xml, man, commonmark, latex)\n");
-	printf("  --width WIDTH    Specify wrap width (default 0 = nowrap)\n");
-	printf("  --sourcepos      Include source position attribute\n");
-	printf("  --hardbreaks     Treat newlines as hard line breaks\n");
-	printf("  --safe           Suppress raw HTML and dangerous URLs\n");
-	printf("  --smart          Use smart punctuation\n");
-	printf("  --normalize      Consolidate adjacent text nodes\n");
-	printf("  --help, -h       Print usage information\n");
-	printf("  --version        Print version\n");
+void print_usage() {
+  printf("Usage:   cmark [FILE*]\n");
+  printf("Options:\n");
+  printf("  --to, -t FORMAT  Specify output format (html, xml, man, "
+         "commonmark, latex)\n");
+  printf("  --width WIDTH    Specify wrap width (default 0 = nowrap)\n");
+  printf("  --sourcepos      Include source position attribute\n");
+  printf("  --hardbreaks     Treat newlines as hard line breaks\n");
+  printf("  --safe           Suppress raw HTML and dangerous URLs\n");
+  printf("  --smart          Use smart punctuation\n");
+  printf("  --normalize      Consolidate adjacent text nodes\n");
+  printf("  --help, -h       Print usage information\n");
+  printf("  --version        Print version\n");
 }
 
 static void print_document(cmark_node *document, writer_format writer,
-                           int options, int width)
-{
-	char *result;
+                           int options, int width) {
+  char *result;
 
-	switch (writer) {
-	case FORMAT_HTML:
-		result = cmark_render_html(document, options);
-		break;
-	case FORMAT_XML:
-		result = cmark_render_xml(document, options);
-		break;
-	case FORMAT_MAN:
-		result = cmark_render_man(document, options, width);
-		break;
-	case FORMAT_COMMONMARK:
-		result = cmark_render_commonmark(document, options, width);
-		break;
-	case FORMAT_LATEX:
-		result = cmark_render_latex(document, options, width);
-		break;
-	default:
-		fprintf(stderr, "Unknown format %d\n", writer);
-		exit(1);
-	}
-	printf("%s", result);
-	free(result);
+  switch (writer) {
+  case FORMAT_HTML:
+    result = cmark_render_html(document, options);
+    break;
+  case FORMAT_XML:
+    result = cmark_render_xml(document, options);
+    break;
+  case FORMAT_MAN:
+    result = cmark_render_man(document, options, width);
+    break;
+  case FORMAT_COMMONMARK:
+    result = cmark_render_commonmark(document, options, width);
+    break;
+  case FORMAT_LATEX:
+    result = cmark_render_latex(document, options, width);
+    break;
+  default:
+    fprintf(stderr, "Unknown format %d\n", writer);
+    exit(1);
+  }
+  printf("%s", result);
+  free(result);
 }
 
-int main(int argc, char *argv[])
-{
-	int i, numfps = 0;
-	int *files;
-	char buffer[4096];
-	cmark_parser *parser;
-	size_t bytes;
-	cmark_node *document;
-	int width = 0;
-	char *unparsed;
-	writer_format writer = FORMAT_HTML;
-	int options = CMARK_OPT_DEFAULT;
+int main(int argc, char *argv[]) {
+  int i, numfps = 0;
+  int *files;
+  char buffer[4096];
+  cmark_parser *parser;
+  size_t bytes;
+  cmark_node *document;
+  int width = 0;
+  char *unparsed;
+  writer_format writer = FORMAT_HTML;
+  int options = CMARK_OPT_DEFAULT;
 
 #if defined(_WIN32) && !defined(__CYGWIN__)
-	_setmode(_fileno(stdout), _O_BINARY);
+  _setmode(_fileno(stdout), _O_BINARY);
 #endif
 
-	files = (int *)malloc(argc * sizeof(*files));
+  files = (int *)malloc(argc * sizeof(*files));
 
-	for (i = 1; i < argc; i++) {
-		if (strcmp(argv[i], "--version") == 0) {
-			printf("cmark %s", CMARK_VERSION_STRING);
-			printf(" - CommonMark converter\n(C) 2014, 2015 John MacFarlane\n");
-			exit(0);
-		} else if (strcmp(argv[i], "--sourcepos") == 0) {
-			options |= CMARK_OPT_SOURCEPOS;
-		} else if (strcmp(argv[i], "--hardbreaks") == 0) {
-			options |= CMARK_OPT_HARDBREAKS;
-		} else if (strcmp(argv[i], "--smart") == 0) {
-			options |= CMARK_OPT_SMART;
-		} else if (strcmp(argv[i], "--safe") == 0) {
-			options |= CMARK_OPT_SAFE;
-		} else if (strcmp(argv[i], "--normalize") == 0) {
-			options |= CMARK_OPT_NORMALIZE;
-		} else if (strcmp(argv[i], "--validate-utf8") == 0) {
-			options |= CMARK_OPT_VALIDATE_UTF8;
-		} else if ((strcmp(argv[i], "--help") == 0) ||
-		           (strcmp(argv[i], "-h") == 0)) {
-			print_usage();
-			exit(0);
-		} else if (strcmp(argv[i], "--width") == 0) {
-			i += 1;
-			if (i < argc) {
-				width = (int)strtol(argv[i], &unparsed, 10);
-				if (unparsed && strlen(unparsed) > 0) {
-					fprintf(stderr,
-					        "failed parsing width '%s' at '%s'\n",
-					        argv[i], unparsed);
-					exit(1);
-				}
-			} else {
-				fprintf(stderr,
-				        "--width requires an argument\n");
-				exit(1);
-			}
-		} else if ((strcmp(argv[i], "-t") == 0) ||
-		           (strcmp(argv[i], "--to") == 0)) {
-			i += 1;
-			if (i < argc) {
-				if (strcmp(argv[i], "man") == 0) {
-					writer = FORMAT_MAN;
-				} else if (strcmp(argv[i], "html") == 0) {
-					writer = FORMAT_HTML;
-				} else if (strcmp(argv[i], "xml") == 0) {
-					writer = FORMAT_XML;
-				} else if (strcmp(argv[i], "commonmark") == 0) {
-					writer = FORMAT_COMMONMARK;
-				} else if (strcmp(argv[i], "latex") == 0) {
-					writer = FORMAT_LATEX;
-				} else {
-					fprintf(stderr,
-					        "Unknown format %s\n", argv[i]);
-					exit(1);
-				}
-			} else {
-				fprintf(stderr, "No argument provided for %s\n",
-				        argv[i - 1]);
-				exit(1);
-			}
-		} else if (*argv[i] == '-') {
-			print_usage();
-			exit(1);
-		} else { // treat as file argument
-			files[numfps++] = i;
-		}
-	}
+  for (i = 1; i < argc; i++) {
+    if (strcmp(argv[i], "--version") == 0) {
+      printf("cmark %s", CMARK_VERSION_STRING);
+      printf(" - CommonMark converter\n(C) 2014, 2015 John MacFarlane\n");
+      exit(0);
+    } else if (strcmp(argv[i], "--sourcepos") == 0) {
+      options |= CMARK_OPT_SOURCEPOS;
+    } else if (strcmp(argv[i], "--hardbreaks") == 0) {
+      options |= CMARK_OPT_HARDBREAKS;
+    } else if (strcmp(argv[i], "--smart") == 0) {
+      options |= CMARK_OPT_SMART;
+    } else if (strcmp(argv[i], "--safe") == 0) {
+      options |= CMARK_OPT_SAFE;
+    } else if (strcmp(argv[i], "--normalize") == 0) {
+      options |= CMARK_OPT_NORMALIZE;
+    } else if (strcmp(argv[i], "--validate-utf8") == 0) {
+      options |= CMARK_OPT_VALIDATE_UTF8;
+    } else if ((strcmp(argv[i], "--help") == 0) ||
+               (strcmp(argv[i], "-h") == 0)) {
+      print_usage();
+      exit(0);
+    } else if (strcmp(argv[i], "--width") == 0) {
+      i += 1;
+      if (i < argc) {
+        width = (int)strtol(argv[i], &unparsed, 10);
+        if (unparsed && strlen(unparsed) > 0) {
+          fprintf(stderr, "failed parsing width '%s' at '%s'\n", argv[i],
+                  unparsed);
+          exit(1);
+        }
+      } else {
+        fprintf(stderr, "--width requires an argument\n");
+        exit(1);
+      }
+    } else if ((strcmp(argv[i], "-t") == 0) || (strcmp(argv[i], "--to") == 0)) {
+      i += 1;
+      if (i < argc) {
+        if (strcmp(argv[i], "man") == 0) {
+          writer = FORMAT_MAN;
+        } else if (strcmp(argv[i], "html") == 0) {
+          writer = FORMAT_HTML;
+        } else if (strcmp(argv[i], "xml") == 0) {
+          writer = FORMAT_XML;
+        } else if (strcmp(argv[i], "commonmark") == 0) {
+          writer = FORMAT_COMMONMARK;
+        } else if (strcmp(argv[i], "latex") == 0) {
+          writer = FORMAT_LATEX;
+        } else {
+          fprintf(stderr, "Unknown format %s\n", argv[i]);
+          exit(1);
+        }
+      } else {
+        fprintf(stderr, "No argument provided for %s\n", argv[i - 1]);
+        exit(1);
+      }
+    } else if (*argv[i] == '-') {
+      print_usage();
+      exit(1);
+    } else { // treat as file argument
+      files[numfps++] = i;
+    }
+  }
 
-	parser = cmark_parser_new(options);
-	for (i = 0; i < numfps; i++) {
-		FILE *fp = fopen(argv[files[i]], "r");
-		if (fp == NULL) {
-			fprintf(stderr, "Error opening file %s: %s\n",
-			        argv[files[i]], strerror(errno));
-			exit(1);
-		}
+  parser = cmark_parser_new(options);
+  for (i = 0; i < numfps; i++) {
+    FILE *fp = fopen(argv[files[i]], "r");
+    if (fp == NULL) {
+      fprintf(stderr, "Error opening file %s: %s\n", argv[files[i]],
+              strerror(errno));
+      exit(1);
+    }
 
-		start_timer();
-		while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
-			cmark_parser_feed(parser, buffer, bytes);
-			if (bytes < sizeof(buffer)) {
-				break;
-			}
-		}
-		end_timer("processing lines");
+    start_timer();
+    while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
+      cmark_parser_feed(parser, buffer, bytes);
+      if (bytes < sizeof(buffer)) {
+        break;
+      }
+    }
+    end_timer("processing lines");
 
-		fclose(fp);
-	}
+    fclose(fp);
+  }
 
-	if (numfps == 0) {
+  if (numfps == 0) {
 
-		while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0) {
-			cmark_parser_feed(parser, buffer, bytes);
-			if (bytes < sizeof(buffer)) {
-				break;
-			}
-		}
-	}
+    while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0) {
+      cmark_parser_feed(parser, buffer, bytes);
+      if (bytes < sizeof(buffer)) {
+        break;
+      }
+    }
+  }
 
-	start_timer();
-	document = cmark_parser_finish(parser);
-	end_timer("finishing document");
-	cmark_parser_free(parser);
+  start_timer();
+  document = cmark_parser_finish(parser);
+  end_timer("finishing document");
+  cmark_parser_free(parser);
 
-	start_timer();
-	print_document(document, writer, options, width);
-	end_timer("print_document");
+  start_timer();
+  print_document(document, writer, options, width);
+  end_timer("print_document");
 
-	start_timer();
-	cmark_node_free(document);
-	end_timer("free_blocks");
+  start_timer();
+  cmark_node_free(document);
+  end_timer("free_blocks");
 
-	free(files);
+  free(files);
 
-	return 0;
+  return 0;
 }
diff --git a/src/man.c b/src/man.c
index 6ff33f5..8e3913e 100644
--- a/src/man.c
+++ b/src/man.c
@@ -16,234 +16,220 @@
 #define BLANKLINE() renderer->blankline(renderer)
 
 // Functions to convert cmark_nodes to groff man strings.
-static
-void S_outc(cmark_renderer *renderer,
-            cmark_escaping escape,
-            int32_t c,
-            unsigned char nextc)
-{
-	(void)(nextc);
+static void S_outc(cmark_renderer *renderer, cmark_escaping escape, int32_t c,
+                   unsigned char nextc) {
+  (void)(nextc);
 
-	if (escape == LITERAL) {
-		cmark_render_code_point(renderer, c);
-		return;
-	}
+  if (escape == LITERAL) {
+    cmark_render_code_point(renderer, c);
+    return;
+  }
 
-	switch(c) {
-	case 46:
-		if (renderer->begin_line) {
-			cmark_render_ascii(renderer, "\\&.");
-		} else {
-			cmark_render_code_point(renderer, c);
-		}
-		break;
-	case 39:
-		if (renderer->begin_line) {
-			cmark_render_ascii(renderer, "\\&'");
-		} else {
-			cmark_render_code_point(renderer, c);
-		}
-		break;
-	case 45:
-		cmark_render_ascii(renderer, "\\-");
-		break;
-	case 92:
-		cmark_render_ascii(renderer, "\\e");
-		break;
-	case 8216: // left single quote
-		cmark_render_ascii(renderer, "\\[oq]");
-		break;
-	case 8217: // right single quote
-		cmark_render_ascii(renderer, "\\[cq]");
-		break;
-	case 8220: // left double quote
-		cmark_render_ascii(renderer, "\\[lq]");
-		break;
-	case 8221: // right double quote
-		cmark_render_ascii(renderer, "\\[rq]");
-		break;
-	case 8212: // em dash
-		cmark_render_ascii(renderer, "\\[em]");
-		break;
-	case 8211: // en dash
-		cmark_render_ascii(renderer, "\\[en]");
-		break;
-	default:
-		cmark_render_code_point(renderer, c);
-	}
+  switch (c) {
+  case 46:
+    if (renderer->begin_line) {
+      cmark_render_ascii(renderer, "\\&.");
+    } else {
+      cmark_render_code_point(renderer, c);
+    }
+    break;
+  case 39:
+    if (renderer->begin_line) {
+      cmark_render_ascii(renderer, "\\&'");
+    } else {
+      cmark_render_code_point(renderer, c);
+    }
+    break;
+  case 45:
+    cmark_render_ascii(renderer, "\\-");
+    break;
+  case 92:
+    cmark_render_ascii(renderer, "\\e");
+    break;
+  case 8216: // left single quote
+    cmark_render_ascii(renderer, "\\[oq]");
+    break;
+  case 8217: // right single quote
+    cmark_render_ascii(renderer, "\\[cq]");
+    break;
+  case 8220: // left double quote
+    cmark_render_ascii(renderer, "\\[lq]");
+    break;
+  case 8221: // right double quote
+    cmark_render_ascii(renderer, "\\[rq]");
+    break;
+  case 8212: // em dash
+    cmark_render_ascii(renderer, "\\[em]");
+    break;
+  case 8211: // en dash
+    cmark_render_ascii(renderer, "\\[en]");
+    break;
+  default:
+    cmark_render_code_point(renderer, c);
+  }
 }
 
-static int
-S_render_node(cmark_renderer *renderer,
-              cmark_node *node,
-              cmark_event_type ev_type,
-              int options)
-{
-	cmark_node *tmp;
-	int list_number;
-	bool entering = (ev_type == CMARK_EVENT_ENTER);
+static int S_render_node(cmark_renderer *renderer, cmark_node *node,
+                         cmark_event_type ev_type, int options) {
+  cmark_node *tmp;
+  int list_number;
+  bool entering = (ev_type == CMARK_EVENT_ENTER);
 
-	// avoid unused parameter error:
-	(void)(options);
+  // avoid unused parameter error:
+  (void)(options);
 
-	switch (node->type) {
-	case CMARK_NODE_DOCUMENT:
-		break;
+  switch (node->type) {
+  case CMARK_NODE_DOCUMENT:
+    break;
 
-	case CMARK_NODE_BLOCK_QUOTE:
-		if (entering) {
-			CR();
-			LIT(".RS");
-			CR();
-		} else {
-			CR();
-			LIT(".RE");
-			CR();
-		}
-		break;
+  case CMARK_NODE_BLOCK_QUOTE:
+    if (entering) {
+      CR();
+      LIT(".RS");
+      CR();
+    } else {
+      CR();
+      LIT(".RE");
+      CR();
+    }
+    break;
 
-	case CMARK_NODE_LIST:
-		break;
+  case CMARK_NODE_LIST:
+    break;
 
-	case CMARK_NODE_ITEM:
-		if (entering) {
-			CR();
-			LIT(".IP ");
-			if (cmark_node_get_list_type(node->parent) ==
-			    CMARK_BULLET_LIST) {
-				LIT("\\[bu] 2");
-			} else {
-				list_number = cmark_node_get_list_start(node->parent);
-				tmp = node;
-				while (tmp->prev) {
-					tmp = tmp->prev;
-					list_number += 1;
-				}
-				char list_number_s[20];
-				sprintf(list_number_s, "\"%d.\" 4", list_number);
-				LIT(list_number_s);
-			}
-			CR();
-		} else {
-			CR();
-		}
-		break;
+  case CMARK_NODE_ITEM:
+    if (entering) {
+      CR();
+      LIT(".IP ");
+      if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
+        LIT("\\[bu] 2");
+      } else {
+        list_number = cmark_node_get_list_start(node->parent);
+        tmp = node;
+        while (tmp->prev) {
+          tmp = tmp->prev;
+          list_number += 1;
+        }
+        char list_number_s[20];
+        sprintf(list_number_s, "\"%d.\" 4", list_number);
+        LIT(list_number_s);
+      }
+      CR();
+    } else {
+      CR();
+    }
+    break;
 
-	case CMARK_NODE_HEADER:
-		if (entering) {
-			CR();
-			LIT(cmark_node_get_header_level(node) == 1 ?
-			    ".SH" : ".SS");
-			CR();
-		} else {
-			CR();
-		}
-		break;
+  case CMARK_NODE_HEADER:
+    if (entering) {
+      CR();
+      LIT(cmark_node_get_header_level(node) == 1 ? ".SH" : ".SS");
+      CR();
+    } else {
+      CR();
+    }
+    break;
 
-	case CMARK_NODE_CODE_BLOCK:
-		CR();
-		LIT(".IP\n.nf\n\\f[C]\n");
-		OUT(cmark_node_get_literal(node),
-		    false,
-		    NORMAL);
-		CR();
-		LIT("\\f[]\n.fi");
-		CR();
-		break;
+  case CMARK_NODE_CODE_BLOCK:
+    CR();
+    LIT(".IP\n.nf\n\\f[C]\n");
+    OUT(cmark_node_get_literal(node), false, NORMAL);
+    CR();
+    LIT("\\f[]\n.fi");
+    CR();
+    break;
 
-	case CMARK_NODE_HTML:
-		break;
+  case CMARK_NODE_HTML:
+    break;
 
-	case CMARK_NODE_HRULE:
-		CR();
-		LIT(".PP\n  *  *  *  *  *");
-		CR();
-		break;
+  case CMARK_NODE_HRULE:
+    CR();
+    LIT(".PP\n  *  *  *  *  *");
+    CR();
+    break;
 
-	case CMARK_NODE_PARAGRAPH:
-		if (entering) {
-			// no blank line if first paragraph in list:
-			if (node->parent &&
-			    node->parent->type == CMARK_NODE_ITEM &&
-			    node->prev == NULL) {
-				// no blank line or .PP
-			} else {
-				CR();
-				LIT(".PP");
-				CR();
-			}
-		} else {
-			CR();
-		}
-		break;
+  case CMARK_NODE_PARAGRAPH:
+    if (entering) {
+      // no blank line if first paragraph in list:
+      if (node->parent && node->parent->type == CMARK_NODE_ITEM &&
+          node->prev == NULL) {
+        // no blank line or .PP
+      } else {
+        CR();
+        LIT(".PP");
+        CR();
+      }
+    } else {
+      CR();
+    }
+    break;
 
-	case CMARK_NODE_TEXT:
-		OUT(cmark_node_get_literal(node), true, NORMAL);
-		break;
+  case CMARK_NODE_TEXT:
+    OUT(cmark_node_get_literal(node), true, NORMAL);
+    break;
 
-	case CMARK_NODE_LINEBREAK:
-		LIT(".PD 0\n.P\n.PD");
-		CR();
-		break;
+  case CMARK_NODE_LINEBREAK:
+    LIT(".PD 0\n.P\n.PD");
+    CR();
+    break;
 
-	case CMARK_NODE_SOFTBREAK:
-		if (renderer->width == 0) {
-			CR();
-		} else {
-			OUT(" ", true, LITERAL);
-		}
-		break;
+  case CMARK_NODE_SOFTBREAK:
+    if (renderer->width == 0) {
+      CR();
+    } else {
+      OUT(" ", true, LITERAL);
+    }
+    break;
 
-	case CMARK_NODE_CODE:
-		LIT("\\f[C]");
-		OUT(cmark_node_get_literal(node), true, NORMAL);
-		LIT("\\f[]");
-		break;
+  case CMARK_NODE_CODE:
+    LIT("\\f[C]");
+    OUT(cmark_node_get_literal(node), true, NORMAL);
+    LIT("\\f[]");
+    break;
 
-	case CMARK_NODE_INLINE_HTML:
-		break;
+  case CMARK_NODE_INLINE_HTML:
+    break;
 
-	case CMARK_NODE_STRONG:
-		if (entering) {
-			LIT("\\f[B]");
-		} else {
-			LIT("\\f[]");
-		}
-		break;
+  case CMARK_NODE_STRONG:
+    if (entering) {
+      LIT("\\f[B]");
+    } else {
+      LIT("\\f[]");
+    }
+    break;
 
-	case CMARK_NODE_EMPH:
-		if (entering) {
-			LIT("\\f[I]");
-		} else {
-			LIT("\\f[]");
-		}
-		break;
+  case CMARK_NODE_EMPH:
+    if (entering) {
+      LIT("\\f[I]");
+    } else {
+      LIT("\\f[]");
+    }
+    break;
 
-	case CMARK_NODE_LINK:
-		if (!entering) {
-			LIT(" (");
-			OUT(cmark_node_get_url(node), true, URL);
-			LIT(")");
-		}
-		break;
+  case CMARK_NODE_LINK:
+    if (!entering) {
+      LIT(" (");
+      OUT(cmark_node_get_url(node), true, URL);
+      LIT(")");
+    }
+    break;
 
-	case CMARK_NODE_IMAGE:
-		if (entering) {
-			LIT("[IMAGE: ");
-		} else {
-			LIT("]");
-		}
-		break;
+  case CMARK_NODE_IMAGE:
+    if (entering) {
+      LIT("[IMAGE: ");
+    } else {
+      LIT("]");
+    }
+    break;
 
-	default:
-		assert(false);
-		break;
-	}
+  default:
+    assert(false);
+    break;
+  }
 
-	return 1;
+  return 1;
 }
 
-char *cmark_render_man(cmark_node *root, int options, int width)
-{
-	return cmark_render(root, options, width, S_outc, S_render_node);
+char *cmark_render_man(cmark_node *root, int options, int width) {
+  return cmark_render(root, options, width, S_outc, S_render_node);
 }
diff --git a/src/node.c b/src/node.c
index 7b1bb10..ad12d63 100644
--- a/src/node.c
+++ b/src/node.c
@@ -4,855 +4,762 @@
 #include "config.h"
 #include "node.h"
 
-static void
-S_node_unlink(cmark_node *node);
+static void S_node_unlink(cmark_node *node);
 
-static inline bool
-S_is_block(cmark_node *node)
-{
-	if (node == NULL) {
-		return false;
-	}
-	return node->type >= CMARK_NODE_FIRST_BLOCK
-	       && node->type <= CMARK_NODE_LAST_BLOCK;
+static inline bool S_is_block(cmark_node *node) {
+  if (node == NULL) {
+    return false;
+  }
+  return node->type >= CMARK_NODE_FIRST_BLOCK &&
+         node->type <= CMARK_NODE_LAST_BLOCK;
 }
 
-static inline bool
-S_is_inline(cmark_node *node)
-{
-	if (node == NULL) {
-		return false;
-	}
-	return node->type >= CMARK_NODE_FIRST_INLINE
-	       && node->type <= CMARK_NODE_LAST_INLINE;
+static inline bool S_is_inline(cmark_node *node) {
+  if (node == NULL) {
+    return false;
+  }
+  return node->type >= CMARK_NODE_FIRST_INLINE &&
+         node->type <= CMARK_NODE_LAST_INLINE;
 }
 
-static bool
-S_can_contain(cmark_node *node, cmark_node *child)
-{
-	cmark_node *cur;
+static bool S_can_contain(cmark_node *node, cmark_node *child) {
+  cmark_node *cur;
 
-	if (node == NULL || child == NULL) {
-		return false;
-	}
+  if (node == NULL || child == NULL) {
+    return false;
+  }
 
-	// Verify that child is not an ancestor of node or equal to node.
-	cur = node;
-	do {
-		if (cur == child) {
-			return false;
-		}
-		cur = cur->parent;
-	} while (cur != NULL);
+  // Verify that child is not an ancestor of node or equal to node.
+  cur = node;
+  do {
+    if (cur == child) {
+      return false;
+    }
+    cur = cur->parent;
+  } while (cur != NULL);
 
-	if (child->type == CMARK_NODE_DOCUMENT) {
-		return false;
-	}
+  if (child->type == CMARK_NODE_DOCUMENT) {
+    return false;
+  }
 
-	switch (node->type) {
-	case CMARK_NODE_DOCUMENT:
-	case CMARK_NODE_BLOCK_QUOTE:
-	case CMARK_NODE_ITEM:
-		return S_is_block(child)
-		       && child->type != CMARK_NODE_ITEM;
+  switch (node->type) {
+  case CMARK_NODE_DOCUMENT:
+  case CMARK_NODE_BLOCK_QUOTE:
+  case CMARK_NODE_ITEM:
+    return S_is_block(child) && child->type != CMARK_NODE_ITEM;
 
-	case CMARK_NODE_LIST:
-		return child->type == CMARK_NODE_ITEM;
+  case CMARK_NODE_LIST:
+    return child->type == CMARK_NODE_ITEM;
 
-	case CMARK_NODE_PARAGRAPH:
-	case CMARK_NODE_HEADER:
-	case CMARK_NODE_EMPH:
-	case CMARK_NODE_STRONG:
-	case CMARK_NODE_LINK:
-	case CMARK_NODE_IMAGE:
-		return S_is_inline(child);
+  case CMARK_NODE_PARAGRAPH:
+  case CMARK_NODE_HEADER:
+  case CMARK_NODE_EMPH:
+  case CMARK_NODE_STRONG:
+  case CMARK_NODE_LINK:
+  case CMARK_NODE_IMAGE:
+    return S_is_inline(child);
 
-	default:
-		break;
-	}
+  default:
+    break;
+  }
 
-	return false;
+  return false;
 }
 
-cmark_node*
-cmark_node_new(cmark_node_type type)
-{
-	cmark_node *node = (cmark_node *)calloc(1, sizeof(*node));
-	node->type = type;
+cmark_node *cmark_node_new(cmark_node_type type) {
+  cmark_node *node = (cmark_node *)calloc(1, sizeof(*node));
+  node->type = type;
 
-	switch (node->type) {
-	case CMARK_NODE_HEADER:
-		node->as.header.level = 1;
-		break;
+  switch (node->type) {
+  case CMARK_NODE_HEADER:
+    node->as.header.level = 1;
+    break;
 
-	case CMARK_NODE_LIST: {
-		cmark_list *list = &node->as.list;
-		list->list_type = CMARK_BULLET_LIST;
-		list->start     = 1;
-		list->tight     = false;
-		break;
-	}
+  case CMARK_NODE_LIST: {
+    cmark_list *list = &node->as.list;
+    list->list_type = CMARK_BULLET_LIST;
+    list->start = 1;
+    list->tight = false;
+    break;
+  }
 
-	default:
-		break;
-	}
+  default:
+    break;
+  }
 
-	return node;
+  return node;
 }
 
 // Free a cmark_node list and any children.
-static
-void S_free_nodes(cmark_node *e)
-{
-	cmark_node *next;
-	while (e != NULL) {
-		if (S_is_block(e)) {
-			cmark_strbuf_free(&e->string_content);
-		}
-		switch (e->type) {
-		case NODE_CODE_BLOCK:
-			cmark_chunk_free(&e->as.code.info);
-			cmark_chunk_free(&e->as.code.literal);
-			break;
-		case NODE_TEXT:
-		case NODE_INLINE_HTML:
-		case NODE_CODE:
-		case NODE_HTML:
-			cmark_chunk_free(&e->as.literal);
-			break;
-		case NODE_LINK:
-		case NODE_IMAGE:
-			cmark_chunk_free(&e->as.link.url);
-			cmark_chunk_free(&e->as.link.title);
-			break;
-		default:
-			break;
-		}
-		if (e->last_child) {
-			// Splice children into list
-			e->last_child->next = e->next;
-			e->next = e->first_child;
-		}
-		next = e->next;
-		free(e);
-		e = next;
-	}
+static void S_free_nodes(cmark_node *e) {
+  cmark_node *next;
+  while (e != NULL) {
+    if (S_is_block(e)) {
+      cmark_strbuf_free(&e->string_content);
+    }
+    switch (e->type) {
+    case NODE_CODE_BLOCK:
+      cmark_chunk_free(&e->as.code.info);
+      cmark_chunk_free(&e->as.code.literal);
+      break;
+    case NODE_TEXT:
+    case NODE_INLINE_HTML:
+    case NODE_CODE:
+    case NODE_HTML:
+      cmark_chunk_free(&e->as.literal);
+      break;
+    case NODE_LINK:
+    case NODE_IMAGE:
+      cmark_chunk_free(&e->as.link.url);
+      cmark_chunk_free(&e->as.link.title);
+      break;
+    default:
+      break;
+    }
+    if (e->last_child) {
+      // Splice children into list
+      e->last_child->next = e->next;
+      e->next = e->first_child;
+    }
+    next = e->next;
+    free(e);
+    e = next;
+  }
 }
 
-void
-cmark_node_free(cmark_node *node)
-{
-	S_node_unlink(node);
-	node->next = NULL;
-	S_free_nodes(node);
+void cmark_node_free(cmark_node *node) {
+  S_node_unlink(node);
+  node->next = NULL;
+  S_free_nodes(node);
 }
 
-cmark_node_type
-cmark_node_get_type(cmark_node *node)
-{
-	if (node == NULL) {
-		return CMARK_NODE_NONE;
-	} else {
-		return node->type;
-	}
+cmark_node_type cmark_node_get_type(cmark_node *node) {
+  if (node == NULL) {
+    return CMARK_NODE_NONE;
+  } else {
+    return node->type;
+  }
 }
 
-const char*
-cmark_node_get_type_string(cmark_node *node)
-{
-	if (node == NULL) {
-		return "NONE";
-	}
+const char *cmark_node_get_type_string(cmark_node *node) {
+  if (node == NULL) {
+    return "NONE";
+  }
 
-	switch (node->type) {
-	case CMARK_NODE_NONE:
-		return "none";
-	case CMARK_NODE_DOCUMENT:
-		return "document";
-	case CMARK_NODE_BLOCK_QUOTE:
-		return "block_quote";
-	case CMARK_NODE_LIST:
-		return "list";
-	case CMARK_NODE_ITEM:
-		return "item";
-	case CMARK_NODE_CODE_BLOCK:
-		return "code_block";
-	case CMARK_NODE_HTML:
-		return "html";
-	case CMARK_NODE_PARAGRAPH:
-		return "paragraph";
-	case CMARK_NODE_HEADER:
-		return "header";
-	case CMARK_NODE_HRULE:
-		return "hrule";
-	case CMARK_NODE_TEXT:
-		return "text";
-	case CMARK_NODE_SOFTBREAK:
-		return "softbreak";
-	case CMARK_NODE_LINEBREAK:
-		return "linebreak";
-	case CMARK_NODE_CODE:
-		return "code";
-	case CMARK_NODE_INLINE_HTML:
-		return "inline_html";
-	case CMARK_NODE_EMPH:
-		return "emph";
-	case CMARK_NODE_STRONG:
-		return "strong";
-	case CMARK_NODE_LINK:
-		return "link";
-	case CMARK_NODE_IMAGE:
-		return "image";
-	}
+  switch (node->type) {
+  case CMARK_NODE_NONE:
+    return "none";
+  case CMARK_NODE_DOCUMENT:
+    return "document";
+  case CMARK_NODE_BLOCK_QUOTE:
+    return "block_quote";
+  case CMARK_NODE_LIST:
+    return "list";
+  case CMARK_NODE_ITEM:
+    return "item";
+  case CMARK_NODE_CODE_BLOCK:
+    return "code_block";
+  case CMARK_NODE_HTML:
+    return "html";
+  case CMARK_NODE_PARAGRAPH:
+    return "paragraph";
+  case CMARK_NODE_HEADER:
+    return "header";
+  case CMARK_NODE_HRULE:
+    return "hrule";
+  case CMARK_NODE_TEXT:
+    return "text";
+  case CMARK_NODE_SOFTBREAK:
+    return "softbreak";
+  case CMARK_NODE_LINEBREAK:
+    return "linebreak";
+  case CMARK_NODE_CODE:
+    return "code";
+  case CMARK_NODE_INLINE_HTML:
+    return "inline_html";
+  case CMARK_NODE_EMPH:
+    return "emph";
+  case CMARK_NODE_STRONG:
+    return "strong";
+  case CMARK_NODE_LINK:
+    return "link";
+  case CMARK_NODE_IMAGE:
+    return "image";
+  }
 
-	return "<unknown>";
+  return "<unknown>";
 }
 
-cmark_node*
-cmark_node_next(cmark_node *node)
-{
-	if (node == NULL) {
-		return NULL;
-	} else {
-		return node->next;
-	}
+cmark_node *cmark_node_next(cmark_node *node) {
+  if (node == NULL) {
+    return NULL;
+  } else {
+    return node->next;
+  }
 }
 
-cmark_node*
-cmark_node_previous(cmark_node *node)
-{
-	if (node == NULL) {
-		return NULL;
-	} else {
-		return node->prev;
-	}
+cmark_node *cmark_node_previous(cmark_node *node) {
+  if (node == NULL) {
+    return NULL;
+  } else {
+    return node->prev;
+  }
 }
 
-cmark_node*
-cmark_node_parent(cmark_node *node)
-{
-	if (node == NULL) {
-		return NULL;
-	} else {
-		return node->parent;
-	}
+cmark_node *cmark_node_parent(cmark_node *node) {
+  if (node == NULL) {
+    return NULL;
+  } else {
+    return node->parent;
+  }
 }
 
-cmark_node*
-cmark_node_first_child(cmark_node *node)
-{
-	if (node == NULL) {
-		return NULL;
-	} else {
-		return node->first_child;
-	}
+cmark_node *cmark_node_first_child(cmark_node *node) {
+  if (node == NULL) {
+    return NULL;
+  } else {
+    return node->first_child;
+  }
 }
 
-cmark_node*
-cmark_node_last_child(cmark_node *node)
-{
-	if (node == NULL) {
-		return NULL;
-	} else {
-		return node->last_child;
-	}
+cmark_node *cmark_node_last_child(cmark_node *node) {
+  if (node == NULL) {
+    return NULL;
+  } else {
+    return node->last_child;
+  }
 }
 
-void*
-cmark_node_get_user_data(cmark_node *node)
-{
-	if (node == NULL) {
-		return NULL;
-	} else {
-		return node->user_data;
-	}
+void *cmark_node_get_user_data(cmark_node *node) {
+  if (node == NULL) {
+    return NULL;
+  } else {
+    return node->user_data;
+  }
 }
 
-int
-cmark_node_set_user_data(cmark_node *node, void *user_data)
-{
-	if (node == NULL) {
-		return 0;
-	}
-	node->user_data = user_data;
-	return 1;
+int cmark_node_set_user_data(cmark_node *node, void *user_data) {
+  if (node == NULL) {
+    return 0;
+  }
+  node->user_data = user_data;
+  return 1;
 }
 
-const char*
-cmark_node_get_literal(cmark_node *node)
-{
-	if (node == NULL) {
-		return NULL;
-	}
+const char *cmark_node_get_literal(cmark_node *node) {
+  if (node == NULL) {
+    return NULL;
+  }
 
-	switch (node->type) {
-	case NODE_HTML:
-	case NODE_TEXT:
-	case NODE_INLINE_HTML:
-	case NODE_CODE:
-		return cmark_chunk_to_cstr(&node->as.literal);
+  switch (node->type) {
+  case NODE_HTML:
+  case NODE_TEXT:
+  case NODE_INLINE_HTML:
+  case NODE_CODE:
+    return cmark_chunk_to_cstr(&node->as.literal);
 
-	case NODE_CODE_BLOCK:
-		return cmark_chunk_to_cstr(&node->as.code.literal);
+  case NODE_CODE_BLOCK:
+    return cmark_chunk_to_cstr(&node->as.code.literal);
 
-	default:
-		break;
-	}
+  default:
+    break;
+  }
 
-	return NULL;
+  return NULL;
 }
 
-int
-cmark_node_set_literal(cmark_node *node, const char *content)
-{
-	if (node == NULL) {
-		return 0;
-	}
+int cmark_node_set_literal(cmark_node *node, const char *content) {
+  if (node == NULL) {
+    return 0;
+  }
 
-	switch (node->type) {
-	case NODE_HTML:
-	case NODE_TEXT:
-	case NODE_INLINE_HTML:
-	case NODE_CODE:
-		cmark_chunk_set_cstr(&node->as.literal, content);
-		return 1;
+  switch (node->type) {
+  case NODE_HTML:
+  case NODE_TEXT:
+  case NODE_INLINE_HTML:
+  case NODE_CODE:
+    cmark_chunk_set_cstr(&node->as.literal, content);
+    return 1;
 
-	case NODE_CODE_BLOCK:
-		cmark_chunk_set_cstr(&node->as.code.literal, content);
-		return 1;
+  case NODE_CODE_BLOCK:
+    cmark_chunk_set_cstr(&node->as.code.literal, content);
+    return 1;
 
-	default:
-		break;
-	}
+  default:
+    break;
+  }
 
-	return 0;
+  return 0;
 }
 
-int
-cmark_node_get_header_level(cmark_node *node)
-{
-	if (node == NULL) {
-		return 0;
-	}
+int cmark_node_get_header_level(cmark_node *node) {
+  if (node == NULL) {
+    return 0;
+  }
 
-	switch (node->type) {
-	case CMARK_NODE_HEADER:
-		return node->as.header.level;
+  switch (node->type) {
+  case CMARK_NODE_HEADER:
+    return node->as.header.level;
 
-	default:
-		break;
-	}
+  default:
+    break;
+  }
 
-	return 0;
+  return 0;
 }
 
-int
-cmark_node_set_header_level(cmark_node *node, int level)
-{
-	if (node == NULL || level < 1 || level > 6) {
-		return 0;
-	}
+int cmark_node_set_header_level(cmark_node *node, int level) {
+  if (node == NULL || level < 1 || level > 6) {
+    return 0;
+  }
 
-	switch (node->type) {
-	case CMARK_NODE_HEADER:
-		node->as.header.level = level;
-		return 1;
+  switch (node->type) {
+  case CMARK_NODE_HEADER:
+    node->as.header.level = level;
+    return 1;
 
-	default:
-		break;
-	}
+  default:
+    break;
+  }
 
-	return 0;
+  return 0;
 }
 
-cmark_list_type
-cmark_node_get_list_type(cmark_node *node)
-{
-	if (node == NULL) {
-		return CMARK_NO_LIST;
-	}
+cmark_list_type cmark_node_get_list_type(cmark_node *node) {
+  if (node == NULL) {
+    return CMARK_NO_LIST;
+  }
 
-	if (node->type == CMARK_NODE_LIST) {
-		return node->as.list.list_type;
-	} else {
-		return CMARK_NO_LIST;
-	}
+  if (node->type == CMARK_NODE_LIST) {
+    return node->as.list.list_type;
+  } else {
+    return CMARK_NO_LIST;
+  }
 }
 
-int
-cmark_node_set_list_type(cmark_node *node, cmark_list_type type)
-{
-	if (!(type == CMARK_BULLET_LIST || type == CMARK_ORDERED_LIST)) {
-		return 0;
-	}
+int cmark_node_set_list_type(cmark_node *node, cmark_list_type type) {
+  if (!(type == CMARK_BULLET_LIST || type == CMARK_ORDERED_LIST)) {
+    return 0;
+  }
 
-	if (node == NULL) {
-		return 0;
-	}
+  if (node == NULL) {
+    return 0;
+  }
 
-	if (node->type == CMARK_NODE_LIST) {
-		node->as.list.list_type = type;
-		return 1;
-	} else {
-		return 0;
-	}
+  if (node->type == CMARK_NODE_LIST) {
+    node->as.list.list_type = type;
+    return 1;
+  } else {
+    return 0;
+  }
 }
 
-cmark_delim_type
-cmark_node_get_list_delim(cmark_node *node)
-{
-	if (node == NULL) {
-		return CMARK_NO_DELIM;
-	}
+cmark_delim_type cmark_node_get_list_delim(cmark_node *node) {
+  if (node == NULL) {
+    return CMARK_NO_DELIM;
+  }
 
-	if (node->type == CMARK_NODE_LIST) {
-		return node->as.list.delimiter;
-	} else {
-		return CMARK_NO_DELIM;
-	}
+  if (node->type == CMARK_NODE_LIST) {
+    return node->as.list.delimiter;
+  } else {
+    return CMARK_NO_DELIM;
+  }
 }
 
-int
-cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim)
-{
-	if (!(delim == CMARK_PERIOD_DELIM || delim == CMARK_PAREN_DELIM)) {
-		return 0;
-	}
+int cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim) {
+  if (!(delim == CMARK_PERIOD_DELIM || delim == CMARK_PAREN_DELIM)) {
+    return 0;
+  }
 
-	if (node == NULL) {
-		return 0;
-	}
+  if (node == NULL) {
+    return 0;
+  }
 
-	if (node->type == CMARK_NODE_LIST) {
-		node->as.list.delimiter = delim;
-		return 1;
-	} else {
-		return 0;
-	}
+  if (node->type == CMARK_NODE_LIST) {
+    node->as.list.delimiter = delim;
+    return 1;
+  } else {
+    return 0;
+  }
 }
 
-int
-cmark_node_get_list_start(cmark_node *node)
-{
-	if (node == NULL) {
-		return 0;
-	}
+int cmark_node_get_list_start(cmark_node *node) {
+  if (node == NULL) {
+    return 0;
+  }
 
-	if (node->type == CMARK_NODE_LIST) {
-		return node->as.list.start;
-	} else {
-		return 0;
-	}
+  if (node->type == CMARK_NODE_LIST) {
+    return node->as.list.start;
+  } else {
+    return 0;
+  }
 }
 
-int
-cmark_node_set_list_start(cmark_node *node, int start)
-{
-	if (node == NULL || start < 0) {
-		return 0;
-	}
+int cmark_node_set_list_start(cmark_node *node, int start) {
+  if (node == NULL || start < 0) {
+    return 0;
+  }
 
-	if (node->type == CMARK_NODE_LIST) {
-		node->as.list.start = start;
-		return 1;
-	} else {
-		return 0;
-	}
+  if (node->type == CMARK_NODE_LIST) {
+    node->as.list.start = start;
+    return 1;
+  } else {
+    return 0;
+  }
 }
 
-int
-cmark_node_get_list_tight(cmark_node *node)
-{
-	if (node == NULL) {
-		return 0;
-	}
+int cmark_node_get_list_tight(cmark_node *node) {
+  if (node == NULL) {
+    return 0;
+  }
 
-	if (node->type == CMARK_NODE_LIST) {
-		return node->as.list.tight;
-	} else {
-		return 0;
-	}
+  if (node->type == CMARK_NODE_LIST) {
+    return node->as.list.tight;
+  } else {
+    return 0;
+  }
 }
 
-int
-cmark_node_set_list_tight(cmark_node *node, int tight)
-{
-	if (node == NULL) {
-		return 0;
-	}
+int cmark_node_set_list_tight(cmark_node *node, int tight) {
+  if (node == NULL) {
+    return 0;
+  }
 
-	if (node->type == CMARK_NODE_LIST) {
-		node->as.list.tight = tight;
-		return 1;
-	} else {
-		return 0;
-	}
+  if (node->type == CMARK_NODE_LIST) {
+    node->as.list.tight = tight;
+    return 1;
+  } else {
+    return 0;
+  }
 }
 
-const char*
-cmark_node_get_fence_info(cmark_node *node)
-{
-	if (node == NULL) {
-		return NULL;
-	}
+const char *cmark_node_get_fence_info(cmark_node *node) {
+  if (node == NULL) {
+    return NULL;
+  }
 
-	if (node->type == NODE_CODE_BLOCK) {
-		return cmark_chunk_to_cstr(&node->as.code.info);
-	} else {
-		return NULL;
-	}
+  if (node->type == NODE_CODE_BLOCK) {
+    return cmark_chunk_to_cstr(&node->as.code.info);
+  } else {
+    return NULL;
+  }
 }
 
-int
-cmark_node_set_fence_info(cmark_node *node, const char *info)
-{
-	if (node == NULL) {
-		return 0;
-	}
+int cmark_node_set_fence_info(cmark_node *node, const char *info) {
+  if (node == NULL) {
+    return 0;
+  }
 
-	if (node->type == NODE_CODE_BLOCK) {
-		cmark_chunk_set_cstr(&node->as.code.info, info);
-		return 1;
-	} else {
-		return 0;
-	}
+  if (node->type == NODE_CODE_BLOCK) {
+    cmark_chunk_set_cstr(&node->as.code.info, info);
+    return 1;
+  } else {
+    return 0;
+  }
 }
 
-const char*
-cmark_node_get_url(cmark_node *node)
-{
-	if (node == NULL) {
-		return NULL;
-	}
+const char *cmark_node_get_url(cmark_node *node) {
+  if (node == NULL) {
+    return NULL;
+  }
 
-	switch (node->type) {
-	case NODE_LINK:
-	case NODE_IMAGE:
-		return cmark_chunk_to_cstr(&node->as.link.url);
-	default:
-		break;
-	}
+  switch (node->type) {
+  case NODE_LINK:
+  case NODE_IMAGE:
+    return cmark_chunk_to_cstr(&node->as.link.url);
+  default:
+    break;
+  }
 
-	return NULL;
+  return NULL;
 }
 
-int
-cmark_node_set_url(cmark_node *node, const char *url)
-{
-	if (node == NULL) {
-		return 0;
-	}
+int cmark_node_set_url(cmark_node *node, const char *url) {
+  if (node == NULL) {
+    return 0;
+  }
 
-	switch (node->type) {
-	case NODE_LINK:
-	case NODE_IMAGE:
-		cmark_chunk_set_cstr(&node->as.link.url, url);
-		return 1;
-	default:
-		break;
-	}
+  switch (node->type) {
+  case NODE_LINK:
+  case NODE_IMAGE:
+    cmark_chunk_set_cstr(&node->as.link.url, url);
+    return 1;
+  default:
+    break;
+  }
 
-	return 0;
+  return 0;
 }
 
-const char*
-cmark_node_get_title(cmark_node *node)
-{
-	if (node == NULL) {
-		return NULL;
-	}
+const char *cmark_node_get_title(cmark_node *node) {
+  if (node == NULL) {
+    return NULL;
+  }
 
-	switch (node->type) {
-	case NODE_LINK:
-	case NODE_IMAGE:
-		return cmark_chunk_to_cstr(&node->as.link.title);
-	default:
-		break;
-	}
+  switch (node->type) {
+  case NODE_LINK:
+  case NODE_IMAGE:
+    return cmark_chunk_to_cstr(&node->as.link.title);
+  default:
+    break;
+  }
 
-	return NULL;
+  return NULL;
 }
 
-int
-cmark_node_set_title(cmark_node *node, const char *title)
-{
-	if (node == NULL) {
-		return 0;
-	}
+int cmark_node_set_title(cmark_node *node, const char *title) {
+  if (node == NULL) {
+    return 0;
+  }
 
-	switch (node->type) {
-	case NODE_LINK:
-	case NODE_IMAGE:
-		cmark_chunk_set_cstr(&node->as.link.title, title);
-		return 1;
-	default:
-		break;
-	}
+  switch (node->type) {
+  case NODE_LINK:
+  case NODE_IMAGE:
+    cmark_chunk_set_cstr(&node->as.link.title, title);
+    return 1;
+  default:
+    break;
+  }
 
-	return 0;
+  return 0;
 }
 
-int
-cmark_node_get_start_line(cmark_node *node)
-{
-	if (node == NULL) {
-		return 0;
-	}
-	return node->start_line;
+int cmark_node_get_start_line(cmark_node *node) {
+  if (node == NULL) {
+    return 0;
+  }
+  return node->start_line;
 }
 
-int
-cmark_node_get_start_column(cmark_node *node)
-{
-	if (node == NULL) {
-		return 0;
-	}
-	return node->start_column;
+int cmark_node_get_start_column(cmark_node *node) {
+  if (node == NULL) {
+    return 0;
+  }
+  return node->start_column;
 }
 
-int
-cmark_node_get_end_line(cmark_node *node)
-{
-	if (node == NULL) {
-		return 0;
-	}
-	return node->end_line;
+int cmark_node_get_end_line(cmark_node *node) {
+  if (node == NULL) {
+    return 0;
+  }
+  return node->end_line;
 }
 
-int
-cmark_node_get_end_column(cmark_node *node)
-{
-	if (node == NULL) {
-		return 0;
-	}
-	return node->end_column;
+int cmark_node_get_end_column(cmark_node *node) {
+  if (node == NULL) {
+    return 0;
+  }
+  return node->end_column;
 }
 
 // Unlink a node without adjusting its next, prev, and parent pointers.
-static void
-S_node_unlink(cmark_node *node)
-{
-	if (node == NULL) {
-		return;
-	}
+static void S_node_unlink(cmark_node *node) {
+  if (node == NULL) {
+    return;
+  }
 
-	if (node->prev) {
-		node->prev->next = node->next;
-	}
-	if (node->next) {
-		node->next->prev = node->prev;
-	}
+  if (node->prev) {
+    node->prev->next = node->next;
+  }
+  if (node->next) {
+    node->next->prev = node->prev;
+  }
 
-	// Adjust first_child and last_child of parent.
-	cmark_node *parent = node->parent;
-	if (parent) {
-		if (parent->first_child == node) {
-			parent->first_child = node->next;
-		}
-		if (parent->last_child == node) {
-			parent->last_child = node->prev;
-		}
-	}
+  // Adjust first_child and last_child of parent.
+  cmark_node *parent = node->parent;
+  if (parent) {
+    if (parent->first_child == node) {
+      parent->first_child = node->next;
+    }
+    if (parent->last_child == node) {
+      parent->last_child = node->prev;
+    }
+  }
 }
 
-void
-cmark_node_unlink(cmark_node *node)
-{
-	S_node_unlink(node);
+void cmark_node_unlink(cmark_node *node) {
+  S_node_unlink(node);
 
-	node->next   = NULL;
-	node->prev   = NULL;
-	node->parent = NULL;
-
+  node->next = NULL;
+  node->prev = NULL;
+  node->parent = NULL;
 }
 
-int
-cmark_node_insert_before(cmark_node *node, cmark_node *sibling)
-{
-	if (node == NULL || sibling == NULL) {
-		return 0;
-	}
+int cmark_node_insert_before(cmark_node *node, cmark_node *sibling) {
+  if (node == NULL || sibling == NULL) {
+    return 0;
+  }
 
-	if (!node->parent || !S_can_contain(node->parent, sibling)) {
-		return 0;
-	}
+  if (!node->parent || !S_can_contain(node->parent, sibling)) {
+    return 0;
+  }
 
-	S_node_unlink(sibling);
+  S_node_unlink(sibling);
 
-	cmark_node *old_prev = node->prev;
+  cmark_node *old_prev = node->prev;
 
-	// Insert 'sibling' between 'old_prev' and 'node'.
-	if (old_prev) {
-		old_prev->next = sibling;
-	}
-	sibling->prev = old_prev;
-	sibling->next = node;
-	node->prev    = sibling;
+  // Insert 'sibling' between 'old_prev' and 'node'.
+  if (old_prev) {
+    old_prev->next = sibling;
+  }
+  sibling->prev = old_prev;
+  sibling->next = node;
+  node->prev = sibling;
 
-	// Set new parent.
-	cmark_node *parent = node->parent;
-	sibling->parent = parent;
+  // Set new parent.
+  cmark_node *parent = node->parent;
+  sibling->parent = parent;
 
-	// Adjust first_child of parent if inserted as first child.
-	if (parent && !old_prev) {
-		parent->first_child = sibling;
-	}
+  // Adjust first_child of parent if inserted as first child.
+  if (parent && !old_prev) {
+    parent->first_child = sibling;
+  }
 
-	return 1;
+  return 1;
 }
 
-int
-cmark_node_insert_after(cmark_node *node, cmark_node *sibling)
-{
-	if (node == NULL || sibling == NULL) {
-		return 0;
-	}
+int cmark_node_insert_after(cmark_node *node, cmark_node *sibling) {
+  if (node == NULL || sibling == NULL) {
+    return 0;
+  }
 
-	if (!node->parent || !S_can_contain(node->parent, sibling)) {
-		return 0;
-	}
+  if (!node->parent || !S_can_contain(node->parent, sibling)) {
+    return 0;
+  }
 
-	S_node_unlink(sibling);
+  S_node_unlink(sibling);
 
-	cmark_node *old_next = node->next;
+  cmark_node *old_next = node->next;
 
-	// Insert 'sibling' between 'node' and 'old_next'.
-	if (old_next) {
-		old_next->prev = sibling;
-	}
-	sibling->next = old_next;
-	sibling->prev = node;
-	node->next    = sibling;
+  // Insert 'sibling' between 'node' and 'old_next'.
+  if (old_next) {
+    old_next->prev = sibling;
+  }
+  sibling->next = old_next;
+  sibling->prev = node;
+  node->next = sibling;
 
-	// Set new parent.
-	cmark_node *parent = node->parent;
-	sibling->parent = parent;
+  // Set new parent.
+  cmark_node *parent = node->parent;
+  sibling->parent = parent;
 
-	// Adjust last_child of parent if inserted as last child.
-	if (parent && !old_next) {
-		parent->last_child = sibling;
-	}
+  // Adjust last_child of parent if inserted as last child.
+  if (parent && !old_next) {
+    parent->last_child = sibling;
+  }
 
-	return 1;
+  return 1;
 }
 
-int
-cmark_node_prepend_child(cmark_node *node, cmark_node *child)
-{
-	if (!S_can_contain(node, child)) {
-		return 0;
-	}
+int cmark_node_prepend_child(cmark_node *node, cmark_node *child) {
+  if (!S_can_contain(node, child)) {
+    return 0;
+  }
 
-	S_node_unlink(child);
+  S_node_unlink(child);
 
-	cmark_node *old_first_child = node->first_child;
+  cmark_node *old_first_child = node->first_child;
 
-	child->next       = old_first_child;
-	child->prev       = NULL;
-	child->parent     = node;
-	node->first_child = child;
+  child->next = old_first_child;
+  child->prev = NULL;
+  child->parent = node;
+  node->first_child = child;
 
-	if (old_first_child) {
-		old_first_child->prev = child;
-	} else {
-		// Also set last_child if node previously had no children.
-		node->last_child = child;
-	}
+  if (old_first_child) {
+    old_first_child->prev = child;
+  } else {
+    // Also set last_child if node previously had no children.
+    node->last_child = child;
+  }
 
-	return 1;
+  return 1;
 }
 
-int
-cmark_node_append_child(cmark_node *node, cmark_node *child)
-{
-	if (!S_can_contain(node, child)) {
-		return 0;
-	}
+int cmark_node_append_child(cmark_node *node, cmark_node *child) {
+  if (!S_can_contain(node, child)) {
+    return 0;
+  }
 
-	S_node_unlink(child);
+  S_node_unlink(child);
 
-	cmark_node *old_last_child = node->last_child;
+  cmark_node *old_last_child = node->last_child;
 
-	child->next      = NULL;
-	child->prev      = old_last_child;
-	child->parent    = node;
-	node->last_child = child;
+  child->next = NULL;
+  child->prev = old_last_child;
+  child->parent = node;
+  node->last_child = child;
 
-	if (old_last_child) {
-		old_last_child->next = child;
-	} else {
-		// Also set first_child if node previously had no children.
-		node->first_child = child;
-	}
+  if (old_last_child) {
+    old_last_child->next = child;
+  } else {
+    // Also set first_child if node previously had no children.
+    node->first_child = child;
+  }
 
-	return 1;
+  return 1;
 }
 
-static void
-S_print_error(FILE *out, cmark_node *node, const char *elem)
-{
-	if (out == NULL) {
-		return;
-	}
-	fprintf(out, "Invalid '%s' in node type %s at %d:%d\n", elem,
-	        cmark_node_get_type_string(node), node->start_line,
-	        node->start_column);
+static void S_print_error(FILE *out, cmark_node *node, const char *elem) {
+  if (out == NULL) {
+    return;
+  }
+  fprintf(out, "Invalid '%s' in node type %s at %d:%d\n", elem,
+          cmark_node_get_type_string(node), node->start_line,
+          node->start_column);
 }
 
-int
-cmark_node_check(cmark_node *node, FILE *out)
-{
-	cmark_node *cur;
-	int errors = 0;
+int cmark_node_check(cmark_node *node, FILE *out) {
+  cmark_node *cur;
+  int errors = 0;
 
-	if (!node) {
-		return 0;
-	}
+  if (!node) {
+    return 0;
+  }
 
-	cur = node;
-	while (true) {
-		if (cur->first_child) {
-			if (cur->first_child->prev != NULL) {
-				S_print_error(out, cur->first_child, "prev");
-				cur->first_child->prev = NULL;
-				++errors;
-			}
-			if (cur->first_child->parent != cur) {
-				S_print_error(out, cur->first_child, "parent");
-				cur->first_child->parent = cur;
-				++errors;
-			}
-			cur = cur->first_child;
-			continue;
-		}
+  cur = node;
+  while (true) {
+    if (cur->first_child) {
+      if (cur->first_child->prev != NULL) {
+        S_print_error(out, cur->first_child, "prev");
+        cur->first_child->prev = NULL;
+        ++errors;
+      }
+      if (cur->first_child->parent != cur) {
+        S_print_error(out, cur->first_child, "parent");
+        cur->first_child->parent = cur;
+        ++errors;
+      }
+      cur = cur->first_child;
+      continue;
+    }
 
-next_sibling:
-		if (cur == node) {
-			break;
-		}
-		if (cur->next) {
-			if (cur->next->prev != cur) {
-				S_print_error(out, cur->next, "prev");
-				cur->next->prev = cur;
-				++errors;
-			}
-			if (cur->next->parent != cur->parent) {
-				S_print_error(out, cur->next, "parent");
-				cur->next->parent = cur->parent;
-				++errors;
-			}
-			cur = cur->next;
-			continue;
-		}
+  next_sibling:
+    if (cur == node) {
+      break;
+    }
+    if (cur->next) {
+      if (cur->next->prev != cur) {
+        S_print_error(out, cur->next, "prev");
+        cur->next->prev = cur;
+        ++errors;
+      }
+      if (cur->next->parent != cur->parent) {
+        S_print_error(out, cur->next, "parent");
+        cur->next->parent = cur->parent;
+        ++errors;
+      }
+      cur = cur->next;
+      continue;
+    }
 
-		if (cur->parent->last_child != cur) {
-			S_print_error(out, cur->parent, "last_child");
-			cur->parent->last_child = cur;
-			++errors;
-		}
-		cur = cur->parent;
-		goto next_sibling;
-	}
+    if (cur->parent->last_child != cur) {
+      S_print_error(out, cur->parent, "last_child");
+      cur->parent->last_child = cur;
+      ++errors;
+    }
+    cur = cur->parent;
+    goto next_sibling;
+  }
 
-	return errors;
+  return errors;
 }
diff --git a/src/node.h b/src/node.h
index b579408..48d12df 100644
--- a/src/node.h
+++ b/src/node.h
@@ -13,68 +13,67 @@
 #include "chunk.h"
 
 typedef struct {
-	cmark_list_type   list_type;
-	int               marker_offset;
-	int               padding;
-	int               start;
-	cmark_delim_type  delimiter;
-	unsigned char     bullet_char;
-	bool              tight;
+  cmark_list_type list_type;
+  int marker_offset;
+  int padding;
+  int start;
+  cmark_delim_type delimiter;
+  unsigned char bullet_char;
+  bool tight;
 } cmark_list;
 
 typedef struct {
-	cmark_chunk       info;
-	cmark_chunk       literal;
-	int               fence_length;
-	/* fence_offset must be 0-3, so we can use int8_t */
-	int8_t            fence_offset;
-	unsigned char     fence_char;
-	bool              fenced;
+  cmark_chunk info;
+  cmark_chunk literal;
+  int fence_length;
+  /* fence_offset must be 0-3, so we can use int8_t */
+  int8_t fence_offset;
+  unsigned char fence_char;
+  bool fenced;
 } cmark_code;
 
 typedef struct {
-	int level;
-	bool setext;
+  int level;
+  bool setext;
 } cmark_header;
 
 typedef struct {
-	cmark_chunk url;
-	cmark_chunk title;
+  cmark_chunk url;
+  cmark_chunk title;
 } cmark_link;
 
 struct cmark_node {
-	struct cmark_node *next;
-	struct cmark_node *prev;
-	struct cmark_node *parent;
-	struct cmark_node *first_child;
-	struct cmark_node *last_child;
+  struct cmark_node *next;
+  struct cmark_node *prev;
+  struct cmark_node *parent;
+  struct cmark_node *first_child;
+  struct cmark_node *last_child;
 
-	void *user_data;
+  void *user_data;
 
-	int start_line;
-	int start_column;
-	int end_line;
-	int end_column;
+  int start_line;
+  int start_column;
+  int end_line;
+  int end_column;
 
-	cmark_node_type type;
+  cmark_node_type type;
 
-	bool open;
-	bool last_line_blank;
+  bool open;
+  bool last_line_blank;
 
-	cmark_strbuf string_content;
+  cmark_strbuf string_content;
 
-	union {
-		cmark_chunk       literal;
-		cmark_list        list;
-		cmark_code        code;
-		cmark_header      header;
-		cmark_link        link;
-		int               html_block_type;
-	} as;
+  union {
+    cmark_chunk literal;
+    cmark_list list;
+    cmark_code code;
+    cmark_header header;
+    cmark_link link;
+    int html_block_type;
+  } as;
 };
 
-CMARK_EXPORT int
-cmark_node_check(cmark_node *node, FILE *out);
+CMARK_EXPORT int cmark_node_check(cmark_node *node, FILE *out);
 
 #ifdef __cplusplus
 }
diff --git a/src/parser.h b/src/parser.h
index 01a7aeb..f359e10 100644
--- a/src/parser.h
+++ b/src/parser.h
@@ -12,20 +12,20 @@
 #define MAX_LINK_LABEL_LENGTH 1000
 
 struct cmark_parser {
-	struct cmark_reference_map *refmap;
-	struct cmark_node* root;
-	struct cmark_node* current;
-	int line_number;
-	bufsize_t offset;
-	bufsize_t column;
-	bufsize_t first_nonspace;
-	bufsize_t first_nonspace_column;
-	int indent;
-	bool blank;
-	cmark_strbuf *curline;
-	bufsize_t last_line_length;
-	cmark_strbuf *linebuf;
-	int options;
+  struct cmark_reference_map *refmap;
+  struct cmark_node *root;
+  struct cmark_node *current;
+  int line_number;
+  bufsize_t offset;
+  bufsize_t column;
+  bufsize_t first_nonspace;
+  bufsize_t first_nonspace_column;
+  int indent;
+  bool blank;
+  cmark_strbuf *curline;
+  bufsize_t last_line_length;
+  cmark_strbuf *linebuf;
+  int options;
 };
 
 #ifdef __cplusplus
diff --git a/src/references.c b/src/references.c
index 1d3d56d..980a948 100644
--- a/src/references.c
+++ b/src/references.c
@@ -5,150 +5,140 @@
 #include "inlines.h"
 #include "chunk.h"
 
-static unsigned int
-refhash(const unsigned char *link_ref)
-{
-	unsigned int hash = 0;
+static unsigned int refhash(const unsigned char *link_ref) {
+  unsigned int hash = 0;
 
-	while (*link_ref)
-		hash = (*link_ref++) + (hash << 6) + (hash << 16) - hash;
+  while (*link_ref)
+    hash = (*link_ref++) + (hash << 6) + (hash << 16) - hash;
 
-	return hash;
+  return hash;
 }
 
-static void reference_free(cmark_reference *ref)
-{
-	if(ref != NULL) {
-		free(ref->label);
-		cmark_chunk_free(&ref->url);
-		cmark_chunk_free(&ref->title);
-		free(ref);
-	}
+static void reference_free(cmark_reference *ref) {
+  if (ref != NULL) {
+    free(ref->label);
+    cmark_chunk_free(&ref->url);
+    cmark_chunk_free(&ref->title);
+    free(ref);
+  }
 }
 
 // normalize reference:  collapse internal whitespace to single space,
 // remove leading/trailing whitespace, case fold
 // Return NULL if the reference name is actually empty (i.e. composed
 // solely from whitespace)
-static unsigned char *normalize_reference(cmark_chunk *ref)
-{
-	cmark_strbuf normalized = GH_BUF_INIT;
-	unsigned char *result;
+static unsigned char *normalize_reference(cmark_chunk *ref) {
+  cmark_strbuf normalized = GH_BUF_INIT;
+  unsigned char *result;
 
-	if(ref == NULL)
-		return NULL;
+  if (ref == NULL)
+    return NULL;
 
-	if (ref->len == 0)
-		return NULL;
+  if (ref->len == 0)
+    return NULL;
 
-	utf8proc_case_fold(&normalized, ref->data, ref->len);
-	cmark_strbuf_trim(&normalized);
-	cmark_strbuf_normalize_whitespace(&normalized);
+  utf8proc_case_fold(&normalized, ref->data, ref->len);
+  cmark_strbuf_trim(&normalized);
+  cmark_strbuf_normalize_whitespace(&normalized);
 
-	result = cmark_strbuf_detach(&normalized);
-	assert(result);
+  result = cmark_strbuf_detach(&normalized);
+  assert(result);
 
-	if (result[0] == '\0') {
-		free(result);
-		return NULL;
-	}
+  if (result[0] == '\0') {
+    free(result);
+    return NULL;
+  }
 
-	return result;
+  return result;
 }
 
-static void add_reference(cmark_reference_map *map, cmark_reference* ref)
-{
-	cmark_reference *t = ref->next = map->table[ref->hash % REFMAP_SIZE];
+static void add_reference(cmark_reference_map *map, cmark_reference *ref) {
+  cmark_reference *t = ref->next = map->table[ref->hash % REFMAP_SIZE];
 
-	while (t) {
-		if (t->hash == ref->hash &&
-		    !strcmp((char *)t->label, (char *)ref->label)) {
-			reference_free(ref);
-			return;
-		}
+  while (t) {
+    if (t->hash == ref->hash && !strcmp((char *)t->label, (char *)ref->label)) {
+      reference_free(ref);
+      return;
+    }
 
-		t = t->next;
-	}
+    t = t->next;
+  }
 
-	map->table[ref->hash % REFMAP_SIZE] = ref;
+  map->table[ref->hash % REFMAP_SIZE] = ref;
 }
 
-void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, cmark_chunk *url,
-                            cmark_chunk *title)
-{
-	cmark_reference *ref;
-	unsigned char *reflabel = normalize_reference(label);
+void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label,
+                            cmark_chunk *url, cmark_chunk *title) {
+  cmark_reference *ref;
+  unsigned char *reflabel = normalize_reference(label);
 
-	/* empty reference name, or composed from only whitespace */
-	if (reflabel == NULL)
-		return;
+  /* empty reference name, or composed from only whitespace */
+  if (reflabel == NULL)
+    return;
 
-	ref = (cmark_reference *)calloc(1, sizeof(*ref));
-	if(ref != NULL) {
-		ref->label = reflabel;
-		ref->hash = refhash(ref->label);
-		ref->url = cmark_clean_url(url);
-		ref->title = cmark_clean_title(title);
-		ref->next = NULL;
+  ref = (cmark_reference *)calloc(1, sizeof(*ref));
+  if (ref != NULL) {
+    ref->label = reflabel;
+    ref->hash = refhash(ref->label);
+    ref->url = cmark_clean_url(url);
+    ref->title = cmark_clean_title(title);
+    ref->next = NULL;
 
-		add_reference(map, ref);
-	}
+    add_reference(map, ref);
+  }
 }
 
 // Returns reference if refmap contains a reference with matching
 // label, otherwise NULL.
-cmark_reference* cmark_reference_lookup(cmark_reference_map *map, cmark_chunk *label)
-{
-	cmark_reference *ref = NULL;
-	unsigned char *norm;
-	unsigned int hash;
+cmark_reference *cmark_reference_lookup(cmark_reference_map *map,
+                                        cmark_chunk *label) {
+  cmark_reference *ref = NULL;
+  unsigned char *norm;
+  unsigned int hash;
 
-	if (label->len > MAX_LINK_LABEL_LENGTH)
-		return NULL;
+  if (label->len > MAX_LINK_LABEL_LENGTH)
+    return NULL;
 
-	if (map == NULL)
-		return NULL;
+  if (map == NULL)
+    return NULL;
 
-	norm = normalize_reference(label);
-	if (norm == NULL)
-		return NULL;
+  norm = normalize_reference(label);
+  if (norm == NULL)
+    return NULL;
 
-	hash = refhash(norm);
-	ref = map->table[hash % REFMAP_SIZE];
+  hash = refhash(norm);
+  ref = map->table[hash % REFMAP_SIZE];
 
-	while (ref) {
-		if (ref->hash == hash &&
-		    !strcmp((char *)ref->label, (char *)norm))
-			break;
-		ref = ref->next;
-	}
+  while (ref) {
+    if (ref->hash == hash && !strcmp((char *)ref->label, (char *)norm))
+      break;
+    ref = ref->next;
+  }
 
-	free(norm);
-	return ref;
+  free(norm);
+  return ref;
 }
 
-void cmark_reference_map_free(cmark_reference_map *map)
-{
-	unsigned int i;
+void cmark_reference_map_free(cmark_reference_map *map) {
+  unsigned int i;
 
-	if(map == NULL)
-		return;
+  if (map == NULL)
+    return;
 
-	for (i = 0; i < REFMAP_SIZE; ++i) {
-		cmark_reference *ref = map->table[i];
-		cmark_reference *next;
+  for (i = 0; i < REFMAP_SIZE; ++i) {
+    cmark_reference *ref = map->table[i];
+    cmark_reference *next;
 
-		while (ref) {
-			next = ref->next;
-			reference_free(ref);
-			ref = next;
-		}
-	}
+    while (ref) {
+      next = ref->next;
+      reference_free(ref);
+      ref = next;
+    }
+  }
 
-	free(map);
+  free(map);
 }
 
-cmark_reference_map *cmark_reference_map_new(void)
-{
-	return (cmark_reference_map *)calloc(1, sizeof(cmark_reference_map));
+cmark_reference_map *cmark_reference_map_new(void) {
+  return (cmark_reference_map *)calloc(1, sizeof(cmark_reference_map));
 }
diff --git a/src/references.h b/src/references.h
index a360cd5..310ff9f 100644
--- a/src/references.h
+++ b/src/references.h
@@ -10,25 +10,27 @@
 #define REFMAP_SIZE 16
 
 struct cmark_reference {
-	struct cmark_reference *next;
-	unsigned char *label;
-	cmark_chunk url;
-	cmark_chunk title;
-	unsigned int hash;
+  struct cmark_reference *next;
+  unsigned char *label;
+  cmark_chunk url;
+  cmark_chunk title;
+  unsigned int hash;
 };
 
 typedef struct cmark_reference cmark_reference;
 
 struct cmark_reference_map {
-	cmark_reference *table[REFMAP_SIZE];
+  cmark_reference *table[REFMAP_SIZE];
 };
 
 typedef struct cmark_reference_map cmark_reference_map;
 
 cmark_reference_map *cmark_reference_map_new(void);
 void cmark_reference_map_free(cmark_reference_map *map);
-cmark_reference* cmark_reference_lookup(cmark_reference_map *map, cmark_chunk *label);
-extern void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, cmark_chunk *url, cmark_chunk *title);
+cmark_reference *cmark_reference_lookup(cmark_reference_map *map,
+                                        cmark_chunk *label);
+extern void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label,
+                                   cmark_chunk *url, cmark_chunk *title);
 
 #ifdef __cplusplus
 }
diff --git a/src/render.c b/src/render.c
index 2f1faac..4912615 100644
--- a/src/render.c
+++ b/src/render.c
@@ -5,182 +5,159 @@
 #include "utf8.h"
 #include "render.h"
 
-static inline
-void S_cr(cmark_renderer *renderer)
-{
-	if (renderer->need_cr < 1) {
-		renderer->need_cr = 1;
-	}
+static inline void S_cr(cmark_renderer *renderer) {
+  if (renderer->need_cr < 1) {
+    renderer->need_cr = 1;
+  }
 }
 
-static inline
-void S_blankline(cmark_renderer *renderer)
-{
-	if (renderer->need_cr < 2) {
-		renderer->need_cr = 2;
-	}
+static inline void S_blankline(cmark_renderer *renderer) {
+  if (renderer->need_cr < 2) {
+    renderer->need_cr = 2;
+  }
 }
 
-static
-void S_out(cmark_renderer *renderer,
-           const char *source,
-           bool wrap,
-           cmark_escaping escape)
-{
-	int length = cmark_strbuf_safe_strlen(source);
-	unsigned char nextc;
-	int32_t c;
-	int i = 0;
-	int len;
-	cmark_chunk remainder = cmark_chunk_literal("");
-	int k = renderer->buffer->size - 1;
+static void S_out(cmark_renderer *renderer, const char *source, bool wrap,
+                  cmark_escaping escape) {
+  int length = cmark_strbuf_safe_strlen(source);
+  unsigned char nextc;
+  int32_t c;
+  int i = 0;
+  int len;
+  cmark_chunk remainder = cmark_chunk_literal("");
+  int k = renderer->buffer->size - 1;
 
-	wrap = wrap && !renderer->no_wrap;
+  wrap = wrap && !renderer->no_wrap;
 
-	if (renderer->in_tight_list_item && renderer->need_cr > 1) {
-		renderer->need_cr = 1;
-	}
-	while (renderer->need_cr) {
-		if (k < 0 || renderer->buffer->ptr[k] == '\n') {
-			k -= 1;
-		} else {
-			cmark_strbuf_putc(renderer->buffer, '\n');
-			if (renderer->need_cr > 1) {
-				cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr,
-				                 renderer->prefix->size);
-			}
-		}
-		renderer->column = 0;
-		renderer->begin_line = true;
-		renderer->need_cr -= 1;
-	}
+  if (renderer->in_tight_list_item && renderer->need_cr > 1) {
+    renderer->need_cr = 1;
+  }
+  while (renderer->need_cr) {
+    if (k < 0 || renderer->buffer->ptr[k] == '\n') {
+      k -= 1;
+    } else {
+      cmark_strbuf_putc(renderer->buffer, '\n');
+      if (renderer->need_cr > 1) {
+        cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr,
+                         renderer->prefix->size);
+      }
+    }
+    renderer->column = 0;
+    renderer->begin_line = true;
+    renderer->need_cr -= 1;
+  }
 
-	while (i < length) {
-		if (renderer->begin_line) {
-			cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr,
-			                 renderer->prefix->size);
-			// note: this assumes prefix is ascii:
-			renderer->column = renderer->prefix->size;
-		}
+  while (i < length) {
+    if (renderer->begin_line) {
+      cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr,
+                       renderer->prefix->size);
+      // note: this assumes prefix is ascii:
+      renderer->column = renderer->prefix->size;
+    }
 
-		len = utf8proc_iterate((const uint8_t *)source + i, length - i, &c);
-		if (len == -1) { // error condition
-			return;  // return without rendering rest of string
-		}
-		nextc = source[i + len];
-		if (c == 32 && wrap) {
-			if (!renderer->begin_line) {
-				cmark_strbuf_putc(renderer->buffer, ' ');
-				renderer->column += 1;
-				renderer->begin_line = false;
-				renderer->last_breakable = renderer->buffer->size -
-				                           1;
-				// skip following spaces
-				while (source[i + 1] == ' ') {
-					i++;
-				}
-			}
+    len = utf8proc_iterate((const uint8_t *)source + i, length - i, &c);
+    if (len == -1) { // error condition
+      return;        // return without rendering rest of string
+    }
+    nextc = source[i + len];
+    if (c == 32 && wrap) {
+      if (!renderer->begin_line) {
+        cmark_strbuf_putc(renderer->buffer, ' ');
+        renderer->column += 1;
+        renderer->begin_line = false;
+        renderer->last_breakable = renderer->buffer->size - 1;
+        // skip following spaces
+        while (source[i + 1] == ' ') {
+          i++;
+        }
+      }
 
-		} else if (c == 10) {
-			cmark_strbuf_putc(renderer->buffer, '\n');
-			renderer->column = 0;
-			renderer->begin_line = true;
-			renderer->last_breakable = 0;
-		} else if (escape == LITERAL) {
-			cmark_render_code_point(renderer, c);
-			renderer->begin_line = false;
-		} else {
-			(renderer->outc)(renderer, escape, c, nextc);
-			renderer->begin_line = false;
-		}
+    } else if (c == 10) {
+      cmark_strbuf_putc(renderer->buffer, '\n');
+      renderer->column = 0;
+      renderer->begin_line = true;
+      renderer->last_breakable = 0;
+    } else if (escape == LITERAL) {
+      cmark_render_code_point(renderer, c);
+      renderer->begin_line = false;
+    } else {
+      (renderer->outc)(renderer, escape, c, nextc);
+      renderer->begin_line = false;
+    }
 
-		// If adding the character went beyond width, look for an
-		// earlier place where the line could be broken:
-		if (renderer->width > 0 &&
-		    renderer->column > renderer->width &&
-		    !renderer->begin_line &&
-		    renderer->last_breakable > 0) {
+    // If adding the character went beyond width, look for an
+    // earlier place where the line could be broken:
+    if (renderer->width > 0 && renderer->column > renderer->width &&
+        !renderer->begin_line && renderer->last_breakable > 0) {
 
-			// copy from last_breakable to remainder
-			cmark_chunk_set_cstr(&remainder, (char *) renderer->buffer->ptr + renderer->last_breakable + 1);
-			// truncate at last_breakable
-			cmark_strbuf_truncate(renderer->buffer, renderer->last_breakable);
-			// add newline, prefix, and remainder
-			cmark_strbuf_putc(renderer->buffer, '\n');
-			cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr,
-			                 renderer->prefix->size);
-			cmark_strbuf_put(renderer->buffer, remainder.data, remainder.len);
-			renderer->column = renderer->prefix->size + remainder.len;
-			cmark_chunk_free(&remainder);
-			renderer->last_breakable = 0;
-			renderer->begin_line = false;
-		}
+      // copy from last_breakable to remainder
+      cmark_chunk_set_cstr(&remainder, (char *)renderer->buffer->ptr +
+                                           renderer->last_breakable + 1);
+      // truncate at last_breakable
+      cmark_strbuf_truncate(renderer->buffer, renderer->last_breakable);
+      // add newline, prefix, and remainder
+      cmark_strbuf_putc(renderer->buffer, '\n');
+      cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr,
+                       renderer->prefix->size);
+      cmark_strbuf_put(renderer->buffer, remainder.data, remainder.len);
+      renderer->column = renderer->prefix->size + remainder.len;
+      cmark_chunk_free(&remainder);
+      renderer->last_breakable = 0;
+      renderer->begin_line = false;
+    }
 
-		i += len;
-	}
+    i += len;
+  }
 }
 
 // Assumes no newlines, assumes ascii content:
-void
-cmark_render_ascii(cmark_renderer* renderer, const char* s)
-{
-	int origsize = renderer->buffer->size;
-	cmark_strbuf_puts(renderer->buffer, s);
-	renderer->column += renderer->buffer->size - origsize;
+void cmark_render_ascii(cmark_renderer *renderer, const char *s) {
+  int origsize = renderer->buffer->size;
+  cmark_strbuf_puts(renderer->buffer, s);
+  renderer->column += renderer->buffer->size - origsize;
 }
 
-void
-cmark_render_code_point(cmark_renderer *renderer, uint32_t c)
-{
-	utf8proc_encode_char(c, renderer->buffer);
-	renderer->column += 1;
+void cmark_render_code_point(cmark_renderer *renderer, uint32_t c) {
+  utf8proc_encode_char(c, renderer->buffer);
+  renderer->column += 1;
 }
 
-char*
-cmark_render(cmark_node *root,
-             int options,
-             int width,
-             void (*outc)(cmark_renderer*,
-                          cmark_escaping,
-                          int32_t,
-                          unsigned char),
-             int (*render_node)(cmark_renderer *renderer,
-                                cmark_node *node,
-                                cmark_event_type ev_type,
-                                int options))
-{
-	cmark_strbuf pref = GH_BUF_INIT;
-	cmark_strbuf buf = GH_BUF_INIT;
-	cmark_node *cur;
-	cmark_event_type ev_type;
-	char *result;
-	cmark_iter *iter = cmark_iter_new(root);
+char *cmark_render(cmark_node *root, int options, int width,
+                   void (*outc)(cmark_renderer *, cmark_escaping, int32_t,
+                                unsigned char),
+                   int (*render_node)(cmark_renderer *renderer,
+                                      cmark_node *node,
+                                      cmark_event_type ev_type, int options)) {
+  cmark_strbuf pref = GH_BUF_INIT;
+  cmark_strbuf buf = GH_BUF_INIT;
+  cmark_node *cur;
+  cmark_event_type ev_type;
+  char *result;
+  cmark_iter *iter = cmark_iter_new(root);
 
-	cmark_renderer renderer = { &buf, &pref, 0, width,
-	                            0, 0, true, false, false,
-	                            outc, S_cr, S_blankline, S_out
-	                          };
+  cmark_renderer renderer = {&buf,  &pref, 0,    width, 0,           0,    true,
+                             false, false, outc, S_cr,  S_blankline, S_out};
 
-	while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
-		cur = cmark_iter_get_node(iter);
-		if (!render_node(&renderer, cur, ev_type, options)) {
-			// a false value causes us to skip processing
-			// the node's contents.  this is used for
-			// autolinks.
-			cmark_iter_reset(iter, cur, CMARK_EVENT_EXIT);
-		}
-	}
+  while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
+    cur = cmark_iter_get_node(iter);
+    if (!render_node(&renderer, cur, ev_type, options)) {
+      // a false value causes us to skip processing
+      // the node's contents.  this is used for
+      // autolinks.
+      cmark_iter_reset(iter, cur, CMARK_EVENT_EXIT);
+    }
+  }
 
-	// ensure final newline
-	if (renderer.buffer->ptr[renderer.buffer->size - 1] != '\n') {
-		cmark_strbuf_putc(renderer.buffer, '\n');
-	}
+  // ensure final newline
+  if (renderer.buffer->ptr[renderer.buffer->size - 1] != '\n') {
+    cmark_strbuf_putc(renderer.buffer, '\n');
+  }
 
-	result = (char *)cmark_strbuf_detach(renderer.buffer);
+  result = (char *)cmark_strbuf_detach(renderer.buffer);
 
-	cmark_iter_free(iter);
-	cmark_strbuf_free(renderer.prefix);
-	cmark_strbuf_free(renderer.buffer);
+  cmark_iter_free(iter);
+  cmark_strbuf_free(renderer.prefix);
+  cmark_strbuf_free(renderer.buffer);
 
-	return result;
+  return result;
 }
diff --git a/src/render.h b/src/render.h
index ca541bc..9ab347b 100644
--- a/src/render.h
+++ b/src/render.h
@@ -9,55 +9,36 @@
 #include "buffer.h"
 #include "chunk.h"
 
-typedef enum  {
-	LITERAL,
-	NORMAL,
-	TITLE,
-	URL
-} cmark_escaping;
+typedef enum { LITERAL, NORMAL, TITLE, URL } cmark_escaping;
 
 struct cmark_renderer {
-	cmark_strbuf* buffer;
-	cmark_strbuf* prefix;
-	int column;
-	int width;
-	int need_cr;
-	bufsize_t last_breakable;
-	bool begin_line;
-	bool no_wrap;
-	bool in_tight_list_item;
-	void (*outc)(struct cmark_renderer*,
-		     cmark_escaping,
-		     int32_t,
-		     unsigned char);
-	void (*cr)(struct cmark_renderer*);
-	void (*blankline)(struct cmark_renderer*);
-	void (*out)(struct cmark_renderer*,
-		    const char *,
-		    bool,
-		    cmark_escaping);
+  cmark_strbuf *buffer;
+  cmark_strbuf *prefix;
+  int column;
+  int width;
+  int need_cr;
+  bufsize_t last_breakable;
+  bool begin_line;
+  bool no_wrap;
+  bool in_tight_list_item;
+  void (*outc)(struct cmark_renderer *, cmark_escaping, int32_t, unsigned char);
+  void (*cr)(struct cmark_renderer *);
+  void (*blankline)(struct cmark_renderer *);
+  void (*out)(struct cmark_renderer *, const char *, bool, cmark_escaping);
 };
 
 typedef struct cmark_renderer cmark_renderer;
 
-void
-cmark_render_ascii(cmark_renderer *renderer, const char* s);
+void cmark_render_ascii(cmark_renderer *renderer, const char *s);
 
-void
-cmark_render_code_point(cmark_renderer *renderer, uint32_t c);
+void cmark_render_code_point(cmark_renderer *renderer, uint32_t c);
 
-char*
-cmark_render(cmark_node *root,
-	     int options,
-	     int width,
-	     void (*outc)(cmark_renderer*,
-			  cmark_escaping,
-			  int32_t,
-			  unsigned char),
-	     int (*render_node)(cmark_renderer *renderer,
-				cmark_node *node,
-				cmark_event_type ev_type,
-				int options));
+char *cmark_render(cmark_node *root, int options, int width,
+                   void (*outc)(cmark_renderer *, cmark_escaping, int32_t,
+                                unsigned char),
+                   int (*render_node)(cmark_renderer *renderer,
+                                      cmark_node *node,
+                                      cmark_event_type ev_type, int options));
 
 #ifdef __cplusplus
 }
diff --git a/src/scanners.c b/src/scanners.c
index 75fdb46..9237c7f 100644
--- a/src/scanners.c
+++ b/src/scanners.c
@@ -3,21045 +3,27836 @@
 #include "chunk.h"
 #include "scanners.h"
 
-bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset)
-{
-	bufsize_t res;
-	unsigned char *ptr = (unsigned char *)c->data;
-	unsigned char lim = ptr[c->len];
+bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c,
+                   bufsize_t offset) {
+  bufsize_t res;
+  unsigned char *ptr = (unsigned char *)c->data;
+  unsigned char lim = ptr[c->len];
 
-	ptr[c->len] = '\0';
-	res = scanner(ptr + offset);
-	ptr[c->len] = lim;
+  ptr[c->len] = '\0';
+  res = scanner(ptr + offset);
+  ptr[c->len] = lim;
 
-	return res;
+  return res;
 }
 
-
-
 // Try to match a scheme including colon.
-bufsize_t _scan_scheme(const unsigned char *p)
-{
+bufsize_t _scan_scheme(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
+  {
+    unsigned char yych;
 
-	yych = *(marker = p);
-	if (yych <= 'c') {
-		if (yych <= 'M') {
-			if (yych <= 'E') {
-				if (yych <= 'A') {
-					if (yych == '\n') goto yy2;
-					if (yych <= '@') goto yy29;
-					goto yy6;
-				} else {
-					if (yych <= 'B') goto yy24;
-					if (yych <= 'C') goto yy3;
-					if (yych <= 'D') goto yy4;
-					goto yy25;
-				}
-			} else {
-				if (yych <= 'I') {
-					if (yych <= 'F') goto yy7;
-					if (yych <= 'G') goto yy8;
-					if (yych <= 'H') goto yy9;
-					goto yy10;
-				} else {
-					if (yych <= 'J') goto yy5;
-					if (yych <= 'K') goto yy26;
-					if (yych <= 'L') goto yy11;
-					goto yy12;
-				}
-			}
-		} else {
-			if (yych <= 'U') {
-				if (yych <= 'Q') {
-					if (yych <= 'N') goto yy13;
-					if (yych <= 'O') goto yy14;
-					if (yych <= 'P') goto yy15;
-					goto yy27;
-				} else {
-					if (yych <= 'R') goto yy16;
-					if (yych <= 'S') goto yy17;
-					if (yych <= 'T') goto yy18;
-					goto yy19;
-				}
-			} else {
-				if (yych <= 'Y') {
-					if (yych <= 'V') goto yy20;
-					if (yych <= 'W') goto yy21;
-					if (yych <= 'X') goto yy22;
-					goto yy28;
-				} else {
-					if (yych <= '`') {
-						if (yych <= 'Z') goto yy23;
-						goto yy29;
-					} else {
-						if (yych <= 'a') goto yy6;
-						if (yych <= 'b') goto yy24;
-						goto yy3;
-					}
-				}
-			}
-		}
-	} else {
-		if (yych <= 't') {
-			if (yych <= 'k') {
-				if (yych <= 'g') {
-					if (yych <= 'd') goto yy4;
-					if (yych <= 'e') goto yy25;
-					if (yych <= 'f') goto yy7;
-					goto yy8;
-				} else {
-					if (yych <= 'h') goto yy9;
-					if (yych <= 'i') goto yy10;
-					if (yych <= 'j') goto yy5;
-					goto yy26;
-				}
-			} else {
-				if (yych <= 'o') {
-					if (yych <= 'l') goto yy11;
-					if (yych <= 'm') goto yy12;
-					if (yych <= 'n') goto yy13;
-					goto yy14;
-				} else {
-					if (yych <= 'q') {
-						if (yych <= 'p') goto yy15;
-						goto yy27;
-					} else {
-						if (yych <= 'r') goto yy16;
-						if (yych <= 's') goto yy17;
-						goto yy18;
-					}
-				}
-			}
-		} else {
-			if (yych <= 0xC1) {
-				if (yych <= 'x') {
-					if (yych <= 'u') goto yy19;
-					if (yych <= 'v') goto yy20;
-					if (yych <= 'w') goto yy21;
-					goto yy22;
-				} else {
-					if (yych <= 'y') goto yy28;
-					if (yych <= 'z') goto yy23;
-					if (yych <= 0x7F) goto yy29;
-				}
-			} else {
-				if (yych <= 0xED) {
-					if (yych <= 0xDF) goto yy30;
-					if (yych <= 0xE0) goto yy32;
-					if (yych <= 0xEC) goto yy33;
-					goto yy37;
-				} else {
-					if (yych <= 0xF0) {
-						if (yych <= 0xEF) goto yy33;
-						goto yy34;
-					} else {
-						if (yych <= 0xF3) goto yy35;
-						if (yych <= 0xF4) goto yy36;
-					}
-				}
-			}
-		}
-	}
-yy2:
-	{ return 0; }
-yy3:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy447;
-	case 'H':
-	case 'h':	goto yy446;
-	case 'I':
-	case 'i':	goto yy449;
-	case 'O':
-	case 'o':	goto yy445;
-	case 'R':
-	case 'r':	goto yy448;
-	case 'V':
-	case 'v':	goto yy444;
-	default:	goto yy2;
-	}
-yy4:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy420;
-	case 'I':
-	case 'i':	goto yy419;
-	case 'L':
-	case 'l':	goto yy417;
-	case 'N':
-	case 'n':	goto yy418;
-	case 'O':
-	case 'o':	goto yy421;
-	case 'T':
-	case 't':	goto yy416;
-	case 'V':
-	case 'v':	goto yy415;
-	default:	goto yy2;
-	}
-yy5:
-	yych = *(marker = ++p);
-	if (yych <= 'M') {
-		if (yych == 'A') goto yy407;
-		if (yych <= 'L') goto yy2;
-		goto yy406;
-	} else {
-		if (yych <= 'a') {
-			if (yych <= '`') goto yy2;
-			goto yy407;
-		} else {
-			if (yych == 'm') goto yy406;
-			goto yy2;
-		}
-	}
-yy6:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy388;
-	case 'B':
-	case 'b':	goto yy387;
-	case 'C':
-	case 'c':	goto yy386;
-	case 'D':
-	case 'd':	goto yy385;
-	case 'F':
-	case 'f':	goto yy384;
-	case 'I':
-	case 'i':	goto yy383;
-	case 'P':
-	case 'p':	goto yy382;
-	case 'T':
-	case 't':	goto yy381;
-	case 'W':
-	case 'w':	goto yy41;
-	default:	goto yy2;
-	}
-yy7:
-	yych = *(marker = ++p);
-	if (yych <= 'T') {
-		if (yych <= 'E') {
-			if (yych == 'A') goto yy368;
-			if (yych <= 'D') goto yy2;
-			goto yy367;
-		} else {
-			if (yych == 'I') goto yy366;
-			if (yych <= 'S') goto yy2;
-			goto yy369;
-		}
-	} else {
-		if (yych <= 'e') {
-			if (yych == 'a') goto yy368;
-			if (yych <= 'd') goto yy2;
-			goto yy367;
-		} else {
-			if (yych <= 'i') {
-				if (yych <= 'h') goto yy2;
-				goto yy366;
-			} else {
-				if (yych == 't') goto yy369;
-				goto yy2;
-			}
-		}
-	}
-yy8:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'E':
-	case 'e':	goto yy351;
-	case 'G':
-	case 'g':	goto yy41;
-	case 'I':
-	case 'i':	goto yy349;
-	case 'O':
-	case 'o':	goto yy350;
-	case 'T':
-	case 't':	goto yy348;
-	default:	goto yy2;
-	}
-yy9:
-	yych = *(marker = ++p);
-	if (yych <= 'S') {
-		if (yych <= '3') {
-			if (yych <= '2') goto yy2;
-			goto yy344;
-		} else {
-			if (yych == 'C') goto yy342;
-			goto yy2;
-		}
-	} else {
-		if (yych <= 'c') {
-			if (yych <= 'T') goto yy343;
-			if (yych <= 'b') goto yy2;
-			goto yy342;
-		} else {
-			if (yych == 't') goto yy343;
-			goto yy2;
-		}
-	}
-yy10:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy324;
-	case 'C':
-	case 'c':	goto yy321;
-	case 'M':
-	case 'm':	goto yy323;
-	case 'N':
-	case 'n':	goto yy322;
-	case 'P':
-	case 'p':	goto yy320;
-	case 'R':
-	case 'r':	goto yy319;
-	case 'T':
-	case 't':	goto yy318;
-	default:	goto yy2;
-	}
-yy11:
-	yych = *(marker = ++p);
-	if (yych <= 'D') {
-		if (yych == 'A') goto yy312;
-		if (yych <= 'C') goto yy2;
-		goto yy311;
-	} else {
-		if (yych <= 'a') {
-			if (yych <= '`') goto yy2;
-			goto yy312;
-		} else {
-			if (yych == 'd') goto yy311;
-			goto yy2;
-		}
-	}
-yy12:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy278;
-	case 'E':
-	case 'e':	goto yy277;
-	case 'I':
-	case 'i':	goto yy280;
-	case 'M':
-	case 'm':	goto yy276;
-	case 'S':
-	case 's':	goto yy275;
-	case 'T':
-	case 't':	goto yy279;
-	case 'U':
-	case 'u':	goto yy274;
-	case 'V':
-	case 'v':	goto yy273;
-	default:	goto yy2;
-	}
-yy13:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'E':
-	case 'e':	goto yy268;
-	case 'F':
-	case 'f':	goto yy267;
-	case 'I':
-	case 'i':	goto yy266;
-	case 'N':
-	case 'n':	goto yy265;
-	case 'O':
-	case 'o':	goto yy264;
-	default:	goto yy2;
-	}
-yy14:
-	yych = *(marker = ++p);
-	if (yych <= 'P') {
-		if (yych == 'I') goto yy250;
-		if (yych <= 'O') goto yy2;
-		goto yy251;
-	} else {
-		if (yych <= 'i') {
-			if (yych <= 'h') goto yy2;
-			goto yy250;
-		} else {
-			if (yych == 'p') goto yy251;
-			goto yy2;
-		}
-	}
-yy15:
-	yych = *(marker = ++p);
-	if (yych <= 'S') {
-		if (yych <= 'L') {
-			if (yych == 'A') goto yy232;
-			if (yych <= 'K') goto yy2;
-			goto yy231;
-		} else {
-			if (yych <= 'O') {
-				if (yych <= 'N') goto yy2;
-				goto yy233;
-			} else {
-				if (yych <= 'Q') goto yy2;
-				if (yych <= 'R') goto yy230;
-				goto yy229;
-			}
-		}
-	} else {
-		if (yych <= 'n') {
-			if (yych <= 'a') {
-				if (yych <= '`') goto yy2;
-				goto yy232;
-			} else {
-				if (yych == 'l') goto yy231;
-				goto yy2;
-			}
-		} else {
-			if (yych <= 'q') {
-				if (yych <= 'o') goto yy233;
-				goto yy2;
-			} else {
-				if (yych <= 'r') goto yy230;
-				if (yych <= 's') goto yy229;
-				goto yy2;
-			}
-		}
-	}
-yy16:
-	yych = *(marker = ++p);
-	if (yych <= 'T') {
-		if (yych <= 'L') {
-			if (yych == 'E') goto yy219;
-			goto yy2;
-		} else {
-			if (yych <= 'M') goto yy218;
-			if (yych <= 'R') goto yy2;
-			if (yych <= 'S') goto yy217;
-			goto yy216;
-		}
-	} else {
-		if (yych <= 'm') {
-			if (yych == 'e') goto yy219;
-			if (yych <= 'l') goto yy2;
-			goto yy218;
-		} else {
-			if (yych <= 'r') goto yy2;
-			if (yych <= 's') goto yy217;
-			if (yych <= 't') goto yy216;
-			goto yy2;
-		}
-	}
-yy17:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'E':
-	case 'e':	goto yy172;
-	case 'F':
-	case 'f':	goto yy171;
-	case 'G':
-	case 'g':	goto yy170;
-	case 'H':
-	case 'h':	goto yy175;
-	case 'I':
-	case 'i':	goto yy174;
-	case 'K':
-	case 'k':	goto yy169;
-	case 'M':
-	case 'm':	goto yy168;
-	case 'N':
-	case 'n':	goto yy173;
-	case 'O':
-	case 'o':	goto yy167;
-	case 'P':
-	case 'p':	goto yy166;
-	case 'S':
-	case 's':	goto yy165;
-	case 'T':
-	case 't':	goto yy164;
-	case 'V':
-	case 'v':	goto yy163;
-	default:	goto yy2;
-	}
-yy18:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy139;
-	case 'E':
-	case 'e':	goto yy135;
-	case 'F':
-	case 'f':	goto yy138;
-	case 'H':
-	case 'h':	goto yy134;
-	case 'I':
-	case 'i':	goto yy136;
-	case 'N':
-	case 'n':	goto yy137;
-	case 'V':
-	case 'v':	goto yy41;
-	default:	goto yy2;
-	}
-yy19:
-	yych = *(marker = ++p);
-	if (yych <= 'T') {
-		if (yych <= 'N') {
-			if (yych == 'D') goto yy126;
-			if (yych <= 'M') goto yy2;
-			goto yy125;
-		} else {
-			if (yych == 'R') goto yy127;
-			if (yych <= 'S') goto yy2;
-			goto yy124;
-		}
-	} else {
-		if (yych <= 'n') {
-			if (yych == 'd') goto yy126;
-			if (yych <= 'm') goto yy2;
-			goto yy125;
-		} else {
-			if (yych <= 'r') {
-				if (yych <= 'q') goto yy2;
-				goto yy127;
-			} else {
-				if (yych == 't') goto yy124;
-				goto yy2;
-			}
-		}
-	}
-yy20:
-	yych = *(marker = ++p);
-	if (yych <= 'I') {
-		if (yych == 'E') goto yy108;
-		if (yych <= 'H') goto yy2;
-		goto yy107;
-	} else {
-		if (yych <= 'e') {
-			if (yych <= 'd') goto yy2;
-			goto yy108;
-		} else {
-			if (yych == 'i') goto yy107;
-			goto yy2;
-		}
-	}
-yy21:
-	yych = *(marker = ++p);
-	if (yych <= 'Y') {
-		if (yych <= 'R') {
-			if (yych == 'E') goto yy97;
-			goto yy2;
-		} else {
-			if (yych <= 'S') goto yy98;
-			if (yych <= 'T') goto yy96;
-			if (yych <= 'X') goto yy2;
-			goto yy95;
-		}
-	} else {
-		if (yych <= 's') {
-			if (yych == 'e') goto yy97;
-			if (yych <= 'r') goto yy2;
-			goto yy98;
-		} else {
-			if (yych <= 't') goto yy96;
-			if (yych == 'y') goto yy95;
-			goto yy2;
-		}
-	}
-yy22:
-	yych = *(marker = ++p);
-	if (yych <= 'R') {
-		if (yych <= 'F') {
-			if (yych == 'C') goto yy74;
-			if (yych <= 'E') goto yy2;
-			goto yy72;
-		} else {
-			if (yych == 'M') goto yy73;
-			if (yych <= 'Q') goto yy2;
-			goto yy71;
-		}
-	} else {
-		if (yych <= 'f') {
-			if (yych == 'c') goto yy74;
-			if (yych <= 'e') goto yy2;
-			goto yy72;
-		} else {
-			if (yych <= 'm') {
-				if (yych <= 'l') goto yy2;
-				goto yy73;
-			} else {
-				if (yych == 'r') goto yy71;
-				goto yy2;
-			}
-		}
-	}
-yy23:
-	yych = *(marker = ++p);
-	if (yych == '3') goto yy66;
-	goto yy2;
-yy24:
-	yych = *(marker = ++p);
-	if (yych <= 'O') {
-		if (yych <= 'H') {
-			if (yych == 'E') goto yy56;
-			goto yy2;
-		} else {
-			if (yych <= 'I') goto yy55;
-			if (yych <= 'N') goto yy2;
-			goto yy54;
-		}
-	} else {
-		if (yych <= 'h') {
-			if (yych == 'e') goto yy56;
-			goto yy2;
-		} else {
-			if (yych <= 'i') goto yy55;
-			if (yych == 'o') goto yy54;
-			goto yy2;
-		}
-	}
-yy25:
-	yych = *(marker = ++p);
-	if (yych == 'D') goto yy52;
-	if (yych == 'd') goto yy52;
-	goto yy2;
-yy26:
-	yych = *(marker = ++p);
-	if (yych == 'E') goto yy47;
-	if (yych == 'e') goto yy47;
-	goto yy2;
-yy27:
-	yych = *(marker = ++p);
-	if (yych == 'U') goto yy44;
-	if (yych == 'u') goto yy44;
-	goto yy2;
-yy28:
-	yych = *(marker = ++p);
-	if (yych == 'M') goto yy38;
-	if (yych == 'm') goto yy38;
-	goto yy2;
-yy29:
-	yych = *++p;
-	goto yy2;
-yy30:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy31;
-	if (yych <= 0xBF) goto yy29;
-yy31:
-	p = marker;
-	goto yy2;
-yy32:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy31;
-	if (yych <= 0xBF) goto yy30;
-	goto yy31;
-yy33:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy31;
-	if (yych <= 0xBF) goto yy30;
-	goto yy31;
-yy34:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy31;
-	if (yych <= 0xBF) goto yy33;
-	goto yy31;
-yy35:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy31;
-	if (yych <= 0xBF) goto yy33;
-	goto yy31;
-yy36:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy31;
-	if (yych <= 0x8F) goto yy33;
-	goto yy31;
-yy37:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy31;
-	if (yych <= 0x9F) goto yy30;
-	goto yy31;
-yy38:
-	yych = *++p;
-	if (yych == 'S') goto yy39;
-	if (yych != 's') goto yy31;
-yy39:
-	yych = *++p;
-	if (yych == 'G') goto yy40;
-	if (yych != 'g') goto yy31;
-yy40:
-	yych = *++p;
-	if (yych == 'R') goto yy41;
-	if (yych != 'r') goto yy31;
-yy41:
-	yych = *++p;
-	if (yych != ':') goto yy31;
-yy42:
-	++p;
-	{ return (bufsize_t)(p - start); }
-yy44:
-	yych = *++p;
-	if (yych == 'E') goto yy45;
-	if (yych != 'e') goto yy31;
-yy45:
-	yych = *++p;
-	if (yych == 'R') goto yy46;
-	if (yych != 'r') goto yy31;
-yy46:
-	yych = *++p;
-	if (yych == 'Y') goto yy41;
-	if (yych == 'y') goto yy41;
-	goto yy31;
-yy47:
-	yych = *++p;
-	if (yych == 'Y') goto yy48;
-	if (yych != 'y') goto yy31;
-yy48:
-	yych = *++p;
-	if (yych == 'P') goto yy49;
-	if (yych != 'p') goto yy31;
-yy49:
-	yych = *++p;
-	if (yych == 'A') goto yy50;
-	if (yych != 'a') goto yy31;
-yy50:
-	yych = *++p;
-	if (yych == 'R') goto yy51;
-	if (yych != 'r') goto yy31;
-yy51:
-	yych = *++p;
-	if (yych == 'C') goto yy41;
-	if (yych == 'c') goto yy41;
-	goto yy31;
-yy52:
-	yych = *++p;
-	if (yych != '2') goto yy31;
-	yych = *++p;
-	if (yych == 'K') goto yy41;
-	if (yych == 'k') goto yy41;
-	goto yy31;
-yy54:
-	yych = *++p;
-	if (yych == 'L') goto yy65;
-	if (yych == 'l') goto yy65;
-	goto yy31;
-yy55:
-	yych = *++p;
-	if (yych == 'T') goto yy61;
-	if (yych == 't') goto yy61;
-	goto yy31;
-yy56:
-	yych = *++p;
-	if (yych == 'S') goto yy57;
-	if (yych != 's') goto yy31;
-yy57:
-	yych = *++p;
-	if (yych == 'H') goto yy58;
-	if (yych != 'h') goto yy31;
-yy58:
-	yych = *++p;
-	if (yych == 'A') goto yy59;
-	if (yych != 'a') goto yy31;
-yy59:
-	yych = *++p;
-	if (yych == 'R') goto yy60;
-	if (yych != 'r') goto yy31;
-yy60:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy61:
-	yych = *++p;
-	if (yych == 'C') goto yy62;
-	if (yych != 'c') goto yy31;
-yy62:
-	yych = *++p;
-	if (yych == 'O') goto yy63;
-	if (yych != 'o') goto yy31;
-yy63:
-	yych = *++p;
-	if (yych == 'I') goto yy64;
-	if (yych != 'i') goto yy31;
-yy64:
-	yych = *++p;
-	if (yych == 'N') goto yy41;
-	if (yych == 'n') goto yy41;
-	goto yy31;
-yy65:
-	yych = *++p;
-	if (yych == 'O') goto yy41;
-	if (yych == 'o') goto yy41;
-	goto yy31;
-yy66:
-	yych = *++p;
-	if (yych != '9') goto yy31;
-	yych = *++p;
-	if (yych != '.') goto yy31;
-	yych = *++p;
-	if (yych != '5') goto yy31;
-	yych = *++p;
-	if (yych != '0') goto yy31;
-	yych = *++p;
-	if (yych <= 'Q') goto yy31;
-	if (yych <= 'S') goto yy41;
-	if (yych <= 'q') goto yy31;
-	if (yych <= 's') goto yy41;
-	goto yy31;
-yy71:
-	yych = *++p;
-	if (yych == 'I') goto yy41;
-	if (yych == 'i') goto yy41;
-	goto yy31;
-yy72:
-	yych = *++p;
-	if (yych == 'I') goto yy93;
-	if (yych == 'i') goto yy93;
-	goto yy31;
-yy73:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'L') goto yy83;
-		if (yych <= 'O') goto yy31;
-		goto yy84;
-	} else {
-		if (yych <= 'l') {
-			if (yych <= 'k') goto yy31;
-			goto yy83;
-		} else {
-			if (yych == 'p') goto yy84;
-			goto yy31;
-		}
-	}
-yy74:
-	yych = *++p;
-	if (yych == 'O') goto yy75;
-	if (yych != 'o') goto yy31;
-yy75:
-	yych = *++p;
-	if (yych == 'N') goto yy76;
-	if (yych != 'n') goto yy31;
-yy76:
-	yych = *++p;
-	if (yych == '-') goto yy77;
-	if (yych == ':') goto yy42;
-	goto yy31;
-yy77:
-	yych = *++p;
-	if (yych == 'U') goto yy78;
-	if (yych != 'u') goto yy31;
-yy78:
-	yych = *++p;
-	if (yych == 'S') goto yy79;
-	if (yych != 's') goto yy31;
-yy79:
-	yych = *++p;
-	if (yych == 'E') goto yy80;
-	if (yych != 'e') goto yy31;
-yy80:
-	yych = *++p;
-	if (yych == 'R') goto yy81;
-	if (yych != 'r') goto yy31;
-yy81:
-	yych = *++p;
-	if (yych == 'I') goto yy82;
-	if (yych != 'i') goto yy31;
-yy82:
-	yych = *++p;
-	if (yych == 'D') goto yy41;
-	if (yych == 'd') goto yy41;
-	goto yy31;
-yy83:
-	yych = *++p;
-	if (yych == 'R') goto yy85;
-	if (yych == 'r') goto yy85;
-	goto yy31;
-yy84:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy85:
-	yych = *++p;
-	if (yych == 'P') goto yy86;
-	if (yych != 'p') goto yy31;
-yy86:
-	yych = *++p;
-	if (yych == 'C') goto yy87;
-	if (yych != 'c') goto yy31;
-yy87:
-	yych = *++p;
-	if (yych != '.') goto yy31;
-	yych = *++p;
-	if (yych == 'B') goto yy89;
-	if (yych != 'b') goto yy31;
-yy89:
-	yych = *++p;
-	if (yych == 'E') goto yy90;
-	if (yych != 'e') goto yy31;
-yy90:
-	yych = *++p;
-	if (yych == 'E') goto yy91;
-	if (yych != 'e') goto yy31;
-yy91:
-	yych = *++p;
-	if (yych == 'P') goto yy92;
-	if (yych != 'p') goto yy31;
-yy92:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'S') goto yy41;
-		if (yych == 's') goto yy41;
-		goto yy31;
-	}
-yy93:
-	yych = *++p;
-	if (yych == 'R') goto yy94;
-	if (yych != 'r') goto yy31;
-yy94:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy95:
-	yych = *++p;
-	if (yych == 'C') goto yy103;
-	if (yych == 'c') goto yy103;
-	goto yy31;
-yy96:
-	yych = *++p;
-	if (yych == 'A') goto yy102;
-	if (yych == 'a') goto yy102;
-	goto yy31;
-yy97:
-	yych = *++p;
-	if (yych == 'B') goto yy99;
-	if (yych == 'b') goto yy99;
-	goto yy31;
-yy98:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'S') goto yy41;
-		if (yych == 's') goto yy41;
-		goto yy31;
-	}
-yy99:
-	yych = *++p;
-	if (yych == 'C') goto yy100;
-	if (yych != 'c') goto yy31;
-yy100:
-	yych = *++p;
-	if (yych == 'A') goto yy101;
-	if (yych != 'a') goto yy31;
-yy101:
-	yych = *++p;
-	if (yych == 'L') goto yy41;
-	if (yych == 'l') goto yy41;
-	goto yy31;
-yy102:
-	yych = *++p;
-	if (yych == 'I') goto yy41;
-	if (yych == 'i') goto yy41;
-	goto yy31;
-yy103:
-	yych = *++p;
-	if (yych == 'I') goto yy104;
-	if (yych != 'i') goto yy31;
-yy104:
-	yych = *++p;
-	if (yych == 'W') goto yy105;
-	if (yych != 'w') goto yy31;
-yy105:
-	yych = *++p;
-	if (yych == 'Y') goto yy106;
-	if (yych != 'y') goto yy31;
-yy106:
-	yych = *++p;
-	if (yych == 'G') goto yy41;
-	if (yych == 'g') goto yy41;
-	goto yy31;
-yy107:
-	yych = *++p;
-	if (yych == 'E') goto yy116;
-	if (yych == 'e') goto yy116;
-	goto yy31;
-yy108:
-	yych = *++p;
-	if (yych <= 'N') {
-		if (yych <= 'L') goto yy31;
-		if (yych >= 'N') goto yy110;
-	} else {
-		if (yych <= 'l') goto yy31;
-		if (yych <= 'm') goto yy109;
-		if (yych <= 'n') goto yy110;
-		goto yy31;
-	}
-yy109:
-	yych = *++p;
-	if (yych == 'M') goto yy115;
-	if (yych == 'm') goto yy115;
-	goto yy31;
-yy110:
-	yych = *++p;
-	if (yych == 'T') goto yy111;
-	if (yych != 't') goto yy31;
-yy111:
-	yych = *++p;
-	if (yych == 'R') goto yy112;
-	if (yych != 'r') goto yy31;
-yy112:
-	yych = *++p;
-	if (yych == 'I') goto yy113;
-	if (yych != 'i') goto yy31;
-yy113:
-	yych = *++p;
-	if (yych == 'L') goto yy114;
-	if (yych != 'l') goto yy31;
-yy114:
-	yych = *++p;
-	if (yych == 'O') goto yy41;
-	if (yych == 'o') goto yy41;
-	goto yy31;
-yy115:
-	yych = *++p;
-	if (yych == 'I') goto yy41;
-	if (yych == 'i') goto yy41;
-	goto yy31;
-yy116:
-	yych = *++p;
-	if (yych == 'W') goto yy117;
-	if (yych != 'w') goto yy31;
-yy117:
-	yych = *++p;
-	if (yych != '-') goto yy31;
-	yych = *++p;
-	if (yych == 'S') goto yy119;
-	if (yych != 's') goto yy31;
-yy119:
-	yych = *++p;
-	if (yych == 'O') goto yy120;
-	if (yych != 'o') goto yy31;
-yy120:
-	yych = *++p;
-	if (yych == 'U') goto yy121;
-	if (yych != 'u') goto yy31;
-yy121:
-	yych = *++p;
-	if (yych == 'R') goto yy122;
-	if (yych != 'r') goto yy31;
-yy122:
-	yych = *++p;
-	if (yych == 'C') goto yy123;
-	if (yych != 'c') goto yy31;
-yy123:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy124:
-	yych = *++p;
-	if (yych == '2') goto yy131;
-	goto yy31;
-yy125:
-	yych = *++p;
-	if (yych == 'R') goto yy128;
-	if (yych == 'r') goto yy128;
-	goto yy31;
-yy126:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy127:
-	yych = *++p;
-	if (yych == 'N') goto yy41;
-	if (yych == 'n') goto yy41;
-	goto yy31;
-yy128:
-	yych = *++p;
-	if (yych == 'E') goto yy129;
-	if (yych != 'e') goto yy31;
-yy129:
-	yych = *++p;
-	if (yych == 'A') goto yy130;
-	if (yych != 'a') goto yy31;
-yy130:
-	yych = *++p;
-	if (yych == 'L') goto yy41;
-	if (yych == 'l') goto yy41;
-	goto yy31;
-yy131:
-	yych = *++p;
-	if (yych != '0') goto yy31;
-	yych = *++p;
-	if (yych != '0') goto yy31;
-	yych = *++p;
-	if (yych == '4') goto yy41;
-	goto yy31;
-yy134:
-	yych = *++p;
-	if (yych == 'I') goto yy153;
-	if (yych == 'i') goto yy153;
-	goto yy31;
-yy135:
-	yych = *++p;
-	if (yych <= 'L') {
-		if (yych == 'A') goto yy145;
-		if (yych <= 'K') goto yy31;
-		goto yy144;
-	} else {
-		if (yych <= 'a') {
-			if (yych <= '`') goto yy31;
-			goto yy145;
-		} else {
-			if (yych == 'l') goto yy144;
-			goto yy31;
-		}
-	}
-yy136:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy137:
-	yych = *++p;
-	if (yych == '3') goto yy141;
-	goto yy31;
-yy138:
-	yych = *++p;
-	if (yych == 'T') goto yy140;
-	if (yych == 't') goto yy140;
-	goto yy31;
-yy139:
-	yych = *++p;
-	if (yych == 'G') goto yy41;
-	if (yych == 'g') goto yy41;
-	goto yy31;
-yy140:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy141:
-	yych = *++p;
-	if (yych != '2') goto yy31;
-	yych = *++p;
-	if (yych != '7') goto yy31;
-	yych = *++p;
-	if (yych == '0') goto yy41;
-	goto yy31;
-yy144:
-	yych = *++p;
-	if (yych <= 'M') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'N') goto yy151;
-		if (yych == 'n') goto yy151;
-		goto yy31;
-	}
-yy145:
-	yych = *++p;
-	if (yych == 'M') goto yy146;
-	if (yych != 'm') goto yy31;
-yy146:
-	yych = *++p;
-	if (yych == 'S') goto yy147;
-	if (yych != 's') goto yy31;
-yy147:
-	yych = *++p;
-	if (yych == 'P') goto yy148;
-	if (yych != 'p') goto yy31;
-yy148:
-	yych = *++p;
-	if (yych == 'E') goto yy149;
-	if (yych != 'e') goto yy31;
-yy149:
-	yych = *++p;
-	if (yych == 'A') goto yy150;
-	if (yych != 'a') goto yy31;
-yy150:
-	yych = *++p;
-	if (yych == 'K') goto yy41;
-	if (yych == 'k') goto yy41;
-	goto yy31;
-yy151:
-	yych = *++p;
-	if (yych == 'E') goto yy152;
-	if (yych != 'e') goto yy31;
-yy152:
-	yych = *++p;
-	if (yych == 'T') goto yy41;
-	if (yych == 't') goto yy41;
-	goto yy31;
-yy153:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych == 'N') goto yy154;
-		if (yych <= 'R') goto yy31;
-		goto yy155;
-	} else {
-		if (yych <= 'n') {
-			if (yych <= 'm') goto yy31;
-		} else {
-			if (yych == 's') goto yy155;
-			goto yy31;
-		}
-	}
-yy154:
-	yych = *++p;
-	if (yych == 'G') goto yy162;
-	if (yych == 'g') goto yy162;
-	goto yy31;
-yy155:
-	yych = *++p;
-	if (yych == 'M') goto yy156;
-	if (yych != 'm') goto yy31;
-yy156:
-	yych = *++p;
-	if (yych == 'E') goto yy157;
-	if (yych != 'e') goto yy31;
-yy157:
-	yych = *++p;
-	if (yych == 'S') goto yy158;
-	if (yych != 's') goto yy31;
-yy158:
-	yych = *++p;
-	if (yych == 'S') goto yy159;
-	if (yych != 's') goto yy31;
-yy159:
-	yych = *++p;
-	if (yych == 'A') goto yy160;
-	if (yych != 'a') goto yy31;
-yy160:
-	yych = *++p;
-	if (yych == 'G') goto yy161;
-	if (yych != 'g') goto yy31;
-yy161:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy162:
-	yych = *++p;
-	if (yych == 'S') goto yy41;
-	if (yych == 's') goto yy41;
-	goto yy31;
-yy163:
-	yych = *++p;
-	if (yych == 'N') goto yy41;
-	if (yych == 'n') goto yy41;
-	goto yy31;
-yy164:
-	yych = *++p;
-	if (yych == 'E') goto yy214;
-	if (yych == 'e') goto yy214;
-	goto yy31;
-yy165:
-	yych = *++p;
-	if (yych == 'H') goto yy41;
-	if (yych == 'h') goto yy41;
-	goto yy31;
-yy166:
-	yych = *++p;
-	if (yych == 'O') goto yy210;
-	if (yych == 'o') goto yy210;
-	goto yy31;
-yy167:
-	yych = *++p;
-	if (yych <= 'L') {
-		if (yych == 'A') goto yy200;
-		if (yych <= 'K') goto yy31;
-		goto yy201;
-	} else {
-		if (yych <= 'a') {
-			if (yych <= '`') goto yy31;
-			goto yy200;
-		} else {
-			if (yych == 'l') goto yy201;
-			goto yy31;
-		}
-	}
-yy168:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych == 'B') goto yy41;
-		if (yych <= 'R') goto yy31;
-		goto yy41;
-	} else {
-		if (yych <= 'b') {
-			if (yych <= 'a') goto yy31;
-			goto yy41;
-		} else {
-			if (yych == 's') goto yy41;
-			goto yy31;
-		}
-	}
-yy169:
-	yych = *++p;
-	if (yych == 'Y') goto yy198;
-	if (yych == 'y') goto yy198;
-	goto yy31;
-yy170:
-	yych = *++p;
-	if (yych == 'N') goto yy41;
-	if (yych == 'n') goto yy41;
-	goto yy31;
-yy171:
-	yych = *++p;
-	if (yych == 'T') goto yy197;
-	if (yych == 't') goto yy197;
-	goto yy31;
-yy172:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych <= 'C') {
-			if (yych <= 'B') goto yy31;
-			goto yy184;
-		} else {
-			if (yych <= 'Q') goto yy31;
-			if (yych <= 'R') goto yy182;
-			goto yy183;
-		}
-	} else {
-		if (yych <= 'q') {
-			if (yych == 'c') goto yy184;
-			goto yy31;
-		} else {
-			if (yych <= 'r') goto yy182;
-			if (yych <= 's') goto yy183;
-			goto yy31;
-		}
-	}
-yy173:
-	yych = *++p;
-	if (yych == 'M') goto yy181;
-	if (yych == 'm') goto yy181;
-	goto yy31;
-yy174:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'E') goto yy178;
-		if (yych <= 'O') goto yy31;
-		goto yy179;
-	} else {
-		if (yych <= 'e') {
-			if (yych <= 'd') goto yy31;
-			goto yy178;
-		} else {
-			if (yych == 'p') goto yy179;
-			goto yy31;
-		}
-	}
-yy175:
-	yych = *++p;
-	if (yych == 'T') goto yy176;
-	if (yych != 't') goto yy31;
-yy176:
-	yych = *++p;
-	if (yych == 'T') goto yy177;
-	if (yych != 't') goto yy31;
-yy177:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy178:
-	yych = *++p;
-	if (yych == 'V') goto yy180;
-	if (yych == 'v') goto yy180;
-	goto yy31;
-yy179:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'S') goto yy41;
-		if (yych == 's') goto yy41;
-		goto yy31;
-	}
-yy180:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy181:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy182:
-	yych = *++p;
-	if (yych == 'V') goto yy194;
-	if (yych == 'v') goto yy194;
-	goto yy31;
-yy183:
-	yych = *++p;
-	if (yych == 'S') goto yy191;
-	if (yych == 's') goto yy191;
-	goto yy31;
-yy184:
-	yych = *++p;
-	if (yych == 'O') goto yy185;
-	if (yych != 'o') goto yy31;
-yy185:
-	yych = *++p;
-	if (yych == 'N') goto yy186;
-	if (yych != 'n') goto yy31;
-yy186:
-	yych = *++p;
-	if (yych == 'D') goto yy187;
-	if (yych != 'd') goto yy31;
-yy187:
-	yych = *++p;
-	if (yych == 'L') goto yy188;
-	if (yych != 'l') goto yy31;
-yy188:
-	yych = *++p;
-	if (yych == 'I') goto yy189;
-	if (yych != 'i') goto yy31;
-yy189:
-	yych = *++p;
-	if (yych == 'F') goto yy190;
-	if (yych != 'f') goto yy31;
-yy190:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy191:
-	yych = *++p;
-	if (yych == 'I') goto yy192;
-	if (yych != 'i') goto yy31;
-yy192:
-	yych = *++p;
-	if (yych == 'O') goto yy193;
-	if (yych != 'o') goto yy31;
-yy193:
-	yych = *++p;
-	if (yych == 'N') goto yy41;
-	if (yych == 'n') goto yy41;
-	goto yy31;
-yy194:
-	yych = *++p;
-	if (yych == 'I') goto yy195;
-	if (yych != 'i') goto yy31;
-yy195:
-	yych = *++p;
-	if (yych == 'C') goto yy196;
-	if (yych != 'c') goto yy31;
-yy196:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy197:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy198:
-	yych = *++p;
-	if (yych == 'P') goto yy199;
-	if (yych != 'p') goto yy31;
-yy199:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy200:
-	yych = *++p;
-	if (yych == 'P') goto yy204;
-	if (yych == 'p') goto yy204;
-	goto yy31;
-yy201:
-	yych = *++p;
-	if (yych == 'D') goto yy202;
-	if (yych != 'd') goto yy31;
-yy202:
-	yych = *++p;
-	if (yych == 'A') goto yy203;
-	if (yych != 'a') goto yy31;
-yy203:
-	yych = *++p;
-	if (yych == 'T') goto yy41;
-	if (yych == 't') goto yy41;
-	goto yy31;
-yy204:
-	yych = *++p;
-	if (yych != '.') goto yy31;
-	yych = *++p;
-	if (yych == 'B') goto yy206;
-	if (yych != 'b') goto yy31;
-yy206:
-	yych = *++p;
-	if (yych == 'E') goto yy207;
-	if (yych != 'e') goto yy31;
-yy207:
-	yych = *++p;
-	if (yych == 'E') goto yy208;
-	if (yych != 'e') goto yy31;
-yy208:
-	yych = *++p;
-	if (yych == 'P') goto yy209;
-	if (yych != 'p') goto yy31;
-yy209:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'S') goto yy41;
-		if (yych == 's') goto yy41;
-		goto yy31;
-	}
-yy210:
-	yych = *++p;
-	if (yych == 'T') goto yy211;
-	if (yych != 't') goto yy31;
-yy211:
-	yych = *++p;
-	if (yych == 'I') goto yy212;
-	if (yych != 'i') goto yy31;
-yy212:
-	yych = *++p;
-	if (yych == 'F') goto yy213;
-	if (yych != 'f') goto yy31;
-yy213:
-	yych = *++p;
-	if (yych == 'Y') goto yy41;
-	if (yych == 'y') goto yy41;
-	goto yy31;
-yy214:
-	yych = *++p;
-	if (yych == 'A') goto yy215;
-	if (yych != 'a') goto yy31;
-yy215:
-	yych = *++p;
-	if (yych == 'M') goto yy41;
-	if (yych == 'm') goto yy41;
-	goto yy31;
-yy216:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych == 'M') goto yy228;
-		if (yych <= 'R') goto yy31;
-		goto yy227;
-	} else {
-		if (yych <= 'm') {
-			if (yych <= 'l') goto yy31;
-			goto yy228;
-		} else {
-			if (yych == 's') goto yy227;
-			goto yy31;
-		}
-	}
-yy217:
-	yych = *++p;
-	if (yych == 'Y') goto yy225;
-	if (yych == 'y') goto yy225;
-	goto yy31;
-yy218:
-	yych = *++p;
-	if (yych == 'I') goto yy41;
-	if (yych == 'i') goto yy41;
-	goto yy31;
-yy219:
-	yych = *++p;
-	if (yych == 'S') goto yy220;
-	if (yych != 's') goto yy31;
-yy220:
-	yych = *++p;
-	if (yych <= 'N') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'O') goto yy221;
-		if (yych != 'o') goto yy31;
-	}
-yy221:
-	yych = *++p;
-	if (yych == 'U') goto yy222;
-	if (yych != 'u') goto yy31;
-yy222:
-	yych = *++p;
-	if (yych == 'R') goto yy223;
-	if (yych != 'r') goto yy31;
-yy223:
-	yych = *++p;
-	if (yych == 'C') goto yy224;
-	if (yych != 'c') goto yy31;
-yy224:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy225:
-	yych = *++p;
-	if (yych == 'N') goto yy226;
-	if (yych != 'n') goto yy31;
-yy226:
-	yych = *++p;
-	if (yych == 'C') goto yy41;
-	if (yych == 'c') goto yy41;
-	goto yy31;
-yy227:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy228:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy229:
-	yych = *++p;
-	if (yych == 'Y') goto yy249;
-	if (yych == 'y') goto yy249;
-	goto yy31;
-yy230:
-	yych = *++p;
-	if (yych <= 'O') {
-		if (yych == 'E') goto yy246;
-		if (yych <= 'N') goto yy31;
-		goto yy247;
-	} else {
-		if (yych <= 'e') {
-			if (yych <= 'd') goto yy31;
-			goto yy246;
-		} else {
-			if (yych == 'o') goto yy247;
-			goto yy31;
-		}
-	}
-yy231:
-	yych = *++p;
-	if (yych == 'A') goto yy241;
-	if (yych == 'a') goto yy241;
-	goto yy31;
-yy232:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'L') goto yy234;
-		if (yych <= 'O') goto yy31;
-		goto yy235;
-	} else {
-		if (yych <= 'l') {
-			if (yych <= 'k') goto yy31;
-			goto yy234;
-		} else {
-			if (yych == 'p') goto yy235;
-			goto yy31;
-		}
-	}
-yy233:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy234:
-	yych = *++p;
-	if (yych == 'M') goto yy41;
-	if (yych == 'm') goto yy41;
-	goto yy31;
-yy235:
-	yych = *++p;
-	if (yych == 'A') goto yy236;
-	if (yych != 'a') goto yy31;
-yy236:
-	yych = *++p;
-	if (yych == 'R') goto yy237;
-	if (yych != 'r') goto yy31;
-yy237:
-	yych = *++p;
-	if (yych == 'A') goto yy238;
-	if (yych != 'a') goto yy31;
-yy238:
-	yych = *++p;
-	if (yych == 'Z') goto yy239;
-	if (yych != 'z') goto yy31;
-yy239:
-	yych = *++p;
-	if (yych == 'Z') goto yy240;
-	if (yych != 'z') goto yy31;
-yy240:
-	yych = *++p;
-	if (yych == 'I') goto yy41;
-	if (yych == 'i') goto yy41;
-	goto yy31;
-yy241:
-	yych = *++p;
-	if (yych == 'T') goto yy242;
-	if (yych != 't') goto yy31;
-yy242:
-	yych = *++p;
-	if (yych == 'F') goto yy243;
-	if (yych != 'f') goto yy31;
-yy243:
-	yych = *++p;
-	if (yych == 'O') goto yy244;
-	if (yych != 'o') goto yy31;
-yy244:
-	yych = *++p;
-	if (yych == 'R') goto yy245;
-	if (yych != 'r') goto yy31;
-yy245:
-	yych = *++p;
-	if (yych == 'M') goto yy41;
-	if (yych == 'm') goto yy41;
-	goto yy31;
-yy246:
-	yych = *++p;
-	if (yych == 'S') goto yy41;
-	if (yych == 's') goto yy41;
-	goto yy31;
-yy247:
-	yych = *++p;
-	if (yych == 'X') goto yy248;
-	if (yych != 'x') goto yy31;
-yy248:
-	yych = *++p;
-	if (yych == 'Y') goto yy41;
-	if (yych == 'y') goto yy41;
-	goto yy31;
-yy249:
-	yych = *++p;
-	if (yych == 'C') goto yy41;
-	if (yych == 'c') goto yy41;
-	goto yy31;
-yy250:
-	yych = *++p;
-	if (yych == 'D') goto yy41;
-	if (yych == 'd') goto yy41;
-	goto yy31;
-yy251:
-	yych = *++p;
-	if (yych == 'A') goto yy252;
-	if (yych != 'a') goto yy31;
-yy252:
-	yych = *++p;
-	if (yych == 'Q') goto yy253;
-	if (yych != 'q') goto yy31;
-yy253:
-	yych = *++p;
-	if (yych == 'U') goto yy254;
-	if (yych != 'u') goto yy31;
-yy254:
-	yych = *++p;
-	if (yych == 'E') goto yy255;
-	if (yych != 'e') goto yy31;
-yy255:
-	yych = *++p;
-	if (yych == 'L') goto yy256;
-	if (yych != 'l') goto yy31;
-yy256:
-	yych = *++p;
-	if (yych == 'O') goto yy257;
-	if (yych != 'o') goto yy31;
-yy257:
-	yych = *++p;
-	if (yych == 'C') goto yy258;
-	if (yych != 'c') goto yy31;
-yy258:
-	yych = *++p;
-	if (yych == 'K') goto yy259;
-	if (yych != 'k') goto yy31;
-yy259:
-	yych = *++p;
-	if (yych == 'T') goto yy260;
-	if (yych != 't') goto yy31;
-yy260:
-	yych = *++p;
-	if (yych == 'O') goto yy261;
-	if (yych != 'o') goto yy31;
-yy261:
-	yych = *++p;
-	if (yych == 'K') goto yy262;
-	if (yych != 'k') goto yy31;
-yy262:
-	yych = *++p;
-	if (yych == 'E') goto yy263;
-	if (yych != 'e') goto yy31;
-yy263:
-	yych = *++p;
-	if (yych == 'N') goto yy41;
-	if (yych == 'n') goto yy41;
-	goto yy31;
-yy264:
-	yych = *++p;
-	if (yych == 'T') goto yy271;
-	if (yych == 't') goto yy271;
-	goto yy31;
-yy265:
-	yych = *++p;
-	if (yych == 'T') goto yy270;
-	if (yych == 't') goto yy270;
-	goto yy31;
-yy266:
-	yych = *++p;
-	if (yych <= 'G') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'H') goto yy41;
-		if (yych == 'h') goto yy41;
-		goto yy31;
-	}
-yy267:
-	yych = *++p;
-	if (yych == 'S') goto yy41;
-	if (yych == 's') goto yy41;
-	goto yy31;
-yy268:
-	yych = *++p;
-	if (yych == 'W') goto yy269;
-	if (yych != 'w') goto yy31;
-yy269:
-	yych = *++p;
-	if (yych == 'S') goto yy41;
-	if (yych == 's') goto yy41;
-	goto yy31;
-yy270:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy271:
-	yych = *++p;
-	if (yych == 'E') goto yy272;
-	if (yych != 'e') goto yy31;
-yy272:
-	yych = *++p;
-	if (yych == 'S') goto yy41;
-	if (yych == 's') goto yy41;
-	goto yy31;
-yy273:
-	yych = *++p;
-	if (yych == 'N') goto yy41;
-	if (yych == 'n') goto yy41;
-	goto yy31;
-yy274:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'M') goto yy305;
-		if (yych <= 'O') goto yy31;
-		goto yy304;
-	} else {
-		if (yych <= 'm') {
-			if (yych <= 'l') goto yy31;
-			goto yy305;
-		} else {
-			if (yych == 'p') goto yy304;
-			goto yy31;
-		}
-	}
-yy275:
-	yych = *++p;
-	if (yych <= 'Q') {
-		if (yych <= '-') {
-			if (yych <= ',') goto yy31;
-			goto yy297;
-		} else {
-			if (yych == 'N') goto yy298;
-			goto yy31;
-		}
-	} else {
-		if (yych <= 'n') {
-			if (yych <= 'R') goto yy296;
-			if (yych <= 'm') goto yy31;
-			goto yy298;
-		} else {
-			if (yych == 'r') goto yy296;
-			goto yy31;
-		}
-	}
-yy276:
-	yych = *++p;
-	if (yych == 'S') goto yy41;
-	if (yych == 's') goto yy41;
-	goto yy31;
-yy277:
-	yych = *++p;
-	if (yych == 'S') goto yy292;
-	if (yych == 's') goto yy292;
-	goto yy31;
-yy278:
-	yych = *++p;
-	switch (yych) {
-	case 'G':
-	case 'g':	goto yy283;
-	case 'I':
-	case 'i':	goto yy282;
-	case 'P':
-	case 'p':	goto yy284;
-	case 'R':
-	case 'r':	goto yy285;
-	default:	goto yy31;
-	}
-yy279:
-	yych = *++p;
-	if (yych == 'Q') goto yy281;
-	if (yych == 'q') goto yy281;
-	goto yy31;
-yy280:
-	yych = *++p;
-	if (yych == 'D') goto yy41;
-	if (yych == 'd') goto yy41;
-	goto yy31;
-yy281:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy282:
-	yych = *++p;
-	if (yych == 'L') goto yy290;
-	if (yych == 'l') goto yy290;
-	goto yy31;
-yy283:
-	yych = *++p;
-	if (yych == 'N') goto yy288;
-	if (yych == 'n') goto yy288;
-	goto yy31;
-yy284:
-	yych = *++p;
-	if (yych == 'S') goto yy41;
-	if (yych == 's') goto yy41;
-	goto yy31;
-yy285:
-	yych = *++p;
-	if (yych == 'K') goto yy286;
-	if (yych != 'k') goto yy31;
-yy286:
-	yych = *++p;
-	if (yych == 'E') goto yy287;
-	if (yych != 'e') goto yy31;
-yy287:
-	yych = *++p;
-	if (yych == 'T') goto yy41;
-	if (yych == 't') goto yy41;
-	goto yy31;
-yy288:
-	yych = *++p;
-	if (yych == 'E') goto yy289;
-	if (yych != 'e') goto yy31;
-yy289:
-	yych = *++p;
-	if (yych == 'T') goto yy41;
-	if (yych == 't') goto yy41;
-	goto yy31;
-yy290:
-	yych = *++p;
-	if (yych == 'T') goto yy291;
-	if (yych != 't') goto yy31;
-yy291:
-	yych = *++p;
-	if (yych == 'O') goto yy41;
-	if (yych == 'o') goto yy41;
-	goto yy31;
-yy292:
-	yych = *++p;
-	if (yych == 'S') goto yy293;
-	if (yych != 's') goto yy31;
-yy293:
-	yych = *++p;
-	if (yych == 'A') goto yy294;
-	if (yych != 'a') goto yy31;
-yy294:
-	yych = *++p;
-	if (yych == 'G') goto yy295;
-	if (yych != 'g') goto yy31;
-yy295:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy296:
-	yych = *++p;
-	if (yych == 'P') goto yy303;
-	if (yych == 'p') goto yy303;
-	goto yy31;
-yy297:
-	yych = *++p;
-	if (yych == 'H') goto yy300;
-	if (yych == 'h') goto yy300;
-	goto yy31;
-yy298:
-	yych = *++p;
-	if (yych == 'I') goto yy299;
-	if (yych != 'i') goto yy31;
-yy299:
-	yych = *++p;
-	if (yych == 'M') goto yy41;
-	if (yych == 'm') goto yy41;
-	goto yy31;
-yy300:
-	yych = *++p;
-	if (yych == 'E') goto yy301;
-	if (yych != 'e') goto yy31;
-yy301:
-	yych = *++p;
-	if (yych == 'L') goto yy302;
-	if (yych != 'l') goto yy31;
-yy302:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy303:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'S') goto yy41;
-		if (yych == 's') goto yy41;
-		goto yy31;
-	}
-yy304:
-	yych = *++p;
-	if (yych == 'D') goto yy308;
-	if (yych == 'd') goto yy308;
-	goto yy31;
-yy305:
-	yych = *++p;
-	if (yych == 'B') goto yy306;
-	if (yych != 'b') goto yy31;
-yy306:
-	yych = *++p;
-	if (yych == 'L') goto yy307;
-	if (yych != 'l') goto yy31;
-yy307:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy308:
-	yych = *++p;
-	if (yych == 'A') goto yy309;
-	if (yych != 'a') goto yy31;
-yy309:
-	yych = *++p;
-	if (yych == 'T') goto yy310;
-	if (yych != 't') goto yy31;
-yy310:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy311:
-	yych = *++p;
-	if (yych == 'A') goto yy316;
-	if (yych == 'a') goto yy316;
-	goto yy31;
-yy312:
-	yych = *++p;
-	if (yych == 'S') goto yy313;
-	if (yych != 's') goto yy31;
-yy313:
-	yych = *++p;
-	if (yych == 'T') goto yy314;
-	if (yych != 't') goto yy31;
-yy314:
-	yych = *++p;
-	if (yych == 'F') goto yy315;
-	if (yych != 'f') goto yy31;
-yy315:
-	yych = *++p;
-	if (yych == 'M') goto yy41;
-	if (yych == 'm') goto yy41;
-	goto yy31;
-yy316:
-	yych = *++p;
-	if (yych == 'P') goto yy317;
-	if (yych != 'p') goto yy31;
-yy317:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'S') goto yy41;
-		if (yych == 's') goto yy41;
-		goto yy31;
-	}
-yy318:
-	yych = *++p;
-	if (yych == 'M') goto yy341;
-	if (yych == 'm') goto yy341;
-	goto yy31;
-yy319:
-	yych = *++p;
-	if (yych <= 'I') {
-		if (yych == 'C') goto yy330;
-		if (yych <= 'H') goto yy31;
-		goto yy329;
-	} else {
-		if (yych <= 'c') {
-			if (yych <= 'b') goto yy31;
-			goto yy330;
-		} else {
-			if (yych == 'i') goto yy329;
-			goto yy31;
-		}
-	}
-yy320:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'N') goto yy41;
-		if (yych <= 'O') goto yy31;
-		goto yy41;
-	} else {
-		if (yych <= 'n') {
-			if (yych <= 'm') goto yy31;
-			goto yy41;
-		} else {
-			if (yych == 'p') goto yy41;
-			goto yy31;
-		}
-	}
-yy321:
-	yych = *++p;
-	if (yych <= 'O') {
-		if (yych == 'A') goto yy327;
-		if (yych <= 'N') goto yy31;
-		goto yy328;
-	} else {
-		if (yych <= 'a') {
-			if (yych <= '`') goto yy31;
-			goto yy327;
-		} else {
-			if (yych == 'o') goto yy328;
-			goto yy31;
-		}
-	}
-yy322:
-	yych = *++p;
-	if (yych == 'F') goto yy326;
-	if (yych == 'f') goto yy326;
-	goto yy31;
-yy323:
-	yych = *++p;
-	if (yych <= '@') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'A') goto yy325;
-		if (yych == 'a') goto yy325;
-		goto yy31;
-	}
-yy324:
-	yych = *++p;
-	if (yych == 'X') goto yy41;
-	if (yych == 'x') goto yy41;
-	goto yy31;
-yy325:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy326:
-	yych = *++p;
-	if (yych == 'O') goto yy41;
-	if (yych == 'o') goto yy41;
-	goto yy31;
-yy327:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy328:
-	yych = *++p;
-	if (yych == 'N') goto yy41;
-	if (yych == 'n') goto yy41;
-	goto yy31;
-yy329:
-	yych = *++p;
-	if (yych == 'S') goto yy331;
-	if (yych == 's') goto yy331;
-	goto yy31;
-yy330:
-	yych = *++p;
-	if (yych <= ':') {
-		if (yych == '6') goto yy41;
-		if (yych <= '9') goto yy31;
-		goto yy42;
-	} else {
-		if (yych <= 'S') {
-			if (yych <= 'R') goto yy31;
-			goto yy41;
-		} else {
-			if (yych == 's') goto yy41;
-			goto yy31;
-		}
-	}
-yy331:
-	yych = *++p;
-	if (yych == '.') goto yy332;
-	if (yych == ':') goto yy42;
-	goto yy31;
-yy332:
-	yych = *++p;
-	if (yych <= 'X') {
-		if (yych <= 'K') {
-			if (yych == 'B') goto yy335;
-			goto yy31;
-		} else {
-			if (yych <= 'L') goto yy333;
-			if (yych <= 'W') goto yy31;
-			goto yy334;
-		}
-	} else {
-		if (yych <= 'k') {
-			if (yych == 'b') goto yy335;
-			goto yy31;
-		} else {
-			if (yych <= 'l') goto yy333;
-			if (yych == 'x') goto yy334;
-			goto yy31;
-		}
-	}
-yy333:
-	yych = *++p;
-	if (yych == 'W') goto yy340;
-	if (yych == 'w') goto yy340;
-	goto yy31;
-yy334:
-	yych = *++p;
-	if (yych == 'P') goto yy338;
-	if (yych == 'p') goto yy338;
-	goto yy31;
-yy335:
-	yych = *++p;
-	if (yych == 'E') goto yy336;
-	if (yych != 'e') goto yy31;
-yy336:
-	yych = *++p;
-	if (yych == 'E') goto yy337;
-	if (yych != 'e') goto yy31;
-yy337:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy338:
-	yych = *++p;
-	if (yych == 'C') goto yy339;
-	if (yych != 'c') goto yy31;
-yy339:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'S') goto yy41;
-		if (yych == 's') goto yy41;
-		goto yy31;
-	}
-yy340:
-	yych = *++p;
-	if (yych == 'Z') goto yy41;
-	if (yych == 'z') goto yy41;
-	goto yy31;
-yy341:
-	yych = *++p;
-	if (yych == 'S') goto yy41;
-	if (yych == 's') goto yy41;
-	goto yy31;
-yy342:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy343:
-	yych = *++p;
-	if (yych == 'T') goto yy346;
-	if (yych == 't') goto yy346;
-	goto yy31;
-yy344:
-	yych = *++p;
-	if (yych != '2') goto yy31;
-	yych = *++p;
-	if (yych == '3') goto yy41;
-	goto yy31;
-yy346:
-	yych = *++p;
-	if (yych == 'P') goto yy347;
-	if (yych != 'p') goto yy31;
-yy347:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'S') goto yy41;
-		if (yych == 's') goto yy41;
-		goto yy31;
-	}
-yy348:
-	yych = *++p;
-	if (yych == 'A') goto yy364;
-	if (yych == 'a') goto yy364;
-	goto yy31;
-yy349:
-	yych = *++p;
-	if (yych <= 'Z') {
-		if (yych == 'T') goto yy41;
-		if (yych <= 'Y') goto yy31;
-		goto yy355;
-	} else {
-		if (yych <= 't') {
-			if (yych <= 's') goto yy31;
-			goto yy41;
-		} else {
-			if (yych == 'z') goto yy355;
-			goto yy31;
-		}
-	}
-yy350:
-	yych = *++p;
-	if (yych <= 'O') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'P') goto yy352;
-		if (yych == 'p') goto yy352;
-		goto yy31;
-	}
-yy351:
-	yych = *++p;
-	if (yych == 'O') goto yy41;
-	if (yych == 'o') goto yy41;
-	goto yy31;
-yy352:
-	yych = *++p;
-	if (yych == 'H') goto yy353;
-	if (yych != 'h') goto yy31;
-yy353:
-	yych = *++p;
-	if (yych == 'E') goto yy354;
-	if (yych != 'e') goto yy31;
-yy354:
-	yych = *++p;
-	if (yych == 'R') goto yy41;
-	if (yych == 'r') goto yy41;
-	goto yy31;
-yy355:
-	yych = *++p;
-	if (yych == 'M') goto yy356;
-	if (yych != 'm') goto yy31;
-yy356:
-	yych = *++p;
-	if (yych == 'O') goto yy357;
-	if (yych != 'o') goto yy31;
-yy357:
-	yych = *++p;
-	if (yych == 'P') goto yy358;
-	if (yych != 'p') goto yy31;
-yy358:
-	yych = *++p;
-	if (yych == 'R') goto yy359;
-	if (yych != 'r') goto yy31;
-yy359:
-	yych = *++p;
-	if (yych == 'O') goto yy360;
-	if (yych != 'o') goto yy31;
-yy360:
-	yych = *++p;
-	if (yych == 'J') goto yy361;
-	if (yych != 'j') goto yy31;
-yy361:
-	yych = *++p;
-	if (yych == 'E') goto yy362;
-	if (yych != 'e') goto yy31;
-yy362:
-	yych = *++p;
-	if (yych == 'C') goto yy363;
-	if (yych != 'c') goto yy31;
-yy363:
-	yych = *++p;
-	if (yych == 'T') goto yy41;
-	if (yych == 't') goto yy41;
-	goto yy31;
-yy364:
-	yych = *++p;
-	if (yych == 'L') goto yy365;
-	if (yych != 'l') goto yy31;
-yy365:
-	yych = *++p;
-	if (yych == 'K') goto yy41;
-	if (yych == 'k') goto yy41;
-	goto yy31;
-yy366:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych <= 'M') {
-			if (yych == 'L') goto yy376;
-			goto yy31;
-		} else {
-			if (yych <= 'N') goto yy377;
-			if (yych <= 'R') goto yy31;
-			goto yy378;
-		}
-	} else {
-		if (yych <= 'm') {
-			if (yych == 'l') goto yy376;
-			goto yy31;
-		} else {
-			if (yych <= 'n') goto yy377;
-			if (yych == 's') goto yy378;
-			goto yy31;
-		}
-	}
-yy367:
-	yych = *++p;
-	if (yych == 'E') goto yy375;
-	if (yych == 'e') goto yy375;
-	goto yy31;
-yy368:
-	yych = *++p;
-	if (yych == 'C') goto yy370;
-	if (yych == 'c') goto yy370;
-	goto yy31;
-yy369:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy370:
-	yych = *++p;
-	if (yych == 'E') goto yy371;
-	if (yych != 'e') goto yy31;
-yy371:
-	yych = *++p;
-	if (yych == 'T') goto yy372;
-	if (yych != 't') goto yy31;
-yy372:
-	yych = *++p;
-	if (yych == 'I') goto yy373;
-	if (yych != 'i') goto yy31;
-yy373:
-	yych = *++p;
-	if (yych == 'M') goto yy374;
-	if (yych != 'm') goto yy31;
-yy374:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy375:
-	yych = *++p;
-	if (yych == 'D') goto yy41;
-	if (yych == 'd') goto yy41;
-	goto yy31;
-yy376:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy377:
-	yych = *++p;
-	if (yych == 'G') goto yy379;
-	if (yych == 'g') goto yy379;
-	goto yy31;
-yy378:
-	yych = *++p;
-	if (yych == 'H') goto yy41;
-	if (yych == 'h') goto yy41;
-	goto yy31;
-yy379:
-	yych = *++p;
-	if (yych == 'E') goto yy380;
-	if (yych != 'e') goto yy31;
-yy380:
-	yych = *++p;
-	if (yych == 'R') goto yy41;
-	if (yych == 'r') goto yy41;
-	goto yy31;
-yy381:
-	yych = *++p;
-	if (yych == 'T') goto yy399;
-	if (yych == 't') goto yy399;
-	goto yy31;
-yy382:
-	yych = *++p;
-	if (yych == 'T') goto yy41;
-	if (yych == 't') goto yy41;
-	goto yy31;
-yy383:
-	yych = *++p;
-	if (yych == 'M') goto yy41;
-	if (yych == 'm') goto yy41;
-	goto yy31;
-yy384:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych == 'P') goto yy41;
-		if (yych <= 'R') goto yy31;
-		goto yy41;
-	} else {
-		if (yych <= 'p') {
-			if (yych <= 'o') goto yy31;
-			goto yy41;
-		} else {
-			if (yych == 's') goto yy41;
-			goto yy31;
-		}
-	}
-yy385:
-	yych = *++p;
-	if (yych == 'I') goto yy393;
-	if (yych == 'i') goto yy393;
-	goto yy31;
-yy386:
-	yych = *++p;
-	if (yych == 'A') goto yy392;
-	if (yych == 'a') goto yy392;
-	goto yy31;
-yy387:
-	yych = *++p;
-	if (yych == 'O') goto yy390;
-	if (yych == 'o') goto yy390;
-	goto yy31;
-yy388:
-	yych = *++p;
-	if (yych == 'A') goto yy389;
-	if (yych != 'a') goto yy31;
-yy389:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy42;
-		goto yy31;
-	} else {
-		if (yych <= 'S') goto yy41;
-		if (yych == 's') goto yy41;
-		goto yy31;
-	}
-yy390:
-	yych = *++p;
-	if (yych == 'U') goto yy391;
-	if (yych != 'u') goto yy31;
-yy391:
-	yych = *++p;
-	if (yych == 'T') goto yy41;
-	if (yych == 't') goto yy41;
-	goto yy31;
-yy392:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy393:
-	yych = *++p;
-	if (yych == 'U') goto yy394;
-	if (yych != 'u') goto yy31;
-yy394:
-	yych = *++p;
-	if (yych == 'M') goto yy395;
-	if (yych != 'm') goto yy31;
-yy395:
-	yych = *++p;
-	if (yych == 'X') goto yy396;
-	if (yych != 'x') goto yy31;
-yy396:
-	yych = *++p;
-	if (yych == 'T') goto yy397;
-	if (yych != 't') goto yy31;
-yy397:
-	yych = *++p;
-	if (yych == 'R') goto yy398;
-	if (yych != 'r') goto yy31;
-yy398:
-	yych = *++p;
-	if (yych == 'A') goto yy41;
-	if (yych == 'a') goto yy41;
-	goto yy31;
-yy399:
-	yych = *++p;
-	if (yych == 'A') goto yy400;
-	if (yych != 'a') goto yy31;
-yy400:
-	yych = *++p;
-	if (yych == 'C') goto yy401;
-	if (yych != 'c') goto yy31;
-yy401:
-	yych = *++p;
-	if (yych == 'H') goto yy402;
-	if (yych != 'h') goto yy31;
-yy402:
-	yych = *++p;
-	if (yych == 'M') goto yy403;
-	if (yych != 'm') goto yy31;
-yy403:
-	yych = *++p;
-	if (yych == 'E') goto yy404;
-	if (yych != 'e') goto yy31;
-yy404:
-	yych = *++p;
-	if (yych == 'N') goto yy405;
-	if (yych != 'n') goto yy31;
-yy405:
-	yych = *++p;
-	if (yych == 'T') goto yy41;
-	if (yych == 't') goto yy41;
-	goto yy31;
-yy406:
-	yych = *++p;
-	if (yych == 'S') goto yy41;
-	if (yych == 's') goto yy41;
-	goto yy31;
-yy407:
-	yych = *++p;
-	if (yych <= 'V') {
-		if (yych == 'R') goto yy41;
-		if (yych <= 'U') goto yy31;
-	} else {
-		if (yych <= 'r') {
-			if (yych <= 'q') goto yy31;
-			goto yy41;
-		} else {
-			if (yych != 'v') goto yy31;
-		}
-	}
-	yych = *++p;
-	if (yych == 'A') goto yy409;
-	if (yych != 'a') goto yy31;
-yy409:
-	yych = *++p;
-	if (yych == 'S') goto yy410;
-	if (yych != 's') goto yy31;
-yy410:
-	yych = *++p;
-	if (yych == 'C') goto yy411;
-	if (yych != 'c') goto yy31;
-yy411:
-	yych = *++p;
-	if (yych == 'R') goto yy412;
-	if (yych != 'r') goto yy31;
-yy412:
-	yych = *++p;
-	if (yych == 'I') goto yy413;
-	if (yych != 'i') goto yy31;
-yy413:
-	yych = *++p;
-	if (yych == 'P') goto yy414;
-	if (yych != 'p') goto yy31;
-yy414:
-	yych = *++p;
-	if (yych == 'T') goto yy41;
-	if (yych == 't') goto yy41;
-	goto yy31;
-yy415:
-	yych = *++p;
-	if (yych == 'B') goto yy41;
-	if (yych == 'b') goto yy41;
-	goto yy31;
-yy416:
-	yych = *++p;
-	if (yych == 'N') goto yy41;
-	if (yych == 'n') goto yy41;
-	goto yy31;
-yy417:
-	yych = *++p;
-	if (yych == 'N') goto yy424;
-	if (yych == 'n') goto yy424;
-	goto yy31;
-yy418:
-	yych = *++p;
-	if (yych == 'S') goto yy41;
-	if (yych == 's') goto yy41;
-	goto yy31;
-yy419:
-	yych = *++p;
-	if (yych == 'C') goto yy423;
-	if (yych == 'c') goto yy423;
-	goto yy31;
-yy420:
-	yych = *++p;
-	if (yych <= 'V') {
-		if (yych == 'T') goto yy422;
-		if (yych <= 'U') goto yy31;
-		goto yy41;
-	} else {
-		if (yych <= 't') {
-			if (yych <= 's') goto yy31;
-			goto yy422;
-		} else {
-			if (yych == 'v') goto yy41;
-			goto yy31;
-		}
-	}
-yy421:
-	yych = *++p;
-	if (yych == 'I') goto yy41;
-	if (yych == 'i') goto yy41;
-	goto yy31;
-yy422:
-	yych = *++p;
-	if (yych == 'A') goto yy41;
-	if (yych == 'a') goto yy41;
-	goto yy31;
-yy423:
-	yych = *++p;
-	if (yych == 'T') goto yy41;
-	if (yych == 't') goto yy41;
-	goto yy31;
-yy424:
-	yych = *++p;
-	if (yych == 'A') goto yy425;
-	if (yych != 'a') goto yy31;
-yy425:
-	yych = *++p;
-	if (yych != '-') goto yy31;
-	yych = *++p;
-	if (yych == 'P') goto yy427;
-	if (yych != 'p') goto yy31;
-yy427:
-	yych = *++p;
-	if (yych == 'L') goto yy428;
-	if (yych != 'l') goto yy31;
-yy428:
-	yych = *++p;
-	if (yych == 'A') goto yy429;
-	if (yych != 'a') goto yy31;
-yy429:
-	yych = *++p;
-	if (yych == 'Y') goto yy430;
-	if (yych != 'y') goto yy31;
-yy430:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych == 'C') goto yy431;
-		if (yych <= 'R') goto yy31;
-		goto yy432;
-	} else {
-		if (yych <= 'c') {
-			if (yych <= 'b') goto yy31;
-		} else {
-			if (yych == 's') goto yy432;
-			goto yy31;
-		}
-	}
-yy431:
-	yych = *++p;
-	if (yych == 'O') goto yy437;
-	if (yych == 'o') goto yy437;
-	goto yy31;
-yy432:
-	yych = *++p;
-	if (yych == 'I') goto yy433;
-	if (yych != 'i') goto yy31;
-yy433:
-	yych = *++p;
-	if (yych == 'N') goto yy434;
-	if (yych != 'n') goto yy31;
-yy434:
-	yych = *++p;
-	if (yych == 'G') goto yy435;
-	if (yych != 'g') goto yy31;
-yy435:
-	yych = *++p;
-	if (yych == 'L') goto yy436;
-	if (yych != 'l') goto yy31;
-yy436:
-	yych = *++p;
-	if (yych == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-yy437:
-	yych = *++p;
-	if (yych == 'N') goto yy438;
-	if (yych != 'n') goto yy31;
-yy438:
-	yych = *++p;
-	if (yych == 'T') goto yy439;
-	if (yych != 't') goto yy31;
-yy439:
-	yych = *++p;
-	if (yych == 'A') goto yy440;
-	if (yych != 'a') goto yy31;
-yy440:
-	yych = *++p;
-	if (yych == 'I') goto yy441;
-	if (yych != 'i') goto yy31;
-yy441:
-	yych = *++p;
-	if (yych == 'N') goto yy442;
-	if (yych != 'n') goto yy31;
-yy442:
-	yych = *++p;
-	if (yych == 'E') goto yy443;
-	if (yych != 'e') goto yy31;
-yy443:
-	yych = *++p;
-	if (yych == 'R') goto yy41;
-	if (yych == 'r') goto yy41;
-	goto yy31;
-yy444:
-	yych = *++p;
-	if (yych == 'S') goto yy41;
-	if (yych == 's') goto yy41;
-	goto yy31;
-yy445:
-	yych = *++p;
-	if (yych <= 'N') {
-		if (yych <= 'A') {
-			if (yych <= '@') goto yy31;
-			goto yy467;
-		} else {
-			if (yych <= 'L') goto yy31;
-			if (yych <= 'M') goto yy468;
-			goto yy469;
-		}
-	} else {
-		if (yych <= 'l') {
-			if (yych == 'a') goto yy467;
-			goto yy31;
-		} else {
-			if (yych <= 'm') goto yy468;
-			if (yych <= 'n') goto yy469;
-			goto yy31;
-		}
-	}
-yy446:
-	yych = *++p;
-	if (yych == 'R') goto yy454;
-	if (yych == 'r') goto yy454;
-	goto yy31;
-yy447:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'L') goto yy451;
-		if (yych <= 'O') goto yy31;
-		goto yy41;
-	} else {
-		if (yych <= 'l') {
-			if (yych <= 'k') goto yy31;
-			goto yy451;
-		} else {
-			if (yych == 'p') goto yy41;
-			goto yy31;
-		}
-	}
-yy448:
-	yych = *++p;
-	if (yych == 'I') goto yy450;
-	if (yych == 'i') goto yy450;
-	goto yy31;
-yy449:
-	yych = *++p;
-	if (yych == 'D') goto yy41;
-	if (yych == 'd') goto yy41;
-	goto yy31;
-yy450:
-	yych = *++p;
-	if (yych == 'D') goto yy41;
-	if (yych == 'd') goto yy41;
-	goto yy31;
-yy451:
-	yych = *++p;
-	if (yych == 'L') goto yy452;
-	if (yych != 'l') goto yy31;
-yy452:
-	yych = *++p;
-	if (yych == 'T') goto yy453;
-	if (yych != 't') goto yy31;
-yy453:
-	yych = *++p;
-	if (yych == 'O') goto yy41;
-	if (yych == 'o') goto yy41;
-	goto yy31;
-yy454:
-	yych = *++p;
-	if (yych == 'O') goto yy455;
-	if (yych != 'o') goto yy31;
-yy455:
-	yych = *++p;
-	if (yych == 'M') goto yy456;
-	if (yych != 'm') goto yy31;
-yy456:
-	yych = *++p;
-	if (yych == 'E') goto yy457;
-	if (yych != 'e') goto yy31;
-yy457:
-	yych = *++p;
-	if (yych == '-') goto yy458;
-	if (yych == ':') goto yy42;
-	goto yy31;
-yy458:
-	yych = *++p;
-	if (yych == 'E') goto yy459;
-	if (yych != 'e') goto yy31;
-yy459:
-	yych = *++p;
-	if (yych == 'X') goto yy460;
-	if (yych != 'x') goto yy31;
-yy460:
-	yych = *++p;
-	if (yych == 'T') goto yy461;
-	if (yych != 't') goto yy31;
-yy461:
-	yych = *++p;
-	if (yych == 'E') goto yy462;
-	if (yych != 'e') goto yy31;
-yy462:
-	yych = *++p;
-	if (yych == 'N') goto yy463;
-	if (yych != 'n') goto yy31;
-yy463:
-	yych = *++p;
-	if (yych == 'S') goto yy464;
-	if (yych != 's') goto yy31;
-yy464:
-	yych = *++p;
-	if (yych == 'I') goto yy465;
-	if (yych != 'i') goto yy31;
-yy465:
-	yych = *++p;
-	if (yych == 'O') goto yy466;
-	if (yych != 'o') goto yy31;
-yy466:
-	yych = *++p;
-	if (yych == 'N') goto yy41;
-	if (yych == 'n') goto yy41;
-	goto yy31;
-yy467:
-	yych = *++p;
-	if (yych == 'P') goto yy41;
-	if (yych == 'p') goto yy41;
-	goto yy31;
-yy468:
-	yych = *++p;
-	if (yych == '-') goto yy473;
-	goto yy31;
-yy469:
-	yych = *++p;
-	if (yych == 'T') goto yy470;
-	if (yych != 't') goto yy31;
-yy470:
-	yych = *++p;
-	if (yych == 'E') goto yy471;
-	if (yych != 'e') goto yy31;
-yy471:
-	yych = *++p;
-	if (yych == 'N') goto yy472;
-	if (yych != 'n') goto yy31;
-yy472:
-	yych = *++p;
-	if (yych == 'T') goto yy41;
-	if (yych == 't') goto yy41;
-	goto yy31;
-yy473:
-	yych = *++p;
-	if (yych == 'E') goto yy474;
-	if (yych != 'e') goto yy31;
-yy474:
-	yych = *++p;
-	if (yych == 'V') goto yy475;
-	if (yych != 'v') goto yy31;
-yy475:
-	yych = *++p;
-	if (yych == 'E') goto yy476;
-	if (yych != 'e') goto yy31;
-yy476:
-	yych = *++p;
-	if (yych == 'N') goto yy477;
-	if (yych != 'n') goto yy31;
-yy477:
-	yych = *++p;
-	if (yych == 'T') goto yy478;
-	if (yych != 't') goto yy31;
-yy478:
-	yych = *++p;
-	if (yych == 'B') goto yy479;
-	if (yych != 'b') goto yy31;
-yy479:
-	yych = *++p;
-	if (yych == 'R') goto yy480;
-	if (yych != 'r') goto yy31;
-yy480:
-	yych = *++p;
-	if (yych == 'I') goto yy481;
-	if (yych != 'i') goto yy31;
-yy481:
-	yych = *++p;
-	if (yych == 'T') goto yy482;
-	if (yych != 't') goto yy31;
-yy482:
-	yych = *++p;
-	if (yych == 'E') goto yy483;
-	if (yych != 'e') goto yy31;
-yy483:
-	yych = *++p;
-	if (yych != '-') goto yy31;
-	yych = *++p;
-	if (yych == 'A') goto yy485;
-	if (yych != 'a') goto yy31;
-yy485:
-	yych = *++p;
-	if (yych == 'T') goto yy486;
-	if (yych != 't') goto yy31;
-yy486:
-	yych = *++p;
-	if (yych == 'T') goto yy487;
-	if (yych != 't') goto yy31;
-yy487:
-	yych = *++p;
-	if (yych == 'E') goto yy488;
-	if (yych != 'e') goto yy31;
-yy488:
-	yych = *++p;
-	if (yych == 'N') goto yy489;
-	if (yych != 'n') goto yy31;
-yy489:
-	yych = *++p;
-	if (yych == 'D') goto yy490;
-	if (yych != 'd') goto yy31;
-yy490:
-	yych = *++p;
-	if (yych == 'E') goto yy491;
-	if (yych != 'e') goto yy31;
-yy491:
-	++p;
-	if ((yych = *p) == 'E') goto yy41;
-	if (yych == 'e') goto yy41;
-	goto yy31;
-}
-
+    yych = *(marker = p);
+    if (yych <= 'c') {
+      if (yych <= 'M') {
+        if (yych <= 'E') {
+          if (yych <= 'A') {
+            if (yych == '\n')
+              goto yy2;
+            if (yych <= '@')
+              goto yy29;
+            goto yy6;
+          } else {
+            if (yych <= 'B')
+              goto yy24;
+            if (yych <= 'C')
+              goto yy3;
+            if (yych <= 'D')
+              goto yy4;
+            goto yy25;
+          }
+        } else {
+          if (yych <= 'I') {
+            if (yych <= 'F')
+              goto yy7;
+            if (yych <= 'G')
+              goto yy8;
+            if (yych <= 'H')
+              goto yy9;
+            goto yy10;
+          } else {
+            if (yych <= 'J')
+              goto yy5;
+            if (yych <= 'K')
+              goto yy26;
+            if (yych <= 'L')
+              goto yy11;
+            goto yy12;
+          }
+        }
+      } else {
+        if (yych <= 'U') {
+          if (yych <= 'Q') {
+            if (yych <= 'N')
+              goto yy13;
+            if (yych <= 'O')
+              goto yy14;
+            if (yych <= 'P')
+              goto yy15;
+            goto yy27;
+          } else {
+            if (yych <= 'R')
+              goto yy16;
+            if (yych <= 'S')
+              goto yy17;
+            if (yych <= 'T')
+              goto yy18;
+            goto yy19;
+          }
+        } else {
+          if (yych <= 'Y') {
+            if (yych <= 'V')
+              goto yy20;
+            if (yych <= 'W')
+              goto yy21;
+            if (yych <= 'X')
+              goto yy22;
+            goto yy28;
+          } else {
+            if (yych <= '`') {
+              if (yych <= 'Z')
+                goto yy23;
+              goto yy29;
+            } else {
+              if (yych <= 'a')
+                goto yy6;
+              if (yych <= 'b')
+                goto yy24;
+              goto yy3;
+            }
+          }
+        }
+      }
+    } else {
+      if (yych <= 't') {
+        if (yych <= 'k') {
+          if (yych <= 'g') {
+            if (yych <= 'd')
+              goto yy4;
+            if (yych <= 'e')
+              goto yy25;
+            if (yych <= 'f')
+              goto yy7;
+            goto yy8;
+          } else {
+            if (yych <= 'h')
+              goto yy9;
+            if (yych <= 'i')
+              goto yy10;
+            if (yych <= 'j')
+              goto yy5;
+            goto yy26;
+          }
+        } else {
+          if (yych <= 'o') {
+            if (yych <= 'l')
+              goto yy11;
+            if (yych <= 'm')
+              goto yy12;
+            if (yych <= 'n')
+              goto yy13;
+            goto yy14;
+          } else {
+            if (yych <= 'q') {
+              if (yych <= 'p')
+                goto yy15;
+              goto yy27;
+            } else {
+              if (yych <= 'r')
+                goto yy16;
+              if (yych <= 's')
+                goto yy17;
+              goto yy18;
+            }
+          }
+        }
+      } else {
+        if (yych <= 0xC1) {
+          if (yych <= 'x') {
+            if (yych <= 'u')
+              goto yy19;
+            if (yych <= 'v')
+              goto yy20;
+            if (yych <= 'w')
+              goto yy21;
+            goto yy22;
+          } else {
+            if (yych <= 'y')
+              goto yy28;
+            if (yych <= 'z')
+              goto yy23;
+            if (yych <= 0x7F)
+              goto yy29;
+          }
+        } else {
+          if (yych <= 0xED) {
+            if (yych <= 0xDF)
+              goto yy30;
+            if (yych <= 0xE0)
+              goto yy32;
+            if (yych <= 0xEC)
+              goto yy33;
+            goto yy37;
+          } else {
+            if (yych <= 0xF0) {
+              if (yych <= 0xEF)
+                goto yy33;
+              goto yy34;
+            } else {
+              if (yych <= 0xF3)
+                goto yy35;
+              if (yych <= 0xF4)
+                goto yy36;
+            }
+          }
+        }
+      }
+    }
+  yy2 : { return 0; }
+  yy3:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy447;
+    case 'H':
+    case 'h':
+      goto yy446;
+    case 'I':
+    case 'i':
+      goto yy449;
+    case 'O':
+    case 'o':
+      goto yy445;
+    case 'R':
+    case 'r':
+      goto yy448;
+    case 'V':
+    case 'v':
+      goto yy444;
+    default:
+      goto yy2;
+    }
+  yy4:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy420;
+    case 'I':
+    case 'i':
+      goto yy419;
+    case 'L':
+    case 'l':
+      goto yy417;
+    case 'N':
+    case 'n':
+      goto yy418;
+    case 'O':
+    case 'o':
+      goto yy421;
+    case 'T':
+    case 't':
+      goto yy416;
+    case 'V':
+    case 'v':
+      goto yy415;
+    default:
+      goto yy2;
+    }
+  yy5:
+    yych = *(marker = ++p);
+    if (yych <= 'M') {
+      if (yych == 'A')
+        goto yy407;
+      if (yych <= 'L')
+        goto yy2;
+      goto yy406;
+    } else {
+      if (yych <= 'a') {
+        if (yych <= '`')
+          goto yy2;
+        goto yy407;
+      } else {
+        if (yych == 'm')
+          goto yy406;
+        goto yy2;
+      }
+    }
+  yy6:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy388;
+    case 'B':
+    case 'b':
+      goto yy387;
+    case 'C':
+    case 'c':
+      goto yy386;
+    case 'D':
+    case 'd':
+      goto yy385;
+    case 'F':
+    case 'f':
+      goto yy384;
+    case 'I':
+    case 'i':
+      goto yy383;
+    case 'P':
+    case 'p':
+      goto yy382;
+    case 'T':
+    case 't':
+      goto yy381;
+    case 'W':
+    case 'w':
+      goto yy41;
+    default:
+      goto yy2;
+    }
+  yy7:
+    yych = *(marker = ++p);
+    if (yych <= 'T') {
+      if (yych <= 'E') {
+        if (yych == 'A')
+          goto yy368;
+        if (yych <= 'D')
+          goto yy2;
+        goto yy367;
+      } else {
+        if (yych == 'I')
+          goto yy366;
+        if (yych <= 'S')
+          goto yy2;
+        goto yy369;
+      }
+    } else {
+      if (yych <= 'e') {
+        if (yych == 'a')
+          goto yy368;
+        if (yych <= 'd')
+          goto yy2;
+        goto yy367;
+      } else {
+        if (yych <= 'i') {
+          if (yych <= 'h')
+            goto yy2;
+          goto yy366;
+        } else {
+          if (yych == 't')
+            goto yy369;
+          goto yy2;
+        }
+      }
+    }
+  yy8:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'E':
+    case 'e':
+      goto yy351;
+    case 'G':
+    case 'g':
+      goto yy41;
+    case 'I':
+    case 'i':
+      goto yy349;
+    case 'O':
+    case 'o':
+      goto yy350;
+    case 'T':
+    case 't':
+      goto yy348;
+    default:
+      goto yy2;
+    }
+  yy9:
+    yych = *(marker = ++p);
+    if (yych <= 'S') {
+      if (yych <= '3') {
+        if (yych <= '2')
+          goto yy2;
+        goto yy344;
+      } else {
+        if (yych == 'C')
+          goto yy342;
+        goto yy2;
+      }
+    } else {
+      if (yych <= 'c') {
+        if (yych <= 'T')
+          goto yy343;
+        if (yych <= 'b')
+          goto yy2;
+        goto yy342;
+      } else {
+        if (yych == 't')
+          goto yy343;
+        goto yy2;
+      }
+    }
+  yy10:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy324;
+    case 'C':
+    case 'c':
+      goto yy321;
+    case 'M':
+    case 'm':
+      goto yy323;
+    case 'N':
+    case 'n':
+      goto yy322;
+    case 'P':
+    case 'p':
+      goto yy320;
+    case 'R':
+    case 'r':
+      goto yy319;
+    case 'T':
+    case 't':
+      goto yy318;
+    default:
+      goto yy2;
+    }
+  yy11:
+    yych = *(marker = ++p);
+    if (yych <= 'D') {
+      if (yych == 'A')
+        goto yy312;
+      if (yych <= 'C')
+        goto yy2;
+      goto yy311;
+    } else {
+      if (yych <= 'a') {
+        if (yych <= '`')
+          goto yy2;
+        goto yy312;
+      } else {
+        if (yych == 'd')
+          goto yy311;
+        goto yy2;
+      }
+    }
+  yy12:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy278;
+    case 'E':
+    case 'e':
+      goto yy277;
+    case 'I':
+    case 'i':
+      goto yy280;
+    case 'M':
+    case 'm':
+      goto yy276;
+    case 'S':
+    case 's':
+      goto yy275;
+    case 'T':
+    case 't':
+      goto yy279;
+    case 'U':
+    case 'u':
+      goto yy274;
+    case 'V':
+    case 'v':
+      goto yy273;
+    default:
+      goto yy2;
+    }
+  yy13:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'E':
+    case 'e':
+      goto yy268;
+    case 'F':
+    case 'f':
+      goto yy267;
+    case 'I':
+    case 'i':
+      goto yy266;
+    case 'N':
+    case 'n':
+      goto yy265;
+    case 'O':
+    case 'o':
+      goto yy264;
+    default:
+      goto yy2;
+    }
+  yy14:
+    yych = *(marker = ++p);
+    if (yych <= 'P') {
+      if (yych == 'I')
+        goto yy250;
+      if (yych <= 'O')
+        goto yy2;
+      goto yy251;
+    } else {
+      if (yych <= 'i') {
+        if (yych <= 'h')
+          goto yy2;
+        goto yy250;
+      } else {
+        if (yych == 'p')
+          goto yy251;
+        goto yy2;
+      }
+    }
+  yy15:
+    yych = *(marker = ++p);
+    if (yych <= 'S') {
+      if (yych <= 'L') {
+        if (yych == 'A')
+          goto yy232;
+        if (yych <= 'K')
+          goto yy2;
+        goto yy231;
+      } else {
+        if (yych <= 'O') {
+          if (yych <= 'N')
+            goto yy2;
+          goto yy233;
+        } else {
+          if (yych <= 'Q')
+            goto yy2;
+          if (yych <= 'R')
+            goto yy230;
+          goto yy229;
+        }
+      }
+    } else {
+      if (yych <= 'n') {
+        if (yych <= 'a') {
+          if (yych <= '`')
+            goto yy2;
+          goto yy232;
+        } else {
+          if (yych == 'l')
+            goto yy231;
+          goto yy2;
+        }
+      } else {
+        if (yych <= 'q') {
+          if (yych <= 'o')
+            goto yy233;
+          goto yy2;
+        } else {
+          if (yych <= 'r')
+            goto yy230;
+          if (yych <= 's')
+            goto yy229;
+          goto yy2;
+        }
+      }
+    }
+  yy16:
+    yych = *(marker = ++p);
+    if (yych <= 'T') {
+      if (yych <= 'L') {
+        if (yych == 'E')
+          goto yy219;
+        goto yy2;
+      } else {
+        if (yych <= 'M')
+          goto yy218;
+        if (yych <= 'R')
+          goto yy2;
+        if (yych <= 'S')
+          goto yy217;
+        goto yy216;
+      }
+    } else {
+      if (yych <= 'm') {
+        if (yych == 'e')
+          goto yy219;
+        if (yych <= 'l')
+          goto yy2;
+        goto yy218;
+      } else {
+        if (yych <= 'r')
+          goto yy2;
+        if (yych <= 's')
+          goto yy217;
+        if (yych <= 't')
+          goto yy216;
+        goto yy2;
+      }
+    }
+  yy17:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'E':
+    case 'e':
+      goto yy172;
+    case 'F':
+    case 'f':
+      goto yy171;
+    case 'G':
+    case 'g':
+      goto yy170;
+    case 'H':
+    case 'h':
+      goto yy175;
+    case 'I':
+    case 'i':
+      goto yy174;
+    case 'K':
+    case 'k':
+      goto yy169;
+    case 'M':
+    case 'm':
+      goto yy168;
+    case 'N':
+    case 'n':
+      goto yy173;
+    case 'O':
+    case 'o':
+      goto yy167;
+    case 'P':
+    case 'p':
+      goto yy166;
+    case 'S':
+    case 's':
+      goto yy165;
+    case 'T':
+    case 't':
+      goto yy164;
+    case 'V':
+    case 'v':
+      goto yy163;
+    default:
+      goto yy2;
+    }
+  yy18:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy139;
+    case 'E':
+    case 'e':
+      goto yy135;
+    case 'F':
+    case 'f':
+      goto yy138;
+    case 'H':
+    case 'h':
+      goto yy134;
+    case 'I':
+    case 'i':
+      goto yy136;
+    case 'N':
+    case 'n':
+      goto yy137;
+    case 'V':
+    case 'v':
+      goto yy41;
+    default:
+      goto yy2;
+    }
+  yy19:
+    yych = *(marker = ++p);
+    if (yych <= 'T') {
+      if (yych <= 'N') {
+        if (yych == 'D')
+          goto yy126;
+        if (yych <= 'M')
+          goto yy2;
+        goto yy125;
+      } else {
+        if (yych == 'R')
+          goto yy127;
+        if (yych <= 'S')
+          goto yy2;
+        goto yy124;
+      }
+    } else {
+      if (yych <= 'n') {
+        if (yych == 'd')
+          goto yy126;
+        if (yych <= 'm')
+          goto yy2;
+        goto yy125;
+      } else {
+        if (yych <= 'r') {
+          if (yych <= 'q')
+            goto yy2;
+          goto yy127;
+        } else {
+          if (yych == 't')
+            goto yy124;
+          goto yy2;
+        }
+      }
+    }
+  yy20:
+    yych = *(marker = ++p);
+    if (yych <= 'I') {
+      if (yych == 'E')
+        goto yy108;
+      if (yych <= 'H')
+        goto yy2;
+      goto yy107;
+    } else {
+      if (yych <= 'e') {
+        if (yych <= 'd')
+          goto yy2;
+        goto yy108;
+      } else {
+        if (yych == 'i')
+          goto yy107;
+        goto yy2;
+      }
+    }
+  yy21:
+    yych = *(marker = ++p);
+    if (yych <= 'Y') {
+      if (yych <= 'R') {
+        if (yych == 'E')
+          goto yy97;
+        goto yy2;
+      } else {
+        if (yych <= 'S')
+          goto yy98;
+        if (yych <= 'T')
+          goto yy96;
+        if (yych <= 'X')
+          goto yy2;
+        goto yy95;
+      }
+    } else {
+      if (yych <= 's') {
+        if (yych == 'e')
+          goto yy97;
+        if (yych <= 'r')
+          goto yy2;
+        goto yy98;
+      } else {
+        if (yych <= 't')
+          goto yy96;
+        if (yych == 'y')
+          goto yy95;
+        goto yy2;
+      }
+    }
+  yy22:
+    yych = *(marker = ++p);
+    if (yych <= 'R') {
+      if (yych <= 'F') {
+        if (yych == 'C')
+          goto yy74;
+        if (yych <= 'E')
+          goto yy2;
+        goto yy72;
+      } else {
+        if (yych == 'M')
+          goto yy73;
+        if (yych <= 'Q')
+          goto yy2;
+        goto yy71;
+      }
+    } else {
+      if (yych <= 'f') {
+        if (yych == 'c')
+          goto yy74;
+        if (yych <= 'e')
+          goto yy2;
+        goto yy72;
+      } else {
+        if (yych <= 'm') {
+          if (yych <= 'l')
+            goto yy2;
+          goto yy73;
+        } else {
+          if (yych == 'r')
+            goto yy71;
+          goto yy2;
+        }
+      }
+    }
+  yy23:
+    yych = *(marker = ++p);
+    if (yych == '3')
+      goto yy66;
+    goto yy2;
+  yy24:
+    yych = *(marker = ++p);
+    if (yych <= 'O') {
+      if (yych <= 'H') {
+        if (yych == 'E')
+          goto yy56;
+        goto yy2;
+      } else {
+        if (yych <= 'I')
+          goto yy55;
+        if (yych <= 'N')
+          goto yy2;
+        goto yy54;
+      }
+    } else {
+      if (yych <= 'h') {
+        if (yych == 'e')
+          goto yy56;
+        goto yy2;
+      } else {
+        if (yych <= 'i')
+          goto yy55;
+        if (yych == 'o')
+          goto yy54;
+        goto yy2;
+      }
+    }
+  yy25:
+    yych = *(marker = ++p);
+    if (yych == 'D')
+      goto yy52;
+    if (yych == 'd')
+      goto yy52;
+    goto yy2;
+  yy26:
+    yych = *(marker = ++p);
+    if (yych == 'E')
+      goto yy47;
+    if (yych == 'e')
+      goto yy47;
+    goto yy2;
+  yy27:
+    yych = *(marker = ++p);
+    if (yych == 'U')
+      goto yy44;
+    if (yych == 'u')
+      goto yy44;
+    goto yy2;
+  yy28:
+    yych = *(marker = ++p);
+    if (yych == 'M')
+      goto yy38;
+    if (yych == 'm')
+      goto yy38;
+    goto yy2;
+  yy29:
+    yych = *++p;
+    goto yy2;
+  yy30:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy31;
+    if (yych <= 0xBF)
+      goto yy29;
+  yy31:
+    p = marker;
+    goto yy2;
+  yy32:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy31;
+    if (yych <= 0xBF)
+      goto yy30;
+    goto yy31;
+  yy33:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy31;
+    if (yych <= 0xBF)
+      goto yy30;
+    goto yy31;
+  yy34:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy31;
+    if (yych <= 0xBF)
+      goto yy33;
+    goto yy31;
+  yy35:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy31;
+    if (yych <= 0xBF)
+      goto yy33;
+    goto yy31;
+  yy36:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy31;
+    if (yych <= 0x8F)
+      goto yy33;
+    goto yy31;
+  yy37:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy31;
+    if (yych <= 0x9F)
+      goto yy30;
+    goto yy31;
+  yy38:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy39;
+    if (yych != 's')
+      goto yy31;
+  yy39:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy40;
+    if (yych != 'g')
+      goto yy31;
+  yy40:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy41;
+    if (yych != 'r')
+      goto yy31;
+  yy41:
+    yych = *++p;
+    if (yych != ':')
+      goto yy31;
+  yy42:
+    ++p;
+    { return (bufsize_t)(p - start); }
+  yy44:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy45;
+    if (yych != 'e')
+      goto yy31;
+  yy45:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy46;
+    if (yych != 'r')
+      goto yy31;
+  yy46:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy41;
+    if (yych == 'y')
+      goto yy41;
+    goto yy31;
+  yy47:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy48;
+    if (yych != 'y')
+      goto yy31;
+  yy48:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy49;
+    if (yych != 'p')
+      goto yy31;
+  yy49:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy50;
+    if (yych != 'a')
+      goto yy31;
+  yy50:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy51;
+    if (yych != 'r')
+      goto yy31;
+  yy51:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy41;
+    if (yych == 'c')
+      goto yy41;
+    goto yy31;
+  yy52:
+    yych = *++p;
+    if (yych != '2')
+      goto yy31;
+    yych = *++p;
+    if (yych == 'K')
+      goto yy41;
+    if (yych == 'k')
+      goto yy41;
+    goto yy31;
+  yy54:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy65;
+    if (yych == 'l')
+      goto yy65;
+    goto yy31;
+  yy55:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy61;
+    if (yych == 't')
+      goto yy61;
+    goto yy31;
+  yy56:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy57;
+    if (yych != 's')
+      goto yy31;
+  yy57:
+    yych = *++p;
+    if (yych == 'H')
+      goto yy58;
+    if (yych != 'h')
+      goto yy31;
+  yy58:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy59;
+    if (yych != 'a')
+      goto yy31;
+  yy59:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy60;
+    if (yych != 'r')
+      goto yy31;
+  yy60:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy61:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy62;
+    if (yych != 'c')
+      goto yy31;
+  yy62:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy63;
+    if (yych != 'o')
+      goto yy31;
+  yy63:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy64;
+    if (yych != 'i')
+      goto yy31;
+  yy64:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy41;
+    if (yych == 'n')
+      goto yy41;
+    goto yy31;
+  yy65:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy41;
+    if (yych == 'o')
+      goto yy41;
+    goto yy31;
+  yy66:
+    yych = *++p;
+    if (yych != '9')
+      goto yy31;
+    yych = *++p;
+    if (yych != '.')
+      goto yy31;
+    yych = *++p;
+    if (yych != '5')
+      goto yy31;
+    yych = *++p;
+    if (yych != '0')
+      goto yy31;
+    yych = *++p;
+    if (yych <= 'Q')
+      goto yy31;
+    if (yych <= 'S')
+      goto yy41;
+    if (yych <= 'q')
+      goto yy31;
+    if (yych <= 's')
+      goto yy41;
+    goto yy31;
+  yy71:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy41;
+    if (yych == 'i')
+      goto yy41;
+    goto yy31;
+  yy72:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy93;
+    if (yych == 'i')
+      goto yy93;
+    goto yy31;
+  yy73:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'L')
+        goto yy83;
+      if (yych <= 'O')
+        goto yy31;
+      goto yy84;
+    } else {
+      if (yych <= 'l') {
+        if (yych <= 'k')
+          goto yy31;
+        goto yy83;
+      } else {
+        if (yych == 'p')
+          goto yy84;
+        goto yy31;
+      }
+    }
+  yy74:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy75;
+    if (yych != 'o')
+      goto yy31;
+  yy75:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy76;
+    if (yych != 'n')
+      goto yy31;
+  yy76:
+    yych = *++p;
+    if (yych == '-')
+      goto yy77;
+    if (yych == ':')
+      goto yy42;
+    goto yy31;
+  yy77:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy78;
+    if (yych != 'u')
+      goto yy31;
+  yy78:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy79;
+    if (yych != 's')
+      goto yy31;
+  yy79:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy80;
+    if (yych != 'e')
+      goto yy31;
+  yy80:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy81;
+    if (yych != 'r')
+      goto yy31;
+  yy81:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy82;
+    if (yych != 'i')
+      goto yy31;
+  yy82:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy41;
+    if (yych == 'd')
+      goto yy41;
+    goto yy31;
+  yy83:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy85;
+    if (yych == 'r')
+      goto yy85;
+    goto yy31;
+  yy84:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy85:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy86;
+    if (yych != 'p')
+      goto yy31;
+  yy86:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy87;
+    if (yych != 'c')
+      goto yy31;
+  yy87:
+    yych = *++p;
+    if (yych != '.')
+      goto yy31;
+    yych = *++p;
+    if (yych == 'B')
+      goto yy89;
+    if (yych != 'b')
+      goto yy31;
+  yy89:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy90;
+    if (yych != 'e')
+      goto yy31;
+  yy90:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy91;
+    if (yych != 'e')
+      goto yy31;
+  yy91:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy92;
+    if (yych != 'p')
+      goto yy31;
+  yy92:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'S')
+        goto yy41;
+      if (yych == 's')
+        goto yy41;
+      goto yy31;
+    }
+  yy93:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy94;
+    if (yych != 'r')
+      goto yy31;
+  yy94:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy95:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy103;
+    if (yych == 'c')
+      goto yy103;
+    goto yy31;
+  yy96:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy102;
+    if (yych == 'a')
+      goto yy102;
+    goto yy31;
+  yy97:
+    yych = *++p;
+    if (yych == 'B')
+      goto yy99;
+    if (yych == 'b')
+      goto yy99;
+    goto yy31;
+  yy98:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'S')
+        goto yy41;
+      if (yych == 's')
+        goto yy41;
+      goto yy31;
+    }
+  yy99:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy100;
+    if (yych != 'c')
+      goto yy31;
+  yy100:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy101;
+    if (yych != 'a')
+      goto yy31;
+  yy101:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy41;
+    if (yych == 'l')
+      goto yy41;
+    goto yy31;
+  yy102:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy41;
+    if (yych == 'i')
+      goto yy41;
+    goto yy31;
+  yy103:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy104;
+    if (yych != 'i')
+      goto yy31;
+  yy104:
+    yych = *++p;
+    if (yych == 'W')
+      goto yy105;
+    if (yych != 'w')
+      goto yy31;
+  yy105:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy106;
+    if (yych != 'y')
+      goto yy31;
+  yy106:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy41;
+    if (yych == 'g')
+      goto yy41;
+    goto yy31;
+  yy107:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy116;
+    if (yych == 'e')
+      goto yy116;
+    goto yy31;
+  yy108:
+    yych = *++p;
+    if (yych <= 'N') {
+      if (yych <= 'L')
+        goto yy31;
+      if (yych >= 'N')
+        goto yy110;
+    } else {
+      if (yych <= 'l')
+        goto yy31;
+      if (yych <= 'm')
+        goto yy109;
+      if (yych <= 'n')
+        goto yy110;
+      goto yy31;
+    }
+  yy109:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy115;
+    if (yych == 'm')
+      goto yy115;
+    goto yy31;
+  yy110:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy111;
+    if (yych != 't')
+      goto yy31;
+  yy111:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy112;
+    if (yych != 'r')
+      goto yy31;
+  yy112:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy113;
+    if (yych != 'i')
+      goto yy31;
+  yy113:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy114;
+    if (yych != 'l')
+      goto yy31;
+  yy114:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy41;
+    if (yych == 'o')
+      goto yy41;
+    goto yy31;
+  yy115:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy41;
+    if (yych == 'i')
+      goto yy41;
+    goto yy31;
+  yy116:
+    yych = *++p;
+    if (yych == 'W')
+      goto yy117;
+    if (yych != 'w')
+      goto yy31;
+  yy117:
+    yych = *++p;
+    if (yych != '-')
+      goto yy31;
+    yych = *++p;
+    if (yych == 'S')
+      goto yy119;
+    if (yych != 's')
+      goto yy31;
+  yy119:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy120;
+    if (yych != 'o')
+      goto yy31;
+  yy120:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy121;
+    if (yych != 'u')
+      goto yy31;
+  yy121:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy122;
+    if (yych != 'r')
+      goto yy31;
+  yy122:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy123;
+    if (yych != 'c')
+      goto yy31;
+  yy123:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy124:
+    yych = *++p;
+    if (yych == '2')
+      goto yy131;
+    goto yy31;
+  yy125:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy128;
+    if (yych == 'r')
+      goto yy128;
+    goto yy31;
+  yy126:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy127:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy41;
+    if (yych == 'n')
+      goto yy41;
+    goto yy31;
+  yy128:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy129;
+    if (yych != 'e')
+      goto yy31;
+  yy129:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy130;
+    if (yych != 'a')
+      goto yy31;
+  yy130:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy41;
+    if (yych == 'l')
+      goto yy41;
+    goto yy31;
+  yy131:
+    yych = *++p;
+    if (yych != '0')
+      goto yy31;
+    yych = *++p;
+    if (yych != '0')
+      goto yy31;
+    yych = *++p;
+    if (yych == '4')
+      goto yy41;
+    goto yy31;
+  yy134:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy153;
+    if (yych == 'i')
+      goto yy153;
+    goto yy31;
+  yy135:
+    yych = *++p;
+    if (yych <= 'L') {
+      if (yych == 'A')
+        goto yy145;
+      if (yych <= 'K')
+        goto yy31;
+      goto yy144;
+    } else {
+      if (yych <= 'a') {
+        if (yych <= '`')
+          goto yy31;
+        goto yy145;
+      } else {
+        if (yych == 'l')
+          goto yy144;
+        goto yy31;
+      }
+    }
+  yy136:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy137:
+    yych = *++p;
+    if (yych == '3')
+      goto yy141;
+    goto yy31;
+  yy138:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy140;
+    if (yych == 't')
+      goto yy140;
+    goto yy31;
+  yy139:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy41;
+    if (yych == 'g')
+      goto yy41;
+    goto yy31;
+  yy140:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy141:
+    yych = *++p;
+    if (yych != '2')
+      goto yy31;
+    yych = *++p;
+    if (yych != '7')
+      goto yy31;
+    yych = *++p;
+    if (yych == '0')
+      goto yy41;
+    goto yy31;
+  yy144:
+    yych = *++p;
+    if (yych <= 'M') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'N')
+        goto yy151;
+      if (yych == 'n')
+        goto yy151;
+      goto yy31;
+    }
+  yy145:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy146;
+    if (yych != 'm')
+      goto yy31;
+  yy146:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy147;
+    if (yych != 's')
+      goto yy31;
+  yy147:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy148;
+    if (yych != 'p')
+      goto yy31;
+  yy148:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy149;
+    if (yych != 'e')
+      goto yy31;
+  yy149:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy150;
+    if (yych != 'a')
+      goto yy31;
+  yy150:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy41;
+    if (yych == 'k')
+      goto yy41;
+    goto yy31;
+  yy151:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy152;
+    if (yych != 'e')
+      goto yy31;
+  yy152:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy41;
+    if (yych == 't')
+      goto yy41;
+    goto yy31;
+  yy153:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych == 'N')
+        goto yy154;
+      if (yych <= 'R')
+        goto yy31;
+      goto yy155;
+    } else {
+      if (yych <= 'n') {
+        if (yych <= 'm')
+          goto yy31;
+      } else {
+        if (yych == 's')
+          goto yy155;
+        goto yy31;
+      }
+    }
+  yy154:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy162;
+    if (yych == 'g')
+      goto yy162;
+    goto yy31;
+  yy155:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy156;
+    if (yych != 'm')
+      goto yy31;
+  yy156:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy157;
+    if (yych != 'e')
+      goto yy31;
+  yy157:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy158;
+    if (yych != 's')
+      goto yy31;
+  yy158:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy159;
+    if (yych != 's')
+      goto yy31;
+  yy159:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy160;
+    if (yych != 'a')
+      goto yy31;
+  yy160:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy161;
+    if (yych != 'g')
+      goto yy31;
+  yy161:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy162:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy41;
+    if (yych == 's')
+      goto yy41;
+    goto yy31;
+  yy163:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy41;
+    if (yych == 'n')
+      goto yy41;
+    goto yy31;
+  yy164:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy214;
+    if (yych == 'e')
+      goto yy214;
+    goto yy31;
+  yy165:
+    yych = *++p;
+    if (yych == 'H')
+      goto yy41;
+    if (yych == 'h')
+      goto yy41;
+    goto yy31;
+  yy166:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy210;
+    if (yych == 'o')
+      goto yy210;
+    goto yy31;
+  yy167:
+    yych = *++p;
+    if (yych <= 'L') {
+      if (yych == 'A')
+        goto yy200;
+      if (yych <= 'K')
+        goto yy31;
+      goto yy201;
+    } else {
+      if (yych <= 'a') {
+        if (yych <= '`')
+          goto yy31;
+        goto yy200;
+      } else {
+        if (yych == 'l')
+          goto yy201;
+        goto yy31;
+      }
+    }
+  yy168:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych == 'B')
+        goto yy41;
+      if (yych <= 'R')
+        goto yy31;
+      goto yy41;
+    } else {
+      if (yych <= 'b') {
+        if (yych <= 'a')
+          goto yy31;
+        goto yy41;
+      } else {
+        if (yych == 's')
+          goto yy41;
+        goto yy31;
+      }
+    }
+  yy169:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy198;
+    if (yych == 'y')
+      goto yy198;
+    goto yy31;
+  yy170:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy41;
+    if (yych == 'n')
+      goto yy41;
+    goto yy31;
+  yy171:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy197;
+    if (yych == 't')
+      goto yy197;
+    goto yy31;
+  yy172:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych <= 'C') {
+        if (yych <= 'B')
+          goto yy31;
+        goto yy184;
+      } else {
+        if (yych <= 'Q')
+          goto yy31;
+        if (yych <= 'R')
+          goto yy182;
+        goto yy183;
+      }
+    } else {
+      if (yych <= 'q') {
+        if (yych == 'c')
+          goto yy184;
+        goto yy31;
+      } else {
+        if (yych <= 'r')
+          goto yy182;
+        if (yych <= 's')
+          goto yy183;
+        goto yy31;
+      }
+    }
+  yy173:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy181;
+    if (yych == 'm')
+      goto yy181;
+    goto yy31;
+  yy174:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'E')
+        goto yy178;
+      if (yych <= 'O')
+        goto yy31;
+      goto yy179;
+    } else {
+      if (yych <= 'e') {
+        if (yych <= 'd')
+          goto yy31;
+        goto yy178;
+      } else {
+        if (yych == 'p')
+          goto yy179;
+        goto yy31;
+      }
+    }
+  yy175:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy176;
+    if (yych != 't')
+      goto yy31;
+  yy176:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy177;
+    if (yych != 't')
+      goto yy31;
+  yy177:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy178:
+    yych = *++p;
+    if (yych == 'V')
+      goto yy180;
+    if (yych == 'v')
+      goto yy180;
+    goto yy31;
+  yy179:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'S')
+        goto yy41;
+      if (yych == 's')
+        goto yy41;
+      goto yy31;
+    }
+  yy180:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy181:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy182:
+    yych = *++p;
+    if (yych == 'V')
+      goto yy194;
+    if (yych == 'v')
+      goto yy194;
+    goto yy31;
+  yy183:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy191;
+    if (yych == 's')
+      goto yy191;
+    goto yy31;
+  yy184:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy185;
+    if (yych != 'o')
+      goto yy31;
+  yy185:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy186;
+    if (yych != 'n')
+      goto yy31;
+  yy186:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy187;
+    if (yych != 'd')
+      goto yy31;
+  yy187:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy188;
+    if (yych != 'l')
+      goto yy31;
+  yy188:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy189;
+    if (yych != 'i')
+      goto yy31;
+  yy189:
+    yych = *++p;
+    if (yych == 'F')
+      goto yy190;
+    if (yych != 'f')
+      goto yy31;
+  yy190:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy191:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy192;
+    if (yych != 'i')
+      goto yy31;
+  yy192:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy193;
+    if (yych != 'o')
+      goto yy31;
+  yy193:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy41;
+    if (yych == 'n')
+      goto yy41;
+    goto yy31;
+  yy194:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy195;
+    if (yych != 'i')
+      goto yy31;
+  yy195:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy196;
+    if (yych != 'c')
+      goto yy31;
+  yy196:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy197:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy198:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy199;
+    if (yych != 'p')
+      goto yy31;
+  yy199:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy200:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy204;
+    if (yych == 'p')
+      goto yy204;
+    goto yy31;
+  yy201:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy202;
+    if (yych != 'd')
+      goto yy31;
+  yy202:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy203;
+    if (yych != 'a')
+      goto yy31;
+  yy203:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy41;
+    if (yych == 't')
+      goto yy41;
+    goto yy31;
+  yy204:
+    yych = *++p;
+    if (yych != '.')
+      goto yy31;
+    yych = *++p;
+    if (yych == 'B')
+      goto yy206;
+    if (yych != 'b')
+      goto yy31;
+  yy206:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy207;
+    if (yych != 'e')
+      goto yy31;
+  yy207:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy208;
+    if (yych != 'e')
+      goto yy31;
+  yy208:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy209;
+    if (yych != 'p')
+      goto yy31;
+  yy209:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'S')
+        goto yy41;
+      if (yych == 's')
+        goto yy41;
+      goto yy31;
+    }
+  yy210:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy211;
+    if (yych != 't')
+      goto yy31;
+  yy211:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy212;
+    if (yych != 'i')
+      goto yy31;
+  yy212:
+    yych = *++p;
+    if (yych == 'F')
+      goto yy213;
+    if (yych != 'f')
+      goto yy31;
+  yy213:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy41;
+    if (yych == 'y')
+      goto yy41;
+    goto yy31;
+  yy214:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy215;
+    if (yych != 'a')
+      goto yy31;
+  yy215:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy41;
+    if (yych == 'm')
+      goto yy41;
+    goto yy31;
+  yy216:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych == 'M')
+        goto yy228;
+      if (yych <= 'R')
+        goto yy31;
+      goto yy227;
+    } else {
+      if (yych <= 'm') {
+        if (yych <= 'l')
+          goto yy31;
+        goto yy228;
+      } else {
+        if (yych == 's')
+          goto yy227;
+        goto yy31;
+      }
+    }
+  yy217:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy225;
+    if (yych == 'y')
+      goto yy225;
+    goto yy31;
+  yy218:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy41;
+    if (yych == 'i')
+      goto yy41;
+    goto yy31;
+  yy219:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy220;
+    if (yych != 's')
+      goto yy31;
+  yy220:
+    yych = *++p;
+    if (yych <= 'N') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'O')
+        goto yy221;
+      if (yych != 'o')
+        goto yy31;
+    }
+  yy221:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy222;
+    if (yych != 'u')
+      goto yy31;
+  yy222:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy223;
+    if (yych != 'r')
+      goto yy31;
+  yy223:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy224;
+    if (yych != 'c')
+      goto yy31;
+  yy224:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy225:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy226;
+    if (yych != 'n')
+      goto yy31;
+  yy226:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy41;
+    if (yych == 'c')
+      goto yy41;
+    goto yy31;
+  yy227:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy228:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy229:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy249;
+    if (yych == 'y')
+      goto yy249;
+    goto yy31;
+  yy230:
+    yych = *++p;
+    if (yych <= 'O') {
+      if (yych == 'E')
+        goto yy246;
+      if (yych <= 'N')
+        goto yy31;
+      goto yy247;
+    } else {
+      if (yych <= 'e') {
+        if (yych <= 'd')
+          goto yy31;
+        goto yy246;
+      } else {
+        if (yych == 'o')
+          goto yy247;
+        goto yy31;
+      }
+    }
+  yy231:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy241;
+    if (yych == 'a')
+      goto yy241;
+    goto yy31;
+  yy232:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'L')
+        goto yy234;
+      if (yych <= 'O')
+        goto yy31;
+      goto yy235;
+    } else {
+      if (yych <= 'l') {
+        if (yych <= 'k')
+          goto yy31;
+        goto yy234;
+      } else {
+        if (yych == 'p')
+          goto yy235;
+        goto yy31;
+      }
+    }
+  yy233:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy234:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy41;
+    if (yych == 'm')
+      goto yy41;
+    goto yy31;
+  yy235:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy236;
+    if (yych != 'a')
+      goto yy31;
+  yy236:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy237;
+    if (yych != 'r')
+      goto yy31;
+  yy237:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy238;
+    if (yych != 'a')
+      goto yy31;
+  yy238:
+    yych = *++p;
+    if (yych == 'Z')
+      goto yy239;
+    if (yych != 'z')
+      goto yy31;
+  yy239:
+    yych = *++p;
+    if (yych == 'Z')
+      goto yy240;
+    if (yych != 'z')
+      goto yy31;
+  yy240:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy41;
+    if (yych == 'i')
+      goto yy41;
+    goto yy31;
+  yy241:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy242;
+    if (yych != 't')
+      goto yy31;
+  yy242:
+    yych = *++p;
+    if (yych == 'F')
+      goto yy243;
+    if (yych != 'f')
+      goto yy31;
+  yy243:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy244;
+    if (yych != 'o')
+      goto yy31;
+  yy244:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy245;
+    if (yych != 'r')
+      goto yy31;
+  yy245:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy41;
+    if (yych == 'm')
+      goto yy41;
+    goto yy31;
+  yy246:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy41;
+    if (yych == 's')
+      goto yy41;
+    goto yy31;
+  yy247:
+    yych = *++p;
+    if (yych == 'X')
+      goto yy248;
+    if (yych != 'x')
+      goto yy31;
+  yy248:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy41;
+    if (yych == 'y')
+      goto yy41;
+    goto yy31;
+  yy249:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy41;
+    if (yych == 'c')
+      goto yy41;
+    goto yy31;
+  yy250:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy41;
+    if (yych == 'd')
+      goto yy41;
+    goto yy31;
+  yy251:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy252;
+    if (yych != 'a')
+      goto yy31;
+  yy252:
+    yych = *++p;
+    if (yych == 'Q')
+      goto yy253;
+    if (yych != 'q')
+      goto yy31;
+  yy253:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy254;
+    if (yych != 'u')
+      goto yy31;
+  yy254:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy255;
+    if (yych != 'e')
+      goto yy31;
+  yy255:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy256;
+    if (yych != 'l')
+      goto yy31;
+  yy256:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy257;
+    if (yych != 'o')
+      goto yy31;
+  yy257:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy258;
+    if (yych != 'c')
+      goto yy31;
+  yy258:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy259;
+    if (yych != 'k')
+      goto yy31;
+  yy259:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy260;
+    if (yych != 't')
+      goto yy31;
+  yy260:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy261;
+    if (yych != 'o')
+      goto yy31;
+  yy261:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy262;
+    if (yych != 'k')
+      goto yy31;
+  yy262:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy263;
+    if (yych != 'e')
+      goto yy31;
+  yy263:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy41;
+    if (yych == 'n')
+      goto yy41;
+    goto yy31;
+  yy264:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy271;
+    if (yych == 't')
+      goto yy271;
+    goto yy31;
+  yy265:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy270;
+    if (yych == 't')
+      goto yy270;
+    goto yy31;
+  yy266:
+    yych = *++p;
+    if (yych <= 'G') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'H')
+        goto yy41;
+      if (yych == 'h')
+        goto yy41;
+      goto yy31;
+    }
+  yy267:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy41;
+    if (yych == 's')
+      goto yy41;
+    goto yy31;
+  yy268:
+    yych = *++p;
+    if (yych == 'W')
+      goto yy269;
+    if (yych != 'w')
+      goto yy31;
+  yy269:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy41;
+    if (yych == 's')
+      goto yy41;
+    goto yy31;
+  yy270:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy271:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy272;
+    if (yych != 'e')
+      goto yy31;
+  yy272:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy41;
+    if (yych == 's')
+      goto yy41;
+    goto yy31;
+  yy273:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy41;
+    if (yych == 'n')
+      goto yy41;
+    goto yy31;
+  yy274:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'M')
+        goto yy305;
+      if (yych <= 'O')
+        goto yy31;
+      goto yy304;
+    } else {
+      if (yych <= 'm') {
+        if (yych <= 'l')
+          goto yy31;
+        goto yy305;
+      } else {
+        if (yych == 'p')
+          goto yy304;
+        goto yy31;
+      }
+    }
+  yy275:
+    yych = *++p;
+    if (yych <= 'Q') {
+      if (yych <= '-') {
+        if (yych <= ',')
+          goto yy31;
+        goto yy297;
+      } else {
+        if (yych == 'N')
+          goto yy298;
+        goto yy31;
+      }
+    } else {
+      if (yych <= 'n') {
+        if (yych <= 'R')
+          goto yy296;
+        if (yych <= 'm')
+          goto yy31;
+        goto yy298;
+      } else {
+        if (yych == 'r')
+          goto yy296;
+        goto yy31;
+      }
+    }
+  yy276:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy41;
+    if (yych == 's')
+      goto yy41;
+    goto yy31;
+  yy277:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy292;
+    if (yych == 's')
+      goto yy292;
+    goto yy31;
+  yy278:
+    yych = *++p;
+    switch (yych) {
+    case 'G':
+    case 'g':
+      goto yy283;
+    case 'I':
+    case 'i':
+      goto yy282;
+    case 'P':
+    case 'p':
+      goto yy284;
+    case 'R':
+    case 'r':
+      goto yy285;
+    default:
+      goto yy31;
+    }
+  yy279:
+    yych = *++p;
+    if (yych == 'Q')
+      goto yy281;
+    if (yych == 'q')
+      goto yy281;
+    goto yy31;
+  yy280:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy41;
+    if (yych == 'd')
+      goto yy41;
+    goto yy31;
+  yy281:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy282:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy290;
+    if (yych == 'l')
+      goto yy290;
+    goto yy31;
+  yy283:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy288;
+    if (yych == 'n')
+      goto yy288;
+    goto yy31;
+  yy284:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy41;
+    if (yych == 's')
+      goto yy41;
+    goto yy31;
+  yy285:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy286;
+    if (yych != 'k')
+      goto yy31;
+  yy286:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy287;
+    if (yych != 'e')
+      goto yy31;
+  yy287:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy41;
+    if (yych == 't')
+      goto yy41;
+    goto yy31;
+  yy288:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy289;
+    if (yych != 'e')
+      goto yy31;
+  yy289:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy41;
+    if (yych == 't')
+      goto yy41;
+    goto yy31;
+  yy290:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy291;
+    if (yych != 't')
+      goto yy31;
+  yy291:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy41;
+    if (yych == 'o')
+      goto yy41;
+    goto yy31;
+  yy292:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy293;
+    if (yych != 's')
+      goto yy31;
+  yy293:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy294;
+    if (yych != 'a')
+      goto yy31;
+  yy294:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy295;
+    if (yych != 'g')
+      goto yy31;
+  yy295:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy296:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy303;
+    if (yych == 'p')
+      goto yy303;
+    goto yy31;
+  yy297:
+    yych = *++p;
+    if (yych == 'H')
+      goto yy300;
+    if (yych == 'h')
+      goto yy300;
+    goto yy31;
+  yy298:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy299;
+    if (yych != 'i')
+      goto yy31;
+  yy299:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy41;
+    if (yych == 'm')
+      goto yy41;
+    goto yy31;
+  yy300:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy301;
+    if (yych != 'e')
+      goto yy31;
+  yy301:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy302;
+    if (yych != 'l')
+      goto yy31;
+  yy302:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy303:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'S')
+        goto yy41;
+      if (yych == 's')
+        goto yy41;
+      goto yy31;
+    }
+  yy304:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy308;
+    if (yych == 'd')
+      goto yy308;
+    goto yy31;
+  yy305:
+    yych = *++p;
+    if (yych == 'B')
+      goto yy306;
+    if (yych != 'b')
+      goto yy31;
+  yy306:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy307;
+    if (yych != 'l')
+      goto yy31;
+  yy307:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy308:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy309;
+    if (yych != 'a')
+      goto yy31;
+  yy309:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy310;
+    if (yych != 't')
+      goto yy31;
+  yy310:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy311:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy316;
+    if (yych == 'a')
+      goto yy316;
+    goto yy31;
+  yy312:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy313;
+    if (yych != 's')
+      goto yy31;
+  yy313:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy314;
+    if (yych != 't')
+      goto yy31;
+  yy314:
+    yych = *++p;
+    if (yych == 'F')
+      goto yy315;
+    if (yych != 'f')
+      goto yy31;
+  yy315:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy41;
+    if (yych == 'm')
+      goto yy41;
+    goto yy31;
+  yy316:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy317;
+    if (yych != 'p')
+      goto yy31;
+  yy317:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'S')
+        goto yy41;
+      if (yych == 's')
+        goto yy41;
+      goto yy31;
+    }
+  yy318:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy341;
+    if (yych == 'm')
+      goto yy341;
+    goto yy31;
+  yy319:
+    yych = *++p;
+    if (yych <= 'I') {
+      if (yych == 'C')
+        goto yy330;
+      if (yych <= 'H')
+        goto yy31;
+      goto yy329;
+    } else {
+      if (yych <= 'c') {
+        if (yych <= 'b')
+          goto yy31;
+        goto yy330;
+      } else {
+        if (yych == 'i')
+          goto yy329;
+        goto yy31;
+      }
+    }
+  yy320:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'N')
+        goto yy41;
+      if (yych <= 'O')
+        goto yy31;
+      goto yy41;
+    } else {
+      if (yych <= 'n') {
+        if (yych <= 'm')
+          goto yy31;
+        goto yy41;
+      } else {
+        if (yych == 'p')
+          goto yy41;
+        goto yy31;
+      }
+    }
+  yy321:
+    yych = *++p;
+    if (yych <= 'O') {
+      if (yych == 'A')
+        goto yy327;
+      if (yych <= 'N')
+        goto yy31;
+      goto yy328;
+    } else {
+      if (yych <= 'a') {
+        if (yych <= '`')
+          goto yy31;
+        goto yy327;
+      } else {
+        if (yych == 'o')
+          goto yy328;
+        goto yy31;
+      }
+    }
+  yy322:
+    yych = *++p;
+    if (yych == 'F')
+      goto yy326;
+    if (yych == 'f')
+      goto yy326;
+    goto yy31;
+  yy323:
+    yych = *++p;
+    if (yych <= '@') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'A')
+        goto yy325;
+      if (yych == 'a')
+        goto yy325;
+      goto yy31;
+    }
+  yy324:
+    yych = *++p;
+    if (yych == 'X')
+      goto yy41;
+    if (yych == 'x')
+      goto yy41;
+    goto yy31;
+  yy325:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy326:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy41;
+    if (yych == 'o')
+      goto yy41;
+    goto yy31;
+  yy327:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy328:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy41;
+    if (yych == 'n')
+      goto yy41;
+    goto yy31;
+  yy329:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy331;
+    if (yych == 's')
+      goto yy331;
+    goto yy31;
+  yy330:
+    yych = *++p;
+    if (yych <= ':') {
+      if (yych == '6')
+        goto yy41;
+      if (yych <= '9')
+        goto yy31;
+      goto yy42;
+    } else {
+      if (yych <= 'S') {
+        if (yych <= 'R')
+          goto yy31;
+        goto yy41;
+      } else {
+        if (yych == 's')
+          goto yy41;
+        goto yy31;
+      }
+    }
+  yy331:
+    yych = *++p;
+    if (yych == '.')
+      goto yy332;
+    if (yych == ':')
+      goto yy42;
+    goto yy31;
+  yy332:
+    yych = *++p;
+    if (yych <= 'X') {
+      if (yych <= 'K') {
+        if (yych == 'B')
+          goto yy335;
+        goto yy31;
+      } else {
+        if (yych <= 'L')
+          goto yy333;
+        if (yych <= 'W')
+          goto yy31;
+        goto yy334;
+      }
+    } else {
+      if (yych <= 'k') {
+        if (yych == 'b')
+          goto yy335;
+        goto yy31;
+      } else {
+        if (yych <= 'l')
+          goto yy333;
+        if (yych == 'x')
+          goto yy334;
+        goto yy31;
+      }
+    }
+  yy333:
+    yych = *++p;
+    if (yych == 'W')
+      goto yy340;
+    if (yych == 'w')
+      goto yy340;
+    goto yy31;
+  yy334:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy338;
+    if (yych == 'p')
+      goto yy338;
+    goto yy31;
+  yy335:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy336;
+    if (yych != 'e')
+      goto yy31;
+  yy336:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy337;
+    if (yych != 'e')
+      goto yy31;
+  yy337:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy338:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy339;
+    if (yych != 'c')
+      goto yy31;
+  yy339:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'S')
+        goto yy41;
+      if (yych == 's')
+        goto yy41;
+      goto yy31;
+    }
+  yy340:
+    yych = *++p;
+    if (yych == 'Z')
+      goto yy41;
+    if (yych == 'z')
+      goto yy41;
+    goto yy31;
+  yy341:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy41;
+    if (yych == 's')
+      goto yy41;
+    goto yy31;
+  yy342:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy343:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy346;
+    if (yych == 't')
+      goto yy346;
+    goto yy31;
+  yy344:
+    yych = *++p;
+    if (yych != '2')
+      goto yy31;
+    yych = *++p;
+    if (yych == '3')
+      goto yy41;
+    goto yy31;
+  yy346:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy347;
+    if (yych != 'p')
+      goto yy31;
+  yy347:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'S')
+        goto yy41;
+      if (yych == 's')
+        goto yy41;
+      goto yy31;
+    }
+  yy348:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy364;
+    if (yych == 'a')
+      goto yy364;
+    goto yy31;
+  yy349:
+    yych = *++p;
+    if (yych <= 'Z') {
+      if (yych == 'T')
+        goto yy41;
+      if (yych <= 'Y')
+        goto yy31;
+      goto yy355;
+    } else {
+      if (yych <= 't') {
+        if (yych <= 's')
+          goto yy31;
+        goto yy41;
+      } else {
+        if (yych == 'z')
+          goto yy355;
+        goto yy31;
+      }
+    }
+  yy350:
+    yych = *++p;
+    if (yych <= 'O') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'P')
+        goto yy352;
+      if (yych == 'p')
+        goto yy352;
+      goto yy31;
+    }
+  yy351:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy41;
+    if (yych == 'o')
+      goto yy41;
+    goto yy31;
+  yy352:
+    yych = *++p;
+    if (yych == 'H')
+      goto yy353;
+    if (yych != 'h')
+      goto yy31;
+  yy353:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy354;
+    if (yych != 'e')
+      goto yy31;
+  yy354:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy41;
+    if (yych == 'r')
+      goto yy41;
+    goto yy31;
+  yy355:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy356;
+    if (yych != 'm')
+      goto yy31;
+  yy356:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy357;
+    if (yych != 'o')
+      goto yy31;
+  yy357:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy358;
+    if (yych != 'p')
+      goto yy31;
+  yy358:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy359;
+    if (yych != 'r')
+      goto yy31;
+  yy359:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy360;
+    if (yych != 'o')
+      goto yy31;
+  yy360:
+    yych = *++p;
+    if (yych == 'J')
+      goto yy361;
+    if (yych != 'j')
+      goto yy31;
+  yy361:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy362;
+    if (yych != 'e')
+      goto yy31;
+  yy362:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy363;
+    if (yych != 'c')
+      goto yy31;
+  yy363:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy41;
+    if (yych == 't')
+      goto yy41;
+    goto yy31;
+  yy364:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy365;
+    if (yych != 'l')
+      goto yy31;
+  yy365:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy41;
+    if (yych == 'k')
+      goto yy41;
+    goto yy31;
+  yy366:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych <= 'M') {
+        if (yych == 'L')
+          goto yy376;
+        goto yy31;
+      } else {
+        if (yych <= 'N')
+          goto yy377;
+        if (yych <= 'R')
+          goto yy31;
+        goto yy378;
+      }
+    } else {
+      if (yych <= 'm') {
+        if (yych == 'l')
+          goto yy376;
+        goto yy31;
+      } else {
+        if (yych <= 'n')
+          goto yy377;
+        if (yych == 's')
+          goto yy378;
+        goto yy31;
+      }
+    }
+  yy367:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy375;
+    if (yych == 'e')
+      goto yy375;
+    goto yy31;
+  yy368:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy370;
+    if (yych == 'c')
+      goto yy370;
+    goto yy31;
+  yy369:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy370:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy371;
+    if (yych != 'e')
+      goto yy31;
+  yy371:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy372;
+    if (yych != 't')
+      goto yy31;
+  yy372:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy373;
+    if (yych != 'i')
+      goto yy31;
+  yy373:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy374;
+    if (yych != 'm')
+      goto yy31;
+  yy374:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy375:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy41;
+    if (yych == 'd')
+      goto yy41;
+    goto yy31;
+  yy376:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy377:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy379;
+    if (yych == 'g')
+      goto yy379;
+    goto yy31;
+  yy378:
+    yych = *++p;
+    if (yych == 'H')
+      goto yy41;
+    if (yych == 'h')
+      goto yy41;
+    goto yy31;
+  yy379:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy380;
+    if (yych != 'e')
+      goto yy31;
+  yy380:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy41;
+    if (yych == 'r')
+      goto yy41;
+    goto yy31;
+  yy381:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy399;
+    if (yych == 't')
+      goto yy399;
+    goto yy31;
+  yy382:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy41;
+    if (yych == 't')
+      goto yy41;
+    goto yy31;
+  yy383:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy41;
+    if (yych == 'm')
+      goto yy41;
+    goto yy31;
+  yy384:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych == 'P')
+        goto yy41;
+      if (yych <= 'R')
+        goto yy31;
+      goto yy41;
+    } else {
+      if (yych <= 'p') {
+        if (yych <= 'o')
+          goto yy31;
+        goto yy41;
+      } else {
+        if (yych == 's')
+          goto yy41;
+        goto yy31;
+      }
+    }
+  yy385:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy393;
+    if (yych == 'i')
+      goto yy393;
+    goto yy31;
+  yy386:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy392;
+    if (yych == 'a')
+      goto yy392;
+    goto yy31;
+  yy387:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy390;
+    if (yych == 'o')
+      goto yy390;
+    goto yy31;
+  yy388:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy389;
+    if (yych != 'a')
+      goto yy31;
+  yy389:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy42;
+      goto yy31;
+    } else {
+      if (yych <= 'S')
+        goto yy41;
+      if (yych == 's')
+        goto yy41;
+      goto yy31;
+    }
+  yy390:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy391;
+    if (yych != 'u')
+      goto yy31;
+  yy391:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy41;
+    if (yych == 't')
+      goto yy41;
+    goto yy31;
+  yy392:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy393:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy394;
+    if (yych != 'u')
+      goto yy31;
+  yy394:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy395;
+    if (yych != 'm')
+      goto yy31;
+  yy395:
+    yych = *++p;
+    if (yych == 'X')
+      goto yy396;
+    if (yych != 'x')
+      goto yy31;
+  yy396:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy397;
+    if (yych != 't')
+      goto yy31;
+  yy397:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy398;
+    if (yych != 'r')
+      goto yy31;
+  yy398:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy41;
+    if (yych == 'a')
+      goto yy41;
+    goto yy31;
+  yy399:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy400;
+    if (yych != 'a')
+      goto yy31;
+  yy400:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy401;
+    if (yych != 'c')
+      goto yy31;
+  yy401:
+    yych = *++p;
+    if (yych == 'H')
+      goto yy402;
+    if (yych != 'h')
+      goto yy31;
+  yy402:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy403;
+    if (yych != 'm')
+      goto yy31;
+  yy403:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy404;
+    if (yych != 'e')
+      goto yy31;
+  yy404:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy405;
+    if (yych != 'n')
+      goto yy31;
+  yy405:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy41;
+    if (yych == 't')
+      goto yy41;
+    goto yy31;
+  yy406:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy41;
+    if (yych == 's')
+      goto yy41;
+    goto yy31;
+  yy407:
+    yych = *++p;
+    if (yych <= 'V') {
+      if (yych == 'R')
+        goto yy41;
+      if (yych <= 'U')
+        goto yy31;
+    } else {
+      if (yych <= 'r') {
+        if (yych <= 'q')
+          goto yy31;
+        goto yy41;
+      } else {
+        if (yych != 'v')
+          goto yy31;
+      }
+    }
+    yych = *++p;
+    if (yych == 'A')
+      goto yy409;
+    if (yych != 'a')
+      goto yy31;
+  yy409:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy410;
+    if (yych != 's')
+      goto yy31;
+  yy410:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy411;
+    if (yych != 'c')
+      goto yy31;
+  yy411:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy412;
+    if (yych != 'r')
+      goto yy31;
+  yy412:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy413;
+    if (yych != 'i')
+      goto yy31;
+  yy413:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy414;
+    if (yych != 'p')
+      goto yy31;
+  yy414:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy41;
+    if (yych == 't')
+      goto yy41;
+    goto yy31;
+  yy415:
+    yych = *++p;
+    if (yych == 'B')
+      goto yy41;
+    if (yych == 'b')
+      goto yy41;
+    goto yy31;
+  yy416:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy41;
+    if (yych == 'n')
+      goto yy41;
+    goto yy31;
+  yy417:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy424;
+    if (yych == 'n')
+      goto yy424;
+    goto yy31;
+  yy418:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy41;
+    if (yych == 's')
+      goto yy41;
+    goto yy31;
+  yy419:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy423;
+    if (yych == 'c')
+      goto yy423;
+    goto yy31;
+  yy420:
+    yych = *++p;
+    if (yych <= 'V') {
+      if (yych == 'T')
+        goto yy422;
+      if (yych <= 'U')
+        goto yy31;
+      goto yy41;
+    } else {
+      if (yych <= 't') {
+        if (yych <= 's')
+          goto yy31;
+        goto yy422;
+      } else {
+        if (yych == 'v')
+          goto yy41;
+        goto yy31;
+      }
+    }
+  yy421:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy41;
+    if (yych == 'i')
+      goto yy41;
+    goto yy31;
+  yy422:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy41;
+    if (yych == 'a')
+      goto yy41;
+    goto yy31;
+  yy423:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy41;
+    if (yych == 't')
+      goto yy41;
+    goto yy31;
+  yy424:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy425;
+    if (yych != 'a')
+      goto yy31;
+  yy425:
+    yych = *++p;
+    if (yych != '-')
+      goto yy31;
+    yych = *++p;
+    if (yych == 'P')
+      goto yy427;
+    if (yych != 'p')
+      goto yy31;
+  yy427:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy428;
+    if (yych != 'l')
+      goto yy31;
+  yy428:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy429;
+    if (yych != 'a')
+      goto yy31;
+  yy429:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy430;
+    if (yych != 'y')
+      goto yy31;
+  yy430:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych == 'C')
+        goto yy431;
+      if (yych <= 'R')
+        goto yy31;
+      goto yy432;
+    } else {
+      if (yych <= 'c') {
+        if (yych <= 'b')
+          goto yy31;
+      } else {
+        if (yych == 's')
+          goto yy432;
+        goto yy31;
+      }
+    }
+  yy431:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy437;
+    if (yych == 'o')
+      goto yy437;
+    goto yy31;
+  yy432:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy433;
+    if (yych != 'i')
+      goto yy31;
+  yy433:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy434;
+    if (yych != 'n')
+      goto yy31;
+  yy434:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy435;
+    if (yych != 'g')
+      goto yy31;
+  yy435:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy436;
+    if (yych != 'l')
+      goto yy31;
+  yy436:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  yy437:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy438;
+    if (yych != 'n')
+      goto yy31;
+  yy438:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy439;
+    if (yych != 't')
+      goto yy31;
+  yy439:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy440;
+    if (yych != 'a')
+      goto yy31;
+  yy440:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy441;
+    if (yych != 'i')
+      goto yy31;
+  yy441:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy442;
+    if (yych != 'n')
+      goto yy31;
+  yy442:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy443;
+    if (yych != 'e')
+      goto yy31;
+  yy443:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy41;
+    if (yych == 'r')
+      goto yy41;
+    goto yy31;
+  yy444:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy41;
+    if (yych == 's')
+      goto yy41;
+    goto yy31;
+  yy445:
+    yych = *++p;
+    if (yych <= 'N') {
+      if (yych <= 'A') {
+        if (yych <= '@')
+          goto yy31;
+        goto yy467;
+      } else {
+        if (yych <= 'L')
+          goto yy31;
+        if (yych <= 'M')
+          goto yy468;
+        goto yy469;
+      }
+    } else {
+      if (yych <= 'l') {
+        if (yych == 'a')
+          goto yy467;
+        goto yy31;
+      } else {
+        if (yych <= 'm')
+          goto yy468;
+        if (yych <= 'n')
+          goto yy469;
+        goto yy31;
+      }
+    }
+  yy446:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy454;
+    if (yych == 'r')
+      goto yy454;
+    goto yy31;
+  yy447:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'L')
+        goto yy451;
+      if (yych <= 'O')
+        goto yy31;
+      goto yy41;
+    } else {
+      if (yych <= 'l') {
+        if (yych <= 'k')
+          goto yy31;
+        goto yy451;
+      } else {
+        if (yych == 'p')
+          goto yy41;
+        goto yy31;
+      }
+    }
+  yy448:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy450;
+    if (yych == 'i')
+      goto yy450;
+    goto yy31;
+  yy449:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy41;
+    if (yych == 'd')
+      goto yy41;
+    goto yy31;
+  yy450:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy41;
+    if (yych == 'd')
+      goto yy41;
+    goto yy31;
+  yy451:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy452;
+    if (yych != 'l')
+      goto yy31;
+  yy452:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy453;
+    if (yych != 't')
+      goto yy31;
+  yy453:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy41;
+    if (yych == 'o')
+      goto yy41;
+    goto yy31;
+  yy454:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy455;
+    if (yych != 'o')
+      goto yy31;
+  yy455:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy456;
+    if (yych != 'm')
+      goto yy31;
+  yy456:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy457;
+    if (yych != 'e')
+      goto yy31;
+  yy457:
+    yych = *++p;
+    if (yych == '-')
+      goto yy458;
+    if (yych == ':')
+      goto yy42;
+    goto yy31;
+  yy458:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy459;
+    if (yych != 'e')
+      goto yy31;
+  yy459:
+    yych = *++p;
+    if (yych == 'X')
+      goto yy460;
+    if (yych != 'x')
+      goto yy31;
+  yy460:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy461;
+    if (yych != 't')
+      goto yy31;
+  yy461:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy462;
+    if (yych != 'e')
+      goto yy31;
+  yy462:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy463;
+    if (yych != 'n')
+      goto yy31;
+  yy463:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy464;
+    if (yych != 's')
+      goto yy31;
+  yy464:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy465;
+    if (yych != 'i')
+      goto yy31;
+  yy465:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy466;
+    if (yych != 'o')
+      goto yy31;
+  yy466:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy41;
+    if (yych == 'n')
+      goto yy41;
+    goto yy31;
+  yy467:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy41;
+    if (yych == 'p')
+      goto yy41;
+    goto yy31;
+  yy468:
+    yych = *++p;
+    if (yych == '-')
+      goto yy473;
+    goto yy31;
+  yy469:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy470;
+    if (yych != 't')
+      goto yy31;
+  yy470:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy471;
+    if (yych != 'e')
+      goto yy31;
+  yy471:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy472;
+    if (yych != 'n')
+      goto yy31;
+  yy472:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy41;
+    if (yych == 't')
+      goto yy41;
+    goto yy31;
+  yy473:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy474;
+    if (yych != 'e')
+      goto yy31;
+  yy474:
+    yych = *++p;
+    if (yych == 'V')
+      goto yy475;
+    if (yych != 'v')
+      goto yy31;
+  yy475:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy476;
+    if (yych != 'e')
+      goto yy31;
+  yy476:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy477;
+    if (yych != 'n')
+      goto yy31;
+  yy477:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy478;
+    if (yych != 't')
+      goto yy31;
+  yy478:
+    yych = *++p;
+    if (yych == 'B')
+      goto yy479;
+    if (yych != 'b')
+      goto yy31;
+  yy479:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy480;
+    if (yych != 'r')
+      goto yy31;
+  yy480:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy481;
+    if (yych != 'i')
+      goto yy31;
+  yy481:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy482;
+    if (yych != 't')
+      goto yy31;
+  yy482:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy483;
+    if (yych != 'e')
+      goto yy31;
+  yy483:
+    yych = *++p;
+    if (yych != '-')
+      goto yy31;
+    yych = *++p;
+    if (yych == 'A')
+      goto yy485;
+    if (yych != 'a')
+      goto yy31;
+  yy485:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy486;
+    if (yych != 't')
+      goto yy31;
+  yy486:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy487;
+    if (yych != 't')
+      goto yy31;
+  yy487:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy488;
+    if (yych != 'e')
+      goto yy31;
+  yy488:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy489;
+    if (yych != 'n')
+      goto yy31;
+  yy489:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy490;
+    if (yych != 'd')
+      goto yy31;
+  yy490:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy491;
+    if (yych != 'e')
+      goto yy31;
+  yy491:
+    ++p;
+    if ((yych = *p) == 'E')
+      goto yy41;
+    if (yych == 'e')
+      goto yy41;
+    goto yy31;
+  }
 }
 
 // Try to match URI autolink after first <, returning number of chars matched.
-bufsize_t _scan_autolink_uri(const unsigned char *p)
-{
+bufsize_t _scan_autolink_uri(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	static const unsigned char yybm[] = {
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128,   0, 128,   0, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 'c') {
-		if (yych <= 'M') {
-			if (yych <= 'E') {
-				if (yych <= 'A') {
-					if (yych == '\n') goto yy494;
-					if (yych <= '@') goto yy521;
-					goto yy498;
-				} else {
-					if (yych <= 'B') goto yy516;
-					if (yych <= 'C') goto yy495;
-					if (yych <= 'D') goto yy496;
-					goto yy517;
-				}
-			} else {
-				if (yych <= 'I') {
-					if (yych <= 'F') goto yy499;
-					if (yych <= 'G') goto yy500;
-					if (yych <= 'H') goto yy501;
-					goto yy502;
-				} else {
-					if (yych <= 'J') goto yy497;
-					if (yych <= 'K') goto yy518;
-					if (yych <= 'L') goto yy503;
-					goto yy504;
-				}
-			}
-		} else {
-			if (yych <= 'U') {
-				if (yych <= 'Q') {
-					if (yych <= 'N') goto yy505;
-					if (yych <= 'O') goto yy506;
-					if (yych <= 'P') goto yy507;
-					goto yy519;
-				} else {
-					if (yych <= 'R') goto yy508;
-					if (yych <= 'S') goto yy509;
-					if (yych <= 'T') goto yy510;
-					goto yy511;
-				}
-			} else {
-				if (yych <= 'Y') {
-					if (yych <= 'V') goto yy512;
-					if (yych <= 'W') goto yy513;
-					if (yych <= 'X') goto yy514;
-					goto yy520;
-				} else {
-					if (yych <= '`') {
-						if (yych <= 'Z') goto yy515;
-						goto yy521;
-					} else {
-						if (yych <= 'a') goto yy498;
-						if (yych <= 'b') goto yy516;
-						goto yy495;
-					}
-				}
-			}
-		}
-	} else {
-		if (yych <= 't') {
-			if (yych <= 'k') {
-				if (yych <= 'g') {
-					if (yych <= 'd') goto yy496;
-					if (yych <= 'e') goto yy517;
-					if (yych <= 'f') goto yy499;
-					goto yy500;
-				} else {
-					if (yych <= 'h') goto yy501;
-					if (yych <= 'i') goto yy502;
-					if (yych <= 'j') goto yy497;
-					goto yy518;
-				}
-			} else {
-				if (yych <= 'o') {
-					if (yych <= 'l') goto yy503;
-					if (yych <= 'm') goto yy504;
-					if (yych <= 'n') goto yy505;
-					goto yy506;
-				} else {
-					if (yych <= 'q') {
-						if (yych <= 'p') goto yy507;
-						goto yy519;
-					} else {
-						if (yych <= 'r') goto yy508;
-						if (yych <= 's') goto yy509;
-						goto yy510;
-					}
-				}
-			}
-		} else {
-			if (yych <= 0xC1) {
-				if (yych <= 'x') {
-					if (yych <= 'u') goto yy511;
-					if (yych <= 'v') goto yy512;
-					if (yych <= 'w') goto yy513;
-					goto yy514;
-				} else {
-					if (yych <= 'y') goto yy520;
-					if (yych <= 'z') goto yy515;
-					if (yych <= 0x7F) goto yy521;
-				}
-			} else {
-				if (yych <= 0xED) {
-					if (yych <= 0xDF) goto yy522;
-					if (yych <= 0xE0) goto yy524;
-					if (yych <= 0xEC) goto yy525;
-					goto yy529;
-				} else {
-					if (yych <= 0xF0) {
-						if (yych <= 0xEF) goto yy525;
-						goto yy526;
-					} else {
-						if (yych <= 0xF3) goto yy527;
-						if (yych <= 0xF4) goto yy528;
-					}
-				}
-			}
-		}
-	}
-yy494:
-	{ return 0; }
-yy495:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy948;
-	case 'H':
-	case 'h':	goto yy947;
-	case 'I':
-	case 'i':	goto yy950;
-	case 'O':
-	case 'o':	goto yy946;
-	case 'R':
-	case 'r':	goto yy949;
-	case 'V':
-	case 'v':	goto yy945;
-	default:	goto yy494;
-	}
-yy496:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy921;
-	case 'I':
-	case 'i':	goto yy920;
-	case 'L':
-	case 'l':	goto yy918;
-	case 'N':
-	case 'n':	goto yy919;
-	case 'O':
-	case 'o':	goto yy922;
-	case 'T':
-	case 't':	goto yy917;
-	case 'V':
-	case 'v':	goto yy916;
-	default:	goto yy494;
-	}
-yy497:
-	yych = *(marker = ++p);
-	if (yych <= 'M') {
-		if (yych == 'A') goto yy908;
-		if (yych <= 'L') goto yy494;
-		goto yy907;
-	} else {
-		if (yych <= 'a') {
-			if (yych <= '`') goto yy494;
-			goto yy908;
-		} else {
-			if (yych == 'm') goto yy907;
-			goto yy494;
-		}
-	}
-yy498:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy889;
-	case 'B':
-	case 'b':	goto yy888;
-	case 'C':
-	case 'c':	goto yy887;
-	case 'D':
-	case 'd':	goto yy886;
-	case 'F':
-	case 'f':	goto yy885;
-	case 'I':
-	case 'i':	goto yy884;
-	case 'P':
-	case 'p':	goto yy883;
-	case 'T':
-	case 't':	goto yy882;
-	case 'W':
-	case 'w':	goto yy533;
-	default:	goto yy494;
-	}
-yy499:
-	yych = *(marker = ++p);
-	if (yych <= 'T') {
-		if (yych <= 'E') {
-			if (yych == 'A') goto yy869;
-			if (yych <= 'D') goto yy494;
-			goto yy868;
-		} else {
-			if (yych == 'I') goto yy867;
-			if (yych <= 'S') goto yy494;
-			goto yy870;
-		}
-	} else {
-		if (yych <= 'e') {
-			if (yych == 'a') goto yy869;
-			if (yych <= 'd') goto yy494;
-			goto yy868;
-		} else {
-			if (yych <= 'i') {
-				if (yych <= 'h') goto yy494;
-				goto yy867;
-			} else {
-				if (yych == 't') goto yy870;
-				goto yy494;
-			}
-		}
-	}
-yy500:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'E':
-	case 'e':	goto yy852;
-	case 'G':
-	case 'g':	goto yy533;
-	case 'I':
-	case 'i':	goto yy850;
-	case 'O':
-	case 'o':	goto yy851;
-	case 'T':
-	case 't':	goto yy849;
-	default:	goto yy494;
-	}
-yy501:
-	yych = *(marker = ++p);
-	if (yych <= 'S') {
-		if (yych <= '3') {
-			if (yych <= '2') goto yy494;
-			goto yy845;
-		} else {
-			if (yych == 'C') goto yy843;
-			goto yy494;
-		}
-	} else {
-		if (yych <= 'c') {
-			if (yych <= 'T') goto yy844;
-			if (yych <= 'b') goto yy494;
-			goto yy843;
-		} else {
-			if (yych == 't') goto yy844;
-			goto yy494;
-		}
-	}
-yy502:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy825;
-	case 'C':
-	case 'c':	goto yy822;
-	case 'M':
-	case 'm':	goto yy824;
-	case 'N':
-	case 'n':	goto yy823;
-	case 'P':
-	case 'p':	goto yy821;
-	case 'R':
-	case 'r':	goto yy820;
-	case 'T':
-	case 't':	goto yy819;
-	default:	goto yy494;
-	}
-yy503:
-	yych = *(marker = ++p);
-	if (yych <= 'D') {
-		if (yych == 'A') goto yy813;
-		if (yych <= 'C') goto yy494;
-		goto yy812;
-	} else {
-		if (yych <= 'a') {
-			if (yych <= '`') goto yy494;
-			goto yy813;
-		} else {
-			if (yych == 'd') goto yy812;
-			goto yy494;
-		}
-	}
-yy504:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy779;
-	case 'E':
-	case 'e':	goto yy778;
-	case 'I':
-	case 'i':	goto yy781;
-	case 'M':
-	case 'm':	goto yy777;
-	case 'S':
-	case 's':	goto yy776;
-	case 'T':
-	case 't':	goto yy780;
-	case 'U':
-	case 'u':	goto yy775;
-	case 'V':
-	case 'v':	goto yy774;
-	default:	goto yy494;
-	}
-yy505:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'E':
-	case 'e':	goto yy769;
-	case 'F':
-	case 'f':	goto yy768;
-	case 'I':
-	case 'i':	goto yy767;
-	case 'N':
-	case 'n':	goto yy766;
-	case 'O':
-	case 'o':	goto yy765;
-	default:	goto yy494;
-	}
-yy506:
-	yych = *(marker = ++p);
-	if (yych <= 'P') {
-		if (yych == 'I') goto yy751;
-		if (yych <= 'O') goto yy494;
-		goto yy752;
-	} else {
-		if (yych <= 'i') {
-			if (yych <= 'h') goto yy494;
-			goto yy751;
-		} else {
-			if (yych == 'p') goto yy752;
-			goto yy494;
-		}
-	}
-yy507:
-	yych = *(marker = ++p);
-	if (yych <= 'S') {
-		if (yych <= 'L') {
-			if (yych == 'A') goto yy733;
-			if (yych <= 'K') goto yy494;
-			goto yy732;
-		} else {
-			if (yych <= 'O') {
-				if (yych <= 'N') goto yy494;
-				goto yy734;
-			} else {
-				if (yych <= 'Q') goto yy494;
-				if (yych <= 'R') goto yy731;
-				goto yy730;
-			}
-		}
-	} else {
-		if (yych <= 'n') {
-			if (yych <= 'a') {
-				if (yych <= '`') goto yy494;
-				goto yy733;
-			} else {
-				if (yych == 'l') goto yy732;
-				goto yy494;
-			}
-		} else {
-			if (yych <= 'q') {
-				if (yych <= 'o') goto yy734;
-				goto yy494;
-			} else {
-				if (yych <= 'r') goto yy731;
-				if (yych <= 's') goto yy730;
-				goto yy494;
-			}
-		}
-	}
-yy508:
-	yych = *(marker = ++p);
-	if (yych <= 'T') {
-		if (yych <= 'L') {
-			if (yych == 'E') goto yy720;
-			goto yy494;
-		} else {
-			if (yych <= 'M') goto yy719;
-			if (yych <= 'R') goto yy494;
-			if (yych <= 'S') goto yy718;
-			goto yy717;
-		}
-	} else {
-		if (yych <= 'm') {
-			if (yych == 'e') goto yy720;
-			if (yych <= 'l') goto yy494;
-			goto yy719;
-		} else {
-			if (yych <= 'r') goto yy494;
-			if (yych <= 's') goto yy718;
-			if (yych <= 't') goto yy717;
-			goto yy494;
-		}
-	}
-yy509:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'E':
-	case 'e':	goto yy673;
-	case 'F':
-	case 'f':	goto yy672;
-	case 'G':
-	case 'g':	goto yy671;
-	case 'H':
-	case 'h':	goto yy676;
-	case 'I':
-	case 'i':	goto yy675;
-	case 'K':
-	case 'k':	goto yy670;
-	case 'M':
-	case 'm':	goto yy669;
-	case 'N':
-	case 'n':	goto yy674;
-	case 'O':
-	case 'o':	goto yy668;
-	case 'P':
-	case 'p':	goto yy667;
-	case 'S':
-	case 's':	goto yy666;
-	case 'T':
-	case 't':	goto yy665;
-	case 'V':
-	case 'v':	goto yy664;
-	default:	goto yy494;
-	}
-yy510:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy640;
-	case 'E':
-	case 'e':	goto yy636;
-	case 'F':
-	case 'f':	goto yy639;
-	case 'H':
-	case 'h':	goto yy635;
-	case 'I':
-	case 'i':	goto yy637;
-	case 'N':
-	case 'n':	goto yy638;
-	case 'V':
-	case 'v':	goto yy533;
-	default:	goto yy494;
-	}
-yy511:
-	yych = *(marker = ++p);
-	if (yych <= 'T') {
-		if (yych <= 'N') {
-			if (yych == 'D') goto yy627;
-			if (yych <= 'M') goto yy494;
-			goto yy626;
-		} else {
-			if (yych == 'R') goto yy628;
-			if (yych <= 'S') goto yy494;
-			goto yy625;
-		}
-	} else {
-		if (yych <= 'n') {
-			if (yych == 'd') goto yy627;
-			if (yych <= 'm') goto yy494;
-			goto yy626;
-		} else {
-			if (yych <= 'r') {
-				if (yych <= 'q') goto yy494;
-				goto yy628;
-			} else {
-				if (yych == 't') goto yy625;
-				goto yy494;
-			}
-		}
-	}
-yy512:
-	yych = *(marker = ++p);
-	if (yych <= 'I') {
-		if (yych == 'E') goto yy609;
-		if (yych <= 'H') goto yy494;
-		goto yy608;
-	} else {
-		if (yych <= 'e') {
-			if (yych <= 'd') goto yy494;
-			goto yy609;
-		} else {
-			if (yych == 'i') goto yy608;
-			goto yy494;
-		}
-	}
-yy513:
-	yych = *(marker = ++p);
-	if (yych <= 'Y') {
-		if (yych <= 'R') {
-			if (yych == 'E') goto yy598;
-			goto yy494;
-		} else {
-			if (yych <= 'S') goto yy599;
-			if (yych <= 'T') goto yy597;
-			if (yych <= 'X') goto yy494;
-			goto yy596;
-		}
-	} else {
-		if (yych <= 's') {
-			if (yych == 'e') goto yy598;
-			if (yych <= 'r') goto yy494;
-			goto yy599;
-		} else {
-			if (yych <= 't') goto yy597;
-			if (yych == 'y') goto yy596;
-			goto yy494;
-		}
-	}
-yy514:
-	yych = *(marker = ++p);
-	if (yych <= 'R') {
-		if (yych <= 'F') {
-			if (yych == 'C') goto yy575;
-			if (yych <= 'E') goto yy494;
-			goto yy573;
-		} else {
-			if (yych == 'M') goto yy574;
-			if (yych <= 'Q') goto yy494;
-			goto yy572;
-		}
-	} else {
-		if (yych <= 'f') {
-			if (yych == 'c') goto yy575;
-			if (yych <= 'e') goto yy494;
-			goto yy573;
-		} else {
-			if (yych <= 'm') {
-				if (yych <= 'l') goto yy494;
-				goto yy574;
-			} else {
-				if (yych == 'r') goto yy572;
-				goto yy494;
-			}
-		}
-	}
-yy515:
-	yych = *(marker = ++p);
-	if (yych == '3') goto yy567;
-	goto yy494;
-yy516:
-	yych = *(marker = ++p);
-	if (yych <= 'O') {
-		if (yych <= 'H') {
-			if (yych == 'E') goto yy557;
-			goto yy494;
-		} else {
-			if (yych <= 'I') goto yy556;
-			if (yych <= 'N') goto yy494;
-			goto yy555;
-		}
-	} else {
-		if (yych <= 'h') {
-			if (yych == 'e') goto yy557;
-			goto yy494;
-		} else {
-			if (yych <= 'i') goto yy556;
-			if (yych == 'o') goto yy555;
-			goto yy494;
-		}
-	}
-yy517:
-	yych = *(marker = ++p);
-	if (yych == 'D') goto yy553;
-	if (yych == 'd') goto yy553;
-	goto yy494;
-yy518:
-	yych = *(marker = ++p);
-	if (yych == 'E') goto yy548;
-	if (yych == 'e') goto yy548;
-	goto yy494;
-yy519:
-	yych = *(marker = ++p);
-	if (yych == 'U') goto yy545;
-	if (yych == 'u') goto yy545;
-	goto yy494;
-yy520:
-	yych = *(marker = ++p);
-	if (yych == 'M') goto yy530;
-	if (yych == 'm') goto yy530;
-	goto yy494;
-yy521:
-	yych = *++p;
-	goto yy494;
-yy522:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy523;
-	if (yych <= 0xBF) goto yy521;
-yy523:
-	p = marker;
-	goto yy494;
-yy524:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy523;
-	if (yych <= 0xBF) goto yy522;
-	goto yy523;
-yy525:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy523;
-	if (yych <= 0xBF) goto yy522;
-	goto yy523;
-yy526:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy523;
-	if (yych <= 0xBF) goto yy525;
-	goto yy523;
-yy527:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy523;
-	if (yych <= 0xBF) goto yy525;
-	goto yy523;
-yy528:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy523;
-	if (yych <= 0x8F) goto yy525;
-	goto yy523;
-yy529:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy523;
-	if (yych <= 0x9F) goto yy522;
-	goto yy523;
-yy530:
-	yych = *++p;
-	if (yych == 'S') goto yy531;
-	if (yych != 's') goto yy523;
-yy531:
-	yych = *++p;
-	if (yych == 'G') goto yy532;
-	if (yych != 'g') goto yy523;
-yy532:
-	yych = *++p;
-	if (yych == 'R') goto yy533;
-	if (yych != 'r') goto yy523;
-yy533:
-	yych = *++p;
-	if (yych != ':') goto yy523;
-yy534:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy534;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '<') goto yy523;
-			if (yych <= '>') goto yy543;
-			goto yy523;
-		} else {
-			if (yych <= 0xDF) goto yy536;
-			if (yych <= 0xE0) goto yy537;
-			goto yy538;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy542;
-			if (yych <= 0xEF) goto yy538;
-			goto yy539;
-		} else {
-			if (yych <= 0xF3) goto yy540;
-			if (yych <= 0xF4) goto yy541;
-			goto yy523;
-		}
-	}
-yy536:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy523;
-	if (yych <= 0xBF) goto yy534;
-	goto yy523;
-yy537:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy523;
-	if (yych <= 0xBF) goto yy536;
-	goto yy523;
-yy538:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy523;
-	if (yych <= 0xBF) goto yy536;
-	goto yy523;
-yy539:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy523;
-	if (yych <= 0xBF) goto yy538;
-	goto yy523;
-yy540:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy523;
-	if (yych <= 0xBF) goto yy538;
-	goto yy523;
-yy541:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy523;
-	if (yych <= 0x8F) goto yy538;
-	goto yy523;
-yy542:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy523;
-	if (yych <= 0x9F) goto yy536;
-	goto yy523;
-yy543:
-	++p;
-	{ return (bufsize_t)(p - start); }
-yy545:
-	yych = *++p;
-	if (yych == 'E') goto yy546;
-	if (yych != 'e') goto yy523;
-yy546:
-	yych = *++p;
-	if (yych == 'R') goto yy547;
-	if (yych != 'r') goto yy523;
-yy547:
-	yych = *++p;
-	if (yych == 'Y') goto yy533;
-	if (yych == 'y') goto yy533;
-	goto yy523;
-yy548:
-	yych = *++p;
-	if (yych == 'Y') goto yy549;
-	if (yych != 'y') goto yy523;
-yy549:
-	yych = *++p;
-	if (yych == 'P') goto yy550;
-	if (yych != 'p') goto yy523;
-yy550:
-	yych = *++p;
-	if (yych == 'A') goto yy551;
-	if (yych != 'a') goto yy523;
-yy551:
-	yych = *++p;
-	if (yych == 'R') goto yy552;
-	if (yych != 'r') goto yy523;
-yy552:
-	yych = *++p;
-	if (yych == 'C') goto yy533;
-	if (yych == 'c') goto yy533;
-	goto yy523;
-yy553:
-	yych = *++p;
-	if (yych != '2') goto yy523;
-	yych = *++p;
-	if (yych == 'K') goto yy533;
-	if (yych == 'k') goto yy533;
-	goto yy523;
-yy555:
-	yych = *++p;
-	if (yych == 'L') goto yy566;
-	if (yych == 'l') goto yy566;
-	goto yy523;
-yy556:
-	yych = *++p;
-	if (yych == 'T') goto yy562;
-	if (yych == 't') goto yy562;
-	goto yy523;
-yy557:
-	yych = *++p;
-	if (yych == 'S') goto yy558;
-	if (yych != 's') goto yy523;
-yy558:
-	yych = *++p;
-	if (yych == 'H') goto yy559;
-	if (yych != 'h') goto yy523;
-yy559:
-	yych = *++p;
-	if (yych == 'A') goto yy560;
-	if (yych != 'a') goto yy523;
-yy560:
-	yych = *++p;
-	if (yych == 'R') goto yy561;
-	if (yych != 'r') goto yy523;
-yy561:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy562:
-	yych = *++p;
-	if (yych == 'C') goto yy563;
-	if (yych != 'c') goto yy523;
-yy563:
-	yych = *++p;
-	if (yych == 'O') goto yy564;
-	if (yych != 'o') goto yy523;
-yy564:
-	yych = *++p;
-	if (yych == 'I') goto yy565;
-	if (yych != 'i') goto yy523;
-yy565:
-	yych = *++p;
-	if (yych == 'N') goto yy533;
-	if (yych == 'n') goto yy533;
-	goto yy523;
-yy566:
-	yych = *++p;
-	if (yych == 'O') goto yy533;
-	if (yych == 'o') goto yy533;
-	goto yy523;
-yy567:
-	yych = *++p;
-	if (yych != '9') goto yy523;
-	yych = *++p;
-	if (yych != '.') goto yy523;
-	yych = *++p;
-	if (yych != '5') goto yy523;
-	yych = *++p;
-	if (yych != '0') goto yy523;
-	yych = *++p;
-	if (yych <= 'Q') goto yy523;
-	if (yych <= 'S') goto yy533;
-	if (yych <= 'q') goto yy523;
-	if (yych <= 's') goto yy533;
-	goto yy523;
-yy572:
-	yych = *++p;
-	if (yych == 'I') goto yy533;
-	if (yych == 'i') goto yy533;
-	goto yy523;
-yy573:
-	yych = *++p;
-	if (yych == 'I') goto yy594;
-	if (yych == 'i') goto yy594;
-	goto yy523;
-yy574:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'L') goto yy584;
-		if (yych <= 'O') goto yy523;
-		goto yy585;
-	} else {
-		if (yych <= 'l') {
-			if (yych <= 'k') goto yy523;
-			goto yy584;
-		} else {
-			if (yych == 'p') goto yy585;
-			goto yy523;
-		}
-	}
-yy575:
-	yych = *++p;
-	if (yych == 'O') goto yy576;
-	if (yych != 'o') goto yy523;
-yy576:
-	yych = *++p;
-	if (yych == 'N') goto yy577;
-	if (yych != 'n') goto yy523;
-yy577:
-	yych = *++p;
-	if (yych == '-') goto yy578;
-	if (yych == ':') goto yy534;
-	goto yy523;
-yy578:
-	yych = *++p;
-	if (yych == 'U') goto yy579;
-	if (yych != 'u') goto yy523;
-yy579:
-	yych = *++p;
-	if (yych == 'S') goto yy580;
-	if (yych != 's') goto yy523;
-yy580:
-	yych = *++p;
-	if (yych == 'E') goto yy581;
-	if (yych != 'e') goto yy523;
-yy581:
-	yych = *++p;
-	if (yych == 'R') goto yy582;
-	if (yych != 'r') goto yy523;
-yy582:
-	yych = *++p;
-	if (yych == 'I') goto yy583;
-	if (yych != 'i') goto yy523;
-yy583:
-	yych = *++p;
-	if (yych == 'D') goto yy533;
-	if (yych == 'd') goto yy533;
-	goto yy523;
-yy584:
-	yych = *++p;
-	if (yych == 'R') goto yy586;
-	if (yych == 'r') goto yy586;
-	goto yy523;
-yy585:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy586:
-	yych = *++p;
-	if (yych == 'P') goto yy587;
-	if (yych != 'p') goto yy523;
-yy587:
-	yych = *++p;
-	if (yych == 'C') goto yy588;
-	if (yych != 'c') goto yy523;
-yy588:
-	yych = *++p;
-	if (yych != '.') goto yy523;
-	yych = *++p;
-	if (yych == 'B') goto yy590;
-	if (yych != 'b') goto yy523;
-yy590:
-	yych = *++p;
-	if (yych == 'E') goto yy591;
-	if (yych != 'e') goto yy523;
-yy591:
-	yych = *++p;
-	if (yych == 'E') goto yy592;
-	if (yych != 'e') goto yy523;
-yy592:
-	yych = *++p;
-	if (yych == 'P') goto yy593;
-	if (yych != 'p') goto yy523;
-yy593:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'S') goto yy533;
-		if (yych == 's') goto yy533;
-		goto yy523;
-	}
-yy594:
-	yych = *++p;
-	if (yych == 'R') goto yy595;
-	if (yych != 'r') goto yy523;
-yy595:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy596:
-	yych = *++p;
-	if (yych == 'C') goto yy604;
-	if (yych == 'c') goto yy604;
-	goto yy523;
-yy597:
-	yych = *++p;
-	if (yych == 'A') goto yy603;
-	if (yych == 'a') goto yy603;
-	goto yy523;
-yy598:
-	yych = *++p;
-	if (yych == 'B') goto yy600;
-	if (yych == 'b') goto yy600;
-	goto yy523;
-yy599:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'S') goto yy533;
-		if (yych == 's') goto yy533;
-		goto yy523;
-	}
-yy600:
-	yych = *++p;
-	if (yych == 'C') goto yy601;
-	if (yych != 'c') goto yy523;
-yy601:
-	yych = *++p;
-	if (yych == 'A') goto yy602;
-	if (yych != 'a') goto yy523;
-yy602:
-	yych = *++p;
-	if (yych == 'L') goto yy533;
-	if (yych == 'l') goto yy533;
-	goto yy523;
-yy603:
-	yych = *++p;
-	if (yych == 'I') goto yy533;
-	if (yych == 'i') goto yy533;
-	goto yy523;
-yy604:
-	yych = *++p;
-	if (yych == 'I') goto yy605;
-	if (yych != 'i') goto yy523;
-yy605:
-	yych = *++p;
-	if (yych == 'W') goto yy606;
-	if (yych != 'w') goto yy523;
-yy606:
-	yych = *++p;
-	if (yych == 'Y') goto yy607;
-	if (yych != 'y') goto yy523;
-yy607:
-	yych = *++p;
-	if (yych == 'G') goto yy533;
-	if (yych == 'g') goto yy533;
-	goto yy523;
-yy608:
-	yych = *++p;
-	if (yych == 'E') goto yy617;
-	if (yych == 'e') goto yy617;
-	goto yy523;
-yy609:
-	yych = *++p;
-	if (yych <= 'N') {
-		if (yych <= 'L') goto yy523;
-		if (yych >= 'N') goto yy611;
-	} else {
-		if (yych <= 'l') goto yy523;
-		if (yych <= 'm') goto yy610;
-		if (yych <= 'n') goto yy611;
-		goto yy523;
-	}
-yy610:
-	yych = *++p;
-	if (yych == 'M') goto yy616;
-	if (yych == 'm') goto yy616;
-	goto yy523;
-yy611:
-	yych = *++p;
-	if (yych == 'T') goto yy612;
-	if (yych != 't') goto yy523;
-yy612:
-	yych = *++p;
-	if (yych == 'R') goto yy613;
-	if (yych != 'r') goto yy523;
-yy613:
-	yych = *++p;
-	if (yych == 'I') goto yy614;
-	if (yych != 'i') goto yy523;
-yy614:
-	yych = *++p;
-	if (yych == 'L') goto yy615;
-	if (yych != 'l') goto yy523;
-yy615:
-	yych = *++p;
-	if (yych == 'O') goto yy533;
-	if (yych == 'o') goto yy533;
-	goto yy523;
-yy616:
-	yych = *++p;
-	if (yych == 'I') goto yy533;
-	if (yych == 'i') goto yy533;
-	goto yy523;
-yy617:
-	yych = *++p;
-	if (yych == 'W') goto yy618;
-	if (yych != 'w') goto yy523;
-yy618:
-	yych = *++p;
-	if (yych != '-') goto yy523;
-	yych = *++p;
-	if (yych == 'S') goto yy620;
-	if (yych != 's') goto yy523;
-yy620:
-	yych = *++p;
-	if (yych == 'O') goto yy621;
-	if (yych != 'o') goto yy523;
-yy621:
-	yych = *++p;
-	if (yych == 'U') goto yy622;
-	if (yych != 'u') goto yy523;
-yy622:
-	yych = *++p;
-	if (yych == 'R') goto yy623;
-	if (yych != 'r') goto yy523;
-yy623:
-	yych = *++p;
-	if (yych == 'C') goto yy624;
-	if (yych != 'c') goto yy523;
-yy624:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy625:
-	yych = *++p;
-	if (yych == '2') goto yy632;
-	goto yy523;
-yy626:
-	yych = *++p;
-	if (yych == 'R') goto yy629;
-	if (yych == 'r') goto yy629;
-	goto yy523;
-yy627:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy628:
-	yych = *++p;
-	if (yych == 'N') goto yy533;
-	if (yych == 'n') goto yy533;
-	goto yy523;
-yy629:
-	yych = *++p;
-	if (yych == 'E') goto yy630;
-	if (yych != 'e') goto yy523;
-yy630:
-	yych = *++p;
-	if (yych == 'A') goto yy631;
-	if (yych != 'a') goto yy523;
-yy631:
-	yych = *++p;
-	if (yych == 'L') goto yy533;
-	if (yych == 'l') goto yy533;
-	goto yy523;
-yy632:
-	yych = *++p;
-	if (yych != '0') goto yy523;
-	yych = *++p;
-	if (yych != '0') goto yy523;
-	yych = *++p;
-	if (yych == '4') goto yy533;
-	goto yy523;
-yy635:
-	yych = *++p;
-	if (yych == 'I') goto yy654;
-	if (yych == 'i') goto yy654;
-	goto yy523;
-yy636:
-	yych = *++p;
-	if (yych <= 'L') {
-		if (yych == 'A') goto yy646;
-		if (yych <= 'K') goto yy523;
-		goto yy645;
-	} else {
-		if (yych <= 'a') {
-			if (yych <= '`') goto yy523;
-			goto yy646;
-		} else {
-			if (yych == 'l') goto yy645;
-			goto yy523;
-		}
-	}
-yy637:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy638:
-	yych = *++p;
-	if (yych == '3') goto yy642;
-	goto yy523;
-yy639:
-	yych = *++p;
-	if (yych == 'T') goto yy641;
-	if (yych == 't') goto yy641;
-	goto yy523;
-yy640:
-	yych = *++p;
-	if (yych == 'G') goto yy533;
-	if (yych == 'g') goto yy533;
-	goto yy523;
-yy641:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy642:
-	yych = *++p;
-	if (yych != '2') goto yy523;
-	yych = *++p;
-	if (yych != '7') goto yy523;
-	yych = *++p;
-	if (yych == '0') goto yy533;
-	goto yy523;
-yy645:
-	yych = *++p;
-	if (yych <= 'M') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'N') goto yy652;
-		if (yych == 'n') goto yy652;
-		goto yy523;
-	}
-yy646:
-	yych = *++p;
-	if (yych == 'M') goto yy647;
-	if (yych != 'm') goto yy523;
-yy647:
-	yych = *++p;
-	if (yych == 'S') goto yy648;
-	if (yych != 's') goto yy523;
-yy648:
-	yych = *++p;
-	if (yych == 'P') goto yy649;
-	if (yych != 'p') goto yy523;
-yy649:
-	yych = *++p;
-	if (yych == 'E') goto yy650;
-	if (yych != 'e') goto yy523;
-yy650:
-	yych = *++p;
-	if (yych == 'A') goto yy651;
-	if (yych != 'a') goto yy523;
-yy651:
-	yych = *++p;
-	if (yych == 'K') goto yy533;
-	if (yych == 'k') goto yy533;
-	goto yy523;
-yy652:
-	yych = *++p;
-	if (yych == 'E') goto yy653;
-	if (yych != 'e') goto yy523;
-yy653:
-	yych = *++p;
-	if (yych == 'T') goto yy533;
-	if (yych == 't') goto yy533;
-	goto yy523;
-yy654:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych == 'N') goto yy655;
-		if (yych <= 'R') goto yy523;
-		goto yy656;
-	} else {
-		if (yych <= 'n') {
-			if (yych <= 'm') goto yy523;
-		} else {
-			if (yych == 's') goto yy656;
-			goto yy523;
-		}
-	}
-yy655:
-	yych = *++p;
-	if (yych == 'G') goto yy663;
-	if (yych == 'g') goto yy663;
-	goto yy523;
-yy656:
-	yych = *++p;
-	if (yych == 'M') goto yy657;
-	if (yych != 'm') goto yy523;
-yy657:
-	yych = *++p;
-	if (yych == 'E') goto yy658;
-	if (yych != 'e') goto yy523;
-yy658:
-	yych = *++p;
-	if (yych == 'S') goto yy659;
-	if (yych != 's') goto yy523;
-yy659:
-	yych = *++p;
-	if (yych == 'S') goto yy660;
-	if (yych != 's') goto yy523;
-yy660:
-	yych = *++p;
-	if (yych == 'A') goto yy661;
-	if (yych != 'a') goto yy523;
-yy661:
-	yych = *++p;
-	if (yych == 'G') goto yy662;
-	if (yych != 'g') goto yy523;
-yy662:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy663:
-	yych = *++p;
-	if (yych == 'S') goto yy533;
-	if (yych == 's') goto yy533;
-	goto yy523;
-yy664:
-	yych = *++p;
-	if (yych == 'N') goto yy533;
-	if (yych == 'n') goto yy533;
-	goto yy523;
-yy665:
-	yych = *++p;
-	if (yych == 'E') goto yy715;
-	if (yych == 'e') goto yy715;
-	goto yy523;
-yy666:
-	yych = *++p;
-	if (yych == 'H') goto yy533;
-	if (yych == 'h') goto yy533;
-	goto yy523;
-yy667:
-	yych = *++p;
-	if (yych == 'O') goto yy711;
-	if (yych == 'o') goto yy711;
-	goto yy523;
-yy668:
-	yych = *++p;
-	if (yych <= 'L') {
-		if (yych == 'A') goto yy701;
-		if (yych <= 'K') goto yy523;
-		goto yy702;
-	} else {
-		if (yych <= 'a') {
-			if (yych <= '`') goto yy523;
-			goto yy701;
-		} else {
-			if (yych == 'l') goto yy702;
-			goto yy523;
-		}
-	}
-yy669:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych == 'B') goto yy533;
-		if (yych <= 'R') goto yy523;
-		goto yy533;
-	} else {
-		if (yych <= 'b') {
-			if (yych <= 'a') goto yy523;
-			goto yy533;
-		} else {
-			if (yych == 's') goto yy533;
-			goto yy523;
-		}
-	}
-yy670:
-	yych = *++p;
-	if (yych == 'Y') goto yy699;
-	if (yych == 'y') goto yy699;
-	goto yy523;
-yy671:
-	yych = *++p;
-	if (yych == 'N') goto yy533;
-	if (yych == 'n') goto yy533;
-	goto yy523;
-yy672:
-	yych = *++p;
-	if (yych == 'T') goto yy698;
-	if (yych == 't') goto yy698;
-	goto yy523;
-yy673:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych <= 'C') {
-			if (yych <= 'B') goto yy523;
-			goto yy685;
-		} else {
-			if (yych <= 'Q') goto yy523;
-			if (yych <= 'R') goto yy683;
-			goto yy684;
-		}
-	} else {
-		if (yych <= 'q') {
-			if (yych == 'c') goto yy685;
-			goto yy523;
-		} else {
-			if (yych <= 'r') goto yy683;
-			if (yych <= 's') goto yy684;
-			goto yy523;
-		}
-	}
-yy674:
-	yych = *++p;
-	if (yych == 'M') goto yy682;
-	if (yych == 'm') goto yy682;
-	goto yy523;
-yy675:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'E') goto yy679;
-		if (yych <= 'O') goto yy523;
-		goto yy680;
-	} else {
-		if (yych <= 'e') {
-			if (yych <= 'd') goto yy523;
-			goto yy679;
-		} else {
-			if (yych == 'p') goto yy680;
-			goto yy523;
-		}
-	}
-yy676:
-	yych = *++p;
-	if (yych == 'T') goto yy677;
-	if (yych != 't') goto yy523;
-yy677:
-	yych = *++p;
-	if (yych == 'T') goto yy678;
-	if (yych != 't') goto yy523;
-yy678:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy679:
-	yych = *++p;
-	if (yych == 'V') goto yy681;
-	if (yych == 'v') goto yy681;
-	goto yy523;
-yy680:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'S') goto yy533;
-		if (yych == 's') goto yy533;
-		goto yy523;
-	}
-yy681:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy682:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy683:
-	yych = *++p;
-	if (yych == 'V') goto yy695;
-	if (yych == 'v') goto yy695;
-	goto yy523;
-yy684:
-	yych = *++p;
-	if (yych == 'S') goto yy692;
-	if (yych == 's') goto yy692;
-	goto yy523;
-yy685:
-	yych = *++p;
-	if (yych == 'O') goto yy686;
-	if (yych != 'o') goto yy523;
-yy686:
-	yych = *++p;
-	if (yych == 'N') goto yy687;
-	if (yych != 'n') goto yy523;
-yy687:
-	yych = *++p;
-	if (yych == 'D') goto yy688;
-	if (yych != 'd') goto yy523;
-yy688:
-	yych = *++p;
-	if (yych == 'L') goto yy689;
-	if (yych != 'l') goto yy523;
-yy689:
-	yych = *++p;
-	if (yych == 'I') goto yy690;
-	if (yych != 'i') goto yy523;
-yy690:
-	yych = *++p;
-	if (yych == 'F') goto yy691;
-	if (yych != 'f') goto yy523;
-yy691:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy692:
-	yych = *++p;
-	if (yych == 'I') goto yy693;
-	if (yych != 'i') goto yy523;
-yy693:
-	yych = *++p;
-	if (yych == 'O') goto yy694;
-	if (yych != 'o') goto yy523;
-yy694:
-	yych = *++p;
-	if (yych == 'N') goto yy533;
-	if (yych == 'n') goto yy533;
-	goto yy523;
-yy695:
-	yych = *++p;
-	if (yych == 'I') goto yy696;
-	if (yych != 'i') goto yy523;
-yy696:
-	yych = *++p;
-	if (yych == 'C') goto yy697;
-	if (yych != 'c') goto yy523;
-yy697:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy698:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy699:
-	yych = *++p;
-	if (yych == 'P') goto yy700;
-	if (yych != 'p') goto yy523;
-yy700:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy701:
-	yych = *++p;
-	if (yych == 'P') goto yy705;
-	if (yych == 'p') goto yy705;
-	goto yy523;
-yy702:
-	yych = *++p;
-	if (yych == 'D') goto yy703;
-	if (yych != 'd') goto yy523;
-yy703:
-	yych = *++p;
-	if (yych == 'A') goto yy704;
-	if (yych != 'a') goto yy523;
-yy704:
-	yych = *++p;
-	if (yych == 'T') goto yy533;
-	if (yych == 't') goto yy533;
-	goto yy523;
-yy705:
-	yych = *++p;
-	if (yych != '.') goto yy523;
-	yych = *++p;
-	if (yych == 'B') goto yy707;
-	if (yych != 'b') goto yy523;
-yy707:
-	yych = *++p;
-	if (yych == 'E') goto yy708;
-	if (yych != 'e') goto yy523;
-yy708:
-	yych = *++p;
-	if (yych == 'E') goto yy709;
-	if (yych != 'e') goto yy523;
-yy709:
-	yych = *++p;
-	if (yych == 'P') goto yy710;
-	if (yych != 'p') goto yy523;
-yy710:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'S') goto yy533;
-		if (yych == 's') goto yy533;
-		goto yy523;
-	}
-yy711:
-	yych = *++p;
-	if (yych == 'T') goto yy712;
-	if (yych != 't') goto yy523;
-yy712:
-	yych = *++p;
-	if (yych == 'I') goto yy713;
-	if (yych != 'i') goto yy523;
-yy713:
-	yych = *++p;
-	if (yych == 'F') goto yy714;
-	if (yych != 'f') goto yy523;
-yy714:
-	yych = *++p;
-	if (yych == 'Y') goto yy533;
-	if (yych == 'y') goto yy533;
-	goto yy523;
-yy715:
-	yych = *++p;
-	if (yych == 'A') goto yy716;
-	if (yych != 'a') goto yy523;
-yy716:
-	yych = *++p;
-	if (yych == 'M') goto yy533;
-	if (yych == 'm') goto yy533;
-	goto yy523;
-yy717:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych == 'M') goto yy729;
-		if (yych <= 'R') goto yy523;
-		goto yy728;
-	} else {
-		if (yych <= 'm') {
-			if (yych <= 'l') goto yy523;
-			goto yy729;
-		} else {
-			if (yych == 's') goto yy728;
-			goto yy523;
-		}
-	}
-yy718:
-	yych = *++p;
-	if (yych == 'Y') goto yy726;
-	if (yych == 'y') goto yy726;
-	goto yy523;
-yy719:
-	yych = *++p;
-	if (yych == 'I') goto yy533;
-	if (yych == 'i') goto yy533;
-	goto yy523;
-yy720:
-	yych = *++p;
-	if (yych == 'S') goto yy721;
-	if (yych != 's') goto yy523;
-yy721:
-	yych = *++p;
-	if (yych <= 'N') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'O') goto yy722;
-		if (yych != 'o') goto yy523;
-	}
-yy722:
-	yych = *++p;
-	if (yych == 'U') goto yy723;
-	if (yych != 'u') goto yy523;
-yy723:
-	yych = *++p;
-	if (yych == 'R') goto yy724;
-	if (yych != 'r') goto yy523;
-yy724:
-	yych = *++p;
-	if (yych == 'C') goto yy725;
-	if (yych != 'c') goto yy523;
-yy725:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy726:
-	yych = *++p;
-	if (yych == 'N') goto yy727;
-	if (yych != 'n') goto yy523;
-yy727:
-	yych = *++p;
-	if (yych == 'C') goto yy533;
-	if (yych == 'c') goto yy533;
-	goto yy523;
-yy728:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy729:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy730:
-	yych = *++p;
-	if (yych == 'Y') goto yy750;
-	if (yych == 'y') goto yy750;
-	goto yy523;
-yy731:
-	yych = *++p;
-	if (yych <= 'O') {
-		if (yych == 'E') goto yy747;
-		if (yych <= 'N') goto yy523;
-		goto yy748;
-	} else {
-		if (yych <= 'e') {
-			if (yych <= 'd') goto yy523;
-			goto yy747;
-		} else {
-			if (yych == 'o') goto yy748;
-			goto yy523;
-		}
-	}
-yy732:
-	yych = *++p;
-	if (yych == 'A') goto yy742;
-	if (yych == 'a') goto yy742;
-	goto yy523;
-yy733:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'L') goto yy735;
-		if (yych <= 'O') goto yy523;
-		goto yy736;
-	} else {
-		if (yych <= 'l') {
-			if (yych <= 'k') goto yy523;
-			goto yy735;
-		} else {
-			if (yych == 'p') goto yy736;
-			goto yy523;
-		}
-	}
-yy734:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy735:
-	yych = *++p;
-	if (yych == 'M') goto yy533;
-	if (yych == 'm') goto yy533;
-	goto yy523;
-yy736:
-	yych = *++p;
-	if (yych == 'A') goto yy737;
-	if (yych != 'a') goto yy523;
-yy737:
-	yych = *++p;
-	if (yych == 'R') goto yy738;
-	if (yych != 'r') goto yy523;
-yy738:
-	yych = *++p;
-	if (yych == 'A') goto yy739;
-	if (yych != 'a') goto yy523;
-yy739:
-	yych = *++p;
-	if (yych == 'Z') goto yy740;
-	if (yych != 'z') goto yy523;
-yy740:
-	yych = *++p;
-	if (yych == 'Z') goto yy741;
-	if (yych != 'z') goto yy523;
-yy741:
-	yych = *++p;
-	if (yych == 'I') goto yy533;
-	if (yych == 'i') goto yy533;
-	goto yy523;
-yy742:
-	yych = *++p;
-	if (yych == 'T') goto yy743;
-	if (yych != 't') goto yy523;
-yy743:
-	yych = *++p;
-	if (yych == 'F') goto yy744;
-	if (yych != 'f') goto yy523;
-yy744:
-	yych = *++p;
-	if (yych == 'O') goto yy745;
-	if (yych != 'o') goto yy523;
-yy745:
-	yych = *++p;
-	if (yych == 'R') goto yy746;
-	if (yych != 'r') goto yy523;
-yy746:
-	yych = *++p;
-	if (yych == 'M') goto yy533;
-	if (yych == 'm') goto yy533;
-	goto yy523;
-yy747:
-	yych = *++p;
-	if (yych == 'S') goto yy533;
-	if (yych == 's') goto yy533;
-	goto yy523;
-yy748:
-	yych = *++p;
-	if (yych == 'X') goto yy749;
-	if (yych != 'x') goto yy523;
-yy749:
-	yych = *++p;
-	if (yych == 'Y') goto yy533;
-	if (yych == 'y') goto yy533;
-	goto yy523;
-yy750:
-	yych = *++p;
-	if (yych == 'C') goto yy533;
-	if (yych == 'c') goto yy533;
-	goto yy523;
-yy751:
-	yych = *++p;
-	if (yych == 'D') goto yy533;
-	if (yych == 'd') goto yy533;
-	goto yy523;
-yy752:
-	yych = *++p;
-	if (yych == 'A') goto yy753;
-	if (yych != 'a') goto yy523;
-yy753:
-	yych = *++p;
-	if (yych == 'Q') goto yy754;
-	if (yych != 'q') goto yy523;
-yy754:
-	yych = *++p;
-	if (yych == 'U') goto yy755;
-	if (yych != 'u') goto yy523;
-yy755:
-	yych = *++p;
-	if (yych == 'E') goto yy756;
-	if (yych != 'e') goto yy523;
-yy756:
-	yych = *++p;
-	if (yych == 'L') goto yy757;
-	if (yych != 'l') goto yy523;
-yy757:
-	yych = *++p;
-	if (yych == 'O') goto yy758;
-	if (yych != 'o') goto yy523;
-yy758:
-	yych = *++p;
-	if (yych == 'C') goto yy759;
-	if (yych != 'c') goto yy523;
-yy759:
-	yych = *++p;
-	if (yych == 'K') goto yy760;
-	if (yych != 'k') goto yy523;
-yy760:
-	yych = *++p;
-	if (yych == 'T') goto yy761;
-	if (yych != 't') goto yy523;
-yy761:
-	yych = *++p;
-	if (yych == 'O') goto yy762;
-	if (yych != 'o') goto yy523;
-yy762:
-	yych = *++p;
-	if (yych == 'K') goto yy763;
-	if (yych != 'k') goto yy523;
-yy763:
-	yych = *++p;
-	if (yych == 'E') goto yy764;
-	if (yych != 'e') goto yy523;
-yy764:
-	yych = *++p;
-	if (yych == 'N') goto yy533;
-	if (yych == 'n') goto yy533;
-	goto yy523;
-yy765:
-	yych = *++p;
-	if (yych == 'T') goto yy772;
-	if (yych == 't') goto yy772;
-	goto yy523;
-yy766:
-	yych = *++p;
-	if (yych == 'T') goto yy771;
-	if (yych == 't') goto yy771;
-	goto yy523;
-yy767:
-	yych = *++p;
-	if (yych <= 'G') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'H') goto yy533;
-		if (yych == 'h') goto yy533;
-		goto yy523;
-	}
-yy768:
-	yych = *++p;
-	if (yych == 'S') goto yy533;
-	if (yych == 's') goto yy533;
-	goto yy523;
-yy769:
-	yych = *++p;
-	if (yych == 'W') goto yy770;
-	if (yych != 'w') goto yy523;
-yy770:
-	yych = *++p;
-	if (yych == 'S') goto yy533;
-	if (yych == 's') goto yy533;
-	goto yy523;
-yy771:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy772:
-	yych = *++p;
-	if (yych == 'E') goto yy773;
-	if (yych != 'e') goto yy523;
-yy773:
-	yych = *++p;
-	if (yych == 'S') goto yy533;
-	if (yych == 's') goto yy533;
-	goto yy523;
-yy774:
-	yych = *++p;
-	if (yych == 'N') goto yy533;
-	if (yych == 'n') goto yy533;
-	goto yy523;
-yy775:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'M') goto yy806;
-		if (yych <= 'O') goto yy523;
-		goto yy805;
-	} else {
-		if (yych <= 'm') {
-			if (yych <= 'l') goto yy523;
-			goto yy806;
-		} else {
-			if (yych == 'p') goto yy805;
-			goto yy523;
-		}
-	}
-yy776:
-	yych = *++p;
-	if (yych <= 'Q') {
-		if (yych <= '-') {
-			if (yych <= ',') goto yy523;
-			goto yy798;
-		} else {
-			if (yych == 'N') goto yy799;
-			goto yy523;
-		}
-	} else {
-		if (yych <= 'n') {
-			if (yych <= 'R') goto yy797;
-			if (yych <= 'm') goto yy523;
-			goto yy799;
-		} else {
-			if (yych == 'r') goto yy797;
-			goto yy523;
-		}
-	}
-yy777:
-	yych = *++p;
-	if (yych == 'S') goto yy533;
-	if (yych == 's') goto yy533;
-	goto yy523;
-yy778:
-	yych = *++p;
-	if (yych == 'S') goto yy793;
-	if (yych == 's') goto yy793;
-	goto yy523;
-yy779:
-	yych = *++p;
-	switch (yych) {
-	case 'G':
-	case 'g':	goto yy784;
-	case 'I':
-	case 'i':	goto yy783;
-	case 'P':
-	case 'p':	goto yy785;
-	case 'R':
-	case 'r':	goto yy786;
-	default:	goto yy523;
-	}
-yy780:
-	yych = *++p;
-	if (yych == 'Q') goto yy782;
-	if (yych == 'q') goto yy782;
-	goto yy523;
-yy781:
-	yych = *++p;
-	if (yych == 'D') goto yy533;
-	if (yych == 'd') goto yy533;
-	goto yy523;
-yy782:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy783:
-	yych = *++p;
-	if (yych == 'L') goto yy791;
-	if (yych == 'l') goto yy791;
-	goto yy523;
-yy784:
-	yych = *++p;
-	if (yych == 'N') goto yy789;
-	if (yych == 'n') goto yy789;
-	goto yy523;
-yy785:
-	yych = *++p;
-	if (yych == 'S') goto yy533;
-	if (yych == 's') goto yy533;
-	goto yy523;
-yy786:
-	yych = *++p;
-	if (yych == 'K') goto yy787;
-	if (yych != 'k') goto yy523;
-yy787:
-	yych = *++p;
-	if (yych == 'E') goto yy788;
-	if (yych != 'e') goto yy523;
-yy788:
-	yych = *++p;
-	if (yych == 'T') goto yy533;
-	if (yych == 't') goto yy533;
-	goto yy523;
-yy789:
-	yych = *++p;
-	if (yych == 'E') goto yy790;
-	if (yych != 'e') goto yy523;
-yy790:
-	yych = *++p;
-	if (yych == 'T') goto yy533;
-	if (yych == 't') goto yy533;
-	goto yy523;
-yy791:
-	yych = *++p;
-	if (yych == 'T') goto yy792;
-	if (yych != 't') goto yy523;
-yy792:
-	yych = *++p;
-	if (yych == 'O') goto yy533;
-	if (yych == 'o') goto yy533;
-	goto yy523;
-yy793:
-	yych = *++p;
-	if (yych == 'S') goto yy794;
-	if (yych != 's') goto yy523;
-yy794:
-	yych = *++p;
-	if (yych == 'A') goto yy795;
-	if (yych != 'a') goto yy523;
-yy795:
-	yych = *++p;
-	if (yych == 'G') goto yy796;
-	if (yych != 'g') goto yy523;
-yy796:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy797:
-	yych = *++p;
-	if (yych == 'P') goto yy804;
-	if (yych == 'p') goto yy804;
-	goto yy523;
-yy798:
-	yych = *++p;
-	if (yych == 'H') goto yy801;
-	if (yych == 'h') goto yy801;
-	goto yy523;
-yy799:
-	yych = *++p;
-	if (yych == 'I') goto yy800;
-	if (yych != 'i') goto yy523;
-yy800:
-	yych = *++p;
-	if (yych == 'M') goto yy533;
-	if (yych == 'm') goto yy533;
-	goto yy523;
-yy801:
-	yych = *++p;
-	if (yych == 'E') goto yy802;
-	if (yych != 'e') goto yy523;
-yy802:
-	yych = *++p;
-	if (yych == 'L') goto yy803;
-	if (yych != 'l') goto yy523;
-yy803:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy804:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'S') goto yy533;
-		if (yych == 's') goto yy533;
-		goto yy523;
-	}
-yy805:
-	yych = *++p;
-	if (yych == 'D') goto yy809;
-	if (yych == 'd') goto yy809;
-	goto yy523;
-yy806:
-	yych = *++p;
-	if (yych == 'B') goto yy807;
-	if (yych != 'b') goto yy523;
-yy807:
-	yych = *++p;
-	if (yych == 'L') goto yy808;
-	if (yych != 'l') goto yy523;
-yy808:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy809:
-	yych = *++p;
-	if (yych == 'A') goto yy810;
-	if (yych != 'a') goto yy523;
-yy810:
-	yych = *++p;
-	if (yych == 'T') goto yy811;
-	if (yych != 't') goto yy523;
-yy811:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy812:
-	yych = *++p;
-	if (yych == 'A') goto yy817;
-	if (yych == 'a') goto yy817;
-	goto yy523;
-yy813:
-	yych = *++p;
-	if (yych == 'S') goto yy814;
-	if (yych != 's') goto yy523;
-yy814:
-	yych = *++p;
-	if (yych == 'T') goto yy815;
-	if (yych != 't') goto yy523;
-yy815:
-	yych = *++p;
-	if (yych == 'F') goto yy816;
-	if (yych != 'f') goto yy523;
-yy816:
-	yych = *++p;
-	if (yych == 'M') goto yy533;
-	if (yych == 'm') goto yy533;
-	goto yy523;
-yy817:
-	yych = *++p;
-	if (yych == 'P') goto yy818;
-	if (yych != 'p') goto yy523;
-yy818:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'S') goto yy533;
-		if (yych == 's') goto yy533;
-		goto yy523;
-	}
-yy819:
-	yych = *++p;
-	if (yych == 'M') goto yy842;
-	if (yych == 'm') goto yy842;
-	goto yy523;
-yy820:
-	yych = *++p;
-	if (yych <= 'I') {
-		if (yych == 'C') goto yy831;
-		if (yych <= 'H') goto yy523;
-		goto yy830;
-	} else {
-		if (yych <= 'c') {
-			if (yych <= 'b') goto yy523;
-			goto yy831;
-		} else {
-			if (yych == 'i') goto yy830;
-			goto yy523;
-		}
-	}
-yy821:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'N') goto yy533;
-		if (yych <= 'O') goto yy523;
-		goto yy533;
-	} else {
-		if (yych <= 'n') {
-			if (yych <= 'm') goto yy523;
-			goto yy533;
-		} else {
-			if (yych == 'p') goto yy533;
-			goto yy523;
-		}
-	}
-yy822:
-	yych = *++p;
-	if (yych <= 'O') {
-		if (yych == 'A') goto yy828;
-		if (yych <= 'N') goto yy523;
-		goto yy829;
-	} else {
-		if (yych <= 'a') {
-			if (yych <= '`') goto yy523;
-			goto yy828;
-		} else {
-			if (yych == 'o') goto yy829;
-			goto yy523;
-		}
-	}
-yy823:
-	yych = *++p;
-	if (yych == 'F') goto yy827;
-	if (yych == 'f') goto yy827;
-	goto yy523;
-yy824:
-	yych = *++p;
-	if (yych <= '@') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'A') goto yy826;
-		if (yych == 'a') goto yy826;
-		goto yy523;
-	}
-yy825:
-	yych = *++p;
-	if (yych == 'X') goto yy533;
-	if (yych == 'x') goto yy533;
-	goto yy523;
-yy826:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy827:
-	yych = *++p;
-	if (yych == 'O') goto yy533;
-	if (yych == 'o') goto yy533;
-	goto yy523;
-yy828:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy829:
-	yych = *++p;
-	if (yych == 'N') goto yy533;
-	if (yych == 'n') goto yy533;
-	goto yy523;
-yy830:
-	yych = *++p;
-	if (yych == 'S') goto yy832;
-	if (yych == 's') goto yy832;
-	goto yy523;
-yy831:
-	yych = *++p;
-	if (yych <= ':') {
-		if (yych == '6') goto yy533;
-		if (yych <= '9') goto yy523;
-		goto yy534;
-	} else {
-		if (yych <= 'S') {
-			if (yych <= 'R') goto yy523;
-			goto yy533;
-		} else {
-			if (yych == 's') goto yy533;
-			goto yy523;
-		}
-	}
-yy832:
-	yych = *++p;
-	if (yych == '.') goto yy833;
-	if (yych == ':') goto yy534;
-	goto yy523;
-yy833:
-	yych = *++p;
-	if (yych <= 'X') {
-		if (yych <= 'K') {
-			if (yych == 'B') goto yy836;
-			goto yy523;
-		} else {
-			if (yych <= 'L') goto yy834;
-			if (yych <= 'W') goto yy523;
-			goto yy835;
-		}
-	} else {
-		if (yych <= 'k') {
-			if (yych == 'b') goto yy836;
-			goto yy523;
-		} else {
-			if (yych <= 'l') goto yy834;
-			if (yych == 'x') goto yy835;
-			goto yy523;
-		}
-	}
-yy834:
-	yych = *++p;
-	if (yych == 'W') goto yy841;
-	if (yych == 'w') goto yy841;
-	goto yy523;
-yy835:
-	yych = *++p;
-	if (yych == 'P') goto yy839;
-	if (yych == 'p') goto yy839;
-	goto yy523;
-yy836:
-	yych = *++p;
-	if (yych == 'E') goto yy837;
-	if (yych != 'e') goto yy523;
-yy837:
-	yych = *++p;
-	if (yych == 'E') goto yy838;
-	if (yych != 'e') goto yy523;
-yy838:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy839:
-	yych = *++p;
-	if (yych == 'C') goto yy840;
-	if (yych != 'c') goto yy523;
-yy840:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'S') goto yy533;
-		if (yych == 's') goto yy533;
-		goto yy523;
-	}
-yy841:
-	yych = *++p;
-	if (yych == 'Z') goto yy533;
-	if (yych == 'z') goto yy533;
-	goto yy523;
-yy842:
-	yych = *++p;
-	if (yych == 'S') goto yy533;
-	if (yych == 's') goto yy533;
-	goto yy523;
-yy843:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy844:
-	yych = *++p;
-	if (yych == 'T') goto yy847;
-	if (yych == 't') goto yy847;
-	goto yy523;
-yy845:
-	yych = *++p;
-	if (yych != '2') goto yy523;
-	yych = *++p;
-	if (yych == '3') goto yy533;
-	goto yy523;
-yy847:
-	yych = *++p;
-	if (yych == 'P') goto yy848;
-	if (yych != 'p') goto yy523;
-yy848:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'S') goto yy533;
-		if (yych == 's') goto yy533;
-		goto yy523;
-	}
-yy849:
-	yych = *++p;
-	if (yych == 'A') goto yy865;
-	if (yych == 'a') goto yy865;
-	goto yy523;
-yy850:
-	yych = *++p;
-	if (yych <= 'Z') {
-		if (yych == 'T') goto yy533;
-		if (yych <= 'Y') goto yy523;
-		goto yy856;
-	} else {
-		if (yych <= 't') {
-			if (yych <= 's') goto yy523;
-			goto yy533;
-		} else {
-			if (yych == 'z') goto yy856;
-			goto yy523;
-		}
-	}
-yy851:
-	yych = *++p;
-	if (yych <= 'O') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'P') goto yy853;
-		if (yych == 'p') goto yy853;
-		goto yy523;
-	}
-yy852:
-	yych = *++p;
-	if (yych == 'O') goto yy533;
-	if (yych == 'o') goto yy533;
-	goto yy523;
-yy853:
-	yych = *++p;
-	if (yych == 'H') goto yy854;
-	if (yych != 'h') goto yy523;
-yy854:
-	yych = *++p;
-	if (yych == 'E') goto yy855;
-	if (yych != 'e') goto yy523;
-yy855:
-	yych = *++p;
-	if (yych == 'R') goto yy533;
-	if (yych == 'r') goto yy533;
-	goto yy523;
-yy856:
-	yych = *++p;
-	if (yych == 'M') goto yy857;
-	if (yych != 'm') goto yy523;
-yy857:
-	yych = *++p;
-	if (yych == 'O') goto yy858;
-	if (yych != 'o') goto yy523;
-yy858:
-	yych = *++p;
-	if (yych == 'P') goto yy859;
-	if (yych != 'p') goto yy523;
-yy859:
-	yych = *++p;
-	if (yych == 'R') goto yy860;
-	if (yych != 'r') goto yy523;
-yy860:
-	yych = *++p;
-	if (yych == 'O') goto yy861;
-	if (yych != 'o') goto yy523;
-yy861:
-	yych = *++p;
-	if (yych == 'J') goto yy862;
-	if (yych != 'j') goto yy523;
-yy862:
-	yych = *++p;
-	if (yych == 'E') goto yy863;
-	if (yych != 'e') goto yy523;
-yy863:
-	yych = *++p;
-	if (yych == 'C') goto yy864;
-	if (yych != 'c') goto yy523;
-yy864:
-	yych = *++p;
-	if (yych == 'T') goto yy533;
-	if (yych == 't') goto yy533;
-	goto yy523;
-yy865:
-	yych = *++p;
-	if (yych == 'L') goto yy866;
-	if (yych != 'l') goto yy523;
-yy866:
-	yych = *++p;
-	if (yych == 'K') goto yy533;
-	if (yych == 'k') goto yy533;
-	goto yy523;
-yy867:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych <= 'M') {
-			if (yych == 'L') goto yy877;
-			goto yy523;
-		} else {
-			if (yych <= 'N') goto yy878;
-			if (yych <= 'R') goto yy523;
-			goto yy879;
-		}
-	} else {
-		if (yych <= 'm') {
-			if (yych == 'l') goto yy877;
-			goto yy523;
-		} else {
-			if (yych <= 'n') goto yy878;
-			if (yych == 's') goto yy879;
-			goto yy523;
-		}
-	}
-yy868:
-	yych = *++p;
-	if (yych == 'E') goto yy876;
-	if (yych == 'e') goto yy876;
-	goto yy523;
-yy869:
-	yych = *++p;
-	if (yych == 'C') goto yy871;
-	if (yych == 'c') goto yy871;
-	goto yy523;
-yy870:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy871:
-	yych = *++p;
-	if (yych == 'E') goto yy872;
-	if (yych != 'e') goto yy523;
-yy872:
-	yych = *++p;
-	if (yych == 'T') goto yy873;
-	if (yych != 't') goto yy523;
-yy873:
-	yych = *++p;
-	if (yych == 'I') goto yy874;
-	if (yych != 'i') goto yy523;
-yy874:
-	yych = *++p;
-	if (yych == 'M') goto yy875;
-	if (yych != 'm') goto yy523;
-yy875:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy876:
-	yych = *++p;
-	if (yych == 'D') goto yy533;
-	if (yych == 'd') goto yy533;
-	goto yy523;
-yy877:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy878:
-	yych = *++p;
-	if (yych == 'G') goto yy880;
-	if (yych == 'g') goto yy880;
-	goto yy523;
-yy879:
-	yych = *++p;
-	if (yych == 'H') goto yy533;
-	if (yych == 'h') goto yy533;
-	goto yy523;
-yy880:
-	yych = *++p;
-	if (yych == 'E') goto yy881;
-	if (yych != 'e') goto yy523;
-yy881:
-	yych = *++p;
-	if (yych == 'R') goto yy533;
-	if (yych == 'r') goto yy533;
-	goto yy523;
-yy882:
-	yych = *++p;
-	if (yych == 'T') goto yy900;
-	if (yych == 't') goto yy900;
-	goto yy523;
-yy883:
-	yych = *++p;
-	if (yych == 'T') goto yy533;
-	if (yych == 't') goto yy533;
-	goto yy523;
-yy884:
-	yych = *++p;
-	if (yych == 'M') goto yy533;
-	if (yych == 'm') goto yy533;
-	goto yy523;
-yy885:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych == 'P') goto yy533;
-		if (yych <= 'R') goto yy523;
-		goto yy533;
-	} else {
-		if (yych <= 'p') {
-			if (yych <= 'o') goto yy523;
-			goto yy533;
-		} else {
-			if (yych == 's') goto yy533;
-			goto yy523;
-		}
-	}
-yy886:
-	yych = *++p;
-	if (yych == 'I') goto yy894;
-	if (yych == 'i') goto yy894;
-	goto yy523;
-yy887:
-	yych = *++p;
-	if (yych == 'A') goto yy893;
-	if (yych == 'a') goto yy893;
-	goto yy523;
-yy888:
-	yych = *++p;
-	if (yych == 'O') goto yy891;
-	if (yych == 'o') goto yy891;
-	goto yy523;
-yy889:
-	yych = *++p;
-	if (yych == 'A') goto yy890;
-	if (yych != 'a') goto yy523;
-yy890:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == ':') goto yy534;
-		goto yy523;
-	} else {
-		if (yych <= 'S') goto yy533;
-		if (yych == 's') goto yy533;
-		goto yy523;
-	}
-yy891:
-	yych = *++p;
-	if (yych == 'U') goto yy892;
-	if (yych != 'u') goto yy523;
-yy892:
-	yych = *++p;
-	if (yych == 'T') goto yy533;
-	if (yych == 't') goto yy533;
-	goto yy523;
-yy893:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy894:
-	yych = *++p;
-	if (yych == 'U') goto yy895;
-	if (yych != 'u') goto yy523;
-yy895:
-	yych = *++p;
-	if (yych == 'M') goto yy896;
-	if (yych != 'm') goto yy523;
-yy896:
-	yych = *++p;
-	if (yych == 'X') goto yy897;
-	if (yych != 'x') goto yy523;
-yy897:
-	yych = *++p;
-	if (yych == 'T') goto yy898;
-	if (yych != 't') goto yy523;
-yy898:
-	yych = *++p;
-	if (yych == 'R') goto yy899;
-	if (yych != 'r') goto yy523;
-yy899:
-	yych = *++p;
-	if (yych == 'A') goto yy533;
-	if (yych == 'a') goto yy533;
-	goto yy523;
-yy900:
-	yych = *++p;
-	if (yych == 'A') goto yy901;
-	if (yych != 'a') goto yy523;
-yy901:
-	yych = *++p;
-	if (yych == 'C') goto yy902;
-	if (yych != 'c') goto yy523;
-yy902:
-	yych = *++p;
-	if (yych == 'H') goto yy903;
-	if (yych != 'h') goto yy523;
-yy903:
-	yych = *++p;
-	if (yych == 'M') goto yy904;
-	if (yych != 'm') goto yy523;
-yy904:
-	yych = *++p;
-	if (yych == 'E') goto yy905;
-	if (yych != 'e') goto yy523;
-yy905:
-	yych = *++p;
-	if (yych == 'N') goto yy906;
-	if (yych != 'n') goto yy523;
-yy906:
-	yych = *++p;
-	if (yych == 'T') goto yy533;
-	if (yych == 't') goto yy533;
-	goto yy523;
-yy907:
-	yych = *++p;
-	if (yych == 'S') goto yy533;
-	if (yych == 's') goto yy533;
-	goto yy523;
-yy908:
-	yych = *++p;
-	if (yych <= 'V') {
-		if (yych == 'R') goto yy533;
-		if (yych <= 'U') goto yy523;
-	} else {
-		if (yych <= 'r') {
-			if (yych <= 'q') goto yy523;
-			goto yy533;
-		} else {
-			if (yych != 'v') goto yy523;
-		}
-	}
-	yych = *++p;
-	if (yych == 'A') goto yy910;
-	if (yych != 'a') goto yy523;
-yy910:
-	yych = *++p;
-	if (yych == 'S') goto yy911;
-	if (yych != 's') goto yy523;
-yy911:
-	yych = *++p;
-	if (yych == 'C') goto yy912;
-	if (yych != 'c') goto yy523;
-yy912:
-	yych = *++p;
-	if (yych == 'R') goto yy913;
-	if (yych != 'r') goto yy523;
-yy913:
-	yych = *++p;
-	if (yych == 'I') goto yy914;
-	if (yych != 'i') goto yy523;
-yy914:
-	yych = *++p;
-	if (yych == 'P') goto yy915;
-	if (yych != 'p') goto yy523;
-yy915:
-	yych = *++p;
-	if (yych == 'T') goto yy533;
-	if (yych == 't') goto yy533;
-	goto yy523;
-yy916:
-	yych = *++p;
-	if (yych == 'B') goto yy533;
-	if (yych == 'b') goto yy533;
-	goto yy523;
-yy917:
-	yych = *++p;
-	if (yych == 'N') goto yy533;
-	if (yych == 'n') goto yy533;
-	goto yy523;
-yy918:
-	yych = *++p;
-	if (yych == 'N') goto yy925;
-	if (yych == 'n') goto yy925;
-	goto yy523;
-yy919:
-	yych = *++p;
-	if (yych == 'S') goto yy533;
-	if (yych == 's') goto yy533;
-	goto yy523;
-yy920:
-	yych = *++p;
-	if (yych == 'C') goto yy924;
-	if (yych == 'c') goto yy924;
-	goto yy523;
-yy921:
-	yych = *++p;
-	if (yych <= 'V') {
-		if (yych == 'T') goto yy923;
-		if (yych <= 'U') goto yy523;
-		goto yy533;
-	} else {
-		if (yych <= 't') {
-			if (yych <= 's') goto yy523;
-			goto yy923;
-		} else {
-			if (yych == 'v') goto yy533;
-			goto yy523;
-		}
-	}
-yy922:
-	yych = *++p;
-	if (yych == 'I') goto yy533;
-	if (yych == 'i') goto yy533;
-	goto yy523;
-yy923:
-	yych = *++p;
-	if (yych == 'A') goto yy533;
-	if (yych == 'a') goto yy533;
-	goto yy523;
-yy924:
-	yych = *++p;
-	if (yych == 'T') goto yy533;
-	if (yych == 't') goto yy533;
-	goto yy523;
-yy925:
-	yych = *++p;
-	if (yych == 'A') goto yy926;
-	if (yych != 'a') goto yy523;
-yy926:
-	yych = *++p;
-	if (yych != '-') goto yy523;
-	yych = *++p;
-	if (yych == 'P') goto yy928;
-	if (yych != 'p') goto yy523;
-yy928:
-	yych = *++p;
-	if (yych == 'L') goto yy929;
-	if (yych != 'l') goto yy523;
-yy929:
-	yych = *++p;
-	if (yych == 'A') goto yy930;
-	if (yych != 'a') goto yy523;
-yy930:
-	yych = *++p;
-	if (yych == 'Y') goto yy931;
-	if (yych != 'y') goto yy523;
-yy931:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych == 'C') goto yy932;
-		if (yych <= 'R') goto yy523;
-		goto yy933;
-	} else {
-		if (yych <= 'c') {
-			if (yych <= 'b') goto yy523;
-		} else {
-			if (yych == 's') goto yy933;
-			goto yy523;
-		}
-	}
-yy932:
-	yych = *++p;
-	if (yych == 'O') goto yy938;
-	if (yych == 'o') goto yy938;
-	goto yy523;
-yy933:
-	yych = *++p;
-	if (yych == 'I') goto yy934;
-	if (yych != 'i') goto yy523;
-yy934:
-	yych = *++p;
-	if (yych == 'N') goto yy935;
-	if (yych != 'n') goto yy523;
-yy935:
-	yych = *++p;
-	if (yych == 'G') goto yy936;
-	if (yych != 'g') goto yy523;
-yy936:
-	yych = *++p;
-	if (yych == 'L') goto yy937;
-	if (yych != 'l') goto yy523;
-yy937:
-	yych = *++p;
-	if (yych == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-yy938:
-	yych = *++p;
-	if (yych == 'N') goto yy939;
-	if (yych != 'n') goto yy523;
-yy939:
-	yych = *++p;
-	if (yych == 'T') goto yy940;
-	if (yych != 't') goto yy523;
-yy940:
-	yych = *++p;
-	if (yych == 'A') goto yy941;
-	if (yych != 'a') goto yy523;
-yy941:
-	yych = *++p;
-	if (yych == 'I') goto yy942;
-	if (yych != 'i') goto yy523;
-yy942:
-	yych = *++p;
-	if (yych == 'N') goto yy943;
-	if (yych != 'n') goto yy523;
-yy943:
-	yych = *++p;
-	if (yych == 'E') goto yy944;
-	if (yych != 'e') goto yy523;
-yy944:
-	yych = *++p;
-	if (yych == 'R') goto yy533;
-	if (yych == 'r') goto yy533;
-	goto yy523;
-yy945:
-	yych = *++p;
-	if (yych == 'S') goto yy533;
-	if (yych == 's') goto yy533;
-	goto yy523;
-yy946:
-	yych = *++p;
-	if (yych <= 'N') {
-		if (yych <= 'A') {
-			if (yych <= '@') goto yy523;
-			goto yy968;
-		} else {
-			if (yych <= 'L') goto yy523;
-			if (yych <= 'M') goto yy969;
-			goto yy970;
-		}
-	} else {
-		if (yych <= 'l') {
-			if (yych == 'a') goto yy968;
-			goto yy523;
-		} else {
-			if (yych <= 'm') goto yy969;
-			if (yych <= 'n') goto yy970;
-			goto yy523;
-		}
-	}
-yy947:
-	yych = *++p;
-	if (yych == 'R') goto yy955;
-	if (yych == 'r') goto yy955;
-	goto yy523;
-yy948:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'L') goto yy952;
-		if (yych <= 'O') goto yy523;
-		goto yy533;
-	} else {
-		if (yych <= 'l') {
-			if (yych <= 'k') goto yy523;
-			goto yy952;
-		} else {
-			if (yych == 'p') goto yy533;
-			goto yy523;
-		}
-	}
-yy949:
-	yych = *++p;
-	if (yych == 'I') goto yy951;
-	if (yych == 'i') goto yy951;
-	goto yy523;
-yy950:
-	yych = *++p;
-	if (yych == 'D') goto yy533;
-	if (yych == 'd') goto yy533;
-	goto yy523;
-yy951:
-	yych = *++p;
-	if (yych == 'D') goto yy533;
-	if (yych == 'd') goto yy533;
-	goto yy523;
-yy952:
-	yych = *++p;
-	if (yych == 'L') goto yy953;
-	if (yych != 'l') goto yy523;
-yy953:
-	yych = *++p;
-	if (yych == 'T') goto yy954;
-	if (yych != 't') goto yy523;
-yy954:
-	yych = *++p;
-	if (yych == 'O') goto yy533;
-	if (yych == 'o') goto yy533;
-	goto yy523;
-yy955:
-	yych = *++p;
-	if (yych == 'O') goto yy956;
-	if (yych != 'o') goto yy523;
-yy956:
-	yych = *++p;
-	if (yych == 'M') goto yy957;
-	if (yych != 'm') goto yy523;
-yy957:
-	yych = *++p;
-	if (yych == 'E') goto yy958;
-	if (yych != 'e') goto yy523;
-yy958:
-	yych = *++p;
-	if (yych == '-') goto yy959;
-	if (yych == ':') goto yy534;
-	goto yy523;
-yy959:
-	yych = *++p;
-	if (yych == 'E') goto yy960;
-	if (yych != 'e') goto yy523;
-yy960:
-	yych = *++p;
-	if (yych == 'X') goto yy961;
-	if (yych != 'x') goto yy523;
-yy961:
-	yych = *++p;
-	if (yych == 'T') goto yy962;
-	if (yych != 't') goto yy523;
-yy962:
-	yych = *++p;
-	if (yych == 'E') goto yy963;
-	if (yych != 'e') goto yy523;
-yy963:
-	yych = *++p;
-	if (yych == 'N') goto yy964;
-	if (yych != 'n') goto yy523;
-yy964:
-	yych = *++p;
-	if (yych == 'S') goto yy965;
-	if (yych != 's') goto yy523;
-yy965:
-	yych = *++p;
-	if (yych == 'I') goto yy966;
-	if (yych != 'i') goto yy523;
-yy966:
-	yych = *++p;
-	if (yych == 'O') goto yy967;
-	if (yych != 'o') goto yy523;
-yy967:
-	yych = *++p;
-	if (yych == 'N') goto yy533;
-	if (yych == 'n') goto yy533;
-	goto yy523;
-yy968:
-	yych = *++p;
-	if (yych == 'P') goto yy533;
-	if (yych == 'p') goto yy533;
-	goto yy523;
-yy969:
-	yych = *++p;
-	if (yych == '-') goto yy974;
-	goto yy523;
-yy970:
-	yych = *++p;
-	if (yych == 'T') goto yy971;
-	if (yych != 't') goto yy523;
-yy971:
-	yych = *++p;
-	if (yych == 'E') goto yy972;
-	if (yych != 'e') goto yy523;
-yy972:
-	yych = *++p;
-	if (yych == 'N') goto yy973;
-	if (yych != 'n') goto yy523;
-yy973:
-	yych = *++p;
-	if (yych == 'T') goto yy533;
-	if (yych == 't') goto yy533;
-	goto yy523;
-yy974:
-	yych = *++p;
-	if (yych == 'E') goto yy975;
-	if (yych != 'e') goto yy523;
-yy975:
-	yych = *++p;
-	if (yych == 'V') goto yy976;
-	if (yych != 'v') goto yy523;
-yy976:
-	yych = *++p;
-	if (yych == 'E') goto yy977;
-	if (yych != 'e') goto yy523;
-yy977:
-	yych = *++p;
-	if (yych == 'N') goto yy978;
-	if (yych != 'n') goto yy523;
-yy978:
-	yych = *++p;
-	if (yych == 'T') goto yy979;
-	if (yych != 't') goto yy523;
-yy979:
-	yych = *++p;
-	if (yych == 'B') goto yy980;
-	if (yych != 'b') goto yy523;
-yy980:
-	yych = *++p;
-	if (yych == 'R') goto yy981;
-	if (yych != 'r') goto yy523;
-yy981:
-	yych = *++p;
-	if (yych == 'I') goto yy982;
-	if (yych != 'i') goto yy523;
-yy982:
-	yych = *++p;
-	if (yych == 'T') goto yy983;
-	if (yych != 't') goto yy523;
-yy983:
-	yych = *++p;
-	if (yych == 'E') goto yy984;
-	if (yych != 'e') goto yy523;
-yy984:
-	yych = *++p;
-	if (yych != '-') goto yy523;
-	yych = *++p;
-	if (yych == 'A') goto yy986;
-	if (yych != 'a') goto yy523;
-yy986:
-	yych = *++p;
-	if (yych == 'T') goto yy987;
-	if (yych != 't') goto yy523;
-yy987:
-	yych = *++p;
-	if (yych == 'T') goto yy988;
-	if (yych != 't') goto yy523;
-yy988:
-	yych = *++p;
-	if (yych == 'E') goto yy989;
-	if (yych != 'e') goto yy523;
-yy989:
-	yych = *++p;
-	if (yych == 'N') goto yy990;
-	if (yych != 'n') goto yy523;
-yy990:
-	yych = *++p;
-	if (yych == 'D') goto yy991;
-	if (yych != 'd') goto yy523;
-yy991:
-	yych = *++p;
-	if (yych == 'E') goto yy992;
-	if (yych != 'e') goto yy523;
-yy992:
-	++p;
-	if ((yych = *p) == 'E') goto yy533;
-	if (yych == 'e') goto yy533;
-	goto yy523;
-}
-
+  {
+    unsigned char yych;
+    static const unsigned char yybm[] = {
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 0,   128, 0,   128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+    };
+    yych = *(marker = p);
+    if (yych <= 'c') {
+      if (yych <= 'M') {
+        if (yych <= 'E') {
+          if (yych <= 'A') {
+            if (yych == '\n')
+              goto yy494;
+            if (yych <= '@')
+              goto yy521;
+            goto yy498;
+          } else {
+            if (yych <= 'B')
+              goto yy516;
+            if (yych <= 'C')
+              goto yy495;
+            if (yych <= 'D')
+              goto yy496;
+            goto yy517;
+          }
+        } else {
+          if (yych <= 'I') {
+            if (yych <= 'F')
+              goto yy499;
+            if (yych <= 'G')
+              goto yy500;
+            if (yych <= 'H')
+              goto yy501;
+            goto yy502;
+          } else {
+            if (yych <= 'J')
+              goto yy497;
+            if (yych <= 'K')
+              goto yy518;
+            if (yych <= 'L')
+              goto yy503;
+            goto yy504;
+          }
+        }
+      } else {
+        if (yych <= 'U') {
+          if (yych <= 'Q') {
+            if (yych <= 'N')
+              goto yy505;
+            if (yych <= 'O')
+              goto yy506;
+            if (yych <= 'P')
+              goto yy507;
+            goto yy519;
+          } else {
+            if (yych <= 'R')
+              goto yy508;
+            if (yych <= 'S')
+              goto yy509;
+            if (yych <= 'T')
+              goto yy510;
+            goto yy511;
+          }
+        } else {
+          if (yych <= 'Y') {
+            if (yych <= 'V')
+              goto yy512;
+            if (yych <= 'W')
+              goto yy513;
+            if (yych <= 'X')
+              goto yy514;
+            goto yy520;
+          } else {
+            if (yych <= '`') {
+              if (yych <= 'Z')
+                goto yy515;
+              goto yy521;
+            } else {
+              if (yych <= 'a')
+                goto yy498;
+              if (yych <= 'b')
+                goto yy516;
+              goto yy495;
+            }
+          }
+        }
+      }
+    } else {
+      if (yych <= 't') {
+        if (yych <= 'k') {
+          if (yych <= 'g') {
+            if (yych <= 'd')
+              goto yy496;
+            if (yych <= 'e')
+              goto yy517;
+            if (yych <= 'f')
+              goto yy499;
+            goto yy500;
+          } else {
+            if (yych <= 'h')
+              goto yy501;
+            if (yych <= 'i')
+              goto yy502;
+            if (yych <= 'j')
+              goto yy497;
+            goto yy518;
+          }
+        } else {
+          if (yych <= 'o') {
+            if (yych <= 'l')
+              goto yy503;
+            if (yych <= 'm')
+              goto yy504;
+            if (yych <= 'n')
+              goto yy505;
+            goto yy506;
+          } else {
+            if (yych <= 'q') {
+              if (yych <= 'p')
+                goto yy507;
+              goto yy519;
+            } else {
+              if (yych <= 'r')
+                goto yy508;
+              if (yych <= 's')
+                goto yy509;
+              goto yy510;
+            }
+          }
+        }
+      } else {
+        if (yych <= 0xC1) {
+          if (yych <= 'x') {
+            if (yych <= 'u')
+              goto yy511;
+            if (yych <= 'v')
+              goto yy512;
+            if (yych <= 'w')
+              goto yy513;
+            goto yy514;
+          } else {
+            if (yych <= 'y')
+              goto yy520;
+            if (yych <= 'z')
+              goto yy515;
+            if (yych <= 0x7F)
+              goto yy521;
+          }
+        } else {
+          if (yych <= 0xED) {
+            if (yych <= 0xDF)
+              goto yy522;
+            if (yych <= 0xE0)
+              goto yy524;
+            if (yych <= 0xEC)
+              goto yy525;
+            goto yy529;
+          } else {
+            if (yych <= 0xF0) {
+              if (yych <= 0xEF)
+                goto yy525;
+              goto yy526;
+            } else {
+              if (yych <= 0xF3)
+                goto yy527;
+              if (yych <= 0xF4)
+                goto yy528;
+            }
+          }
+        }
+      }
+    }
+  yy494 : { return 0; }
+  yy495:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy948;
+    case 'H':
+    case 'h':
+      goto yy947;
+    case 'I':
+    case 'i':
+      goto yy950;
+    case 'O':
+    case 'o':
+      goto yy946;
+    case 'R':
+    case 'r':
+      goto yy949;
+    case 'V':
+    case 'v':
+      goto yy945;
+    default:
+      goto yy494;
+    }
+  yy496:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy921;
+    case 'I':
+    case 'i':
+      goto yy920;
+    case 'L':
+    case 'l':
+      goto yy918;
+    case 'N':
+    case 'n':
+      goto yy919;
+    case 'O':
+    case 'o':
+      goto yy922;
+    case 'T':
+    case 't':
+      goto yy917;
+    case 'V':
+    case 'v':
+      goto yy916;
+    default:
+      goto yy494;
+    }
+  yy497:
+    yych = *(marker = ++p);
+    if (yych <= 'M') {
+      if (yych == 'A')
+        goto yy908;
+      if (yych <= 'L')
+        goto yy494;
+      goto yy907;
+    } else {
+      if (yych <= 'a') {
+        if (yych <= '`')
+          goto yy494;
+        goto yy908;
+      } else {
+        if (yych == 'm')
+          goto yy907;
+        goto yy494;
+      }
+    }
+  yy498:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy889;
+    case 'B':
+    case 'b':
+      goto yy888;
+    case 'C':
+    case 'c':
+      goto yy887;
+    case 'D':
+    case 'd':
+      goto yy886;
+    case 'F':
+    case 'f':
+      goto yy885;
+    case 'I':
+    case 'i':
+      goto yy884;
+    case 'P':
+    case 'p':
+      goto yy883;
+    case 'T':
+    case 't':
+      goto yy882;
+    case 'W':
+    case 'w':
+      goto yy533;
+    default:
+      goto yy494;
+    }
+  yy499:
+    yych = *(marker = ++p);
+    if (yych <= 'T') {
+      if (yych <= 'E') {
+        if (yych == 'A')
+          goto yy869;
+        if (yych <= 'D')
+          goto yy494;
+        goto yy868;
+      } else {
+        if (yych == 'I')
+          goto yy867;
+        if (yych <= 'S')
+          goto yy494;
+        goto yy870;
+      }
+    } else {
+      if (yych <= 'e') {
+        if (yych == 'a')
+          goto yy869;
+        if (yych <= 'd')
+          goto yy494;
+        goto yy868;
+      } else {
+        if (yych <= 'i') {
+          if (yych <= 'h')
+            goto yy494;
+          goto yy867;
+        } else {
+          if (yych == 't')
+            goto yy870;
+          goto yy494;
+        }
+      }
+    }
+  yy500:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'E':
+    case 'e':
+      goto yy852;
+    case 'G':
+    case 'g':
+      goto yy533;
+    case 'I':
+    case 'i':
+      goto yy850;
+    case 'O':
+    case 'o':
+      goto yy851;
+    case 'T':
+    case 't':
+      goto yy849;
+    default:
+      goto yy494;
+    }
+  yy501:
+    yych = *(marker = ++p);
+    if (yych <= 'S') {
+      if (yych <= '3') {
+        if (yych <= '2')
+          goto yy494;
+        goto yy845;
+      } else {
+        if (yych == 'C')
+          goto yy843;
+        goto yy494;
+      }
+    } else {
+      if (yych <= 'c') {
+        if (yych <= 'T')
+          goto yy844;
+        if (yych <= 'b')
+          goto yy494;
+        goto yy843;
+      } else {
+        if (yych == 't')
+          goto yy844;
+        goto yy494;
+      }
+    }
+  yy502:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy825;
+    case 'C':
+    case 'c':
+      goto yy822;
+    case 'M':
+    case 'm':
+      goto yy824;
+    case 'N':
+    case 'n':
+      goto yy823;
+    case 'P':
+    case 'p':
+      goto yy821;
+    case 'R':
+    case 'r':
+      goto yy820;
+    case 'T':
+    case 't':
+      goto yy819;
+    default:
+      goto yy494;
+    }
+  yy503:
+    yych = *(marker = ++p);
+    if (yych <= 'D') {
+      if (yych == 'A')
+        goto yy813;
+      if (yych <= 'C')
+        goto yy494;
+      goto yy812;
+    } else {
+      if (yych <= 'a') {
+        if (yych <= '`')
+          goto yy494;
+        goto yy813;
+      } else {
+        if (yych == 'd')
+          goto yy812;
+        goto yy494;
+      }
+    }
+  yy504:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy779;
+    case 'E':
+    case 'e':
+      goto yy778;
+    case 'I':
+    case 'i':
+      goto yy781;
+    case 'M':
+    case 'm':
+      goto yy777;
+    case 'S':
+    case 's':
+      goto yy776;
+    case 'T':
+    case 't':
+      goto yy780;
+    case 'U':
+    case 'u':
+      goto yy775;
+    case 'V':
+    case 'v':
+      goto yy774;
+    default:
+      goto yy494;
+    }
+  yy505:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'E':
+    case 'e':
+      goto yy769;
+    case 'F':
+    case 'f':
+      goto yy768;
+    case 'I':
+    case 'i':
+      goto yy767;
+    case 'N':
+    case 'n':
+      goto yy766;
+    case 'O':
+    case 'o':
+      goto yy765;
+    default:
+      goto yy494;
+    }
+  yy506:
+    yych = *(marker = ++p);
+    if (yych <= 'P') {
+      if (yych == 'I')
+        goto yy751;
+      if (yych <= 'O')
+        goto yy494;
+      goto yy752;
+    } else {
+      if (yych <= 'i') {
+        if (yych <= 'h')
+          goto yy494;
+        goto yy751;
+      } else {
+        if (yych == 'p')
+          goto yy752;
+        goto yy494;
+      }
+    }
+  yy507:
+    yych = *(marker = ++p);
+    if (yych <= 'S') {
+      if (yych <= 'L') {
+        if (yych == 'A')
+          goto yy733;
+        if (yych <= 'K')
+          goto yy494;
+        goto yy732;
+      } else {
+        if (yych <= 'O') {
+          if (yych <= 'N')
+            goto yy494;
+          goto yy734;
+        } else {
+          if (yych <= 'Q')
+            goto yy494;
+          if (yych <= 'R')
+            goto yy731;
+          goto yy730;
+        }
+      }
+    } else {
+      if (yych <= 'n') {
+        if (yych <= 'a') {
+          if (yych <= '`')
+            goto yy494;
+          goto yy733;
+        } else {
+          if (yych == 'l')
+            goto yy732;
+          goto yy494;
+        }
+      } else {
+        if (yych <= 'q') {
+          if (yych <= 'o')
+            goto yy734;
+          goto yy494;
+        } else {
+          if (yych <= 'r')
+            goto yy731;
+          if (yych <= 's')
+            goto yy730;
+          goto yy494;
+        }
+      }
+    }
+  yy508:
+    yych = *(marker = ++p);
+    if (yych <= 'T') {
+      if (yych <= 'L') {
+        if (yych == 'E')
+          goto yy720;
+        goto yy494;
+      } else {
+        if (yych <= 'M')
+          goto yy719;
+        if (yych <= 'R')
+          goto yy494;
+        if (yych <= 'S')
+          goto yy718;
+        goto yy717;
+      }
+    } else {
+      if (yych <= 'm') {
+        if (yych == 'e')
+          goto yy720;
+        if (yych <= 'l')
+          goto yy494;
+        goto yy719;
+      } else {
+        if (yych <= 'r')
+          goto yy494;
+        if (yych <= 's')
+          goto yy718;
+        if (yych <= 't')
+          goto yy717;
+        goto yy494;
+      }
+    }
+  yy509:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'E':
+    case 'e':
+      goto yy673;
+    case 'F':
+    case 'f':
+      goto yy672;
+    case 'G':
+    case 'g':
+      goto yy671;
+    case 'H':
+    case 'h':
+      goto yy676;
+    case 'I':
+    case 'i':
+      goto yy675;
+    case 'K':
+    case 'k':
+      goto yy670;
+    case 'M':
+    case 'm':
+      goto yy669;
+    case 'N':
+    case 'n':
+      goto yy674;
+    case 'O':
+    case 'o':
+      goto yy668;
+    case 'P':
+    case 'p':
+      goto yy667;
+    case 'S':
+    case 's':
+      goto yy666;
+    case 'T':
+    case 't':
+      goto yy665;
+    case 'V':
+    case 'v':
+      goto yy664;
+    default:
+      goto yy494;
+    }
+  yy510:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy640;
+    case 'E':
+    case 'e':
+      goto yy636;
+    case 'F':
+    case 'f':
+      goto yy639;
+    case 'H':
+    case 'h':
+      goto yy635;
+    case 'I':
+    case 'i':
+      goto yy637;
+    case 'N':
+    case 'n':
+      goto yy638;
+    case 'V':
+    case 'v':
+      goto yy533;
+    default:
+      goto yy494;
+    }
+  yy511:
+    yych = *(marker = ++p);
+    if (yych <= 'T') {
+      if (yych <= 'N') {
+        if (yych == 'D')
+          goto yy627;
+        if (yych <= 'M')
+          goto yy494;
+        goto yy626;
+      } else {
+        if (yych == 'R')
+          goto yy628;
+        if (yych <= 'S')
+          goto yy494;
+        goto yy625;
+      }
+    } else {
+      if (yych <= 'n') {
+        if (yych == 'd')
+          goto yy627;
+        if (yych <= 'm')
+          goto yy494;
+        goto yy626;
+      } else {
+        if (yych <= 'r') {
+          if (yych <= 'q')
+            goto yy494;
+          goto yy628;
+        } else {
+          if (yych == 't')
+            goto yy625;
+          goto yy494;
+        }
+      }
+    }
+  yy512:
+    yych = *(marker = ++p);
+    if (yych <= 'I') {
+      if (yych == 'E')
+        goto yy609;
+      if (yych <= 'H')
+        goto yy494;
+      goto yy608;
+    } else {
+      if (yych <= 'e') {
+        if (yych <= 'd')
+          goto yy494;
+        goto yy609;
+      } else {
+        if (yych == 'i')
+          goto yy608;
+        goto yy494;
+      }
+    }
+  yy513:
+    yych = *(marker = ++p);
+    if (yych <= 'Y') {
+      if (yych <= 'R') {
+        if (yych == 'E')
+          goto yy598;
+        goto yy494;
+      } else {
+        if (yych <= 'S')
+          goto yy599;
+        if (yych <= 'T')
+          goto yy597;
+        if (yych <= 'X')
+          goto yy494;
+        goto yy596;
+      }
+    } else {
+      if (yych <= 's') {
+        if (yych == 'e')
+          goto yy598;
+        if (yych <= 'r')
+          goto yy494;
+        goto yy599;
+      } else {
+        if (yych <= 't')
+          goto yy597;
+        if (yych == 'y')
+          goto yy596;
+        goto yy494;
+      }
+    }
+  yy514:
+    yych = *(marker = ++p);
+    if (yych <= 'R') {
+      if (yych <= 'F') {
+        if (yych == 'C')
+          goto yy575;
+        if (yych <= 'E')
+          goto yy494;
+        goto yy573;
+      } else {
+        if (yych == 'M')
+          goto yy574;
+        if (yych <= 'Q')
+          goto yy494;
+        goto yy572;
+      }
+    } else {
+      if (yych <= 'f') {
+        if (yych == 'c')
+          goto yy575;
+        if (yych <= 'e')
+          goto yy494;
+        goto yy573;
+      } else {
+        if (yych <= 'm') {
+          if (yych <= 'l')
+            goto yy494;
+          goto yy574;
+        } else {
+          if (yych == 'r')
+            goto yy572;
+          goto yy494;
+        }
+      }
+    }
+  yy515:
+    yych = *(marker = ++p);
+    if (yych == '3')
+      goto yy567;
+    goto yy494;
+  yy516:
+    yych = *(marker = ++p);
+    if (yych <= 'O') {
+      if (yych <= 'H') {
+        if (yych == 'E')
+          goto yy557;
+        goto yy494;
+      } else {
+        if (yych <= 'I')
+          goto yy556;
+        if (yych <= 'N')
+          goto yy494;
+        goto yy555;
+      }
+    } else {
+      if (yych <= 'h') {
+        if (yych == 'e')
+          goto yy557;
+        goto yy494;
+      } else {
+        if (yych <= 'i')
+          goto yy556;
+        if (yych == 'o')
+          goto yy555;
+        goto yy494;
+      }
+    }
+  yy517:
+    yych = *(marker = ++p);
+    if (yych == 'D')
+      goto yy553;
+    if (yych == 'd')
+      goto yy553;
+    goto yy494;
+  yy518:
+    yych = *(marker = ++p);
+    if (yych == 'E')
+      goto yy548;
+    if (yych == 'e')
+      goto yy548;
+    goto yy494;
+  yy519:
+    yych = *(marker = ++p);
+    if (yych == 'U')
+      goto yy545;
+    if (yych == 'u')
+      goto yy545;
+    goto yy494;
+  yy520:
+    yych = *(marker = ++p);
+    if (yych == 'M')
+      goto yy530;
+    if (yych == 'm')
+      goto yy530;
+    goto yy494;
+  yy521:
+    yych = *++p;
+    goto yy494;
+  yy522:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy523;
+    if (yych <= 0xBF)
+      goto yy521;
+  yy523:
+    p = marker;
+    goto yy494;
+  yy524:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy523;
+    if (yych <= 0xBF)
+      goto yy522;
+    goto yy523;
+  yy525:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy523;
+    if (yych <= 0xBF)
+      goto yy522;
+    goto yy523;
+  yy526:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy523;
+    if (yych <= 0xBF)
+      goto yy525;
+    goto yy523;
+  yy527:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy523;
+    if (yych <= 0xBF)
+      goto yy525;
+    goto yy523;
+  yy528:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy523;
+    if (yych <= 0x8F)
+      goto yy525;
+    goto yy523;
+  yy529:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy523;
+    if (yych <= 0x9F)
+      goto yy522;
+    goto yy523;
+  yy530:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy531;
+    if (yych != 's')
+      goto yy523;
+  yy531:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy532;
+    if (yych != 'g')
+      goto yy523;
+  yy532:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy533;
+    if (yych != 'r')
+      goto yy523;
+  yy533:
+    yych = *++p;
+    if (yych != ':')
+      goto yy523;
+  yy534:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy534;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '<')
+          goto yy523;
+        if (yych <= '>')
+          goto yy543;
+        goto yy523;
+      } else {
+        if (yych <= 0xDF)
+          goto yy536;
+        if (yych <= 0xE0)
+          goto yy537;
+        goto yy538;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy542;
+        if (yych <= 0xEF)
+          goto yy538;
+        goto yy539;
+      } else {
+        if (yych <= 0xF3)
+          goto yy540;
+        if (yych <= 0xF4)
+          goto yy541;
+        goto yy523;
+      }
+    }
+  yy536:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy523;
+    if (yych <= 0xBF)
+      goto yy534;
+    goto yy523;
+  yy537:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy523;
+    if (yych <= 0xBF)
+      goto yy536;
+    goto yy523;
+  yy538:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy523;
+    if (yych <= 0xBF)
+      goto yy536;
+    goto yy523;
+  yy539:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy523;
+    if (yych <= 0xBF)
+      goto yy538;
+    goto yy523;
+  yy540:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy523;
+    if (yych <= 0xBF)
+      goto yy538;
+    goto yy523;
+  yy541:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy523;
+    if (yych <= 0x8F)
+      goto yy538;
+    goto yy523;
+  yy542:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy523;
+    if (yych <= 0x9F)
+      goto yy536;
+    goto yy523;
+  yy543:
+    ++p;
+    { return (bufsize_t)(p - start); }
+  yy545:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy546;
+    if (yych != 'e')
+      goto yy523;
+  yy546:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy547;
+    if (yych != 'r')
+      goto yy523;
+  yy547:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy533;
+    if (yych == 'y')
+      goto yy533;
+    goto yy523;
+  yy548:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy549;
+    if (yych != 'y')
+      goto yy523;
+  yy549:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy550;
+    if (yych != 'p')
+      goto yy523;
+  yy550:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy551;
+    if (yych != 'a')
+      goto yy523;
+  yy551:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy552;
+    if (yych != 'r')
+      goto yy523;
+  yy552:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy533;
+    if (yych == 'c')
+      goto yy533;
+    goto yy523;
+  yy553:
+    yych = *++p;
+    if (yych != '2')
+      goto yy523;
+    yych = *++p;
+    if (yych == 'K')
+      goto yy533;
+    if (yych == 'k')
+      goto yy533;
+    goto yy523;
+  yy555:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy566;
+    if (yych == 'l')
+      goto yy566;
+    goto yy523;
+  yy556:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy562;
+    if (yych == 't')
+      goto yy562;
+    goto yy523;
+  yy557:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy558;
+    if (yych != 's')
+      goto yy523;
+  yy558:
+    yych = *++p;
+    if (yych == 'H')
+      goto yy559;
+    if (yych != 'h')
+      goto yy523;
+  yy559:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy560;
+    if (yych != 'a')
+      goto yy523;
+  yy560:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy561;
+    if (yych != 'r')
+      goto yy523;
+  yy561:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy562:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy563;
+    if (yych != 'c')
+      goto yy523;
+  yy563:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy564;
+    if (yych != 'o')
+      goto yy523;
+  yy564:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy565;
+    if (yych != 'i')
+      goto yy523;
+  yy565:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy533;
+    if (yych == 'n')
+      goto yy533;
+    goto yy523;
+  yy566:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy533;
+    if (yych == 'o')
+      goto yy533;
+    goto yy523;
+  yy567:
+    yych = *++p;
+    if (yych != '9')
+      goto yy523;
+    yych = *++p;
+    if (yych != '.')
+      goto yy523;
+    yych = *++p;
+    if (yych != '5')
+      goto yy523;
+    yych = *++p;
+    if (yych != '0')
+      goto yy523;
+    yych = *++p;
+    if (yych <= 'Q')
+      goto yy523;
+    if (yych <= 'S')
+      goto yy533;
+    if (yych <= 'q')
+      goto yy523;
+    if (yych <= 's')
+      goto yy533;
+    goto yy523;
+  yy572:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy533;
+    if (yych == 'i')
+      goto yy533;
+    goto yy523;
+  yy573:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy594;
+    if (yych == 'i')
+      goto yy594;
+    goto yy523;
+  yy574:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'L')
+        goto yy584;
+      if (yych <= 'O')
+        goto yy523;
+      goto yy585;
+    } else {
+      if (yych <= 'l') {
+        if (yych <= 'k')
+          goto yy523;
+        goto yy584;
+      } else {
+        if (yych == 'p')
+          goto yy585;
+        goto yy523;
+      }
+    }
+  yy575:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy576;
+    if (yych != 'o')
+      goto yy523;
+  yy576:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy577;
+    if (yych != 'n')
+      goto yy523;
+  yy577:
+    yych = *++p;
+    if (yych == '-')
+      goto yy578;
+    if (yych == ':')
+      goto yy534;
+    goto yy523;
+  yy578:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy579;
+    if (yych != 'u')
+      goto yy523;
+  yy579:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy580;
+    if (yych != 's')
+      goto yy523;
+  yy580:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy581;
+    if (yych != 'e')
+      goto yy523;
+  yy581:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy582;
+    if (yych != 'r')
+      goto yy523;
+  yy582:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy583;
+    if (yych != 'i')
+      goto yy523;
+  yy583:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy533;
+    if (yych == 'd')
+      goto yy533;
+    goto yy523;
+  yy584:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy586;
+    if (yych == 'r')
+      goto yy586;
+    goto yy523;
+  yy585:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy586:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy587;
+    if (yych != 'p')
+      goto yy523;
+  yy587:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy588;
+    if (yych != 'c')
+      goto yy523;
+  yy588:
+    yych = *++p;
+    if (yych != '.')
+      goto yy523;
+    yych = *++p;
+    if (yych == 'B')
+      goto yy590;
+    if (yych != 'b')
+      goto yy523;
+  yy590:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy591;
+    if (yych != 'e')
+      goto yy523;
+  yy591:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy592;
+    if (yych != 'e')
+      goto yy523;
+  yy592:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy593;
+    if (yych != 'p')
+      goto yy523;
+  yy593:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'S')
+        goto yy533;
+      if (yych == 's')
+        goto yy533;
+      goto yy523;
+    }
+  yy594:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy595;
+    if (yych != 'r')
+      goto yy523;
+  yy595:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy596:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy604;
+    if (yych == 'c')
+      goto yy604;
+    goto yy523;
+  yy597:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy603;
+    if (yych == 'a')
+      goto yy603;
+    goto yy523;
+  yy598:
+    yych = *++p;
+    if (yych == 'B')
+      goto yy600;
+    if (yych == 'b')
+      goto yy600;
+    goto yy523;
+  yy599:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'S')
+        goto yy533;
+      if (yych == 's')
+        goto yy533;
+      goto yy523;
+    }
+  yy600:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy601;
+    if (yych != 'c')
+      goto yy523;
+  yy601:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy602;
+    if (yych != 'a')
+      goto yy523;
+  yy602:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy533;
+    if (yych == 'l')
+      goto yy533;
+    goto yy523;
+  yy603:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy533;
+    if (yych == 'i')
+      goto yy533;
+    goto yy523;
+  yy604:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy605;
+    if (yych != 'i')
+      goto yy523;
+  yy605:
+    yych = *++p;
+    if (yych == 'W')
+      goto yy606;
+    if (yych != 'w')
+      goto yy523;
+  yy606:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy607;
+    if (yych != 'y')
+      goto yy523;
+  yy607:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy533;
+    if (yych == 'g')
+      goto yy533;
+    goto yy523;
+  yy608:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy617;
+    if (yych == 'e')
+      goto yy617;
+    goto yy523;
+  yy609:
+    yych = *++p;
+    if (yych <= 'N') {
+      if (yych <= 'L')
+        goto yy523;
+      if (yych >= 'N')
+        goto yy611;
+    } else {
+      if (yych <= 'l')
+        goto yy523;
+      if (yych <= 'm')
+        goto yy610;
+      if (yych <= 'n')
+        goto yy611;
+      goto yy523;
+    }
+  yy610:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy616;
+    if (yych == 'm')
+      goto yy616;
+    goto yy523;
+  yy611:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy612;
+    if (yych != 't')
+      goto yy523;
+  yy612:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy613;
+    if (yych != 'r')
+      goto yy523;
+  yy613:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy614;
+    if (yych != 'i')
+      goto yy523;
+  yy614:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy615;
+    if (yych != 'l')
+      goto yy523;
+  yy615:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy533;
+    if (yych == 'o')
+      goto yy533;
+    goto yy523;
+  yy616:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy533;
+    if (yych == 'i')
+      goto yy533;
+    goto yy523;
+  yy617:
+    yych = *++p;
+    if (yych == 'W')
+      goto yy618;
+    if (yych != 'w')
+      goto yy523;
+  yy618:
+    yych = *++p;
+    if (yych != '-')
+      goto yy523;
+    yych = *++p;
+    if (yych == 'S')
+      goto yy620;
+    if (yych != 's')
+      goto yy523;
+  yy620:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy621;
+    if (yych != 'o')
+      goto yy523;
+  yy621:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy622;
+    if (yych != 'u')
+      goto yy523;
+  yy622:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy623;
+    if (yych != 'r')
+      goto yy523;
+  yy623:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy624;
+    if (yych != 'c')
+      goto yy523;
+  yy624:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy625:
+    yych = *++p;
+    if (yych == '2')
+      goto yy632;
+    goto yy523;
+  yy626:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy629;
+    if (yych == 'r')
+      goto yy629;
+    goto yy523;
+  yy627:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy628:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy533;
+    if (yych == 'n')
+      goto yy533;
+    goto yy523;
+  yy629:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy630;
+    if (yych != 'e')
+      goto yy523;
+  yy630:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy631;
+    if (yych != 'a')
+      goto yy523;
+  yy631:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy533;
+    if (yych == 'l')
+      goto yy533;
+    goto yy523;
+  yy632:
+    yych = *++p;
+    if (yych != '0')
+      goto yy523;
+    yych = *++p;
+    if (yych != '0')
+      goto yy523;
+    yych = *++p;
+    if (yych == '4')
+      goto yy533;
+    goto yy523;
+  yy635:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy654;
+    if (yych == 'i')
+      goto yy654;
+    goto yy523;
+  yy636:
+    yych = *++p;
+    if (yych <= 'L') {
+      if (yych == 'A')
+        goto yy646;
+      if (yych <= 'K')
+        goto yy523;
+      goto yy645;
+    } else {
+      if (yych <= 'a') {
+        if (yych <= '`')
+          goto yy523;
+        goto yy646;
+      } else {
+        if (yych == 'l')
+          goto yy645;
+        goto yy523;
+      }
+    }
+  yy637:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy638:
+    yych = *++p;
+    if (yych == '3')
+      goto yy642;
+    goto yy523;
+  yy639:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy641;
+    if (yych == 't')
+      goto yy641;
+    goto yy523;
+  yy640:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy533;
+    if (yych == 'g')
+      goto yy533;
+    goto yy523;
+  yy641:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy642:
+    yych = *++p;
+    if (yych != '2')
+      goto yy523;
+    yych = *++p;
+    if (yych != '7')
+      goto yy523;
+    yych = *++p;
+    if (yych == '0')
+      goto yy533;
+    goto yy523;
+  yy645:
+    yych = *++p;
+    if (yych <= 'M') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'N')
+        goto yy652;
+      if (yych == 'n')
+        goto yy652;
+      goto yy523;
+    }
+  yy646:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy647;
+    if (yych != 'm')
+      goto yy523;
+  yy647:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy648;
+    if (yych != 's')
+      goto yy523;
+  yy648:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy649;
+    if (yych != 'p')
+      goto yy523;
+  yy649:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy650;
+    if (yych != 'e')
+      goto yy523;
+  yy650:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy651;
+    if (yych != 'a')
+      goto yy523;
+  yy651:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy533;
+    if (yych == 'k')
+      goto yy533;
+    goto yy523;
+  yy652:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy653;
+    if (yych != 'e')
+      goto yy523;
+  yy653:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy533;
+    if (yych == 't')
+      goto yy533;
+    goto yy523;
+  yy654:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych == 'N')
+        goto yy655;
+      if (yych <= 'R')
+        goto yy523;
+      goto yy656;
+    } else {
+      if (yych <= 'n') {
+        if (yych <= 'm')
+          goto yy523;
+      } else {
+        if (yych == 's')
+          goto yy656;
+        goto yy523;
+      }
+    }
+  yy655:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy663;
+    if (yych == 'g')
+      goto yy663;
+    goto yy523;
+  yy656:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy657;
+    if (yych != 'm')
+      goto yy523;
+  yy657:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy658;
+    if (yych != 'e')
+      goto yy523;
+  yy658:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy659;
+    if (yych != 's')
+      goto yy523;
+  yy659:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy660;
+    if (yych != 's')
+      goto yy523;
+  yy660:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy661;
+    if (yych != 'a')
+      goto yy523;
+  yy661:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy662;
+    if (yych != 'g')
+      goto yy523;
+  yy662:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy663:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy533;
+    if (yych == 's')
+      goto yy533;
+    goto yy523;
+  yy664:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy533;
+    if (yych == 'n')
+      goto yy533;
+    goto yy523;
+  yy665:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy715;
+    if (yych == 'e')
+      goto yy715;
+    goto yy523;
+  yy666:
+    yych = *++p;
+    if (yych == 'H')
+      goto yy533;
+    if (yych == 'h')
+      goto yy533;
+    goto yy523;
+  yy667:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy711;
+    if (yych == 'o')
+      goto yy711;
+    goto yy523;
+  yy668:
+    yych = *++p;
+    if (yych <= 'L') {
+      if (yych == 'A')
+        goto yy701;
+      if (yych <= 'K')
+        goto yy523;
+      goto yy702;
+    } else {
+      if (yych <= 'a') {
+        if (yych <= '`')
+          goto yy523;
+        goto yy701;
+      } else {
+        if (yych == 'l')
+          goto yy702;
+        goto yy523;
+      }
+    }
+  yy669:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych == 'B')
+        goto yy533;
+      if (yych <= 'R')
+        goto yy523;
+      goto yy533;
+    } else {
+      if (yych <= 'b') {
+        if (yych <= 'a')
+          goto yy523;
+        goto yy533;
+      } else {
+        if (yych == 's')
+          goto yy533;
+        goto yy523;
+      }
+    }
+  yy670:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy699;
+    if (yych == 'y')
+      goto yy699;
+    goto yy523;
+  yy671:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy533;
+    if (yych == 'n')
+      goto yy533;
+    goto yy523;
+  yy672:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy698;
+    if (yych == 't')
+      goto yy698;
+    goto yy523;
+  yy673:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych <= 'C') {
+        if (yych <= 'B')
+          goto yy523;
+        goto yy685;
+      } else {
+        if (yych <= 'Q')
+          goto yy523;
+        if (yych <= 'R')
+          goto yy683;
+        goto yy684;
+      }
+    } else {
+      if (yych <= 'q') {
+        if (yych == 'c')
+          goto yy685;
+        goto yy523;
+      } else {
+        if (yych <= 'r')
+          goto yy683;
+        if (yych <= 's')
+          goto yy684;
+        goto yy523;
+      }
+    }
+  yy674:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy682;
+    if (yych == 'm')
+      goto yy682;
+    goto yy523;
+  yy675:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'E')
+        goto yy679;
+      if (yych <= 'O')
+        goto yy523;
+      goto yy680;
+    } else {
+      if (yych <= 'e') {
+        if (yych <= 'd')
+          goto yy523;
+        goto yy679;
+      } else {
+        if (yych == 'p')
+          goto yy680;
+        goto yy523;
+      }
+    }
+  yy676:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy677;
+    if (yych != 't')
+      goto yy523;
+  yy677:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy678;
+    if (yych != 't')
+      goto yy523;
+  yy678:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy679:
+    yych = *++p;
+    if (yych == 'V')
+      goto yy681;
+    if (yych == 'v')
+      goto yy681;
+    goto yy523;
+  yy680:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'S')
+        goto yy533;
+      if (yych == 's')
+        goto yy533;
+      goto yy523;
+    }
+  yy681:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy682:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy683:
+    yych = *++p;
+    if (yych == 'V')
+      goto yy695;
+    if (yych == 'v')
+      goto yy695;
+    goto yy523;
+  yy684:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy692;
+    if (yych == 's')
+      goto yy692;
+    goto yy523;
+  yy685:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy686;
+    if (yych != 'o')
+      goto yy523;
+  yy686:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy687;
+    if (yych != 'n')
+      goto yy523;
+  yy687:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy688;
+    if (yych != 'd')
+      goto yy523;
+  yy688:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy689;
+    if (yych != 'l')
+      goto yy523;
+  yy689:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy690;
+    if (yych != 'i')
+      goto yy523;
+  yy690:
+    yych = *++p;
+    if (yych == 'F')
+      goto yy691;
+    if (yych != 'f')
+      goto yy523;
+  yy691:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy692:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy693;
+    if (yych != 'i')
+      goto yy523;
+  yy693:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy694;
+    if (yych != 'o')
+      goto yy523;
+  yy694:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy533;
+    if (yych == 'n')
+      goto yy533;
+    goto yy523;
+  yy695:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy696;
+    if (yych != 'i')
+      goto yy523;
+  yy696:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy697;
+    if (yych != 'c')
+      goto yy523;
+  yy697:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy698:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy699:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy700;
+    if (yych != 'p')
+      goto yy523;
+  yy700:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy701:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy705;
+    if (yych == 'p')
+      goto yy705;
+    goto yy523;
+  yy702:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy703;
+    if (yych != 'd')
+      goto yy523;
+  yy703:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy704;
+    if (yych != 'a')
+      goto yy523;
+  yy704:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy533;
+    if (yych == 't')
+      goto yy533;
+    goto yy523;
+  yy705:
+    yych = *++p;
+    if (yych != '.')
+      goto yy523;
+    yych = *++p;
+    if (yych == 'B')
+      goto yy707;
+    if (yych != 'b')
+      goto yy523;
+  yy707:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy708;
+    if (yych != 'e')
+      goto yy523;
+  yy708:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy709;
+    if (yych != 'e')
+      goto yy523;
+  yy709:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy710;
+    if (yych != 'p')
+      goto yy523;
+  yy710:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'S')
+        goto yy533;
+      if (yych == 's')
+        goto yy533;
+      goto yy523;
+    }
+  yy711:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy712;
+    if (yych != 't')
+      goto yy523;
+  yy712:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy713;
+    if (yych != 'i')
+      goto yy523;
+  yy713:
+    yych = *++p;
+    if (yych == 'F')
+      goto yy714;
+    if (yych != 'f')
+      goto yy523;
+  yy714:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy533;
+    if (yych == 'y')
+      goto yy533;
+    goto yy523;
+  yy715:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy716;
+    if (yych != 'a')
+      goto yy523;
+  yy716:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy533;
+    if (yych == 'm')
+      goto yy533;
+    goto yy523;
+  yy717:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych == 'M')
+        goto yy729;
+      if (yych <= 'R')
+        goto yy523;
+      goto yy728;
+    } else {
+      if (yych <= 'm') {
+        if (yych <= 'l')
+          goto yy523;
+        goto yy729;
+      } else {
+        if (yych == 's')
+          goto yy728;
+        goto yy523;
+      }
+    }
+  yy718:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy726;
+    if (yych == 'y')
+      goto yy726;
+    goto yy523;
+  yy719:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy533;
+    if (yych == 'i')
+      goto yy533;
+    goto yy523;
+  yy720:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy721;
+    if (yych != 's')
+      goto yy523;
+  yy721:
+    yych = *++p;
+    if (yych <= 'N') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'O')
+        goto yy722;
+      if (yych != 'o')
+        goto yy523;
+    }
+  yy722:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy723;
+    if (yych != 'u')
+      goto yy523;
+  yy723:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy724;
+    if (yych != 'r')
+      goto yy523;
+  yy724:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy725;
+    if (yych != 'c')
+      goto yy523;
+  yy725:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy726:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy727;
+    if (yych != 'n')
+      goto yy523;
+  yy727:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy533;
+    if (yych == 'c')
+      goto yy533;
+    goto yy523;
+  yy728:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy729:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy730:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy750;
+    if (yych == 'y')
+      goto yy750;
+    goto yy523;
+  yy731:
+    yych = *++p;
+    if (yych <= 'O') {
+      if (yych == 'E')
+        goto yy747;
+      if (yych <= 'N')
+        goto yy523;
+      goto yy748;
+    } else {
+      if (yych <= 'e') {
+        if (yych <= 'd')
+          goto yy523;
+        goto yy747;
+      } else {
+        if (yych == 'o')
+          goto yy748;
+        goto yy523;
+      }
+    }
+  yy732:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy742;
+    if (yych == 'a')
+      goto yy742;
+    goto yy523;
+  yy733:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'L')
+        goto yy735;
+      if (yych <= 'O')
+        goto yy523;
+      goto yy736;
+    } else {
+      if (yych <= 'l') {
+        if (yych <= 'k')
+          goto yy523;
+        goto yy735;
+      } else {
+        if (yych == 'p')
+          goto yy736;
+        goto yy523;
+      }
+    }
+  yy734:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy735:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy533;
+    if (yych == 'm')
+      goto yy533;
+    goto yy523;
+  yy736:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy737;
+    if (yych != 'a')
+      goto yy523;
+  yy737:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy738;
+    if (yych != 'r')
+      goto yy523;
+  yy738:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy739;
+    if (yych != 'a')
+      goto yy523;
+  yy739:
+    yych = *++p;
+    if (yych == 'Z')
+      goto yy740;
+    if (yych != 'z')
+      goto yy523;
+  yy740:
+    yych = *++p;
+    if (yych == 'Z')
+      goto yy741;
+    if (yych != 'z')
+      goto yy523;
+  yy741:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy533;
+    if (yych == 'i')
+      goto yy533;
+    goto yy523;
+  yy742:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy743;
+    if (yych != 't')
+      goto yy523;
+  yy743:
+    yych = *++p;
+    if (yych == 'F')
+      goto yy744;
+    if (yych != 'f')
+      goto yy523;
+  yy744:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy745;
+    if (yych != 'o')
+      goto yy523;
+  yy745:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy746;
+    if (yych != 'r')
+      goto yy523;
+  yy746:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy533;
+    if (yych == 'm')
+      goto yy533;
+    goto yy523;
+  yy747:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy533;
+    if (yych == 's')
+      goto yy533;
+    goto yy523;
+  yy748:
+    yych = *++p;
+    if (yych == 'X')
+      goto yy749;
+    if (yych != 'x')
+      goto yy523;
+  yy749:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy533;
+    if (yych == 'y')
+      goto yy533;
+    goto yy523;
+  yy750:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy533;
+    if (yych == 'c')
+      goto yy533;
+    goto yy523;
+  yy751:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy533;
+    if (yych == 'd')
+      goto yy533;
+    goto yy523;
+  yy752:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy753;
+    if (yych != 'a')
+      goto yy523;
+  yy753:
+    yych = *++p;
+    if (yych == 'Q')
+      goto yy754;
+    if (yych != 'q')
+      goto yy523;
+  yy754:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy755;
+    if (yych != 'u')
+      goto yy523;
+  yy755:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy756;
+    if (yych != 'e')
+      goto yy523;
+  yy756:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy757;
+    if (yych != 'l')
+      goto yy523;
+  yy757:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy758;
+    if (yych != 'o')
+      goto yy523;
+  yy758:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy759;
+    if (yych != 'c')
+      goto yy523;
+  yy759:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy760;
+    if (yych != 'k')
+      goto yy523;
+  yy760:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy761;
+    if (yych != 't')
+      goto yy523;
+  yy761:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy762;
+    if (yych != 'o')
+      goto yy523;
+  yy762:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy763;
+    if (yych != 'k')
+      goto yy523;
+  yy763:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy764;
+    if (yych != 'e')
+      goto yy523;
+  yy764:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy533;
+    if (yych == 'n')
+      goto yy533;
+    goto yy523;
+  yy765:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy772;
+    if (yych == 't')
+      goto yy772;
+    goto yy523;
+  yy766:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy771;
+    if (yych == 't')
+      goto yy771;
+    goto yy523;
+  yy767:
+    yych = *++p;
+    if (yych <= 'G') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'H')
+        goto yy533;
+      if (yych == 'h')
+        goto yy533;
+      goto yy523;
+    }
+  yy768:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy533;
+    if (yych == 's')
+      goto yy533;
+    goto yy523;
+  yy769:
+    yych = *++p;
+    if (yych == 'W')
+      goto yy770;
+    if (yych != 'w')
+      goto yy523;
+  yy770:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy533;
+    if (yych == 's')
+      goto yy533;
+    goto yy523;
+  yy771:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy772:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy773;
+    if (yych != 'e')
+      goto yy523;
+  yy773:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy533;
+    if (yych == 's')
+      goto yy533;
+    goto yy523;
+  yy774:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy533;
+    if (yych == 'n')
+      goto yy533;
+    goto yy523;
+  yy775:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'M')
+        goto yy806;
+      if (yych <= 'O')
+        goto yy523;
+      goto yy805;
+    } else {
+      if (yych <= 'm') {
+        if (yych <= 'l')
+          goto yy523;
+        goto yy806;
+      } else {
+        if (yych == 'p')
+          goto yy805;
+        goto yy523;
+      }
+    }
+  yy776:
+    yych = *++p;
+    if (yych <= 'Q') {
+      if (yych <= '-') {
+        if (yych <= ',')
+          goto yy523;
+        goto yy798;
+      } else {
+        if (yych == 'N')
+          goto yy799;
+        goto yy523;
+      }
+    } else {
+      if (yych <= 'n') {
+        if (yych <= 'R')
+          goto yy797;
+        if (yych <= 'm')
+          goto yy523;
+        goto yy799;
+      } else {
+        if (yych == 'r')
+          goto yy797;
+        goto yy523;
+      }
+    }
+  yy777:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy533;
+    if (yych == 's')
+      goto yy533;
+    goto yy523;
+  yy778:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy793;
+    if (yych == 's')
+      goto yy793;
+    goto yy523;
+  yy779:
+    yych = *++p;
+    switch (yych) {
+    case 'G':
+    case 'g':
+      goto yy784;
+    case 'I':
+    case 'i':
+      goto yy783;
+    case 'P':
+    case 'p':
+      goto yy785;
+    case 'R':
+    case 'r':
+      goto yy786;
+    default:
+      goto yy523;
+    }
+  yy780:
+    yych = *++p;
+    if (yych == 'Q')
+      goto yy782;
+    if (yych == 'q')
+      goto yy782;
+    goto yy523;
+  yy781:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy533;
+    if (yych == 'd')
+      goto yy533;
+    goto yy523;
+  yy782:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy783:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy791;
+    if (yych == 'l')
+      goto yy791;
+    goto yy523;
+  yy784:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy789;
+    if (yych == 'n')
+      goto yy789;
+    goto yy523;
+  yy785:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy533;
+    if (yych == 's')
+      goto yy533;
+    goto yy523;
+  yy786:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy787;
+    if (yych != 'k')
+      goto yy523;
+  yy787:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy788;
+    if (yych != 'e')
+      goto yy523;
+  yy788:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy533;
+    if (yych == 't')
+      goto yy533;
+    goto yy523;
+  yy789:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy790;
+    if (yych != 'e')
+      goto yy523;
+  yy790:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy533;
+    if (yych == 't')
+      goto yy533;
+    goto yy523;
+  yy791:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy792;
+    if (yych != 't')
+      goto yy523;
+  yy792:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy533;
+    if (yych == 'o')
+      goto yy533;
+    goto yy523;
+  yy793:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy794;
+    if (yych != 's')
+      goto yy523;
+  yy794:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy795;
+    if (yych != 'a')
+      goto yy523;
+  yy795:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy796;
+    if (yych != 'g')
+      goto yy523;
+  yy796:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy797:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy804;
+    if (yych == 'p')
+      goto yy804;
+    goto yy523;
+  yy798:
+    yych = *++p;
+    if (yych == 'H')
+      goto yy801;
+    if (yych == 'h')
+      goto yy801;
+    goto yy523;
+  yy799:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy800;
+    if (yych != 'i')
+      goto yy523;
+  yy800:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy533;
+    if (yych == 'm')
+      goto yy533;
+    goto yy523;
+  yy801:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy802;
+    if (yych != 'e')
+      goto yy523;
+  yy802:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy803;
+    if (yych != 'l')
+      goto yy523;
+  yy803:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy804:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'S')
+        goto yy533;
+      if (yych == 's')
+        goto yy533;
+      goto yy523;
+    }
+  yy805:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy809;
+    if (yych == 'd')
+      goto yy809;
+    goto yy523;
+  yy806:
+    yych = *++p;
+    if (yych == 'B')
+      goto yy807;
+    if (yych != 'b')
+      goto yy523;
+  yy807:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy808;
+    if (yych != 'l')
+      goto yy523;
+  yy808:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy809:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy810;
+    if (yych != 'a')
+      goto yy523;
+  yy810:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy811;
+    if (yych != 't')
+      goto yy523;
+  yy811:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy812:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy817;
+    if (yych == 'a')
+      goto yy817;
+    goto yy523;
+  yy813:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy814;
+    if (yych != 's')
+      goto yy523;
+  yy814:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy815;
+    if (yych != 't')
+      goto yy523;
+  yy815:
+    yych = *++p;
+    if (yych == 'F')
+      goto yy816;
+    if (yych != 'f')
+      goto yy523;
+  yy816:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy533;
+    if (yych == 'm')
+      goto yy533;
+    goto yy523;
+  yy817:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy818;
+    if (yych != 'p')
+      goto yy523;
+  yy818:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'S')
+        goto yy533;
+      if (yych == 's')
+        goto yy533;
+      goto yy523;
+    }
+  yy819:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy842;
+    if (yych == 'm')
+      goto yy842;
+    goto yy523;
+  yy820:
+    yych = *++p;
+    if (yych <= 'I') {
+      if (yych == 'C')
+        goto yy831;
+      if (yych <= 'H')
+        goto yy523;
+      goto yy830;
+    } else {
+      if (yych <= 'c') {
+        if (yych <= 'b')
+          goto yy523;
+        goto yy831;
+      } else {
+        if (yych == 'i')
+          goto yy830;
+        goto yy523;
+      }
+    }
+  yy821:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'N')
+        goto yy533;
+      if (yych <= 'O')
+        goto yy523;
+      goto yy533;
+    } else {
+      if (yych <= 'n') {
+        if (yych <= 'm')
+          goto yy523;
+        goto yy533;
+      } else {
+        if (yych == 'p')
+          goto yy533;
+        goto yy523;
+      }
+    }
+  yy822:
+    yych = *++p;
+    if (yych <= 'O') {
+      if (yych == 'A')
+        goto yy828;
+      if (yych <= 'N')
+        goto yy523;
+      goto yy829;
+    } else {
+      if (yych <= 'a') {
+        if (yych <= '`')
+          goto yy523;
+        goto yy828;
+      } else {
+        if (yych == 'o')
+          goto yy829;
+        goto yy523;
+      }
+    }
+  yy823:
+    yych = *++p;
+    if (yych == 'F')
+      goto yy827;
+    if (yych == 'f')
+      goto yy827;
+    goto yy523;
+  yy824:
+    yych = *++p;
+    if (yych <= '@') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'A')
+        goto yy826;
+      if (yych == 'a')
+        goto yy826;
+      goto yy523;
+    }
+  yy825:
+    yych = *++p;
+    if (yych == 'X')
+      goto yy533;
+    if (yych == 'x')
+      goto yy533;
+    goto yy523;
+  yy826:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy827:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy533;
+    if (yych == 'o')
+      goto yy533;
+    goto yy523;
+  yy828:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy829:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy533;
+    if (yych == 'n')
+      goto yy533;
+    goto yy523;
+  yy830:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy832;
+    if (yych == 's')
+      goto yy832;
+    goto yy523;
+  yy831:
+    yych = *++p;
+    if (yych <= ':') {
+      if (yych == '6')
+        goto yy533;
+      if (yych <= '9')
+        goto yy523;
+      goto yy534;
+    } else {
+      if (yych <= 'S') {
+        if (yych <= 'R')
+          goto yy523;
+        goto yy533;
+      } else {
+        if (yych == 's')
+          goto yy533;
+        goto yy523;
+      }
+    }
+  yy832:
+    yych = *++p;
+    if (yych == '.')
+      goto yy833;
+    if (yych == ':')
+      goto yy534;
+    goto yy523;
+  yy833:
+    yych = *++p;
+    if (yych <= 'X') {
+      if (yych <= 'K') {
+        if (yych == 'B')
+          goto yy836;
+        goto yy523;
+      } else {
+        if (yych <= 'L')
+          goto yy834;
+        if (yych <= 'W')
+          goto yy523;
+        goto yy835;
+      }
+    } else {
+      if (yych <= 'k') {
+        if (yych == 'b')
+          goto yy836;
+        goto yy523;
+      } else {
+        if (yych <= 'l')
+          goto yy834;
+        if (yych == 'x')
+          goto yy835;
+        goto yy523;
+      }
+    }
+  yy834:
+    yych = *++p;
+    if (yych == 'W')
+      goto yy841;
+    if (yych == 'w')
+      goto yy841;
+    goto yy523;
+  yy835:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy839;
+    if (yych == 'p')
+      goto yy839;
+    goto yy523;
+  yy836:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy837;
+    if (yych != 'e')
+      goto yy523;
+  yy837:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy838;
+    if (yych != 'e')
+      goto yy523;
+  yy838:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy839:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy840;
+    if (yych != 'c')
+      goto yy523;
+  yy840:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'S')
+        goto yy533;
+      if (yych == 's')
+        goto yy533;
+      goto yy523;
+    }
+  yy841:
+    yych = *++p;
+    if (yych == 'Z')
+      goto yy533;
+    if (yych == 'z')
+      goto yy533;
+    goto yy523;
+  yy842:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy533;
+    if (yych == 's')
+      goto yy533;
+    goto yy523;
+  yy843:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy844:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy847;
+    if (yych == 't')
+      goto yy847;
+    goto yy523;
+  yy845:
+    yych = *++p;
+    if (yych != '2')
+      goto yy523;
+    yych = *++p;
+    if (yych == '3')
+      goto yy533;
+    goto yy523;
+  yy847:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy848;
+    if (yych != 'p')
+      goto yy523;
+  yy848:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'S')
+        goto yy533;
+      if (yych == 's')
+        goto yy533;
+      goto yy523;
+    }
+  yy849:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy865;
+    if (yych == 'a')
+      goto yy865;
+    goto yy523;
+  yy850:
+    yych = *++p;
+    if (yych <= 'Z') {
+      if (yych == 'T')
+        goto yy533;
+      if (yych <= 'Y')
+        goto yy523;
+      goto yy856;
+    } else {
+      if (yych <= 't') {
+        if (yych <= 's')
+          goto yy523;
+        goto yy533;
+      } else {
+        if (yych == 'z')
+          goto yy856;
+        goto yy523;
+      }
+    }
+  yy851:
+    yych = *++p;
+    if (yych <= 'O') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'P')
+        goto yy853;
+      if (yych == 'p')
+        goto yy853;
+      goto yy523;
+    }
+  yy852:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy533;
+    if (yych == 'o')
+      goto yy533;
+    goto yy523;
+  yy853:
+    yych = *++p;
+    if (yych == 'H')
+      goto yy854;
+    if (yych != 'h')
+      goto yy523;
+  yy854:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy855;
+    if (yych != 'e')
+      goto yy523;
+  yy855:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy533;
+    if (yych == 'r')
+      goto yy533;
+    goto yy523;
+  yy856:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy857;
+    if (yych != 'm')
+      goto yy523;
+  yy857:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy858;
+    if (yych != 'o')
+      goto yy523;
+  yy858:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy859;
+    if (yych != 'p')
+      goto yy523;
+  yy859:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy860;
+    if (yych != 'r')
+      goto yy523;
+  yy860:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy861;
+    if (yych != 'o')
+      goto yy523;
+  yy861:
+    yych = *++p;
+    if (yych == 'J')
+      goto yy862;
+    if (yych != 'j')
+      goto yy523;
+  yy862:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy863;
+    if (yych != 'e')
+      goto yy523;
+  yy863:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy864;
+    if (yych != 'c')
+      goto yy523;
+  yy864:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy533;
+    if (yych == 't')
+      goto yy533;
+    goto yy523;
+  yy865:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy866;
+    if (yych != 'l')
+      goto yy523;
+  yy866:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy533;
+    if (yych == 'k')
+      goto yy533;
+    goto yy523;
+  yy867:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych <= 'M') {
+        if (yych == 'L')
+          goto yy877;
+        goto yy523;
+      } else {
+        if (yych <= 'N')
+          goto yy878;
+        if (yych <= 'R')
+          goto yy523;
+        goto yy879;
+      }
+    } else {
+      if (yych <= 'm') {
+        if (yych == 'l')
+          goto yy877;
+        goto yy523;
+      } else {
+        if (yych <= 'n')
+          goto yy878;
+        if (yych == 's')
+          goto yy879;
+        goto yy523;
+      }
+    }
+  yy868:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy876;
+    if (yych == 'e')
+      goto yy876;
+    goto yy523;
+  yy869:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy871;
+    if (yych == 'c')
+      goto yy871;
+    goto yy523;
+  yy870:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy871:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy872;
+    if (yych != 'e')
+      goto yy523;
+  yy872:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy873;
+    if (yych != 't')
+      goto yy523;
+  yy873:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy874;
+    if (yych != 'i')
+      goto yy523;
+  yy874:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy875;
+    if (yych != 'm')
+      goto yy523;
+  yy875:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy876:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy533;
+    if (yych == 'd')
+      goto yy533;
+    goto yy523;
+  yy877:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy878:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy880;
+    if (yych == 'g')
+      goto yy880;
+    goto yy523;
+  yy879:
+    yych = *++p;
+    if (yych == 'H')
+      goto yy533;
+    if (yych == 'h')
+      goto yy533;
+    goto yy523;
+  yy880:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy881;
+    if (yych != 'e')
+      goto yy523;
+  yy881:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy533;
+    if (yych == 'r')
+      goto yy533;
+    goto yy523;
+  yy882:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy900;
+    if (yych == 't')
+      goto yy900;
+    goto yy523;
+  yy883:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy533;
+    if (yych == 't')
+      goto yy533;
+    goto yy523;
+  yy884:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy533;
+    if (yych == 'm')
+      goto yy533;
+    goto yy523;
+  yy885:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych == 'P')
+        goto yy533;
+      if (yych <= 'R')
+        goto yy523;
+      goto yy533;
+    } else {
+      if (yych <= 'p') {
+        if (yych <= 'o')
+          goto yy523;
+        goto yy533;
+      } else {
+        if (yych == 's')
+          goto yy533;
+        goto yy523;
+      }
+    }
+  yy886:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy894;
+    if (yych == 'i')
+      goto yy894;
+    goto yy523;
+  yy887:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy893;
+    if (yych == 'a')
+      goto yy893;
+    goto yy523;
+  yy888:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy891;
+    if (yych == 'o')
+      goto yy891;
+    goto yy523;
+  yy889:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy890;
+    if (yych != 'a')
+      goto yy523;
+  yy890:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == ':')
+        goto yy534;
+      goto yy523;
+    } else {
+      if (yych <= 'S')
+        goto yy533;
+      if (yych == 's')
+        goto yy533;
+      goto yy523;
+    }
+  yy891:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy892;
+    if (yych != 'u')
+      goto yy523;
+  yy892:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy533;
+    if (yych == 't')
+      goto yy533;
+    goto yy523;
+  yy893:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy894:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy895;
+    if (yych != 'u')
+      goto yy523;
+  yy895:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy896;
+    if (yych != 'm')
+      goto yy523;
+  yy896:
+    yych = *++p;
+    if (yych == 'X')
+      goto yy897;
+    if (yych != 'x')
+      goto yy523;
+  yy897:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy898;
+    if (yych != 't')
+      goto yy523;
+  yy898:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy899;
+    if (yych != 'r')
+      goto yy523;
+  yy899:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy533;
+    if (yych == 'a')
+      goto yy533;
+    goto yy523;
+  yy900:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy901;
+    if (yych != 'a')
+      goto yy523;
+  yy901:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy902;
+    if (yych != 'c')
+      goto yy523;
+  yy902:
+    yych = *++p;
+    if (yych == 'H')
+      goto yy903;
+    if (yych != 'h')
+      goto yy523;
+  yy903:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy904;
+    if (yych != 'm')
+      goto yy523;
+  yy904:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy905;
+    if (yych != 'e')
+      goto yy523;
+  yy905:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy906;
+    if (yych != 'n')
+      goto yy523;
+  yy906:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy533;
+    if (yych == 't')
+      goto yy533;
+    goto yy523;
+  yy907:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy533;
+    if (yych == 's')
+      goto yy533;
+    goto yy523;
+  yy908:
+    yych = *++p;
+    if (yych <= 'V') {
+      if (yych == 'R')
+        goto yy533;
+      if (yych <= 'U')
+        goto yy523;
+    } else {
+      if (yych <= 'r') {
+        if (yych <= 'q')
+          goto yy523;
+        goto yy533;
+      } else {
+        if (yych != 'v')
+          goto yy523;
+      }
+    }
+    yych = *++p;
+    if (yych == 'A')
+      goto yy910;
+    if (yych != 'a')
+      goto yy523;
+  yy910:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy911;
+    if (yych != 's')
+      goto yy523;
+  yy911:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy912;
+    if (yych != 'c')
+      goto yy523;
+  yy912:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy913;
+    if (yych != 'r')
+      goto yy523;
+  yy913:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy914;
+    if (yych != 'i')
+      goto yy523;
+  yy914:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy915;
+    if (yych != 'p')
+      goto yy523;
+  yy915:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy533;
+    if (yych == 't')
+      goto yy533;
+    goto yy523;
+  yy916:
+    yych = *++p;
+    if (yych == 'B')
+      goto yy533;
+    if (yych == 'b')
+      goto yy533;
+    goto yy523;
+  yy917:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy533;
+    if (yych == 'n')
+      goto yy533;
+    goto yy523;
+  yy918:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy925;
+    if (yych == 'n')
+      goto yy925;
+    goto yy523;
+  yy919:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy533;
+    if (yych == 's')
+      goto yy533;
+    goto yy523;
+  yy920:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy924;
+    if (yych == 'c')
+      goto yy924;
+    goto yy523;
+  yy921:
+    yych = *++p;
+    if (yych <= 'V') {
+      if (yych == 'T')
+        goto yy923;
+      if (yych <= 'U')
+        goto yy523;
+      goto yy533;
+    } else {
+      if (yych <= 't') {
+        if (yych <= 's')
+          goto yy523;
+        goto yy923;
+      } else {
+        if (yych == 'v')
+          goto yy533;
+        goto yy523;
+      }
+    }
+  yy922:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy533;
+    if (yych == 'i')
+      goto yy533;
+    goto yy523;
+  yy923:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy533;
+    if (yych == 'a')
+      goto yy533;
+    goto yy523;
+  yy924:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy533;
+    if (yych == 't')
+      goto yy533;
+    goto yy523;
+  yy925:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy926;
+    if (yych != 'a')
+      goto yy523;
+  yy926:
+    yych = *++p;
+    if (yych != '-')
+      goto yy523;
+    yych = *++p;
+    if (yych == 'P')
+      goto yy928;
+    if (yych != 'p')
+      goto yy523;
+  yy928:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy929;
+    if (yych != 'l')
+      goto yy523;
+  yy929:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy930;
+    if (yych != 'a')
+      goto yy523;
+  yy930:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy931;
+    if (yych != 'y')
+      goto yy523;
+  yy931:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych == 'C')
+        goto yy932;
+      if (yych <= 'R')
+        goto yy523;
+      goto yy933;
+    } else {
+      if (yych <= 'c') {
+        if (yych <= 'b')
+          goto yy523;
+      } else {
+        if (yych == 's')
+          goto yy933;
+        goto yy523;
+      }
+    }
+  yy932:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy938;
+    if (yych == 'o')
+      goto yy938;
+    goto yy523;
+  yy933:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy934;
+    if (yych != 'i')
+      goto yy523;
+  yy934:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy935;
+    if (yych != 'n')
+      goto yy523;
+  yy935:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy936;
+    if (yych != 'g')
+      goto yy523;
+  yy936:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy937;
+    if (yych != 'l')
+      goto yy523;
+  yy937:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  yy938:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy939;
+    if (yych != 'n')
+      goto yy523;
+  yy939:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy940;
+    if (yych != 't')
+      goto yy523;
+  yy940:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy941;
+    if (yych != 'a')
+      goto yy523;
+  yy941:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy942;
+    if (yych != 'i')
+      goto yy523;
+  yy942:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy943;
+    if (yych != 'n')
+      goto yy523;
+  yy943:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy944;
+    if (yych != 'e')
+      goto yy523;
+  yy944:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy533;
+    if (yych == 'r')
+      goto yy533;
+    goto yy523;
+  yy945:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy533;
+    if (yych == 's')
+      goto yy533;
+    goto yy523;
+  yy946:
+    yych = *++p;
+    if (yych <= 'N') {
+      if (yych <= 'A') {
+        if (yych <= '@')
+          goto yy523;
+        goto yy968;
+      } else {
+        if (yych <= 'L')
+          goto yy523;
+        if (yych <= 'M')
+          goto yy969;
+        goto yy970;
+      }
+    } else {
+      if (yych <= 'l') {
+        if (yych == 'a')
+          goto yy968;
+        goto yy523;
+      } else {
+        if (yych <= 'm')
+          goto yy969;
+        if (yych <= 'n')
+          goto yy970;
+        goto yy523;
+      }
+    }
+  yy947:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy955;
+    if (yych == 'r')
+      goto yy955;
+    goto yy523;
+  yy948:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'L')
+        goto yy952;
+      if (yych <= 'O')
+        goto yy523;
+      goto yy533;
+    } else {
+      if (yych <= 'l') {
+        if (yych <= 'k')
+          goto yy523;
+        goto yy952;
+      } else {
+        if (yych == 'p')
+          goto yy533;
+        goto yy523;
+      }
+    }
+  yy949:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy951;
+    if (yych == 'i')
+      goto yy951;
+    goto yy523;
+  yy950:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy533;
+    if (yych == 'd')
+      goto yy533;
+    goto yy523;
+  yy951:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy533;
+    if (yych == 'd')
+      goto yy533;
+    goto yy523;
+  yy952:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy953;
+    if (yych != 'l')
+      goto yy523;
+  yy953:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy954;
+    if (yych != 't')
+      goto yy523;
+  yy954:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy533;
+    if (yych == 'o')
+      goto yy533;
+    goto yy523;
+  yy955:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy956;
+    if (yych != 'o')
+      goto yy523;
+  yy956:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy957;
+    if (yych != 'm')
+      goto yy523;
+  yy957:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy958;
+    if (yych != 'e')
+      goto yy523;
+  yy958:
+    yych = *++p;
+    if (yych == '-')
+      goto yy959;
+    if (yych == ':')
+      goto yy534;
+    goto yy523;
+  yy959:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy960;
+    if (yych != 'e')
+      goto yy523;
+  yy960:
+    yych = *++p;
+    if (yych == 'X')
+      goto yy961;
+    if (yych != 'x')
+      goto yy523;
+  yy961:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy962;
+    if (yych != 't')
+      goto yy523;
+  yy962:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy963;
+    if (yych != 'e')
+      goto yy523;
+  yy963:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy964;
+    if (yych != 'n')
+      goto yy523;
+  yy964:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy965;
+    if (yych != 's')
+      goto yy523;
+  yy965:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy966;
+    if (yych != 'i')
+      goto yy523;
+  yy966:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy967;
+    if (yych != 'o')
+      goto yy523;
+  yy967:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy533;
+    if (yych == 'n')
+      goto yy533;
+    goto yy523;
+  yy968:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy533;
+    if (yych == 'p')
+      goto yy533;
+    goto yy523;
+  yy969:
+    yych = *++p;
+    if (yych == '-')
+      goto yy974;
+    goto yy523;
+  yy970:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy971;
+    if (yych != 't')
+      goto yy523;
+  yy971:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy972;
+    if (yych != 'e')
+      goto yy523;
+  yy972:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy973;
+    if (yych != 'n')
+      goto yy523;
+  yy973:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy533;
+    if (yych == 't')
+      goto yy533;
+    goto yy523;
+  yy974:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy975;
+    if (yych != 'e')
+      goto yy523;
+  yy975:
+    yych = *++p;
+    if (yych == 'V')
+      goto yy976;
+    if (yych != 'v')
+      goto yy523;
+  yy976:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy977;
+    if (yych != 'e')
+      goto yy523;
+  yy977:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy978;
+    if (yych != 'n')
+      goto yy523;
+  yy978:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy979;
+    if (yych != 't')
+      goto yy523;
+  yy979:
+    yych = *++p;
+    if (yych == 'B')
+      goto yy980;
+    if (yych != 'b')
+      goto yy523;
+  yy980:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy981;
+    if (yych != 'r')
+      goto yy523;
+  yy981:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy982;
+    if (yych != 'i')
+      goto yy523;
+  yy982:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy983;
+    if (yych != 't')
+      goto yy523;
+  yy983:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy984;
+    if (yych != 'e')
+      goto yy523;
+  yy984:
+    yych = *++p;
+    if (yych != '-')
+      goto yy523;
+    yych = *++p;
+    if (yych == 'A')
+      goto yy986;
+    if (yych != 'a')
+      goto yy523;
+  yy986:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy987;
+    if (yych != 't')
+      goto yy523;
+  yy987:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy988;
+    if (yych != 't')
+      goto yy523;
+  yy988:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy989;
+    if (yych != 'e')
+      goto yy523;
+  yy989:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy990;
+    if (yych != 'n')
+      goto yy523;
+  yy990:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy991;
+    if (yych != 'd')
+      goto yy523;
+  yy991:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy992;
+    if (yych != 'e')
+      goto yy523;
+  yy992:
+    ++p;
+    if ((yych = *p) == 'E')
+      goto yy533;
+    if (yych == 'e')
+      goto yy533;
+    goto yy523;
+  }
 }
 
 // Try to match email autolink after first <, returning num of chars matched.
-bufsize_t _scan_autolink_email(const unsigned char *p)
-{
+bufsize_t _scan_autolink_email(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	static const unsigned char yybm[] = {
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0, 128,   0, 128, 128, 128, 128, 128, 
-		  0,   0, 128, 128,   0, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128,   0,   0,   0, 128,   0, 128, 
-		  0, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128,   0,   0,   0, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= '?') {
-		if (yych <= ')') {
-			if (yych <= ' ') {
-				if (yych != '\n') goto yy997;
-			} else {
-				if (yych == '"') goto yy997;
-				if (yych <= '\'') goto yy996;
-				goto yy997;
-			}
-		} else {
-			if (yych <= '9') {
-				if (yych == ',') goto yy997;
-				goto yy996;
-			} else {
-				if (yych == '=') goto yy996;
-				if (yych <= '>') goto yy997;
-				goto yy996;
-			}
-		}
-	} else {
-		if (yych <= 0xDF) {
-			if (yych <= ']') {
-				if (yych <= '@') goto yy997;
-				if (yych <= 'Z') goto yy996;
-				goto yy997;
-			} else {
-				if (yych <= '~') goto yy996;
-				if (yych <= 0x7F) goto yy997;
-				if (yych >= 0xC2) goto yy998;
-			}
-		} else {
-			if (yych <= 0xEF) {
-				if (yych <= 0xE0) goto yy1000;
-				if (yych == 0xED) goto yy1005;
-				goto yy1001;
-			} else {
-				if (yych <= 0xF0) goto yy1002;
-				if (yych <= 0xF3) goto yy1003;
-				if (yych <= 0xF4) goto yy1004;
-			}
-		}
-	}
-yy995:
-	{ return 0; }
-yy996:
-	yych = *(marker = ++p);
-	if (yych <= ',') {
-		if (yych <= '"') {
-			if (yych == '!') goto yy1008;
-			goto yy995;
-		} else {
-			if (yych <= '\'') goto yy1008;
-			if (yych <= ')') goto yy995;
-			if (yych <= '+') goto yy1008;
-			goto yy995;
-		}
-	} else {
-		if (yych <= '>') {
-			if (yych <= '9') goto yy1008;
-			if (yych == '=') goto yy1008;
-			goto yy995;
-		} else {
-			if (yych <= 'Z') goto yy1008;
-			if (yych <= ']') goto yy995;
-			if (yych <= '~') goto yy1008;
-			goto yy995;
-		}
-	}
-yy997:
-	yych = *++p;
-	goto yy995;
-yy998:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy999;
-	if (yych <= 0xBF) goto yy997;
-yy999:
-	p = marker;
-	goto yy995;
-yy1000:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy999;
-	if (yych <= 0xBF) goto yy998;
-	goto yy999;
-yy1001:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy999;
-	if (yych <= 0xBF) goto yy998;
-	goto yy999;
-yy1002:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy999;
-	if (yych <= 0xBF) goto yy1001;
-	goto yy999;
-yy1003:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy999;
-	if (yych <= 0xBF) goto yy1001;
-	goto yy999;
-yy1004:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy999;
-	if (yych <= 0x8F) goto yy1001;
-	goto yy999;
-yy1005:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy999;
-	if (yych <= 0x9F) goto yy998;
-	goto yy999;
-yy1006:
-	yych = *++p;
-	if (yych <= '@') {
-		if (yych <= '/') goto yy999;
-		if (yych <= '9') goto yy1009;
-		goto yy999;
-	} else {
-		if (yych <= 'Z') goto yy1009;
-		if (yych <= '`') goto yy999;
-		if (yych <= 'z') goto yy1009;
-		goto yy999;
-	}
-yy1007:
-	++p;
-	yych = *p;
-yy1008:
-	if (yybm[0+yych] & 128) {
-		goto yy1007;
-	}
-	if (yych <= '>') goto yy999;
-	if (yych <= '@') goto yy1006;
-	goto yy999;
-yy1009:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1011;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1011;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1011;
-			goto yy999;
-		}
-	}
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1139;
-		if (yych <= '/') goto yy999;
-		goto yy1140;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1140;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1140;
-			goto yy999;
-		}
-	}
-yy1011:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych <= '-') goto yy1139;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1140;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1140;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1140;
-			goto yy999;
-		}
-	}
-yy1012:
-	++p;
-	yych = *p;
-	if (yych <= '@') {
-		if (yych <= '/') goto yy999;
-		if (yych <= '9') goto yy1015;
-		goto yy999;
-	} else {
-		if (yych <= 'Z') goto yy1015;
-		if (yych <= '`') goto yy999;
-		if (yych <= 'z') goto yy1015;
-		goto yy999;
-	}
-yy1013:
-	++p;
-	{ return (bufsize_t)(p - start); }
-yy1015:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1017;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1017;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1017;
-			goto yy999;
-		}
-	}
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1018;
-		if (yych <= '/') goto yy999;
-		goto yy1019;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1019;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1019;
-			goto yy999;
-		}
-	}
-yy1017:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1019;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1019;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1019;
-			goto yy999;
-		}
-	}
-yy1018:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1020;
-		if (yych <= '/') goto yy999;
-		goto yy1021;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1021;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1021;
-			goto yy999;
-		}
-	}
-yy1019:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1021;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1021;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1021;
-			goto yy999;
-		}
-	}
-yy1020:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1022;
-		if (yych <= '/') goto yy999;
-		goto yy1023;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1023;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1023;
-			goto yy999;
-		}
-	}
-yy1021:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1023;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1023;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1023;
-			goto yy999;
-		}
-	}
-yy1022:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1024;
-		if (yych <= '/') goto yy999;
-		goto yy1025;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1025;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1025;
-			goto yy999;
-		}
-	}
-yy1023:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1025;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1025;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1025;
-			goto yy999;
-		}
-	}
-yy1024:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1026;
-		if (yych <= '/') goto yy999;
-		goto yy1027;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1027;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1027;
-			goto yy999;
-		}
-	}
-yy1025:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1027;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1027;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1027;
-			goto yy999;
-		}
-	}
-yy1026:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1028;
-		if (yych <= '/') goto yy999;
-		goto yy1029;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1029;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1029;
-			goto yy999;
-		}
-	}
-yy1027:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1029;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1029;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1029;
-			goto yy999;
-		}
-	}
-yy1028:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1030;
-		if (yych <= '/') goto yy999;
-		goto yy1031;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1031;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1031;
-			goto yy999;
-		}
-	}
-yy1029:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1031;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1031;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1031;
-			goto yy999;
-		}
-	}
-yy1030:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1032;
-		if (yych <= '/') goto yy999;
-		goto yy1033;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1033;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1033;
-			goto yy999;
-		}
-	}
-yy1031:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1033;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1033;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1033;
-			goto yy999;
-		}
-	}
-yy1032:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1034;
-		if (yych <= '/') goto yy999;
-		goto yy1035;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1035;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1035;
-			goto yy999;
-		}
-	}
-yy1033:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1035;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1035;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1035;
-			goto yy999;
-		}
-	}
-yy1034:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1036;
-		if (yych <= '/') goto yy999;
-		goto yy1037;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1037;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1037;
-			goto yy999;
-		}
-	}
-yy1035:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1037;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1037;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1037;
-			goto yy999;
-		}
-	}
-yy1036:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1038;
-		if (yych <= '/') goto yy999;
-		goto yy1039;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1039;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1039;
-			goto yy999;
-		}
-	}
-yy1037:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1039;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1039;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1039;
-			goto yy999;
-		}
-	}
-yy1038:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1040;
-		if (yych <= '/') goto yy999;
-		goto yy1041;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1041;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1041;
-			goto yy999;
-		}
-	}
-yy1039:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1041;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1041;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1041;
-			goto yy999;
-		}
-	}
-yy1040:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1042;
-		if (yych <= '/') goto yy999;
-		goto yy1043;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1043;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1043;
-			goto yy999;
-		}
-	}
-yy1041:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1043;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1043;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1043;
-			goto yy999;
-		}
-	}
-yy1042:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1044;
-		if (yych <= '/') goto yy999;
-		goto yy1045;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1045;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1045;
-			goto yy999;
-		}
-	}
-yy1043:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1045;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1045;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1045;
-			goto yy999;
-		}
-	}
-yy1044:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1046;
-		if (yych <= '/') goto yy999;
-		goto yy1047;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1047;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1047;
-			goto yy999;
-		}
-	}
-yy1045:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1047;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1047;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1047;
-			goto yy999;
-		}
-	}
-yy1046:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1048;
-		if (yych <= '/') goto yy999;
-		goto yy1049;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1049;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1049;
-			goto yy999;
-		}
-	}
-yy1047:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1049;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1049;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1049;
-			goto yy999;
-		}
-	}
-yy1048:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1050;
-		if (yych <= '/') goto yy999;
-		goto yy1051;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1051;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1051;
-			goto yy999;
-		}
-	}
-yy1049:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1051;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1051;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1051;
-			goto yy999;
-		}
-	}
-yy1050:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1052;
-		if (yych <= '/') goto yy999;
-		goto yy1053;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1053;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1053;
-			goto yy999;
-		}
-	}
-yy1051:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1053;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1053;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1053;
-			goto yy999;
-		}
-	}
-yy1052:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1054;
-		if (yych <= '/') goto yy999;
-		goto yy1055;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1055;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1055;
-			goto yy999;
-		}
-	}
-yy1053:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1055;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1055;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1055;
-			goto yy999;
-		}
-	}
-yy1054:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1056;
-		if (yych <= '/') goto yy999;
-		goto yy1057;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1057;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1057;
-			goto yy999;
-		}
-	}
-yy1055:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1057;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1057;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1057;
-			goto yy999;
-		}
-	}
-yy1056:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1058;
-		if (yych <= '/') goto yy999;
-		goto yy1059;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1059;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1059;
-			goto yy999;
-		}
-	}
-yy1057:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1059;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1059;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1059;
-			goto yy999;
-		}
-	}
-yy1058:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1060;
-		if (yych <= '/') goto yy999;
-		goto yy1061;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1061;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1061;
-			goto yy999;
-		}
-	}
-yy1059:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1061;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1061;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1061;
-			goto yy999;
-		}
-	}
-yy1060:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1062;
-		if (yych <= '/') goto yy999;
-		goto yy1063;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1063;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1063;
-			goto yy999;
-		}
-	}
-yy1061:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1063;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1063;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1063;
-			goto yy999;
-		}
-	}
-yy1062:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1064;
-		if (yych <= '/') goto yy999;
-		goto yy1065;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1065;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1065;
-			goto yy999;
-		}
-	}
-yy1063:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1065;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1065;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1065;
-			goto yy999;
-		}
-	}
-yy1064:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1066;
-		if (yych <= '/') goto yy999;
-		goto yy1067;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1067;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1067;
-			goto yy999;
-		}
-	}
-yy1065:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1067;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1067;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1067;
-			goto yy999;
-		}
-	}
-yy1066:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1068;
-		if (yych <= '/') goto yy999;
-		goto yy1069;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1069;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1069;
-			goto yy999;
-		}
-	}
-yy1067:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1069;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1069;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1069;
-			goto yy999;
-		}
-	}
-yy1068:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1070;
-		if (yych <= '/') goto yy999;
-		goto yy1071;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1071;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1071;
-			goto yy999;
-		}
-	}
-yy1069:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1071;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1071;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1071;
-			goto yy999;
-		}
-	}
-yy1070:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1072;
-		if (yych <= '/') goto yy999;
-		goto yy1073;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1073;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1073;
-			goto yy999;
-		}
-	}
-yy1071:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1073;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1073;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1073;
-			goto yy999;
-		}
-	}
-yy1072:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1074;
-		if (yych <= '/') goto yy999;
-		goto yy1075;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1075;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1075;
-			goto yy999;
-		}
-	}
-yy1073:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1075;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1075;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1075;
-			goto yy999;
-		}
-	}
-yy1074:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1076;
-		if (yych <= '/') goto yy999;
-		goto yy1077;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1077;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1077;
-			goto yy999;
-		}
-	}
-yy1075:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1077;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1077;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1077;
-			goto yy999;
-		}
-	}
-yy1076:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1078;
-		if (yych <= '/') goto yy999;
-		goto yy1079;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1079;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1079;
-			goto yy999;
-		}
-	}
-yy1077:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1079;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1079;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1079;
-			goto yy999;
-		}
-	}
-yy1078:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1080;
-		if (yych <= '/') goto yy999;
-		goto yy1081;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1081;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1081;
-			goto yy999;
-		}
-	}
-yy1079:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1081;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1081;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1081;
-			goto yy999;
-		}
-	}
-yy1080:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1082;
-		if (yych <= '/') goto yy999;
-		goto yy1083;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1083;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1083;
-			goto yy999;
-		}
-	}
-yy1081:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1083;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1083;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1083;
-			goto yy999;
-		}
-	}
-yy1082:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1084;
-		if (yych <= '/') goto yy999;
-		goto yy1085;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1085;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1085;
-			goto yy999;
-		}
-	}
-yy1083:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1085;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1085;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1085;
-			goto yy999;
-		}
-	}
-yy1084:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1086;
-		if (yych <= '/') goto yy999;
-		goto yy1087;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1087;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1087;
-			goto yy999;
-		}
-	}
-yy1085:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1087;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1087;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1087;
-			goto yy999;
-		}
-	}
-yy1086:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1088;
-		if (yych <= '/') goto yy999;
-		goto yy1089;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1089;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1089;
-			goto yy999;
-		}
-	}
-yy1087:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1089;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1089;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1089;
-			goto yy999;
-		}
-	}
-yy1088:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1090;
-		if (yych <= '/') goto yy999;
-		goto yy1091;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1091;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1091;
-			goto yy999;
-		}
-	}
-yy1089:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1091;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1091;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1091;
-			goto yy999;
-		}
-	}
-yy1090:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1092;
-		if (yych <= '/') goto yy999;
-		goto yy1093;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1093;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1093;
-			goto yy999;
-		}
-	}
-yy1091:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1093;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1093;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1093;
-			goto yy999;
-		}
-	}
-yy1092:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1094;
-		if (yych <= '/') goto yy999;
-		goto yy1095;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1095;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1095;
-			goto yy999;
-		}
-	}
-yy1093:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1095;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1095;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1095;
-			goto yy999;
-		}
-	}
-yy1094:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1096;
-		if (yych <= '/') goto yy999;
-		goto yy1097;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1097;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1097;
-			goto yy999;
-		}
-	}
-yy1095:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1097;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1097;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1097;
-			goto yy999;
-		}
-	}
-yy1096:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1098;
-		if (yych <= '/') goto yy999;
-		goto yy1099;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1099;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1099;
-			goto yy999;
-		}
-	}
-yy1097:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1099;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1099;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1099;
-			goto yy999;
-		}
-	}
-yy1098:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1100;
-		if (yych <= '/') goto yy999;
-		goto yy1101;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1101;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1101;
-			goto yy999;
-		}
-	}
-yy1099:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1101;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1101;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1101;
-			goto yy999;
-		}
-	}
-yy1100:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1102;
-		if (yych <= '/') goto yy999;
-		goto yy1103;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1103;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1103;
-			goto yy999;
-		}
-	}
-yy1101:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1103;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1103;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1103;
-			goto yy999;
-		}
-	}
-yy1102:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1104;
-		if (yych <= '/') goto yy999;
-		goto yy1105;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1105;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1105;
-			goto yy999;
-		}
-	}
-yy1103:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1105;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1105;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1105;
-			goto yy999;
-		}
-	}
-yy1104:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1106;
-		if (yych <= '/') goto yy999;
-		goto yy1107;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1107;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1107;
-			goto yy999;
-		}
-	}
-yy1105:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1107;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1107;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1107;
-			goto yy999;
-		}
-	}
-yy1106:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1108;
-		if (yych <= '/') goto yy999;
-		goto yy1109;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1109;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1109;
-			goto yy999;
-		}
-	}
-yy1107:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1109;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1109;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1109;
-			goto yy999;
-		}
-	}
-yy1108:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1110;
-		if (yych <= '/') goto yy999;
-		goto yy1111;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1111;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1111;
-			goto yy999;
-		}
-	}
-yy1109:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1111;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1111;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1111;
-			goto yy999;
-		}
-	}
-yy1110:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1112;
-		if (yych <= '/') goto yy999;
-		goto yy1113;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1113;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1113;
-			goto yy999;
-		}
-	}
-yy1111:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1113;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1113;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1113;
-			goto yy999;
-		}
-	}
-yy1112:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1114;
-		if (yych <= '/') goto yy999;
-		goto yy1115;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1115;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1115;
-			goto yy999;
-		}
-	}
-yy1113:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1115;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1115;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1115;
-			goto yy999;
-		}
-	}
-yy1114:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1116;
-		if (yych <= '/') goto yy999;
-		goto yy1117;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1117;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1117;
-			goto yy999;
-		}
-	}
-yy1115:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1117;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1117;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1117;
-			goto yy999;
-		}
-	}
-yy1116:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1118;
-		if (yych <= '/') goto yy999;
-		goto yy1119;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1119;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1119;
-			goto yy999;
-		}
-	}
-yy1117:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1119;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1119;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1119;
-			goto yy999;
-		}
-	}
-yy1118:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1120;
-		if (yych <= '/') goto yy999;
-		goto yy1121;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1121;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1121;
-			goto yy999;
-		}
-	}
-yy1119:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1121;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1121;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1121;
-			goto yy999;
-		}
-	}
-yy1120:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1122;
-		if (yych <= '/') goto yy999;
-		goto yy1123;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1123;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1123;
-			goto yy999;
-		}
-	}
-yy1121:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1123;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1123;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1123;
-			goto yy999;
-		}
-	}
-yy1122:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1124;
-		if (yych <= '/') goto yy999;
-		goto yy1125;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1125;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1125;
-			goto yy999;
-		}
-	}
-yy1123:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1125;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1125;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1125;
-			goto yy999;
-		}
-	}
-yy1124:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1126;
-		if (yych <= '/') goto yy999;
-		goto yy1127;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1127;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1127;
-			goto yy999;
-		}
-	}
-yy1125:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1127;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1127;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1127;
-			goto yy999;
-		}
-	}
-yy1126:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1128;
-		if (yych <= '/') goto yy999;
-		goto yy1129;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1129;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1129;
-			goto yy999;
-		}
-	}
-yy1127:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1129;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1129;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1129;
-			goto yy999;
-		}
-	}
-yy1128:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1130;
-		if (yych <= '/') goto yy999;
-		goto yy1131;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1131;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1131;
-			goto yy999;
-		}
-	}
-yy1129:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1131;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1131;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1131;
-			goto yy999;
-		}
-	}
-yy1130:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1132;
-		if (yych <= '/') goto yy999;
-		goto yy1133;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1133;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1133;
-			goto yy999;
-		}
-	}
-yy1131:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1133;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1133;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1133;
-			goto yy999;
-		}
-	}
-yy1132:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1134;
-		if (yych <= '/') goto yy999;
-		goto yy1135;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1135;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1135;
-			goto yy999;
-		}
-	}
-yy1133:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1135;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1135;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1135;
-			goto yy999;
-		}
-	}
-yy1134:
-	++p;
-	yych = *p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1136;
-		if (yych <= '/') goto yy999;
-		goto yy1137;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1137;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1137;
-			goto yy999;
-		}
-	}
-yy1135:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1137;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1137;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1137;
-			goto yy999;
-		}
-	}
-yy1136:
-	++p;
-	yych = *p;
-	if (yych <= '@') {
-		if (yych <= '/') goto yy999;
-		if (yych <= '9') goto yy1138;
-		goto yy999;
-	} else {
-		if (yych <= 'Z') goto yy1138;
-		if (yych <= '`') goto yy999;
-		if (yych <= 'z') goto yy1138;
-		goto yy999;
-	}
-yy1137:
-	++p;
-	yych = *p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= '-') goto yy999;
-			goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych >= ':') goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych >= '{') goto yy999;
-		}
-	}
-yy1138:
-	++p;
-	yych = *p;
-	if (yych == '.') goto yy1012;
-	if (yych == '>') goto yy1013;
-	goto yy999;
-yy1139:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1141;
-		if (yych <= '/') goto yy999;
-		goto yy1142;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1142;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1142;
-			goto yy999;
-		}
-	}
-yy1140:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1142;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1142;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1142;
-			goto yy999;
-		}
-	}
-yy1141:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1143;
-		if (yych <= '/') goto yy999;
-		goto yy1144;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1144;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1144;
-			goto yy999;
-		}
-	}
-yy1142:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1144;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1144;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1144;
-			goto yy999;
-		}
-	}
-yy1143:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1145;
-		if (yych <= '/') goto yy999;
-		goto yy1146;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1146;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1146;
-			goto yy999;
-		}
-	}
-yy1144:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1146;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1146;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1146;
-			goto yy999;
-		}
-	}
-yy1145:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1147;
-		if (yych <= '/') goto yy999;
-		goto yy1148;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1148;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1148;
-			goto yy999;
-		}
-	}
-yy1146:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1148;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1148;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1148;
-			goto yy999;
-		}
-	}
-yy1147:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1149;
-		if (yych <= '/') goto yy999;
-		goto yy1150;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1150;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1150;
-			goto yy999;
-		}
-	}
-yy1148:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1150;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1150;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1150;
-			goto yy999;
-		}
-	}
-yy1149:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1151;
-		if (yych <= '/') goto yy999;
-		goto yy1152;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1152;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1152;
-			goto yy999;
-		}
-	}
-yy1150:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1152;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1152;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1152;
-			goto yy999;
-		}
-	}
-yy1151:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1153;
-		if (yych <= '/') goto yy999;
-		goto yy1154;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1154;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1154;
-			goto yy999;
-		}
-	}
-yy1152:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1154;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1154;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1154;
-			goto yy999;
-		}
-	}
-yy1153:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1155;
-		if (yych <= '/') goto yy999;
-		goto yy1156;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1156;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1156;
-			goto yy999;
-		}
-	}
-yy1154:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1156;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1156;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1156;
-			goto yy999;
-		}
-	}
-yy1155:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1157;
-		if (yych <= '/') goto yy999;
-		goto yy1158;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1158;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1158;
-			goto yy999;
-		}
-	}
-yy1156:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1158;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1158;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1158;
-			goto yy999;
-		}
-	}
-yy1157:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1159;
-		if (yych <= '/') goto yy999;
-		goto yy1160;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1160;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1160;
-			goto yy999;
-		}
-	}
-yy1158:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1160;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1160;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1160;
-			goto yy999;
-		}
-	}
-yy1159:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1161;
-		if (yych <= '/') goto yy999;
-		goto yy1162;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1162;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1162;
-			goto yy999;
-		}
-	}
-yy1160:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1162;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1162;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1162;
-			goto yy999;
-		}
-	}
-yy1161:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1163;
-		if (yych <= '/') goto yy999;
-		goto yy1164;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1164;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1164;
-			goto yy999;
-		}
-	}
-yy1162:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1164;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1164;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1164;
-			goto yy999;
-		}
-	}
-yy1163:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1165;
-		if (yych <= '/') goto yy999;
-		goto yy1166;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1166;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1166;
-			goto yy999;
-		}
-	}
-yy1164:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1166;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1166;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1166;
-			goto yy999;
-		}
-	}
-yy1165:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1167;
-		if (yych <= '/') goto yy999;
-		goto yy1168;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1168;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1168;
-			goto yy999;
-		}
-	}
-yy1166:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1168;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1168;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1168;
-			goto yy999;
-		}
-	}
-yy1167:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1169;
-		if (yych <= '/') goto yy999;
-		goto yy1170;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1170;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1170;
-			goto yy999;
-		}
-	}
-yy1168:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1170;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1170;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1170;
-			goto yy999;
-		}
-	}
-yy1169:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1171;
-		if (yych <= '/') goto yy999;
-		goto yy1172;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1172;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1172;
-			goto yy999;
-		}
-	}
-yy1170:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1172;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1172;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1172;
-			goto yy999;
-		}
-	}
-yy1171:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1173;
-		if (yych <= '/') goto yy999;
-		goto yy1174;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1174;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1174;
-			goto yy999;
-		}
-	}
-yy1172:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1174;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1174;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1174;
-			goto yy999;
-		}
-	}
-yy1173:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1175;
-		if (yych <= '/') goto yy999;
-		goto yy1176;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1176;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1176;
-			goto yy999;
-		}
-	}
-yy1174:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1176;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1176;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1176;
-			goto yy999;
-		}
-	}
-yy1175:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1177;
-		if (yych <= '/') goto yy999;
-		goto yy1178;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1178;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1178;
-			goto yy999;
-		}
-	}
-yy1176:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1178;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1178;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1178;
-			goto yy999;
-		}
-	}
-yy1177:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1179;
-		if (yych <= '/') goto yy999;
-		goto yy1180;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1180;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1180;
-			goto yy999;
-		}
-	}
-yy1178:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1180;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1180;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1180;
-			goto yy999;
-		}
-	}
-yy1179:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1181;
-		if (yych <= '/') goto yy999;
-		goto yy1182;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1182;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1182;
-			goto yy999;
-		}
-	}
-yy1180:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1182;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1182;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1182;
-			goto yy999;
-		}
-	}
-yy1181:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1183;
-		if (yych <= '/') goto yy999;
-		goto yy1184;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1184;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1184;
-			goto yy999;
-		}
-	}
-yy1182:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1184;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1184;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1184;
-			goto yy999;
-		}
-	}
-yy1183:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1185;
-		if (yych <= '/') goto yy999;
-		goto yy1186;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1186;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1186;
-			goto yy999;
-		}
-	}
-yy1184:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1186;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1186;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1186;
-			goto yy999;
-		}
-	}
-yy1185:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1187;
-		if (yych <= '/') goto yy999;
-		goto yy1188;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1188;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1188;
-			goto yy999;
-		}
-	}
-yy1186:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1188;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1188;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1188;
-			goto yy999;
-		}
-	}
-yy1187:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1189;
-		if (yych <= '/') goto yy999;
-		goto yy1190;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1190;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1190;
-			goto yy999;
-		}
-	}
-yy1188:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1190;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1190;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1190;
-			goto yy999;
-		}
-	}
-yy1189:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1191;
-		if (yych <= '/') goto yy999;
-		goto yy1192;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1192;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1192;
-			goto yy999;
-		}
-	}
-yy1190:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1192;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1192;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1192;
-			goto yy999;
-		}
-	}
-yy1191:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1193;
-		if (yych <= '/') goto yy999;
-		goto yy1194;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1194;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1194;
-			goto yy999;
-		}
-	}
-yy1192:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1194;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1194;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1194;
-			goto yy999;
-		}
-	}
-yy1193:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1195;
-		if (yych <= '/') goto yy999;
-		goto yy1196;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1196;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1196;
-			goto yy999;
-		}
-	}
-yy1194:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1196;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1196;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1196;
-			goto yy999;
-		}
-	}
-yy1195:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1197;
-		if (yych <= '/') goto yy999;
-		goto yy1198;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1198;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1198;
-			goto yy999;
-		}
-	}
-yy1196:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1198;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1198;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1198;
-			goto yy999;
-		}
-	}
-yy1197:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1199;
-		if (yych <= '/') goto yy999;
-		goto yy1200;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1200;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1200;
-			goto yy999;
-		}
-	}
-yy1198:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1200;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1200;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1200;
-			goto yy999;
-		}
-	}
-yy1199:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1201;
-		if (yych <= '/') goto yy999;
-		goto yy1202;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1202;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1202;
-			goto yy999;
-		}
-	}
-yy1200:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1202;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1202;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1202;
-			goto yy999;
-		}
-	}
-yy1201:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1203;
-		if (yych <= '/') goto yy999;
-		goto yy1204;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1204;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1204;
-			goto yy999;
-		}
-	}
-yy1202:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1204;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1204;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1204;
-			goto yy999;
-		}
-	}
-yy1203:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1205;
-		if (yych <= '/') goto yy999;
-		goto yy1206;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1206;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1206;
-			goto yy999;
-		}
-	}
-yy1204:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1206;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1206;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1206;
-			goto yy999;
-		}
-	}
-yy1205:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1207;
-		if (yych <= '/') goto yy999;
-		goto yy1208;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1208;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1208;
-			goto yy999;
-		}
-	}
-yy1206:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1208;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1208;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1208;
-			goto yy999;
-		}
-	}
-yy1207:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1209;
-		if (yych <= '/') goto yy999;
-		goto yy1210;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1210;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1210;
-			goto yy999;
-		}
-	}
-yy1208:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1210;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1210;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1210;
-			goto yy999;
-		}
-	}
-yy1209:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1211;
-		if (yych <= '/') goto yy999;
-		goto yy1212;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1212;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1212;
-			goto yy999;
-		}
-	}
-yy1210:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1212;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1212;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1212;
-			goto yy999;
-		}
-	}
-yy1211:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1213;
-		if (yych <= '/') goto yy999;
-		goto yy1214;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1214;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1214;
-			goto yy999;
-		}
-	}
-yy1212:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1214;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1214;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1214;
-			goto yy999;
-		}
-	}
-yy1213:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1215;
-		if (yych <= '/') goto yy999;
-		goto yy1216;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1216;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1216;
-			goto yy999;
-		}
-	}
-yy1214:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1216;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1216;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1216;
-			goto yy999;
-		}
-	}
-yy1215:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1217;
-		if (yych <= '/') goto yy999;
-		goto yy1218;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1218;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1218;
-			goto yy999;
-		}
-	}
-yy1216:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1218;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1218;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1218;
-			goto yy999;
-		}
-	}
-yy1217:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1219;
-		if (yych <= '/') goto yy999;
-		goto yy1220;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1220;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1220;
-			goto yy999;
-		}
-	}
-yy1218:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1220;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1220;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1220;
-			goto yy999;
-		}
-	}
-yy1219:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1221;
-		if (yych <= '/') goto yy999;
-		goto yy1222;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1222;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1222;
-			goto yy999;
-		}
-	}
-yy1220:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1222;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1222;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1222;
-			goto yy999;
-		}
-	}
-yy1221:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1223;
-		if (yych <= '/') goto yy999;
-		goto yy1224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1224;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1224;
-			goto yy999;
-		}
-	}
-yy1222:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1224;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1224;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1224;
-			goto yy999;
-		}
-	}
-yy1223:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1225;
-		if (yych <= '/') goto yy999;
-		goto yy1226;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1226;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1226;
-			goto yy999;
-		}
-	}
-yy1224:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1226;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1226;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1226;
-			goto yy999;
-		}
-	}
-yy1225:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1227;
-		if (yych <= '/') goto yy999;
-		goto yy1228;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1228;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1228;
-			goto yy999;
-		}
-	}
-yy1226:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1228;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1228;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1228;
-			goto yy999;
-		}
-	}
-yy1227:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1229;
-		if (yych <= '/') goto yy999;
-		goto yy1230;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1230;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1230;
-			goto yy999;
-		}
-	}
-yy1228:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1230;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1230;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1230;
-			goto yy999;
-		}
-	}
-yy1229:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1231;
-		if (yych <= '/') goto yy999;
-		goto yy1232;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1232;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1232;
-			goto yy999;
-		}
-	}
-yy1230:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1232;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1232;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1232;
-			goto yy999;
-		}
-	}
-yy1231:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1233;
-		if (yych <= '/') goto yy999;
-		goto yy1234;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1234;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1234;
-			goto yy999;
-		}
-	}
-yy1232:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1234;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1234;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1234;
-			goto yy999;
-		}
-	}
-yy1233:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1235;
-		if (yych <= '/') goto yy999;
-		goto yy1236;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1236;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1236;
-			goto yy999;
-		}
-	}
-yy1234:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1236;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1236;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1236;
-			goto yy999;
-		}
-	}
-yy1235:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1237;
-		if (yych <= '/') goto yy999;
-		goto yy1238;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1238;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1238;
-			goto yy999;
-		}
-	}
-yy1236:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1238;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1238;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1238;
-			goto yy999;
-		}
-	}
-yy1237:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1239;
-		if (yych <= '/') goto yy999;
-		goto yy1240;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1240;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1240;
-			goto yy999;
-		}
-	}
-yy1238:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1240;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1240;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1240;
-			goto yy999;
-		}
-	}
-yy1239:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1241;
-		if (yych <= '/') goto yy999;
-		goto yy1242;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1242;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1242;
-			goto yy999;
-		}
-	}
-yy1240:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1242;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1242;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1242;
-			goto yy999;
-		}
-	}
-yy1241:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1243;
-		if (yych <= '/') goto yy999;
-		goto yy1244;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1244;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1244;
-			goto yy999;
-		}
-	}
-yy1242:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1244;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1244;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1244;
-			goto yy999;
-		}
-	}
-yy1243:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1245;
-		if (yych <= '/') goto yy999;
-		goto yy1246;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1246;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1246;
-			goto yy999;
-		}
-	}
-yy1244:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1246;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1246;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1246;
-			goto yy999;
-		}
-	}
-yy1245:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1247;
-		if (yych <= '/') goto yy999;
-		goto yy1248;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1248;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1248;
-			goto yy999;
-		}
-	}
-yy1246:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1248;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1248;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1248;
-			goto yy999;
-		}
-	}
-yy1247:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1249;
-		if (yych <= '/') goto yy999;
-		goto yy1250;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1250;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1250;
-			goto yy999;
-		}
-	}
-yy1248:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1250;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1250;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1250;
-			goto yy999;
-		}
-	}
-yy1249:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1251;
-		if (yych <= '/') goto yy999;
-		goto yy1252;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1252;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1252;
-			goto yy999;
-		}
-	}
-yy1250:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1252;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1252;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1252;
-			goto yy999;
-		}
-	}
-yy1251:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1253;
-		if (yych <= '/') goto yy999;
-		goto yy1254;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1254;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1254;
-			goto yy999;
-		}
-	}
-yy1252:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1254;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1254;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1254;
-			goto yy999;
-		}
-	}
-yy1253:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1255;
-		if (yych <= '/') goto yy999;
-		goto yy1256;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1256;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1256;
-			goto yy999;
-		}
-	}
-yy1254:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1256;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1256;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1256;
-			goto yy999;
-		}
-	}
-yy1255:
-	yych = *++p;
-	if (yych <= '9') {
-		if (yych == '-') goto yy1257;
-		if (yych <= '/') goto yy999;
-		goto yy1258;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy999;
-			goto yy1258;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1258;
-			goto yy999;
-		}
-	}
-yy1256:
-	yych = *++p;
-	if (yych <= '=') {
-		if (yych <= '.') {
-			if (yych <= ',') goto yy999;
-			if (yych >= '.') goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1258;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1258;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1258;
-			goto yy999;
-		}
-	}
-yy1257:
-	yych = *++p;
-	if (yych <= '@') {
-		if (yych <= '/') goto yy999;
-		if (yych <= '9') goto yy1138;
-		goto yy999;
-	} else {
-		if (yych <= 'Z') goto yy1138;
-		if (yych <= '`') goto yy999;
-		if (yych <= 'z') goto yy1138;
-		goto yy999;
-	}
-yy1258:
-	++p;
-	if ((yych = *p) <= '=') {
-		if (yych <= '.') {
-			if (yych <= '-') goto yy999;
-			goto yy1012;
-		} else {
-			if (yych <= '/') goto yy999;
-			if (yych <= '9') goto yy1138;
-			goto yy999;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1013;
-			if (yych <= '@') goto yy999;
-			goto yy1138;
-		} else {
-			if (yych <= '`') goto yy999;
-			if (yych <= 'z') goto yy1138;
-			goto yy999;
-		}
-	}
-}
-
+  {
+    unsigned char yych;
+    static const unsigned char yybm[] = {
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   128, 0,   128, 128, 128, 128, 128, 0,   0,
+        128, 128, 0,   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 0,   0,   0,   128, 0,   128, 0,   128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 0,   0,   0,   128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+    };
+    yych = *(marker = p);
+    if (yych <= '?') {
+      if (yych <= ')') {
+        if (yych <= ' ') {
+          if (yych != '\n')
+            goto yy997;
+        } else {
+          if (yych == '"')
+            goto yy997;
+          if (yych <= '\'')
+            goto yy996;
+          goto yy997;
+        }
+      } else {
+        if (yych <= '9') {
+          if (yych == ',')
+            goto yy997;
+          goto yy996;
+        } else {
+          if (yych == '=')
+            goto yy996;
+          if (yych <= '>')
+            goto yy997;
+          goto yy996;
+        }
+      }
+    } else {
+      if (yych <= 0xDF) {
+        if (yych <= ']') {
+          if (yych <= '@')
+            goto yy997;
+          if (yych <= 'Z')
+            goto yy996;
+          goto yy997;
+        } else {
+          if (yych <= '~')
+            goto yy996;
+          if (yych <= 0x7F)
+            goto yy997;
+          if (yych >= 0xC2)
+            goto yy998;
+        }
+      } else {
+        if (yych <= 0xEF) {
+          if (yych <= 0xE0)
+            goto yy1000;
+          if (yych == 0xED)
+            goto yy1005;
+          goto yy1001;
+        } else {
+          if (yych <= 0xF0)
+            goto yy1002;
+          if (yych <= 0xF3)
+            goto yy1003;
+          if (yych <= 0xF4)
+            goto yy1004;
+        }
+      }
+    }
+  yy995 : { return 0; }
+  yy996:
+    yych = *(marker = ++p);
+    if (yych <= ',') {
+      if (yych <= '"') {
+        if (yych == '!')
+          goto yy1008;
+        goto yy995;
+      } else {
+        if (yych <= '\'')
+          goto yy1008;
+        if (yych <= ')')
+          goto yy995;
+        if (yych <= '+')
+          goto yy1008;
+        goto yy995;
+      }
+    } else {
+      if (yych <= '>') {
+        if (yych <= '9')
+          goto yy1008;
+        if (yych == '=')
+          goto yy1008;
+        goto yy995;
+      } else {
+        if (yych <= 'Z')
+          goto yy1008;
+        if (yych <= ']')
+          goto yy995;
+        if (yych <= '~')
+          goto yy1008;
+        goto yy995;
+      }
+    }
+  yy997:
+    yych = *++p;
+    goto yy995;
+  yy998:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy999;
+    if (yych <= 0xBF)
+      goto yy997;
+  yy999:
+    p = marker;
+    goto yy995;
+  yy1000:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy999;
+    if (yych <= 0xBF)
+      goto yy998;
+    goto yy999;
+  yy1001:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy999;
+    if (yych <= 0xBF)
+      goto yy998;
+    goto yy999;
+  yy1002:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy999;
+    if (yych <= 0xBF)
+      goto yy1001;
+    goto yy999;
+  yy1003:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy999;
+    if (yych <= 0xBF)
+      goto yy1001;
+    goto yy999;
+  yy1004:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy999;
+    if (yych <= 0x8F)
+      goto yy1001;
+    goto yy999;
+  yy1005:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy999;
+    if (yych <= 0x9F)
+      goto yy998;
+    goto yy999;
+  yy1006:
+    yych = *++p;
+    if (yych <= '@') {
+      if (yych <= '/')
+        goto yy999;
+      if (yych <= '9')
+        goto yy1009;
+      goto yy999;
+    } else {
+      if (yych <= 'Z')
+        goto yy1009;
+      if (yych <= '`')
+        goto yy999;
+      if (yych <= 'z')
+        goto yy1009;
+      goto yy999;
+    }
+  yy1007:
+    ++p;
+    yych = *p;
+  yy1008:
+    if (yybm[0 + yych] & 128) {
+      goto yy1007;
+    }
+    if (yych <= '>')
+      goto yy999;
+    if (yych <= '@')
+      goto yy1006;
+    goto yy999;
+  yy1009:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1011;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1011;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1011;
+        goto yy999;
+      }
+    }
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1139;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1140;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1140;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1140;
+        goto yy999;
+      }
+    }
+  yy1011:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych <= '-')
+          goto yy1139;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1140;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1140;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1140;
+        goto yy999;
+      }
+    }
+  yy1012:
+    ++p;
+    yych = *p;
+    if (yych <= '@') {
+      if (yych <= '/')
+        goto yy999;
+      if (yych <= '9')
+        goto yy1015;
+      goto yy999;
+    } else {
+      if (yych <= 'Z')
+        goto yy1015;
+      if (yych <= '`')
+        goto yy999;
+      if (yych <= 'z')
+        goto yy1015;
+      goto yy999;
+    }
+  yy1013:
+    ++p;
+    { return (bufsize_t)(p - start); }
+  yy1015:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1017;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1017;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1017;
+        goto yy999;
+      }
+    }
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1018;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1019;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1019;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1019;
+        goto yy999;
+      }
+    }
+  yy1017:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1019;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1019;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1019;
+        goto yy999;
+      }
+    }
+  yy1018:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1020;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1021;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1021;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1021;
+        goto yy999;
+      }
+    }
+  yy1019:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1021;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1021;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1021;
+        goto yy999;
+      }
+    }
+  yy1020:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1022;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1023;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1023;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1023;
+        goto yy999;
+      }
+    }
+  yy1021:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1023;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1023;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1023;
+        goto yy999;
+      }
+    }
+  yy1022:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1024;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1025;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1025;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1025;
+        goto yy999;
+      }
+    }
+  yy1023:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1025;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1025;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1025;
+        goto yy999;
+      }
+    }
+  yy1024:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1026;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1027;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1027;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1027;
+        goto yy999;
+      }
+    }
+  yy1025:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1027;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1027;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1027;
+        goto yy999;
+      }
+    }
+  yy1026:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1028;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1029;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1029;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1029;
+        goto yy999;
+      }
+    }
+  yy1027:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1029;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1029;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1029;
+        goto yy999;
+      }
+    }
+  yy1028:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1030;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1031;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1031;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1031;
+        goto yy999;
+      }
+    }
+  yy1029:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1031;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1031;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1031;
+        goto yy999;
+      }
+    }
+  yy1030:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1032;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1033;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1033;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1033;
+        goto yy999;
+      }
+    }
+  yy1031:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1033;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1033;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1033;
+        goto yy999;
+      }
+    }
+  yy1032:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1034;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1035;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1035;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1035;
+        goto yy999;
+      }
+    }
+  yy1033:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1035;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1035;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1035;
+        goto yy999;
+      }
+    }
+  yy1034:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1036;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1037;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1037;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1037;
+        goto yy999;
+      }
+    }
+  yy1035:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1037;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1037;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1037;
+        goto yy999;
+      }
+    }
+  yy1036:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1038;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1039;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1039;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1039;
+        goto yy999;
+      }
+    }
+  yy1037:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1039;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1039;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1039;
+        goto yy999;
+      }
+    }
+  yy1038:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1040;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1041;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1041;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1041;
+        goto yy999;
+      }
+    }
+  yy1039:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1041;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1041;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1041;
+        goto yy999;
+      }
+    }
+  yy1040:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1042;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1043;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1043;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1043;
+        goto yy999;
+      }
+    }
+  yy1041:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1043;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1043;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1043;
+        goto yy999;
+      }
+    }
+  yy1042:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1044;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1045;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1045;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1045;
+        goto yy999;
+      }
+    }
+  yy1043:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1045;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1045;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1045;
+        goto yy999;
+      }
+    }
+  yy1044:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1046;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1047;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1047;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1047;
+        goto yy999;
+      }
+    }
+  yy1045:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1047;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1047;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1047;
+        goto yy999;
+      }
+    }
+  yy1046:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1048;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1049;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1049;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1049;
+        goto yy999;
+      }
+    }
+  yy1047:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1049;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1049;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1049;
+        goto yy999;
+      }
+    }
+  yy1048:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1050;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1051;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1051;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1051;
+        goto yy999;
+      }
+    }
+  yy1049:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1051;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1051;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1051;
+        goto yy999;
+      }
+    }
+  yy1050:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1052;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1053;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1053;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1053;
+        goto yy999;
+      }
+    }
+  yy1051:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1053;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1053;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1053;
+        goto yy999;
+      }
+    }
+  yy1052:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1054;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1055;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1055;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1055;
+        goto yy999;
+      }
+    }
+  yy1053:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1055;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1055;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1055;
+        goto yy999;
+      }
+    }
+  yy1054:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1056;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1057;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1057;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1057;
+        goto yy999;
+      }
+    }
+  yy1055:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1057;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1057;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1057;
+        goto yy999;
+      }
+    }
+  yy1056:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1058;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1059;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1059;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1059;
+        goto yy999;
+      }
+    }
+  yy1057:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1059;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1059;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1059;
+        goto yy999;
+      }
+    }
+  yy1058:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1060;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1061;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1061;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1061;
+        goto yy999;
+      }
+    }
+  yy1059:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1061;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1061;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1061;
+        goto yy999;
+      }
+    }
+  yy1060:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1062;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1063;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1063;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1063;
+        goto yy999;
+      }
+    }
+  yy1061:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1063;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1063;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1063;
+        goto yy999;
+      }
+    }
+  yy1062:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1064;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1065;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1065;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1065;
+        goto yy999;
+      }
+    }
+  yy1063:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1065;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1065;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1065;
+        goto yy999;
+      }
+    }
+  yy1064:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1066;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1067;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1067;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1067;
+        goto yy999;
+      }
+    }
+  yy1065:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1067;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1067;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1067;
+        goto yy999;
+      }
+    }
+  yy1066:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1068;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1069;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1069;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1069;
+        goto yy999;
+      }
+    }
+  yy1067:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1069;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1069;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1069;
+        goto yy999;
+      }
+    }
+  yy1068:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1070;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1071;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1071;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1071;
+        goto yy999;
+      }
+    }
+  yy1069:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1071;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1071;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1071;
+        goto yy999;
+      }
+    }
+  yy1070:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1072;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1073;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1073;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1073;
+        goto yy999;
+      }
+    }
+  yy1071:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1073;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1073;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1073;
+        goto yy999;
+      }
+    }
+  yy1072:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1074;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1075;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1075;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1075;
+        goto yy999;
+      }
+    }
+  yy1073:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1075;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1075;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1075;
+        goto yy999;
+      }
+    }
+  yy1074:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1076;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1077;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1077;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1077;
+        goto yy999;
+      }
+    }
+  yy1075:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1077;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1077;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1077;
+        goto yy999;
+      }
+    }
+  yy1076:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1078;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1079;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1079;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1079;
+        goto yy999;
+      }
+    }
+  yy1077:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1079;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1079;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1079;
+        goto yy999;
+      }
+    }
+  yy1078:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1080;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1081;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1081;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1081;
+        goto yy999;
+      }
+    }
+  yy1079:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1081;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1081;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1081;
+        goto yy999;
+      }
+    }
+  yy1080:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1082;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1083;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1083;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1083;
+        goto yy999;
+      }
+    }
+  yy1081:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1083;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1083;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1083;
+        goto yy999;
+      }
+    }
+  yy1082:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1084;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1085;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1085;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1085;
+        goto yy999;
+      }
+    }
+  yy1083:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1085;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1085;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1085;
+        goto yy999;
+      }
+    }
+  yy1084:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1086;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1087;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1087;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1087;
+        goto yy999;
+      }
+    }
+  yy1085:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1087;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1087;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1087;
+        goto yy999;
+      }
+    }
+  yy1086:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1088;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1089;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1089;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1089;
+        goto yy999;
+      }
+    }
+  yy1087:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1089;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1089;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1089;
+        goto yy999;
+      }
+    }
+  yy1088:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1090;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1091;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1091;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1091;
+        goto yy999;
+      }
+    }
+  yy1089:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1091;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1091;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1091;
+        goto yy999;
+      }
+    }
+  yy1090:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1092;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1093;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1093;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1093;
+        goto yy999;
+      }
+    }
+  yy1091:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1093;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1093;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1093;
+        goto yy999;
+      }
+    }
+  yy1092:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1094;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1095;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1095;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1095;
+        goto yy999;
+      }
+    }
+  yy1093:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1095;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1095;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1095;
+        goto yy999;
+      }
+    }
+  yy1094:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1096;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1097;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1097;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1097;
+        goto yy999;
+      }
+    }
+  yy1095:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1097;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1097;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1097;
+        goto yy999;
+      }
+    }
+  yy1096:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1098;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1099;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1099;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1099;
+        goto yy999;
+      }
+    }
+  yy1097:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1099;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1099;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1099;
+        goto yy999;
+      }
+    }
+  yy1098:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1100;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1101;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1101;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1101;
+        goto yy999;
+      }
+    }
+  yy1099:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1101;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1101;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1101;
+        goto yy999;
+      }
+    }
+  yy1100:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1102;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1103;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1103;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1103;
+        goto yy999;
+      }
+    }
+  yy1101:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1103;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1103;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1103;
+        goto yy999;
+      }
+    }
+  yy1102:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1104;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1105;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1105;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1105;
+        goto yy999;
+      }
+    }
+  yy1103:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1105;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1105;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1105;
+        goto yy999;
+      }
+    }
+  yy1104:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1106;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1107;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1107;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1107;
+        goto yy999;
+      }
+    }
+  yy1105:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1107;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1107;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1107;
+        goto yy999;
+      }
+    }
+  yy1106:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1108;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1109;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1109;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1109;
+        goto yy999;
+      }
+    }
+  yy1107:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1109;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1109;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1109;
+        goto yy999;
+      }
+    }
+  yy1108:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1110;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1111;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1111;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1111;
+        goto yy999;
+      }
+    }
+  yy1109:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1111;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1111;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1111;
+        goto yy999;
+      }
+    }
+  yy1110:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1112;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1113;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1113;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1113;
+        goto yy999;
+      }
+    }
+  yy1111:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1113;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1113;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1113;
+        goto yy999;
+      }
+    }
+  yy1112:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1114;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1115;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1115;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1115;
+        goto yy999;
+      }
+    }
+  yy1113:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1115;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1115;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1115;
+        goto yy999;
+      }
+    }
+  yy1114:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1116;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1117;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1117;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1117;
+        goto yy999;
+      }
+    }
+  yy1115:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1117;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1117;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1117;
+        goto yy999;
+      }
+    }
+  yy1116:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1118;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1119;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1119;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1119;
+        goto yy999;
+      }
+    }
+  yy1117:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1119;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1119;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1119;
+        goto yy999;
+      }
+    }
+  yy1118:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1120;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1121;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1121;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1121;
+        goto yy999;
+      }
+    }
+  yy1119:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1121;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1121;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1121;
+        goto yy999;
+      }
+    }
+  yy1120:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1122;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1123;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1123;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1123;
+        goto yy999;
+      }
+    }
+  yy1121:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1123;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1123;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1123;
+        goto yy999;
+      }
+    }
+  yy1122:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1124;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1125;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1125;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1125;
+        goto yy999;
+      }
+    }
+  yy1123:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1125;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1125;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1125;
+        goto yy999;
+      }
+    }
+  yy1124:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1126;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1127;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1127;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1127;
+        goto yy999;
+      }
+    }
+  yy1125:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1127;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1127;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1127;
+        goto yy999;
+      }
+    }
+  yy1126:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1128;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1129;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1129;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1129;
+        goto yy999;
+      }
+    }
+  yy1127:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1129;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1129;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1129;
+        goto yy999;
+      }
+    }
+  yy1128:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1130;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1131;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1131;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1131;
+        goto yy999;
+      }
+    }
+  yy1129:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1131;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1131;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1131;
+        goto yy999;
+      }
+    }
+  yy1130:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1132;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1133;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1133;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1133;
+        goto yy999;
+      }
+    }
+  yy1131:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1133;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1133;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1133;
+        goto yy999;
+      }
+    }
+  yy1132:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1134;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1135;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1135;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1135;
+        goto yy999;
+      }
+    }
+  yy1133:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1135;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1135;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1135;
+        goto yy999;
+      }
+    }
+  yy1134:
+    ++p;
+    yych = *p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1136;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1137;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1137;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1137;
+        goto yy999;
+      }
+    }
+  yy1135:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1137;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1137;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1137;
+        goto yy999;
+      }
+    }
+  yy1136:
+    ++p;
+    yych = *p;
+    if (yych <= '@') {
+      if (yych <= '/')
+        goto yy999;
+      if (yych <= '9')
+        goto yy1138;
+      goto yy999;
+    } else {
+      if (yych <= 'Z')
+        goto yy1138;
+      if (yych <= '`')
+        goto yy999;
+      if (yych <= 'z')
+        goto yy1138;
+      goto yy999;
+    }
+  yy1137:
+    ++p;
+    yych = *p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= '-')
+          goto yy999;
+        goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych >= ':')
+          goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych >= '{')
+          goto yy999;
+      }
+    }
+  yy1138:
+    ++p;
+    yych = *p;
+    if (yych == '.')
+      goto yy1012;
+    if (yych == '>')
+      goto yy1013;
+    goto yy999;
+  yy1139:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1141;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1142;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1142;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1142;
+        goto yy999;
+      }
+    }
+  yy1140:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1142;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1142;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1142;
+        goto yy999;
+      }
+    }
+  yy1141:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1143;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1144;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1144;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1144;
+        goto yy999;
+      }
+    }
+  yy1142:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1144;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1144;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1144;
+        goto yy999;
+      }
+    }
+  yy1143:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1145;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1146;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1146;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1146;
+        goto yy999;
+      }
+    }
+  yy1144:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1146;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1146;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1146;
+        goto yy999;
+      }
+    }
+  yy1145:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1147;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1148;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1148;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1148;
+        goto yy999;
+      }
+    }
+  yy1146:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1148;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1148;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1148;
+        goto yy999;
+      }
+    }
+  yy1147:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1149;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1150;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1150;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1150;
+        goto yy999;
+      }
+    }
+  yy1148:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1150;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1150;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1150;
+        goto yy999;
+      }
+    }
+  yy1149:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1151;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1152;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1152;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1152;
+        goto yy999;
+      }
+    }
+  yy1150:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1152;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1152;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1152;
+        goto yy999;
+      }
+    }
+  yy1151:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1153;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1154;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1154;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1154;
+        goto yy999;
+      }
+    }
+  yy1152:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1154;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1154;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1154;
+        goto yy999;
+      }
+    }
+  yy1153:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1155;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1156;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1156;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1156;
+        goto yy999;
+      }
+    }
+  yy1154:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1156;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1156;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1156;
+        goto yy999;
+      }
+    }
+  yy1155:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1157;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1158;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1158;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1158;
+        goto yy999;
+      }
+    }
+  yy1156:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1158;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1158;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1158;
+        goto yy999;
+      }
+    }
+  yy1157:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1159;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1160;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1160;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1160;
+        goto yy999;
+      }
+    }
+  yy1158:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1160;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1160;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1160;
+        goto yy999;
+      }
+    }
+  yy1159:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1161;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1162;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1162;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1162;
+        goto yy999;
+      }
+    }
+  yy1160:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1162;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1162;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1162;
+        goto yy999;
+      }
+    }
+  yy1161:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1163;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1164;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1164;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1164;
+        goto yy999;
+      }
+    }
+  yy1162:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1164;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1164;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1164;
+        goto yy999;
+      }
+    }
+  yy1163:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1165;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1166;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1166;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1166;
+        goto yy999;
+      }
+    }
+  yy1164:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1166;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1166;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1166;
+        goto yy999;
+      }
+    }
+  yy1165:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1167;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1168;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1168;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1168;
+        goto yy999;
+      }
+    }
+  yy1166:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1168;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1168;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1168;
+        goto yy999;
+      }
+    }
+  yy1167:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1169;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1170;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1170;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1170;
+        goto yy999;
+      }
+    }
+  yy1168:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1170;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1170;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1170;
+        goto yy999;
+      }
+    }
+  yy1169:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1171;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1172;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1172;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1172;
+        goto yy999;
+      }
+    }
+  yy1170:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1172;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1172;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1172;
+        goto yy999;
+      }
+    }
+  yy1171:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1173;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1174;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1174;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1174;
+        goto yy999;
+      }
+    }
+  yy1172:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1174;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1174;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1174;
+        goto yy999;
+      }
+    }
+  yy1173:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1175;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1176;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1176;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1176;
+        goto yy999;
+      }
+    }
+  yy1174:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1176;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1176;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1176;
+        goto yy999;
+      }
+    }
+  yy1175:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1177;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1178;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1178;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1178;
+        goto yy999;
+      }
+    }
+  yy1176:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1178;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1178;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1178;
+        goto yy999;
+      }
+    }
+  yy1177:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1179;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1180;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1180;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1180;
+        goto yy999;
+      }
+    }
+  yy1178:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1180;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1180;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1180;
+        goto yy999;
+      }
+    }
+  yy1179:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1181;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1182;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1182;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1182;
+        goto yy999;
+      }
+    }
+  yy1180:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1182;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1182;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1182;
+        goto yy999;
+      }
+    }
+  yy1181:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1183;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1184;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1184;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1184;
+        goto yy999;
+      }
+    }
+  yy1182:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1184;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1184;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1184;
+        goto yy999;
+      }
+    }
+  yy1183:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1185;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1186;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1186;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1186;
+        goto yy999;
+      }
+    }
+  yy1184:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1186;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1186;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1186;
+        goto yy999;
+      }
+    }
+  yy1185:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1187;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1188;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1188;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1188;
+        goto yy999;
+      }
+    }
+  yy1186:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1188;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1188;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1188;
+        goto yy999;
+      }
+    }
+  yy1187:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1189;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1190;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1190;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1190;
+        goto yy999;
+      }
+    }
+  yy1188:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1190;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1190;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1190;
+        goto yy999;
+      }
+    }
+  yy1189:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1191;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1192;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1192;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1192;
+        goto yy999;
+      }
+    }
+  yy1190:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1192;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1192;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1192;
+        goto yy999;
+      }
+    }
+  yy1191:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1193;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1194;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1194;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1194;
+        goto yy999;
+      }
+    }
+  yy1192:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1194;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1194;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1194;
+        goto yy999;
+      }
+    }
+  yy1193:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1195;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1196;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1196;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1196;
+        goto yy999;
+      }
+    }
+  yy1194:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1196;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1196;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1196;
+        goto yy999;
+      }
+    }
+  yy1195:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1197;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1198;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1198;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1198;
+        goto yy999;
+      }
+    }
+  yy1196:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1198;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1198;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1198;
+        goto yy999;
+      }
+    }
+  yy1197:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1199;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1200;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1200;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1200;
+        goto yy999;
+      }
+    }
+  yy1198:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1200;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1200;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1200;
+        goto yy999;
+      }
+    }
+  yy1199:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1201;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1202;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1202;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1202;
+        goto yy999;
+      }
+    }
+  yy1200:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1202;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1202;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1202;
+        goto yy999;
+      }
+    }
+  yy1201:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1203;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1204;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1204;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1204;
+        goto yy999;
+      }
+    }
+  yy1202:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1204;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1204;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1204;
+        goto yy999;
+      }
+    }
+  yy1203:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1205;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1206;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1206;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1206;
+        goto yy999;
+      }
+    }
+  yy1204:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1206;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1206;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1206;
+        goto yy999;
+      }
+    }
+  yy1205:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1207;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1208;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1208;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1208;
+        goto yy999;
+      }
+    }
+  yy1206:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1208;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1208;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1208;
+        goto yy999;
+      }
+    }
+  yy1207:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1209;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1210;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1210;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1210;
+        goto yy999;
+      }
+    }
+  yy1208:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1210;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1210;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1210;
+        goto yy999;
+      }
+    }
+  yy1209:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1211;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1212;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1212;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1212;
+        goto yy999;
+      }
+    }
+  yy1210:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1212;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1212;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1212;
+        goto yy999;
+      }
+    }
+  yy1211:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1213;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1214;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1214;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1214;
+        goto yy999;
+      }
+    }
+  yy1212:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1214;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1214;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1214;
+        goto yy999;
+      }
+    }
+  yy1213:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1215;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1216;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1216;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1216;
+        goto yy999;
+      }
+    }
+  yy1214:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1216;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1216;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1216;
+        goto yy999;
+      }
+    }
+  yy1215:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1217;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1218;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1218;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1218;
+        goto yy999;
+      }
+    }
+  yy1216:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1218;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1218;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1218;
+        goto yy999;
+      }
+    }
+  yy1217:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1219;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1220;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1220;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1220;
+        goto yy999;
+      }
+    }
+  yy1218:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1220;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1220;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1220;
+        goto yy999;
+      }
+    }
+  yy1219:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1221;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1222;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1222;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1222;
+        goto yy999;
+      }
+    }
+  yy1220:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1222;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1222;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1222;
+        goto yy999;
+      }
+    }
+  yy1221:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1223;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1224;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1224;
+        goto yy999;
+      }
+    }
+  yy1222:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1224;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1224;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1224;
+        goto yy999;
+      }
+    }
+  yy1223:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1225;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1226;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1226;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1226;
+        goto yy999;
+      }
+    }
+  yy1224:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1226;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1226;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1226;
+        goto yy999;
+      }
+    }
+  yy1225:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1227;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1228;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1228;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1228;
+        goto yy999;
+      }
+    }
+  yy1226:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1228;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1228;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1228;
+        goto yy999;
+      }
+    }
+  yy1227:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1229;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1230;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1230;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1230;
+        goto yy999;
+      }
+    }
+  yy1228:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1230;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1230;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1230;
+        goto yy999;
+      }
+    }
+  yy1229:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1231;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1232;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1232;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1232;
+        goto yy999;
+      }
+    }
+  yy1230:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1232;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1232;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1232;
+        goto yy999;
+      }
+    }
+  yy1231:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1233;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1234;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1234;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1234;
+        goto yy999;
+      }
+    }
+  yy1232:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1234;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1234;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1234;
+        goto yy999;
+      }
+    }
+  yy1233:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1235;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1236;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1236;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1236;
+        goto yy999;
+      }
+    }
+  yy1234:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1236;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1236;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1236;
+        goto yy999;
+      }
+    }
+  yy1235:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1237;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1238;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1238;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1238;
+        goto yy999;
+      }
+    }
+  yy1236:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1238;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1238;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1238;
+        goto yy999;
+      }
+    }
+  yy1237:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1239;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1240;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1240;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1240;
+        goto yy999;
+      }
+    }
+  yy1238:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1240;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1240;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1240;
+        goto yy999;
+      }
+    }
+  yy1239:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1241;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1242;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1242;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1242;
+        goto yy999;
+      }
+    }
+  yy1240:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1242;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1242;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1242;
+        goto yy999;
+      }
+    }
+  yy1241:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1243;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1244;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1244;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1244;
+        goto yy999;
+      }
+    }
+  yy1242:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1244;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1244;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1244;
+        goto yy999;
+      }
+    }
+  yy1243:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1245;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1246;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1246;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1246;
+        goto yy999;
+      }
+    }
+  yy1244:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1246;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1246;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1246;
+        goto yy999;
+      }
+    }
+  yy1245:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1247;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1248;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1248;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1248;
+        goto yy999;
+      }
+    }
+  yy1246:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1248;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1248;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1248;
+        goto yy999;
+      }
+    }
+  yy1247:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1249;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1250;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1250;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1250;
+        goto yy999;
+      }
+    }
+  yy1248:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1250;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1250;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1250;
+        goto yy999;
+      }
+    }
+  yy1249:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1251;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1252;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1252;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1252;
+        goto yy999;
+      }
+    }
+  yy1250:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1252;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1252;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1252;
+        goto yy999;
+      }
+    }
+  yy1251:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1253;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1254;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1254;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1254;
+        goto yy999;
+      }
+    }
+  yy1252:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1254;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1254;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1254;
+        goto yy999;
+      }
+    }
+  yy1253:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1255;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1256;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1256;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1256;
+        goto yy999;
+      }
+    }
+  yy1254:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1256;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1256;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1256;
+        goto yy999;
+      }
+    }
+  yy1255:
+    yych = *++p;
+    if (yych <= '9') {
+      if (yych == '-')
+        goto yy1257;
+      if (yych <= '/')
+        goto yy999;
+      goto yy1258;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy999;
+        goto yy1258;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1258;
+        goto yy999;
+      }
+    }
+  yy1256:
+    yych = *++p;
+    if (yych <= '=') {
+      if (yych <= '.') {
+        if (yych <= ',')
+          goto yy999;
+        if (yych >= '.')
+          goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1258;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1258;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1258;
+        goto yy999;
+      }
+    }
+  yy1257:
+    yych = *++p;
+    if (yych <= '@') {
+      if (yych <= '/')
+        goto yy999;
+      if (yych <= '9')
+        goto yy1138;
+      goto yy999;
+    } else {
+      if (yych <= 'Z')
+        goto yy1138;
+      if (yych <= '`')
+        goto yy999;
+      if (yych <= 'z')
+        goto yy1138;
+      goto yy999;
+    }
+  yy1258:
+    ++p;
+    if ((yych = *p) <= '=') {
+      if (yych <= '.') {
+        if (yych <= '-')
+          goto yy999;
+        goto yy1012;
+      } else {
+        if (yych <= '/')
+          goto yy999;
+        if (yych <= '9')
+          goto yy1138;
+        goto yy999;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1013;
+        if (yych <= '@')
+          goto yy999;
+        goto yy1138;
+      } else {
+        if (yych <= '`')
+          goto yy999;
+        if (yych <= 'z')
+          goto yy1138;
+        goto yy999;
+      }
+    }
+  }
 }
 
 // Try to match an HTML tag after first <, returning num of chars matched.
-bufsize_t _scan_html_tag(const unsigned char *p)
-{
+bufsize_t _scan_html_tag(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	static const unsigned char yybm[] = {
-		/* table 1 .. 8: 0 */
-		  0, 230, 230, 230, 230, 230, 230, 230, 
-		230, 199, 199, 199, 199, 199, 230, 230, 
-		230, 230, 230, 230, 230, 230, 230, 230, 
-		230, 230, 230, 230, 230, 230, 230, 230, 
-		199, 230,  70, 230, 230, 230, 230, 134, 
-		230, 230, 230, 230, 230, 254, 246, 230, 
-		254, 254, 254, 254, 254, 254, 254, 254, 
-		254, 254, 246, 230, 198, 198, 196, 230, 
-		230, 254, 254, 254, 254, 254, 254, 254, 
-		254, 254, 254, 254, 254, 254, 254, 254, 
-		254, 254, 254, 254, 254, 254, 254, 254, 
-		254, 254, 254, 230, 230, 226, 230, 246, 
-		198, 254, 254, 254, 254, 254, 254, 254, 
-		254, 254, 254, 254, 254, 254, 254, 254, 
-		254, 254, 254, 254, 254, 254, 254, 254, 
-		254, 254, 254, 230, 230, 230, 230, 230, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		/* table 9 .. 11: 256 */
-		  0, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160,  32, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 128, 
-		160, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= '`') {
-		if (yych <= '.') {
-			if (yych <= '\n') {
-				if (yych <= '\t') goto yy1266;
-			} else {
-				if (yych == '!') goto yy1264;
-				goto yy1266;
-			}
-		} else {
-			if (yych <= '?') {
-				if (yych <= '/') goto yy1263;
-				if (yych <= '>') goto yy1266;
-				goto yy1265;
-			} else {
-				if (yych <= '@') goto yy1266;
-				if (yych <= 'Z') goto yy1262;
-				goto yy1266;
-			}
-		}
-	} else {
-		if (yych <= 0xEC) {
-			if (yych <= 0xC1) {
-				if (yych <= 'z') goto yy1262;
-				if (yych <= 0x7F) goto yy1266;
-			} else {
-				if (yych <= 0xDF) goto yy1267;
-				if (yych <= 0xE0) goto yy1269;
-				goto yy1270;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xED) goto yy1274;
-				if (yych <= 0xEF) goto yy1270;
-				goto yy1271;
-			} else {
-				if (yych <= 0xF3) goto yy1272;
-				if (yych <= 0xF4) goto yy1273;
-			}
-		}
-	}
-yy1261:
-	{ return 0; }
-yy1262:
-	yych = *(marker = ++p);
-	if (yych <= '/') {
-		if (yych <= ' ') {
-			if (yych <= 0x08) goto yy1261;
-			if (yych <= '\r') goto yy1366;
-			if (yych <= 0x1F) goto yy1261;
-			goto yy1366;
-		} else {
-			if (yych == '-') goto yy1364;
-			if (yych <= '.') goto yy1261;
-			goto yy1368;
-		}
-	} else {
-		if (yych <= '@') {
-			if (yych <= '9') goto yy1364;
-			if (yych == '>') goto yy1285;
-			goto yy1261;
-		} else {
-			if (yych <= 'Z') goto yy1364;
-			if (yych <= '`') goto yy1261;
-			if (yych <= 'z') goto yy1364;
-			goto yy1261;
-		}
-	}
-yy1263:
-	yych = *(marker = ++p);
-	if (yych <= '@') goto yy1261;
-	if (yych <= 'Z') goto yy1360;
-	if (yych <= '`') goto yy1261;
-	if (yych <= 'z') goto yy1360;
-	goto yy1261;
-yy1264:
-	yych = *(marker = ++p);
-	if (yybm[256+yych] & 64) {
-		goto yy1295;
-	}
-	if (yych == '-') goto yy1297;
-	if (yych <= '@') goto yy1261;
-	if (yych <= '[') goto yy1294;
-	goto yy1261;
-yy1265:
-	yych = *(marker = ++p);
-	if (yych <= 0x00) goto yy1261;
-	if (yych <= 0x7F) goto yy1276;
-	if (yych <= 0xC1) goto yy1261;
-	if (yych <= 0xF4) goto yy1276;
-	goto yy1261;
-yy1266:
-	yych = *++p;
-	goto yy1261;
-yy1267:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1266;
-yy1268:
-	p = marker;
-	goto yy1261;
-yy1269:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy1268;
-	if (yych <= 0xBF) goto yy1267;
-	goto yy1268;
-yy1270:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1267;
-	goto yy1268;
-yy1271:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy1268;
-	if (yych <= 0xBF) goto yy1270;
-	goto yy1268;
-yy1272:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1270;
-	goto yy1268;
-yy1273:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x8F) goto yy1270;
-	goto yy1268;
-yy1274:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x9F) goto yy1267;
-	goto yy1268;
-yy1275:
-	++p;
-	yych = *p;
-yy1276:
-	if (yybm[256+yych] & 32) {
-		goto yy1275;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x00) goto yy1268;
-			if (yych <= '?') goto yy1284;
-			goto yy1268;
-		} else {
-			if (yych <= 0xDF) goto yy1277;
-			if (yych <= 0xE0) goto yy1278;
-			goto yy1279;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1283;
-			if (yych <= 0xEF) goto yy1279;
-			goto yy1280;
-		} else {
-			if (yych <= 0xF3) goto yy1281;
-			if (yych <= 0xF4) goto yy1282;
-			goto yy1268;
-		}
-	}
-yy1277:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1275;
-	goto yy1268;
-yy1278:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1268;
-	if (yych <= 0xBF) goto yy1277;
-	goto yy1268;
-yy1279:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1277;
-	goto yy1268;
-yy1280:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1268;
-	if (yych <= 0xBF) goto yy1279;
-	goto yy1268;
-yy1281:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1279;
-	goto yy1268;
-yy1282:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x8F) goto yy1279;
-	goto yy1268;
-yy1283:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x9F) goto yy1277;
-	goto yy1268;
-yy1284:
-	++p;
-	yych = *p;
-	if (yych <= 0xE0) {
-		if (yych <= '>') {
-			if (yych <= 0x00) goto yy1268;
-			if (yych <= '=') goto yy1275;
-		} else {
-			if (yych <= 0x7F) goto yy1275;
-			if (yych <= 0xC1) goto yy1268;
-			if (yych <= 0xDF) goto yy1287;
-			goto yy1288;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1293;
-			goto yy1289;
-		} else {
-			if (yych <= 0xF0) goto yy1290;
-			if (yych <= 0xF3) goto yy1291;
-			if (yych <= 0xF4) goto yy1292;
-			goto yy1268;
-		}
-	}
-yy1285:
-	++p;
-	{ return (bufsize_t)(p - start); }
-yy1287:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1275;
-	goto yy1268;
-yy1288:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1268;
-	if (yych <= 0xBF) goto yy1287;
-	goto yy1268;
-yy1289:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1287;
-	goto yy1268;
-yy1290:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1268;
-	if (yych <= 0xBF) goto yy1289;
-	goto yy1268;
-yy1291:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1289;
-	goto yy1268;
-yy1292:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x8F) goto yy1289;
-	goto yy1268;
-yy1293:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x9F) goto yy1287;
-	goto yy1268;
-yy1294:
-	yych = *++p;
-	if (yych == 'C') goto yy1330;
-	if (yych == 'c') goto yy1330;
-	goto yy1268;
-yy1295:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 1) {
-		goto yy1319;
-	}
-	if (yych <= '@') goto yy1268;
-	if (yych <= 'Z') goto yy1295;
-	goto yy1268;
-yy1297:
-	yych = *++p;
-	if (yych != '-') goto yy1268;
-	yych = *++p;
-	if (yych <= 0xE0) {
-		if (yych <= '=') {
-			if (yych != '-') goto yy1301;
-		} else {
-			if (yych <= '>') goto yy1268;
-			if (yych <= 0xC1) goto yy1301;
-			if (yych <= 0xDF) goto yy1302;
-			goto yy1303;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1308;
-			goto yy1304;
-		} else {
-			if (yych <= 0xF0) goto yy1305;
-			if (yych <= 0xF3) goto yy1306;
-			if (yych <= 0xF4) goto yy1307;
-			goto yy1301;
-		}
-	}
-	yych = *++p;
-	if (yych <= 0xE0) {
-		if (yych <= '=') {
-			if (yych == '-') goto yy1318;
-			goto yy1301;
-		} else {
-			if (yych <= '>') goto yy1268;
-			if (yych <= 0xC1) goto yy1301;
-			if (yych <= 0xDF) goto yy1302;
-			goto yy1303;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1308;
-			goto yy1304;
-		} else {
-			if (yych <= 0xF0) goto yy1305;
-			if (yych <= 0xF3) goto yy1306;
-			if (yych <= 0xF4) goto yy1307;
-			goto yy1301;
-		}
-	}
-yy1300:
-	++p;
-	yych = *p;
-yy1301:
-	if (yybm[256+yych] & 128) {
-		goto yy1300;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x00) goto yy1268;
-			if (yych <= '-') goto yy1309;
-			goto yy1268;
-		} else {
-			if (yych <= 0xDF) goto yy1310;
-			if (yych <= 0xE0) goto yy1311;
-			goto yy1312;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1316;
-			if (yych <= 0xEF) goto yy1312;
-			goto yy1313;
-		} else {
-			if (yych <= 0xF3) goto yy1314;
-			if (yych <= 0xF4) goto yy1315;
-			goto yy1268;
-		}
-	}
-yy1302:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1300;
-	goto yy1268;
-yy1303:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy1268;
-	if (yych <= 0xBF) goto yy1302;
-	goto yy1268;
-yy1304:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1302;
-	goto yy1268;
-yy1305:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy1268;
-	if (yych <= 0xBF) goto yy1304;
-	goto yy1268;
-yy1306:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1304;
-	goto yy1268;
-yy1307:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x8F) goto yy1304;
-	goto yy1268;
-yy1308:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x9F) goto yy1302;
-	goto yy1268;
-yy1309:
-	++p;
-	yych = *p;
-	if (yybm[256+yych] & 128) {
-		goto yy1300;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x00) goto yy1268;
-			if (yych <= '-') goto yy1317;
-			goto yy1268;
-		} else {
-			if (yych <= 0xDF) goto yy1310;
-			if (yych <= 0xE0) goto yy1311;
-			goto yy1312;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1316;
-			if (yych <= 0xEF) goto yy1312;
-			goto yy1313;
-		} else {
-			if (yych <= 0xF3) goto yy1314;
-			if (yych <= 0xF4) goto yy1315;
-			goto yy1268;
-		}
-	}
-yy1310:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1300;
-	goto yy1268;
-yy1311:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1268;
-	if (yych <= 0xBF) goto yy1310;
-	goto yy1268;
-yy1312:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1310;
-	goto yy1268;
-yy1313:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1268;
-	if (yych <= 0xBF) goto yy1312;
-	goto yy1268;
-yy1314:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1312;
-	goto yy1268;
-yy1315:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x8F) goto yy1312;
-	goto yy1268;
-yy1316:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x9F) goto yy1310;
-	goto yy1268;
-yy1317:
-	yych = *++p;
-	if (yych == '>') goto yy1285;
-	goto yy1268;
-yy1318:
-	yych = *++p;
-	if (yych == '>') goto yy1285;
-	goto yy1268;
-yy1319:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 1) {
-		goto yy1319;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '>') {
-			if (yych <= 0x00) goto yy1268;
-			if (yych >= '>') goto yy1285;
-		} else {
-			if (yych <= 0x7F) goto yy1321;
-			if (yych <= 0xC1) goto yy1268;
-			if (yych <= 0xDF) goto yy1323;
-			goto yy1324;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1329;
-			goto yy1325;
-		} else {
-			if (yych <= 0xF0) goto yy1326;
-			if (yych <= 0xF3) goto yy1327;
-			if (yych <= 0xF4) goto yy1328;
-			goto yy1268;
-		}
-	}
-yy1321:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 2) {
-		goto yy1321;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x00) goto yy1268;
-			if (yych <= '>') goto yy1285;
-			goto yy1268;
-		} else {
-			if (yych <= 0xDF) goto yy1323;
-			if (yych <= 0xE0) goto yy1324;
-			goto yy1325;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1329;
-			if (yych <= 0xEF) goto yy1325;
-			goto yy1326;
-		} else {
-			if (yych <= 0xF3) goto yy1327;
-			if (yych <= 0xF4) goto yy1328;
-			goto yy1268;
-		}
-	}
-yy1323:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1321;
-	goto yy1268;
-yy1324:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1268;
-	if (yych <= 0xBF) goto yy1323;
-	goto yy1268;
-yy1325:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1323;
-	goto yy1268;
-yy1326:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1268;
-	if (yych <= 0xBF) goto yy1325;
-	goto yy1268;
-yy1327:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1325;
-	goto yy1268;
-yy1328:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x8F) goto yy1325;
-	goto yy1268;
-yy1329:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x9F) goto yy1323;
-	goto yy1268;
-yy1330:
-	yych = *++p;
-	if (yych == 'D') goto yy1331;
-	if (yych != 'd') goto yy1268;
-yy1331:
-	yych = *++p;
-	if (yych == 'A') goto yy1332;
-	if (yych != 'a') goto yy1268;
-yy1332:
-	yych = *++p;
-	if (yych == 'T') goto yy1333;
-	if (yych != 't') goto yy1268;
-yy1333:
-	yych = *++p;
-	if (yych == 'A') goto yy1334;
-	if (yych != 'a') goto yy1268;
-yy1334:
-	yych = *++p;
-	if (yych != '[') goto yy1268;
-yy1335:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 4) {
-		goto yy1335;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x00) goto yy1268;
-			if (yych <= ']') goto yy1344;
-			goto yy1268;
-		} else {
-			if (yych <= 0xDF) goto yy1337;
-			if (yych <= 0xE0) goto yy1338;
-			goto yy1339;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1343;
-			if (yych <= 0xEF) goto yy1339;
-			goto yy1340;
-		} else {
-			if (yych <= 0xF3) goto yy1341;
-			if (yych <= 0xF4) goto yy1342;
-			goto yy1268;
-		}
-	}
-yy1337:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1335;
-	goto yy1268;
-yy1338:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1268;
-	if (yych <= 0xBF) goto yy1337;
-	goto yy1268;
-yy1339:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1337;
-	goto yy1268;
-yy1340:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1268;
-	if (yych <= 0xBF) goto yy1339;
-	goto yy1268;
-yy1341:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1339;
-	goto yy1268;
-yy1342:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x8F) goto yy1339;
-	goto yy1268;
-yy1343:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x9F) goto yy1337;
-	goto yy1268;
-yy1344:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 4) {
-		goto yy1335;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x00) goto yy1268;
-			if (yych >= '^') goto yy1268;
-		} else {
-			if (yych <= 0xDF) goto yy1346;
-			if (yych <= 0xE0) goto yy1347;
-			goto yy1348;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1352;
-			if (yych <= 0xEF) goto yy1348;
-			goto yy1349;
-		} else {
-			if (yych <= 0xF3) goto yy1350;
-			if (yych <= 0xF4) goto yy1351;
-			goto yy1268;
-		}
-	}
-	++p;
-	yych = *p;
-	if (yych <= 0xE0) {
-		if (yych <= '>') {
-			if (yych <= 0x00) goto yy1268;
-			if (yych <= '=') goto yy1335;
-			goto yy1285;
-		} else {
-			if (yych <= 0x7F) goto yy1335;
-			if (yych <= 0xC1) goto yy1268;
-			if (yych <= 0xDF) goto yy1353;
-			goto yy1354;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1359;
-			goto yy1355;
-		} else {
-			if (yych <= 0xF0) goto yy1356;
-			if (yych <= 0xF3) goto yy1357;
-			if (yych <= 0xF4) goto yy1358;
-			goto yy1268;
-		}
-	}
-yy1346:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1335;
-	goto yy1268;
-yy1347:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1268;
-	if (yych <= 0xBF) goto yy1346;
-	goto yy1268;
-yy1348:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1346;
-	goto yy1268;
-yy1349:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1268;
-	if (yych <= 0xBF) goto yy1348;
-	goto yy1268;
-yy1350:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1348;
-	goto yy1268;
-yy1351:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x8F) goto yy1348;
-	goto yy1268;
-yy1352:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x9F) goto yy1346;
-	goto yy1268;
-yy1353:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1335;
-	goto yy1268;
-yy1354:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1268;
-	if (yych <= 0xBF) goto yy1353;
-	goto yy1268;
-yy1355:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1353;
-	goto yy1268;
-yy1356:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1268;
-	if (yych <= 0xBF) goto yy1355;
-	goto yy1268;
-yy1357:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1355;
-	goto yy1268;
-yy1358:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x8F) goto yy1355;
-	goto yy1268;
-yy1359:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x9F) goto yy1353;
-	goto yy1268;
-yy1360:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 8) {
-		goto yy1360;
-	}
-	if (yych <= 0x1F) {
-		if (yych <= 0x08) goto yy1268;
-		if (yych >= 0x0E) goto yy1268;
-	} else {
-		if (yych <= ' ') goto yy1362;
-		if (yych == '>') goto yy1285;
-		goto yy1268;
-	}
-yy1362:
-	++p;
-	yych = *p;
-	if (yych <= 0x1F) {
-		if (yych <= 0x08) goto yy1268;
-		if (yych <= '\r') goto yy1362;
-		goto yy1268;
-	} else {
-		if (yych <= ' ') goto yy1362;
-		if (yych == '>') goto yy1285;
-		goto yy1268;
-	}
-yy1364:
-	++p;
-	yych = *p;
-	if (yych <= '/') {
-		if (yych <= ' ') {
-			if (yych <= 0x08) goto yy1268;
-			if (yych <= '\r') goto yy1366;
-			if (yych <= 0x1F) goto yy1268;
-		} else {
-			if (yych == '-') goto yy1364;
-			if (yych <= '.') goto yy1268;
-			goto yy1368;
-		}
-	} else {
-		if (yych <= '@') {
-			if (yych <= '9') goto yy1364;
-			if (yych == '>') goto yy1285;
-			goto yy1268;
-		} else {
-			if (yych <= 'Z') goto yy1364;
-			if (yych <= '`') goto yy1268;
-			if (yych <= 'z') goto yy1364;
-			goto yy1268;
-		}
-	}
-yy1366:
-	++p;
-	yych = *p;
-	if (yych <= ':') {
-		if (yych <= ' ') {
-			if (yych <= 0x08) goto yy1268;
-			if (yych <= '\r') goto yy1366;
-			if (yych <= 0x1F) goto yy1268;
-			goto yy1366;
-		} else {
-			if (yych == '/') goto yy1368;
-			if (yych <= '9') goto yy1268;
-			goto yy1369;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych == '>') goto yy1285;
-			if (yych <= '@') goto yy1268;
-			goto yy1369;
-		} else {
-			if (yych <= '_') {
-				if (yych <= '^') goto yy1268;
-				goto yy1369;
-			} else {
-				if (yych <= '`') goto yy1268;
-				if (yych <= 'z') goto yy1369;
-				goto yy1268;
-			}
-		}
-	}
-yy1368:
-	yych = *++p;
-	if (yych == '>') goto yy1285;
-	goto yy1268;
-yy1369:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 16) {
-		goto yy1369;
-	}
-	if (yych <= ',') {
-		if (yych <= '\r') {
-			if (yych <= 0x08) goto yy1268;
-		} else {
-			if (yych != ' ') goto yy1268;
-		}
-	} else {
-		if (yych <= '<') {
-			if (yych <= '/') goto yy1368;
-			goto yy1268;
-		} else {
-			if (yych <= '=') goto yy1373;
-			if (yych <= '>') goto yy1285;
-			goto yy1268;
-		}
-	}
-yy1371:
-	++p;
-	yych = *p;
-	if (yych <= '<') {
-		if (yych <= ' ') {
-			if (yych <= 0x08) goto yy1268;
-			if (yych <= '\r') goto yy1371;
-			if (yych <= 0x1F) goto yy1268;
-			goto yy1371;
-		} else {
-			if (yych <= '/') {
-				if (yych <= '.') goto yy1268;
-				goto yy1368;
-			} else {
-				if (yych == ':') goto yy1369;
-				goto yy1268;
-			}
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '=') goto yy1373;
-			if (yych <= '>') goto yy1285;
-			if (yych <= '@') goto yy1268;
-			goto yy1369;
-		} else {
-			if (yych <= '_') {
-				if (yych <= '^') goto yy1268;
-				goto yy1369;
-			} else {
-				if (yych <= '`') goto yy1268;
-				if (yych <= 'z') goto yy1369;
-				goto yy1268;
-			}
-		}
-	}
-yy1373:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy1375;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '"') {
-			if (yych <= 0x00) goto yy1268;
-			if (yych >= '!') goto yy1386;
-		} else {
-			if (yych <= '\'') goto yy1384;
-			if (yych <= 0xC1) goto yy1268;
-			if (yych <= 0xDF) goto yy1377;
-			goto yy1378;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1383;
-			goto yy1379;
-		} else {
-			if (yych <= 0xF0) goto yy1380;
-			if (yych <= 0xF3) goto yy1381;
-			if (yych <= 0xF4) goto yy1382;
-			goto yy1268;
-		}
-	}
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy1375;
-	}
-	if (yych <= 0xDF) {
-		if (yych <= '\'') {
-			if (yych <= 0x00) goto yy1268;
-			if (yych <= ' ') goto yy1409;
-			if (yych <= '"') goto yy1386;
-			goto yy1384;
-		} else {
-			if (yych == '>') goto yy1285;
-			if (yych <= 0xC1) goto yy1268;
-			goto yy1377;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1378;
-			if (yych == 0xED) goto yy1383;
-			goto yy1379;
-		} else {
-			if (yych <= 0xF0) goto yy1380;
-			if (yych <= 0xF3) goto yy1381;
-			if (yych <= 0xF4) goto yy1382;
-			goto yy1268;
-		}
-	}
-yy1375:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy1375;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '=') {
-			if (yych <= 0x00) goto yy1268;
-			if (yych <= ' ') goto yy1403;
-			goto yy1268;
-		} else {
-			if (yych <= '>') goto yy1285;
-			if (yych <= 0xC1) goto yy1268;
-			if (yych >= 0xE0) goto yy1378;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1383;
-			goto yy1379;
-		} else {
-			if (yych <= 0xF0) goto yy1380;
-			if (yych <= 0xF3) goto yy1381;
-			if (yych <= 0xF4) goto yy1382;
-			goto yy1268;
-		}
-	}
-yy1377:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1375;
-	goto yy1268;
-yy1378:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1268;
-	if (yych <= 0xBF) goto yy1377;
-	goto yy1268;
-yy1379:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1377;
-	goto yy1268;
-yy1380:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1268;
-	if (yych <= 0xBF) goto yy1379;
-	goto yy1268;
-yy1381:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1379;
-	goto yy1268;
-yy1382:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x8F) goto yy1379;
-	goto yy1268;
-yy1383:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x9F) goto yy1377;
-	goto yy1268;
-yy1384:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1384;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x00) goto yy1268;
-			if (yych <= '\'') goto yy1395;
-			goto yy1268;
-		} else {
-			if (yych <= 0xDF) goto yy1396;
-			if (yych <= 0xE0) goto yy1397;
-			goto yy1398;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1402;
-			if (yych <= 0xEF) goto yy1398;
-			goto yy1399;
-		} else {
-			if (yych <= 0xF3) goto yy1400;
-			if (yych <= 0xF4) goto yy1401;
-			goto yy1268;
-		}
-	}
-yy1386:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy1386;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x00) goto yy1268;
-			if (yych <= '"') goto yy1395;
-			goto yy1268;
-		} else {
-			if (yych <= 0xDF) goto yy1388;
-			if (yych <= 0xE0) goto yy1389;
-			goto yy1390;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1394;
-			if (yych <= 0xEF) goto yy1390;
-			goto yy1391;
-		} else {
-			if (yych <= 0xF3) goto yy1392;
-			if (yych <= 0xF4) goto yy1393;
-			goto yy1268;
-		}
-	}
-yy1388:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1386;
-	goto yy1268;
-yy1389:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1268;
-	if (yych <= 0xBF) goto yy1388;
-	goto yy1268;
-yy1390:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1388;
-	goto yy1268;
-yy1391:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1268;
-	if (yych <= 0xBF) goto yy1390;
-	goto yy1268;
-yy1392:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1390;
-	goto yy1268;
-yy1393:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x8F) goto yy1390;
-	goto yy1268;
-yy1394:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x9F) goto yy1388;
-	goto yy1268;
-yy1395:
-	++p;
-	yych = *p;
-	if (yych <= ' ') {
-		if (yych <= 0x08) goto yy1268;
-		if (yych <= '\r') goto yy1366;
-		if (yych <= 0x1F) goto yy1268;
-		goto yy1366;
-	} else {
-		if (yych <= '/') {
-			if (yych <= '.') goto yy1268;
-			goto yy1368;
-		} else {
-			if (yych == '>') goto yy1285;
-			goto yy1268;
-		}
-	}
-yy1396:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1384;
-	goto yy1268;
-yy1397:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1268;
-	if (yych <= 0xBF) goto yy1396;
-	goto yy1268;
-yy1398:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1396;
-	goto yy1268;
-yy1399:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1268;
-	if (yych <= 0xBF) goto yy1398;
-	goto yy1268;
-yy1400:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0xBF) goto yy1398;
-	goto yy1268;
-yy1401:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x8F) goto yy1398;
-	goto yy1268;
-yy1402:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1268;
-	if (yych <= 0x9F) goto yy1396;
-	goto yy1268;
-yy1403:
-	++p;
-	yych = *p;
-	if (yych <= '@') {
-		if (yych <= '"') {
-			if (yych <= '\r') {
-				if (yych <= 0x00) goto yy1268;
-				if (yych <= 0x08) goto yy1375;
-				goto yy1403;
-			} else {
-				if (yych == ' ') goto yy1403;
-				if (yych <= '!') goto yy1375;
-				goto yy1268;
-			}
-		} else {
-			if (yych <= ':') {
-				if (yych == '\'') goto yy1268;
-				if (yych <= '9') goto yy1375;
-			} else {
-				if (yych <= ';') goto yy1375;
-				if (yych <= '=') goto yy1268;
-				if (yych <= '>') goto yy1285;
-				goto yy1375;
-			}
-		}
-	} else {
-		if (yych <= 0xDF) {
-			if (yych <= '`') {
-				if (yych <= 'Z') goto yy1405;
-				if (yych <= '^') goto yy1375;
-				if (yych >= '`') goto yy1268;
-			} else {
-				if (yych <= 'z') goto yy1405;
-				if (yych <= 0x7F) goto yy1375;
-				if (yych <= 0xC1) goto yy1268;
-				goto yy1377;
-			}
-		} else {
-			if (yych <= 0xEF) {
-				if (yych <= 0xE0) goto yy1378;
-				if (yych == 0xED) goto yy1383;
-				goto yy1379;
-			} else {
-				if (yych <= 0xF0) goto yy1380;
-				if (yych <= 0xF3) goto yy1381;
-				if (yych <= 0xF4) goto yy1382;
-				goto yy1268;
-			}
-		}
-	}
-yy1405:
-	++p;
-	yych = *p;
-	if (yych <= '>') {
-		if (yych <= '&') {
-			if (yych <= 0x1F) {
-				if (yych <= 0x00) goto yy1268;
-				if (yych <= 0x08) goto yy1375;
-				if (yych >= 0x0E) goto yy1375;
-			} else {
-				if (yych <= ' ') goto yy1407;
-				if (yych == '"') goto yy1268;
-				goto yy1375;
-			}
-		} else {
-			if (yych <= '/') {
-				if (yych <= '\'') goto yy1268;
-				if (yych <= ',') goto yy1375;
-				if (yych <= '.') goto yy1405;
-				goto yy1375;
-			} else {
-				if (yych <= ';') {
-					if (yych <= ':') goto yy1405;
-					goto yy1375;
-				} else {
-					if (yych <= '<') goto yy1268;
-					if (yych <= '=') goto yy1373;
-					goto yy1285;
-				}
-			}
-		}
-	} else {
-		if (yych <= 0xC1) {
-			if (yych <= '_') {
-				if (yych <= '@') goto yy1375;
-				if (yych <= 'Z') goto yy1405;
-				if (yych <= '^') goto yy1375;
-				goto yy1405;
-			} else {
-				if (yych <= '`') goto yy1268;
-				if (yych <= 'z') goto yy1405;
-				if (yych <= 0x7F) goto yy1375;
-				goto yy1268;
-			}
-		} else {
-			if (yych <= 0xED) {
-				if (yych <= 0xDF) goto yy1377;
-				if (yych <= 0xE0) goto yy1378;
-				if (yych <= 0xEC) goto yy1379;
-				goto yy1383;
-			} else {
-				if (yych <= 0xF0) {
-					if (yych <= 0xEF) goto yy1379;
-					goto yy1380;
-				} else {
-					if (yych <= 0xF3) goto yy1381;
-					if (yych <= 0xF4) goto yy1382;
-					goto yy1268;
-				}
-			}
-		}
-	}
-yy1407:
-	++p;
-	yych = *p;
-	if (yych <= '@') {
-		if (yych <= '&') {
-			if (yych <= 0x1F) {
-				if (yych <= 0x00) goto yy1268;
-				if (yych <= 0x08) goto yy1375;
-				if (yych <= '\r') goto yy1407;
-				goto yy1375;
-			} else {
-				if (yych <= ' ') goto yy1407;
-				if (yych == '"') goto yy1268;
-				goto yy1375;
-			}
-		} else {
-			if (yych <= ';') {
-				if (yych <= '\'') goto yy1268;
-				if (yych == ':') goto yy1405;
-				goto yy1375;
-			} else {
-				if (yych <= '<') goto yy1268;
-				if (yych <= '=') goto yy1373;
-				if (yych <= '>') goto yy1285;
-				goto yy1375;
-			}
-		}
-	} else {
-		if (yych <= 0xDF) {
-			if (yych <= '`') {
-				if (yych <= 'Z') goto yy1405;
-				if (yych <= '^') goto yy1375;
-				if (yych <= '_') goto yy1405;
-				goto yy1268;
-			} else {
-				if (yych <= 'z') goto yy1405;
-				if (yych <= 0x7F) goto yy1375;
-				if (yych <= 0xC1) goto yy1268;
-				goto yy1377;
-			}
-		} else {
-			if (yych <= 0xEF) {
-				if (yych <= 0xE0) goto yy1378;
-				if (yych == 0xED) goto yy1383;
-				goto yy1379;
-			} else {
-				if (yych <= 0xF0) goto yy1380;
-				if (yych <= 0xF3) goto yy1381;
-				if (yych <= 0xF4) goto yy1382;
-				goto yy1268;
-			}
-		}
-	}
-yy1409:
-	++p;
-	yych = *p;
-	if (yych <= '@') {
-		if (yych <= '"') {
-			if (yych <= '\r') {
-				if (yych <= 0x00) goto yy1268;
-				if (yych <= 0x08) goto yy1375;
-				goto yy1409;
-			} else {
-				if (yych == ' ') goto yy1409;
-				if (yych <= '!') goto yy1375;
-				goto yy1386;
-			}
-		} else {
-			if (yych <= ':') {
-				if (yych == '\'') goto yy1384;
-				if (yych <= '9') goto yy1375;
-				goto yy1405;
-			} else {
-				if (yych <= ';') goto yy1375;
-				if (yych <= '=') goto yy1268;
-				if (yych <= '>') goto yy1285;
-				goto yy1375;
-			}
-		}
-	} else {
-		if (yych <= 0xDF) {
-			if (yych <= '`') {
-				if (yych <= 'Z') goto yy1405;
-				if (yych <= '^') goto yy1375;
-				if (yych <= '_') goto yy1405;
-				goto yy1268;
-			} else {
-				if (yych <= 'z') goto yy1405;
-				if (yych <= 0x7F) goto yy1375;
-				if (yych <= 0xC1) goto yy1268;
-				goto yy1377;
-			}
-		} else {
-			if (yych <= 0xEF) {
-				if (yych <= 0xE0) goto yy1378;
-				if (yych == 0xED) goto yy1383;
-				goto yy1379;
-			} else {
-				if (yych <= 0xF0) goto yy1380;
-				if (yych <= 0xF3) goto yy1381;
-				if (yych <= 0xF4) goto yy1382;
-				goto yy1268;
-			}
-		}
-	}
-}
-
+  {
+    unsigned char yych;
+    static const unsigned char yybm[] = {
+        /* table 1 .. 8: 0 */
+        0,   230, 230, 230, 230, 230, 230, 230, 230, 199, 199, 199, 199, 199,
+        230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
+        230, 230, 230, 230, 199, 230, 70,  230, 230, 230, 230, 134, 230, 230,
+        230, 230, 230, 254, 246, 230, 254, 254, 254, 254, 254, 254, 254, 254,
+        254, 254, 246, 230, 198, 198, 196, 230, 230, 254, 254, 254, 254, 254,
+        254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
+        254, 254, 254, 254, 254, 254, 254, 230, 230, 226, 230, 246, 198, 254,
+        254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
+        254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 230, 230, 230,
+        230, 230, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+        /* table 9 .. 11: 256 */
+        0,   160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 32,  160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 160, 160, 160, 160, 128, 160, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+    };
+    yych = *(marker = p);
+    if (yych <= '`') {
+      if (yych <= '.') {
+        if (yych <= '\n') {
+          if (yych <= '\t')
+            goto yy1266;
+        } else {
+          if (yych == '!')
+            goto yy1264;
+          goto yy1266;
+        }
+      } else {
+        if (yych <= '?') {
+          if (yych <= '/')
+            goto yy1263;
+          if (yych <= '>')
+            goto yy1266;
+          goto yy1265;
+        } else {
+          if (yych <= '@')
+            goto yy1266;
+          if (yych <= 'Z')
+            goto yy1262;
+          goto yy1266;
+        }
+      }
+    } else {
+      if (yych <= 0xEC) {
+        if (yych <= 0xC1) {
+          if (yych <= 'z')
+            goto yy1262;
+          if (yych <= 0x7F)
+            goto yy1266;
+        } else {
+          if (yych <= 0xDF)
+            goto yy1267;
+          if (yych <= 0xE0)
+            goto yy1269;
+          goto yy1270;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xED)
+            goto yy1274;
+          if (yych <= 0xEF)
+            goto yy1270;
+          goto yy1271;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1272;
+          if (yych <= 0xF4)
+            goto yy1273;
+        }
+      }
+    }
+  yy1261 : { return 0; }
+  yy1262:
+    yych = *(marker = ++p);
+    if (yych <= '/') {
+      if (yych <= ' ') {
+        if (yych <= 0x08)
+          goto yy1261;
+        if (yych <= '\r')
+          goto yy1366;
+        if (yych <= 0x1F)
+          goto yy1261;
+        goto yy1366;
+      } else {
+        if (yych == '-')
+          goto yy1364;
+        if (yych <= '.')
+          goto yy1261;
+        goto yy1368;
+      }
+    } else {
+      if (yych <= '@') {
+        if (yych <= '9')
+          goto yy1364;
+        if (yych == '>')
+          goto yy1285;
+        goto yy1261;
+      } else {
+        if (yych <= 'Z')
+          goto yy1364;
+        if (yych <= '`')
+          goto yy1261;
+        if (yych <= 'z')
+          goto yy1364;
+        goto yy1261;
+      }
+    }
+  yy1263:
+    yych = *(marker = ++p);
+    if (yych <= '@')
+      goto yy1261;
+    if (yych <= 'Z')
+      goto yy1360;
+    if (yych <= '`')
+      goto yy1261;
+    if (yych <= 'z')
+      goto yy1360;
+    goto yy1261;
+  yy1264:
+    yych = *(marker = ++p);
+    if (yybm[256 + yych] & 64) {
+      goto yy1295;
+    }
+    if (yych == '-')
+      goto yy1297;
+    if (yych <= '@')
+      goto yy1261;
+    if (yych <= '[')
+      goto yy1294;
+    goto yy1261;
+  yy1265:
+    yych = *(marker = ++p);
+    if (yych <= 0x00)
+      goto yy1261;
+    if (yych <= 0x7F)
+      goto yy1276;
+    if (yych <= 0xC1)
+      goto yy1261;
+    if (yych <= 0xF4)
+      goto yy1276;
+    goto yy1261;
+  yy1266:
+    yych = *++p;
+    goto yy1261;
+  yy1267:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1266;
+  yy1268:
+    p = marker;
+    goto yy1261;
+  yy1269:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1267;
+    goto yy1268;
+  yy1270:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1267;
+    goto yy1268;
+  yy1271:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1270;
+    goto yy1268;
+  yy1272:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1270;
+    goto yy1268;
+  yy1273:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x8F)
+      goto yy1270;
+    goto yy1268;
+  yy1274:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x9F)
+      goto yy1267;
+    goto yy1268;
+  yy1275:
+    ++p;
+    yych = *p;
+  yy1276:
+    if (yybm[256 + yych] & 32) {
+      goto yy1275;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych <= '?')
+          goto yy1284;
+        goto yy1268;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1277;
+        if (yych <= 0xE0)
+          goto yy1278;
+        goto yy1279;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1283;
+        if (yych <= 0xEF)
+          goto yy1279;
+        goto yy1280;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1281;
+        if (yych <= 0xF4)
+          goto yy1282;
+        goto yy1268;
+      }
+    }
+  yy1277:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1275;
+    goto yy1268;
+  yy1278:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1277;
+    goto yy1268;
+  yy1279:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1277;
+    goto yy1268;
+  yy1280:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1279;
+    goto yy1268;
+  yy1281:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1279;
+    goto yy1268;
+  yy1282:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x8F)
+      goto yy1279;
+    goto yy1268;
+  yy1283:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x9F)
+      goto yy1277;
+    goto yy1268;
+  yy1284:
+    ++p;
+    yych = *p;
+    if (yych <= 0xE0) {
+      if (yych <= '>') {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych <= '=')
+          goto yy1275;
+      } else {
+        if (yych <= 0x7F)
+          goto yy1275;
+        if (yych <= 0xC1)
+          goto yy1268;
+        if (yych <= 0xDF)
+          goto yy1287;
+        goto yy1288;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1293;
+        goto yy1289;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1290;
+        if (yych <= 0xF3)
+          goto yy1291;
+        if (yych <= 0xF4)
+          goto yy1292;
+        goto yy1268;
+      }
+    }
+  yy1285:
+    ++p;
+    { return (bufsize_t)(p - start); }
+  yy1287:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1275;
+    goto yy1268;
+  yy1288:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1287;
+    goto yy1268;
+  yy1289:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1287;
+    goto yy1268;
+  yy1290:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1289;
+    goto yy1268;
+  yy1291:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1289;
+    goto yy1268;
+  yy1292:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x8F)
+      goto yy1289;
+    goto yy1268;
+  yy1293:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x9F)
+      goto yy1287;
+    goto yy1268;
+  yy1294:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy1330;
+    if (yych == 'c')
+      goto yy1330;
+    goto yy1268;
+  yy1295:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 1) {
+      goto yy1319;
+    }
+    if (yych <= '@')
+      goto yy1268;
+    if (yych <= 'Z')
+      goto yy1295;
+    goto yy1268;
+  yy1297:
+    yych = *++p;
+    if (yych != '-')
+      goto yy1268;
+    yych = *++p;
+    if (yych <= 0xE0) {
+      if (yych <= '=') {
+        if (yych != '-')
+          goto yy1301;
+      } else {
+        if (yych <= '>')
+          goto yy1268;
+        if (yych <= 0xC1)
+          goto yy1301;
+        if (yych <= 0xDF)
+          goto yy1302;
+        goto yy1303;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1308;
+        goto yy1304;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1305;
+        if (yych <= 0xF3)
+          goto yy1306;
+        if (yych <= 0xF4)
+          goto yy1307;
+        goto yy1301;
+      }
+    }
+    yych = *++p;
+    if (yych <= 0xE0) {
+      if (yych <= '=') {
+        if (yych == '-')
+          goto yy1318;
+        goto yy1301;
+      } else {
+        if (yych <= '>')
+          goto yy1268;
+        if (yych <= 0xC1)
+          goto yy1301;
+        if (yych <= 0xDF)
+          goto yy1302;
+        goto yy1303;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1308;
+        goto yy1304;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1305;
+        if (yych <= 0xF3)
+          goto yy1306;
+        if (yych <= 0xF4)
+          goto yy1307;
+        goto yy1301;
+      }
+    }
+  yy1300:
+    ++p;
+    yych = *p;
+  yy1301:
+    if (yybm[256 + yych] & 128) {
+      goto yy1300;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych <= '-')
+          goto yy1309;
+        goto yy1268;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1310;
+        if (yych <= 0xE0)
+          goto yy1311;
+        goto yy1312;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1316;
+        if (yych <= 0xEF)
+          goto yy1312;
+        goto yy1313;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1314;
+        if (yych <= 0xF4)
+          goto yy1315;
+        goto yy1268;
+      }
+    }
+  yy1302:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1300;
+    goto yy1268;
+  yy1303:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1302;
+    goto yy1268;
+  yy1304:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1302;
+    goto yy1268;
+  yy1305:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1304;
+    goto yy1268;
+  yy1306:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1304;
+    goto yy1268;
+  yy1307:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x8F)
+      goto yy1304;
+    goto yy1268;
+  yy1308:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x9F)
+      goto yy1302;
+    goto yy1268;
+  yy1309:
+    ++p;
+    yych = *p;
+    if (yybm[256 + yych] & 128) {
+      goto yy1300;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych <= '-')
+          goto yy1317;
+        goto yy1268;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1310;
+        if (yych <= 0xE0)
+          goto yy1311;
+        goto yy1312;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1316;
+        if (yych <= 0xEF)
+          goto yy1312;
+        goto yy1313;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1314;
+        if (yych <= 0xF4)
+          goto yy1315;
+        goto yy1268;
+      }
+    }
+  yy1310:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1300;
+    goto yy1268;
+  yy1311:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1310;
+    goto yy1268;
+  yy1312:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1310;
+    goto yy1268;
+  yy1313:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1312;
+    goto yy1268;
+  yy1314:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1312;
+    goto yy1268;
+  yy1315:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x8F)
+      goto yy1312;
+    goto yy1268;
+  yy1316:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x9F)
+      goto yy1310;
+    goto yy1268;
+  yy1317:
+    yych = *++p;
+    if (yych == '>')
+      goto yy1285;
+    goto yy1268;
+  yy1318:
+    yych = *++p;
+    if (yych == '>')
+      goto yy1285;
+    goto yy1268;
+  yy1319:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 1) {
+      goto yy1319;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '>') {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych >= '>')
+          goto yy1285;
+      } else {
+        if (yych <= 0x7F)
+          goto yy1321;
+        if (yych <= 0xC1)
+          goto yy1268;
+        if (yych <= 0xDF)
+          goto yy1323;
+        goto yy1324;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1329;
+        goto yy1325;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1326;
+        if (yych <= 0xF3)
+          goto yy1327;
+        if (yych <= 0xF4)
+          goto yy1328;
+        goto yy1268;
+      }
+    }
+  yy1321:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 2) {
+      goto yy1321;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych <= '>')
+          goto yy1285;
+        goto yy1268;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1323;
+        if (yych <= 0xE0)
+          goto yy1324;
+        goto yy1325;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1329;
+        if (yych <= 0xEF)
+          goto yy1325;
+        goto yy1326;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1327;
+        if (yych <= 0xF4)
+          goto yy1328;
+        goto yy1268;
+      }
+    }
+  yy1323:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1321;
+    goto yy1268;
+  yy1324:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1323;
+    goto yy1268;
+  yy1325:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1323;
+    goto yy1268;
+  yy1326:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1325;
+    goto yy1268;
+  yy1327:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1325;
+    goto yy1268;
+  yy1328:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x8F)
+      goto yy1325;
+    goto yy1268;
+  yy1329:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x9F)
+      goto yy1323;
+    goto yy1268;
+  yy1330:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy1331;
+    if (yych != 'd')
+      goto yy1268;
+  yy1331:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1332;
+    if (yych != 'a')
+      goto yy1268;
+  yy1332:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1333;
+    if (yych != 't')
+      goto yy1268;
+  yy1333:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1334;
+    if (yych != 'a')
+      goto yy1268;
+  yy1334:
+    yych = *++p;
+    if (yych != '[')
+      goto yy1268;
+  yy1335:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 4) {
+      goto yy1335;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych <= ']')
+          goto yy1344;
+        goto yy1268;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1337;
+        if (yych <= 0xE0)
+          goto yy1338;
+        goto yy1339;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1343;
+        if (yych <= 0xEF)
+          goto yy1339;
+        goto yy1340;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1341;
+        if (yych <= 0xF4)
+          goto yy1342;
+        goto yy1268;
+      }
+    }
+  yy1337:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1335;
+    goto yy1268;
+  yy1338:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1337;
+    goto yy1268;
+  yy1339:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1337;
+    goto yy1268;
+  yy1340:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1339;
+    goto yy1268;
+  yy1341:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1339;
+    goto yy1268;
+  yy1342:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x8F)
+      goto yy1339;
+    goto yy1268;
+  yy1343:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x9F)
+      goto yy1337;
+    goto yy1268;
+  yy1344:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 4) {
+      goto yy1335;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych >= '^')
+          goto yy1268;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1346;
+        if (yych <= 0xE0)
+          goto yy1347;
+        goto yy1348;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1352;
+        if (yych <= 0xEF)
+          goto yy1348;
+        goto yy1349;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1350;
+        if (yych <= 0xF4)
+          goto yy1351;
+        goto yy1268;
+      }
+    }
+    ++p;
+    yych = *p;
+    if (yych <= 0xE0) {
+      if (yych <= '>') {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych <= '=')
+          goto yy1335;
+        goto yy1285;
+      } else {
+        if (yych <= 0x7F)
+          goto yy1335;
+        if (yych <= 0xC1)
+          goto yy1268;
+        if (yych <= 0xDF)
+          goto yy1353;
+        goto yy1354;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1359;
+        goto yy1355;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1356;
+        if (yych <= 0xF3)
+          goto yy1357;
+        if (yych <= 0xF4)
+          goto yy1358;
+        goto yy1268;
+      }
+    }
+  yy1346:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1335;
+    goto yy1268;
+  yy1347:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1346;
+    goto yy1268;
+  yy1348:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1346;
+    goto yy1268;
+  yy1349:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1348;
+    goto yy1268;
+  yy1350:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1348;
+    goto yy1268;
+  yy1351:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x8F)
+      goto yy1348;
+    goto yy1268;
+  yy1352:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x9F)
+      goto yy1346;
+    goto yy1268;
+  yy1353:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1335;
+    goto yy1268;
+  yy1354:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1353;
+    goto yy1268;
+  yy1355:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1353;
+    goto yy1268;
+  yy1356:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1355;
+    goto yy1268;
+  yy1357:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1355;
+    goto yy1268;
+  yy1358:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x8F)
+      goto yy1355;
+    goto yy1268;
+  yy1359:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x9F)
+      goto yy1353;
+    goto yy1268;
+  yy1360:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 8) {
+      goto yy1360;
+    }
+    if (yych <= 0x1F) {
+      if (yych <= 0x08)
+        goto yy1268;
+      if (yych >= 0x0E)
+        goto yy1268;
+    } else {
+      if (yych <= ' ')
+        goto yy1362;
+      if (yych == '>')
+        goto yy1285;
+      goto yy1268;
+    }
+  yy1362:
+    ++p;
+    yych = *p;
+    if (yych <= 0x1F) {
+      if (yych <= 0x08)
+        goto yy1268;
+      if (yych <= '\r')
+        goto yy1362;
+      goto yy1268;
+    } else {
+      if (yych <= ' ')
+        goto yy1362;
+      if (yych == '>')
+        goto yy1285;
+      goto yy1268;
+    }
+  yy1364:
+    ++p;
+    yych = *p;
+    if (yych <= '/') {
+      if (yych <= ' ') {
+        if (yych <= 0x08)
+          goto yy1268;
+        if (yych <= '\r')
+          goto yy1366;
+        if (yych <= 0x1F)
+          goto yy1268;
+      } else {
+        if (yych == '-')
+          goto yy1364;
+        if (yych <= '.')
+          goto yy1268;
+        goto yy1368;
+      }
+    } else {
+      if (yych <= '@') {
+        if (yych <= '9')
+          goto yy1364;
+        if (yych == '>')
+          goto yy1285;
+        goto yy1268;
+      } else {
+        if (yych <= 'Z')
+          goto yy1364;
+        if (yych <= '`')
+          goto yy1268;
+        if (yych <= 'z')
+          goto yy1364;
+        goto yy1268;
+      }
+    }
+  yy1366:
+    ++p;
+    yych = *p;
+    if (yych <= ':') {
+      if (yych <= ' ') {
+        if (yych <= 0x08)
+          goto yy1268;
+        if (yych <= '\r')
+          goto yy1366;
+        if (yych <= 0x1F)
+          goto yy1268;
+        goto yy1366;
+      } else {
+        if (yych == '/')
+          goto yy1368;
+        if (yych <= '9')
+          goto yy1268;
+        goto yy1369;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych == '>')
+          goto yy1285;
+        if (yych <= '@')
+          goto yy1268;
+        goto yy1369;
+      } else {
+        if (yych <= '_') {
+          if (yych <= '^')
+            goto yy1268;
+          goto yy1369;
+        } else {
+          if (yych <= '`')
+            goto yy1268;
+          if (yych <= 'z')
+            goto yy1369;
+          goto yy1268;
+        }
+      }
+    }
+  yy1368:
+    yych = *++p;
+    if (yych == '>')
+      goto yy1285;
+    goto yy1268;
+  yy1369:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 16) {
+      goto yy1369;
+    }
+    if (yych <= ',') {
+      if (yych <= '\r') {
+        if (yych <= 0x08)
+          goto yy1268;
+      } else {
+        if (yych != ' ')
+          goto yy1268;
+      }
+    } else {
+      if (yych <= '<') {
+        if (yych <= '/')
+          goto yy1368;
+        goto yy1268;
+      } else {
+        if (yych <= '=')
+          goto yy1373;
+        if (yych <= '>')
+          goto yy1285;
+        goto yy1268;
+      }
+    }
+  yy1371:
+    ++p;
+    yych = *p;
+    if (yych <= '<') {
+      if (yych <= ' ') {
+        if (yych <= 0x08)
+          goto yy1268;
+        if (yych <= '\r')
+          goto yy1371;
+        if (yych <= 0x1F)
+          goto yy1268;
+        goto yy1371;
+      } else {
+        if (yych <= '/') {
+          if (yych <= '.')
+            goto yy1268;
+          goto yy1368;
+        } else {
+          if (yych == ':')
+            goto yy1369;
+          goto yy1268;
+        }
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '=')
+          goto yy1373;
+        if (yych <= '>')
+          goto yy1285;
+        if (yych <= '@')
+          goto yy1268;
+        goto yy1369;
+      } else {
+        if (yych <= '_') {
+          if (yych <= '^')
+            goto yy1268;
+          goto yy1369;
+        } else {
+          if (yych <= '`')
+            goto yy1268;
+          if (yych <= 'z')
+            goto yy1369;
+          goto yy1268;
+        }
+      }
+    }
+  yy1373:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy1375;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '"') {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych >= '!')
+          goto yy1386;
+      } else {
+        if (yych <= '\'')
+          goto yy1384;
+        if (yych <= 0xC1)
+          goto yy1268;
+        if (yych <= 0xDF)
+          goto yy1377;
+        goto yy1378;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1383;
+        goto yy1379;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1380;
+        if (yych <= 0xF3)
+          goto yy1381;
+        if (yych <= 0xF4)
+          goto yy1382;
+        goto yy1268;
+      }
+    }
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy1375;
+    }
+    if (yych <= 0xDF) {
+      if (yych <= '\'') {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych <= ' ')
+          goto yy1409;
+        if (yych <= '"')
+          goto yy1386;
+        goto yy1384;
+      } else {
+        if (yych == '>')
+          goto yy1285;
+        if (yych <= 0xC1)
+          goto yy1268;
+        goto yy1377;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1378;
+        if (yych == 0xED)
+          goto yy1383;
+        goto yy1379;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1380;
+        if (yych <= 0xF3)
+          goto yy1381;
+        if (yych <= 0xF4)
+          goto yy1382;
+        goto yy1268;
+      }
+    }
+  yy1375:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy1375;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '=') {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych <= ' ')
+          goto yy1403;
+        goto yy1268;
+      } else {
+        if (yych <= '>')
+          goto yy1285;
+        if (yych <= 0xC1)
+          goto yy1268;
+        if (yych >= 0xE0)
+          goto yy1378;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1383;
+        goto yy1379;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1380;
+        if (yych <= 0xF3)
+          goto yy1381;
+        if (yych <= 0xF4)
+          goto yy1382;
+        goto yy1268;
+      }
+    }
+  yy1377:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1375;
+    goto yy1268;
+  yy1378:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1377;
+    goto yy1268;
+  yy1379:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1377;
+    goto yy1268;
+  yy1380:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1379;
+    goto yy1268;
+  yy1381:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1379;
+    goto yy1268;
+  yy1382:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x8F)
+      goto yy1379;
+    goto yy1268;
+  yy1383:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x9F)
+      goto yy1377;
+    goto yy1268;
+  yy1384:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1384;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych <= '\'')
+          goto yy1395;
+        goto yy1268;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1396;
+        if (yych <= 0xE0)
+          goto yy1397;
+        goto yy1398;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1402;
+        if (yych <= 0xEF)
+          goto yy1398;
+        goto yy1399;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1400;
+        if (yych <= 0xF4)
+          goto yy1401;
+        goto yy1268;
+      }
+    }
+  yy1386:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy1386;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x00)
+          goto yy1268;
+        if (yych <= '"')
+          goto yy1395;
+        goto yy1268;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1388;
+        if (yych <= 0xE0)
+          goto yy1389;
+        goto yy1390;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1394;
+        if (yych <= 0xEF)
+          goto yy1390;
+        goto yy1391;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1392;
+        if (yych <= 0xF4)
+          goto yy1393;
+        goto yy1268;
+      }
+    }
+  yy1388:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1386;
+    goto yy1268;
+  yy1389:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1388;
+    goto yy1268;
+  yy1390:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1388;
+    goto yy1268;
+  yy1391:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1390;
+    goto yy1268;
+  yy1392:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1390;
+    goto yy1268;
+  yy1393:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x8F)
+      goto yy1390;
+    goto yy1268;
+  yy1394:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x9F)
+      goto yy1388;
+    goto yy1268;
+  yy1395:
+    ++p;
+    yych = *p;
+    if (yych <= ' ') {
+      if (yych <= 0x08)
+        goto yy1268;
+      if (yych <= '\r')
+        goto yy1366;
+      if (yych <= 0x1F)
+        goto yy1268;
+      goto yy1366;
+    } else {
+      if (yych <= '/') {
+        if (yych <= '.')
+          goto yy1268;
+        goto yy1368;
+      } else {
+        if (yych == '>')
+          goto yy1285;
+        goto yy1268;
+      }
+    }
+  yy1396:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1384;
+    goto yy1268;
+  yy1397:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1396;
+    goto yy1268;
+  yy1398:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1396;
+    goto yy1268;
+  yy1399:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1398;
+    goto yy1268;
+  yy1400:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0xBF)
+      goto yy1398;
+    goto yy1268;
+  yy1401:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x8F)
+      goto yy1398;
+    goto yy1268;
+  yy1402:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1268;
+    if (yych <= 0x9F)
+      goto yy1396;
+    goto yy1268;
+  yy1403:
+    ++p;
+    yych = *p;
+    if (yych <= '@') {
+      if (yych <= '"') {
+        if (yych <= '\r') {
+          if (yych <= 0x00)
+            goto yy1268;
+          if (yych <= 0x08)
+            goto yy1375;
+          goto yy1403;
+        } else {
+          if (yych == ' ')
+            goto yy1403;
+          if (yych <= '!')
+            goto yy1375;
+          goto yy1268;
+        }
+      } else {
+        if (yych <= ':') {
+          if (yych == '\'')
+            goto yy1268;
+          if (yych <= '9')
+            goto yy1375;
+        } else {
+          if (yych <= ';')
+            goto yy1375;
+          if (yych <= '=')
+            goto yy1268;
+          if (yych <= '>')
+            goto yy1285;
+          goto yy1375;
+        }
+      }
+    } else {
+      if (yych <= 0xDF) {
+        if (yych <= '`') {
+          if (yych <= 'Z')
+            goto yy1405;
+          if (yych <= '^')
+            goto yy1375;
+          if (yych >= '`')
+            goto yy1268;
+        } else {
+          if (yych <= 'z')
+            goto yy1405;
+          if (yych <= 0x7F)
+            goto yy1375;
+          if (yych <= 0xC1)
+            goto yy1268;
+          goto yy1377;
+        }
+      } else {
+        if (yych <= 0xEF) {
+          if (yych <= 0xE0)
+            goto yy1378;
+          if (yych == 0xED)
+            goto yy1383;
+          goto yy1379;
+        } else {
+          if (yych <= 0xF0)
+            goto yy1380;
+          if (yych <= 0xF3)
+            goto yy1381;
+          if (yych <= 0xF4)
+            goto yy1382;
+          goto yy1268;
+        }
+      }
+    }
+  yy1405:
+    ++p;
+    yych = *p;
+    if (yych <= '>') {
+      if (yych <= '&') {
+        if (yych <= 0x1F) {
+          if (yych <= 0x00)
+            goto yy1268;
+          if (yych <= 0x08)
+            goto yy1375;
+          if (yych >= 0x0E)
+            goto yy1375;
+        } else {
+          if (yych <= ' ')
+            goto yy1407;
+          if (yych == '"')
+            goto yy1268;
+          goto yy1375;
+        }
+      } else {
+        if (yych <= '/') {
+          if (yych <= '\'')
+            goto yy1268;
+          if (yych <= ',')
+            goto yy1375;
+          if (yych <= '.')
+            goto yy1405;
+          goto yy1375;
+        } else {
+          if (yych <= ';') {
+            if (yych <= ':')
+              goto yy1405;
+            goto yy1375;
+          } else {
+            if (yych <= '<')
+              goto yy1268;
+            if (yych <= '=')
+              goto yy1373;
+            goto yy1285;
+          }
+        }
+      }
+    } else {
+      if (yych <= 0xC1) {
+        if (yych <= '_') {
+          if (yych <= '@')
+            goto yy1375;
+          if (yych <= 'Z')
+            goto yy1405;
+          if (yych <= '^')
+            goto yy1375;
+          goto yy1405;
+        } else {
+          if (yych <= '`')
+            goto yy1268;
+          if (yych <= 'z')
+            goto yy1405;
+          if (yych <= 0x7F)
+            goto yy1375;
+          goto yy1268;
+        }
+      } else {
+        if (yych <= 0xED) {
+          if (yych <= 0xDF)
+            goto yy1377;
+          if (yych <= 0xE0)
+            goto yy1378;
+          if (yych <= 0xEC)
+            goto yy1379;
+          goto yy1383;
+        } else {
+          if (yych <= 0xF0) {
+            if (yych <= 0xEF)
+              goto yy1379;
+            goto yy1380;
+          } else {
+            if (yych <= 0xF3)
+              goto yy1381;
+            if (yych <= 0xF4)
+              goto yy1382;
+            goto yy1268;
+          }
+        }
+      }
+    }
+  yy1407:
+    ++p;
+    yych = *p;
+    if (yych <= '@') {
+      if (yych <= '&') {
+        if (yych <= 0x1F) {
+          if (yych <= 0x00)
+            goto yy1268;
+          if (yych <= 0x08)
+            goto yy1375;
+          if (yych <= '\r')
+            goto yy1407;
+          goto yy1375;
+        } else {
+          if (yych <= ' ')
+            goto yy1407;
+          if (yych == '"')
+            goto yy1268;
+          goto yy1375;
+        }
+      } else {
+        if (yych <= ';') {
+          if (yych <= '\'')
+            goto yy1268;
+          if (yych == ':')
+            goto yy1405;
+          goto yy1375;
+        } else {
+          if (yych <= '<')
+            goto yy1268;
+          if (yych <= '=')
+            goto yy1373;
+          if (yych <= '>')
+            goto yy1285;
+          goto yy1375;
+        }
+      }
+    } else {
+      if (yych <= 0xDF) {
+        if (yych <= '`') {
+          if (yych <= 'Z')
+            goto yy1405;
+          if (yych <= '^')
+            goto yy1375;
+          if (yych <= '_')
+            goto yy1405;
+          goto yy1268;
+        } else {
+          if (yych <= 'z')
+            goto yy1405;
+          if (yych <= 0x7F)
+            goto yy1375;
+          if (yych <= 0xC1)
+            goto yy1268;
+          goto yy1377;
+        }
+      } else {
+        if (yych <= 0xEF) {
+          if (yych <= 0xE0)
+            goto yy1378;
+          if (yych == 0xED)
+            goto yy1383;
+          goto yy1379;
+        } else {
+          if (yych <= 0xF0)
+            goto yy1380;
+          if (yych <= 0xF3)
+            goto yy1381;
+          if (yych <= 0xF4)
+            goto yy1382;
+          goto yy1268;
+        }
+      }
+    }
+  yy1409:
+    ++p;
+    yych = *p;
+    if (yych <= '@') {
+      if (yych <= '"') {
+        if (yych <= '\r') {
+          if (yych <= 0x00)
+            goto yy1268;
+          if (yych <= 0x08)
+            goto yy1375;
+          goto yy1409;
+        } else {
+          if (yych == ' ')
+            goto yy1409;
+          if (yych <= '!')
+            goto yy1375;
+          goto yy1386;
+        }
+      } else {
+        if (yych <= ':') {
+          if (yych == '\'')
+            goto yy1384;
+          if (yych <= '9')
+            goto yy1375;
+          goto yy1405;
+        } else {
+          if (yych <= ';')
+            goto yy1375;
+          if (yych <= '=')
+            goto yy1268;
+          if (yych <= '>')
+            goto yy1285;
+          goto yy1375;
+        }
+      }
+    } else {
+      if (yych <= 0xDF) {
+        if (yych <= '`') {
+          if (yych <= 'Z')
+            goto yy1405;
+          if (yych <= '^')
+            goto yy1375;
+          if (yych <= '_')
+            goto yy1405;
+          goto yy1268;
+        } else {
+          if (yych <= 'z')
+            goto yy1405;
+          if (yych <= 0x7F)
+            goto yy1375;
+          if (yych <= 0xC1)
+            goto yy1268;
+          goto yy1377;
+        }
+      } else {
+        if (yych <= 0xEF) {
+          if (yych <= 0xE0)
+            goto yy1378;
+          if (yych == 0xED)
+            goto yy1383;
+          goto yy1379;
+        } else {
+          if (yych <= 0xF0)
+            goto yy1380;
+          if (yych <= 0xF3)
+            goto yy1381;
+          if (yych <= 0xF4)
+            goto yy1382;
+          goto yy1268;
+        }
+      }
+    }
+  }
 }
 
 // Try to match an HTML block tag start line, returning
 // an integer code for the type of block (1-6, matching the spec).
 // #7 is handled by a separate function, below.
-bufsize_t _scan_html_block_start(const unsigned char *p)
-{
+bufsize_t _scan_html_block_start(const unsigned char *p) {
   const unsigned char *marker = NULL;
 
-{
-	unsigned char yych;
-	yych = *(marker = p);
-	if (yych <= 0xDF) {
-		if (yych <= ';') {
-			if (yych != '\n') goto yy1415;
-		} else {
-			if (yych <= '<') goto yy1414;
-			if (yych <= 0x7F) goto yy1415;
-			if (yych >= 0xC2) goto yy1416;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1418;
-			if (yych == 0xED) goto yy1423;
-			goto yy1419;
-		} else {
-			if (yych <= 0xF0) goto yy1420;
-			if (yych <= 0xF3) goto yy1421;
-			if (yych <= 0xF4) goto yy1422;
-		}
-	}
-yy1413:
-	{ return 0; }
-yy1414:
-	yych = *(marker = ++p);
-	switch (yych) {
-	case '!':	goto yy1439;
-	case '/':	goto yy1424;
-	case '?':	goto yy1440;
-	case 'A':
-	case 'a':	goto yy1426;
-	case 'B':
-	case 'b':	goto yy1427;
-	case 'C':
-	case 'c':	goto yy1428;
-	case 'D':
-	case 'd':	goto yy1429;
-	case 'F':
-	case 'f':	goto yy1430;
-	case 'H':
-	case 'h':	goto yy1431;
-	case 'L':
-	case 'l':	goto yy1432;
-	case 'M':
-	case 'm':	goto yy1433;
-	case 'N':
-	case 'n':	goto yy1434;
-	case 'O':
-	case 'o':	goto yy1435;
-	case 'P':
-	case 'p':	goto yy1425;
-	case 'S':
-	case 's':	goto yy1436;
-	case 'T':
-	case 't':	goto yy1437;
-	case 'U':
-	case 'u':	goto yy1438;
-	default:	goto yy1413;
-	}
-yy1415:
-	yych = *++p;
-	goto yy1413;
-yy1416:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1417;
-	if (yych <= 0xBF) goto yy1415;
-yy1417:
-	p = marker;
-	goto yy1413;
-yy1418:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy1417;
-	if (yych <= 0xBF) goto yy1416;
-	goto yy1417;
-yy1419:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1417;
-	if (yych <= 0xBF) goto yy1416;
-	goto yy1417;
-yy1420:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy1417;
-	if (yych <= 0xBF) goto yy1419;
-	goto yy1417;
-yy1421:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1417;
-	if (yych <= 0xBF) goto yy1419;
-	goto yy1417;
-yy1422:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1417;
-	if (yych <= 0x8F) goto yy1419;
-	goto yy1417;
-yy1423:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1417;
-	if (yych <= 0x9F) goto yy1416;
-	goto yy1417;
-yy1424:
-	yych = *++p;
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy1426;
-	case 'B':
-	case 'b':	goto yy1427;
-	case 'C':
-	case 'c':	goto yy1428;
-	case 'D':
-	case 'd':	goto yy1429;
-	case 'F':
-	case 'f':	goto yy1430;
-	case 'H':
-	case 'h':	goto yy1431;
-	case 'L':
-	case 'l':	goto yy1432;
-	case 'M':
-	case 'm':	goto yy1433;
-	case 'N':
-	case 'n':	goto yy1434;
-	case 'O':
-	case 'o':	goto yy1435;
-	case 'P':
-	case 'p':	goto yy1622;
-	case 'S':
-	case 's':	goto yy1623;
-	case 'T':
-	case 't':	goto yy1437;
-	case 'U':
-	case 'u':	goto yy1438;
-	default:	goto yy1417;
-	}
-yy1425:
-	yych = *++p;
-	if (yych <= '>') {
-		if (yych <= ' ') {
-			if (yych <= 0x08) goto yy1417;
-			if (yych <= '\r') goto yy1456;
-			if (yych <= 0x1F) goto yy1417;
-			goto yy1456;
-		} else {
-			if (yych == '/') goto yy1458;
-			if (yych <= '=') goto yy1417;
-			goto yy1456;
-		}
-	} else {
-		if (yych <= 'R') {
-			if (yych == 'A') goto yy1617;
-			if (yych <= 'Q') goto yy1417;
-			goto yy1616;
-		} else {
-			if (yych <= 'a') {
-				if (yych <= '`') goto yy1417;
-				goto yy1617;
-			} else {
-				if (yych == 'r') goto yy1616;
-				goto yy1417;
-			}
-		}
-	}
-yy1426:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych <= 'D') {
-			if (yych <= 'C') goto yy1417;
-			goto yy1605;
-		} else {
-			if (yych <= 'Q') goto yy1417;
-			if (yych <= 'R') goto yy1604;
-			goto yy1603;
-		}
-	} else {
-		if (yych <= 'q') {
-			if (yych == 'd') goto yy1605;
-			goto yy1417;
-		} else {
-			if (yych <= 'r') goto yy1604;
-			if (yych <= 's') goto yy1603;
-			goto yy1417;
-		}
-	}
-yy1427:
-	yych = *++p;
-	if (yych <= 'O') {
-		if (yych <= 'K') {
-			if (yych == 'A') goto yy1589;
-			goto yy1417;
-		} else {
-			if (yych <= 'L') goto yy1588;
-			if (yych <= 'N') goto yy1417;
-			goto yy1587;
-		}
-	} else {
-		if (yych <= 'k') {
-			if (yych == 'a') goto yy1589;
-			goto yy1417;
-		} else {
-			if (yych <= 'l') goto yy1588;
-			if (yych == 'o') goto yy1587;
-			goto yy1417;
-		}
-	}
-yy1428:
-	yych = *++p;
-	if (yych <= 'O') {
-		if (yych <= 'D') {
-			if (yych == 'A') goto yy1574;
-			goto yy1417;
-		} else {
-			if (yych <= 'E') goto yy1573;
-			if (yych <= 'N') goto yy1417;
-			goto yy1572;
-		}
-	} else {
-		if (yych <= 'd') {
-			if (yych == 'a') goto yy1574;
-			goto yy1417;
-		} else {
-			if (yych <= 'e') goto yy1573;
-			if (yych == 'o') goto yy1572;
-			goto yy1417;
-		}
-	}
-yy1429:
-	yych = *++p;
-	switch (yych) {
-	case 'D':
-	case 'L':
-	case 'T':
-	case 'd':
-	case 'l':
-	case 't':	goto yy1455;
-	case 'E':
-	case 'e':	goto yy1564;
-	case 'I':
-	case 'i':	goto yy1563;
-	default:	goto yy1417;
-	}
-yy1430:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych <= 'N') {
-			if (yych == 'I') goto yy1539;
-			goto yy1417;
-		} else {
-			if (yych <= 'O') goto yy1538;
-			if (yych <= 'Q') goto yy1417;
-			goto yy1537;
-		}
-	} else {
-		if (yych <= 'n') {
-			if (yych == 'i') goto yy1539;
-			goto yy1417;
-		} else {
-			if (yych <= 'o') goto yy1538;
-			if (yych == 'r') goto yy1537;
-			goto yy1417;
-		}
-	}
-yy1431:
-	yych = *++p;
-	if (yych <= 'S') {
-		if (yych <= 'D') {
-			if (yych == '1') goto yy1455;
-			goto yy1417;
-		} else {
-			if (yych <= 'E') goto yy1532;
-			if (yych == 'R') goto yy1455;
-			goto yy1417;
-		}
-	} else {
-		if (yych <= 'q') {
-			if (yych <= 'T') goto yy1531;
-			if (yych == 'e') goto yy1532;
-			goto yy1417;
-		} else {
-			if (yych <= 'r') goto yy1455;
-			if (yych == 't') goto yy1531;
-			goto yy1417;
-		}
-	}
-yy1432:
-	yych = *++p;
-	if (yych <= 'I') {
-		if (yych == 'E') goto yy1526;
-		if (yych <= 'H') goto yy1417;
-		goto yy1525;
-	} else {
-		if (yych <= 'e') {
-			if (yych <= 'd') goto yy1417;
-			goto yy1526;
-		} else {
-			if (yych == 'i') goto yy1525;
-			goto yy1417;
-		}
-	}
-yy1433:
-	yych = *++p;
-	if (yych <= 'E') {
-		if (yych == 'A') goto yy1517;
-		if (yych <= 'D') goto yy1417;
-		goto yy1516;
-	} else {
-		if (yych <= 'a') {
-			if (yych <= '`') goto yy1417;
-			goto yy1517;
-		} else {
-			if (yych == 'e') goto yy1516;
-			goto yy1417;
-		}
-	}
-yy1434:
-	yych = *++p;
-	if (yych <= 'O') {
-		if (yych == 'A') goto yy1510;
-		if (yych <= 'N') goto yy1417;
-		goto yy1509;
-	} else {
-		if (yych <= 'a') {
-			if (yych <= '`') goto yy1417;
-			goto yy1510;
-		} else {
-			if (yych == 'o') goto yy1509;
-			goto yy1417;
-		}
-	}
-yy1435:
-	yych = *++p;
-	if (yych <= 'P') {
-		if (yych == 'L') goto yy1455;
-		if (yych <= 'O') goto yy1417;
-		goto yy1501;
-	} else {
-		if (yych <= 'l') {
-			if (yych <= 'k') goto yy1417;
-			goto yy1455;
-		} else {
-			if (yych == 'p') goto yy1501;
-			goto yy1417;
-		}
-	}
-yy1436:
-	yych = *++p;
-	if (yych <= 'U') {
-		if (yych <= 'E') {
-			if (yych == 'C') goto yy1478;
-			if (yych <= 'D') goto yy1417;
-			goto yy1481;
-		} else {
-			if (yych <= 'O') {
-				if (yych <= 'N') goto yy1417;
-				goto yy1480;
-			} else {
-				if (yych <= 'S') goto yy1417;
-				if (yych <= 'T') goto yy1477;
-				goto yy1479;
-			}
-		}
-	} else {
-		if (yych <= 'n') {
-			if (yych <= 'c') {
-				if (yych <= 'b') goto yy1417;
-				goto yy1478;
-			} else {
-				if (yych == 'e') goto yy1481;
-				goto yy1417;
-			}
-		} else {
-			if (yych <= 's') {
-				if (yych <= 'o') goto yy1480;
-				goto yy1417;
-			} else {
-				if (yych <= 't') goto yy1477;
-				if (yych <= 'u') goto yy1479;
-				goto yy1417;
-			}
-		}
-	}
-yy1437:
-	yych = *++p;
-	switch (yych) {
-	case 'A':
-	case 'a':	goto yy1464;
-	case 'B':
-	case 'b':	goto yy1463;
-	case 'D':
-	case 'd':	goto yy1455;
-	case 'F':
-	case 'f':	goto yy1462;
-	case 'H':
-	case 'h':	goto yy1461;
-	case 'I':
-	case 'i':	goto yy1460;
-	case 'R':
-	case 'r':	goto yy1459;
-	default:	goto yy1417;
-	}
-yy1438:
-	yych = *++p;
-	if (yych == 'L') goto yy1455;
-	if (yych == 'l') goto yy1455;
-	goto yy1417;
-yy1439:
-	yych = *++p;
-	if (yych <= '@') {
-		if (yych == '-') goto yy1442;
-		goto yy1417;
-	} else {
-		if (yych <= 'Z') goto yy1443;
-		if (yych <= '[') goto yy1445;
-		goto yy1417;
-	}
-yy1440:
-	++p;
-	{ return 3; }
-yy1442:
-	yych = *++p;
-	if (yych == '-') goto yy1453;
-	goto yy1417;
-yy1443:
-	++p;
-	{ return 4; }
-yy1445:
-	yych = *++p;
-	if (yych == 'C') goto yy1446;
-	if (yych != 'c') goto yy1417;
-yy1446:
-	yych = *++p;
-	if (yych == 'D') goto yy1447;
-	if (yych != 'd') goto yy1417;
-yy1447:
-	yych = *++p;
-	if (yych == 'A') goto yy1448;
-	if (yych != 'a') goto yy1417;
-yy1448:
-	yych = *++p;
-	if (yych == 'T') goto yy1449;
-	if (yych != 't') goto yy1417;
-yy1449:
-	yych = *++p;
-	if (yych == 'A') goto yy1450;
-	if (yych != 'a') goto yy1417;
-yy1450:
-	yych = *++p;
-	if (yych != '[') goto yy1417;
-	++p;
-	{ return 5; }
-yy1453:
-	++p;
-	{ return 2; }
-yy1455:
-	yych = *++p;
-	if (yych <= ' ') {
-		if (yych <= 0x08) goto yy1417;
-		if (yych <= '\r') goto yy1456;
-		if (yych <= 0x1F) goto yy1417;
-	} else {
-		if (yych <= '/') {
-			if (yych <= '.') goto yy1417;
-			goto yy1458;
-		} else {
-			if (yych != '>') goto yy1417;
-		}
-	}
-yy1456:
-	++p;
-	{ return 6; }
-yy1458:
-	yych = *++p;
-	if (yych == '>') goto yy1456;
-	goto yy1417;
-yy1459:
-	yych = *++p;
-	if (yych <= '/') {
-		if (yych <= 0x1F) {
-			if (yych <= 0x08) goto yy1417;
-			if (yych <= '\r') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= ' ') goto yy1456;
-			if (yych <= '.') goto yy1417;
-			goto yy1458;
-		}
-	} else {
-		if (yych <= '@') {
-			if (yych == '>') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= 'A') goto yy1475;
-			if (yych == 'a') goto yy1475;
-			goto yy1417;
-		}
-	}
-yy1460:
-	yych = *++p;
-	if (yych == 'T') goto yy1473;
-	if (yych == 't') goto yy1473;
-	goto yy1417;
-yy1461:
-	yych = *++p;
-	if (yych <= '/') {
-		if (yych <= 0x1F) {
-			if (yych <= 0x08) goto yy1417;
-			if (yych <= '\r') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= ' ') goto yy1456;
-			if (yych <= '.') goto yy1417;
-			goto yy1458;
-		}
-	} else {
-		if (yych <= 'D') {
-			if (yych == '>') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= 'E') goto yy1471;
-			if (yych == 'e') goto yy1471;
-			goto yy1417;
-		}
-	}
-yy1462:
-	yych = *++p;
-	if (yych == 'O') goto yy1469;
-	if (yych == 'o') goto yy1469;
-	goto yy1417;
-yy1463:
-	yych = *++p;
-	if (yych == 'O') goto yy1467;
-	if (yych == 'o') goto yy1467;
-	goto yy1417;
-yy1464:
-	yych = *++p;
-	if (yych == 'B') goto yy1465;
-	if (yych != 'b') goto yy1417;
-yy1465:
-	yych = *++p;
-	if (yych == 'L') goto yy1466;
-	if (yych != 'l') goto yy1417;
-yy1466:
-	yych = *++p;
-	if (yych == 'E') goto yy1455;
-	if (yych == 'e') goto yy1455;
-	goto yy1417;
-yy1467:
-	yych = *++p;
-	if (yych == 'D') goto yy1468;
-	if (yych != 'd') goto yy1417;
-yy1468:
-	yych = *++p;
-	if (yych == 'Y') goto yy1455;
-	if (yych == 'y') goto yy1455;
-	goto yy1417;
-yy1469:
-	yych = *++p;
-	if (yych == 'O') goto yy1470;
-	if (yych != 'o') goto yy1417;
-yy1470:
-	yych = *++p;
-	if (yych == 'T') goto yy1455;
-	if (yych == 't') goto yy1455;
-	goto yy1417;
-yy1471:
-	yych = *++p;
-	if (yych == 'A') goto yy1472;
-	if (yych != 'a') goto yy1417;
-yy1472:
-	yych = *++p;
-	if (yych == 'D') goto yy1455;
-	if (yych == 'd') goto yy1455;
-	goto yy1417;
-yy1473:
-	yych = *++p;
-	if (yych == 'L') goto yy1474;
-	if (yych != 'l') goto yy1417;
-yy1474:
-	yych = *++p;
-	if (yych == 'E') goto yy1455;
-	if (yych == 'e') goto yy1455;
-	goto yy1417;
-yy1475:
-	yych = *++p;
-	if (yych == 'C') goto yy1476;
-	if (yych != 'c') goto yy1417;
-yy1476:
-	yych = *++p;
-	if (yych == 'K') goto yy1455;
-	if (yych == 'k') goto yy1455;
-	goto yy1417;
-yy1477:
-	yych = *++p;
-	if (yych == 'Y') goto yy1499;
-	if (yych == 'y') goto yy1499;
-	goto yy1417;
-yy1478:
-	yych = *++p;
-	if (yych == 'R') goto yy1493;
-	if (yych == 'r') goto yy1493;
-	goto yy1417;
-yy1479:
-	yych = *++p;
-	if (yych == 'M') goto yy1489;
-	if (yych == 'm') goto yy1489;
-	goto yy1417;
-yy1480:
-	yych = *++p;
-	if (yych == 'U') goto yy1486;
-	if (yych == 'u') goto yy1486;
-	goto yy1417;
-yy1481:
-	yych = *++p;
-	if (yych == 'C') goto yy1482;
-	if (yych != 'c') goto yy1417;
-yy1482:
-	yych = *++p;
-	if (yych == 'T') goto yy1483;
-	if (yych != 't') goto yy1417;
-yy1483:
-	yych = *++p;
-	if (yych == 'I') goto yy1484;
-	if (yych != 'i') goto yy1417;
-yy1484:
-	yych = *++p;
-	if (yych == 'O') goto yy1485;
-	if (yych != 'o') goto yy1417;
-yy1485:
-	yych = *++p;
-	if (yych == 'N') goto yy1455;
-	if (yych == 'n') goto yy1455;
-	goto yy1417;
-yy1486:
-	yych = *++p;
-	if (yych == 'R') goto yy1487;
-	if (yych != 'r') goto yy1417;
-yy1487:
-	yych = *++p;
-	if (yych == 'C') goto yy1488;
-	if (yych != 'c') goto yy1417;
-yy1488:
-	yych = *++p;
-	if (yych == 'E') goto yy1455;
-	if (yych == 'e') goto yy1455;
-	goto yy1417;
-yy1489:
-	yych = *++p;
-	if (yych == 'M') goto yy1490;
-	if (yych != 'm') goto yy1417;
-yy1490:
-	yych = *++p;
-	if (yych == 'A') goto yy1491;
-	if (yych != 'a') goto yy1417;
-yy1491:
-	yych = *++p;
-	if (yych == 'R') goto yy1492;
-	if (yych != 'r') goto yy1417;
-yy1492:
-	yych = *++p;
-	if (yych == 'Y') goto yy1455;
-	if (yych == 'y') goto yy1455;
-	goto yy1417;
-yy1493:
-	yych = *++p;
-	if (yych == 'I') goto yy1494;
-	if (yych != 'i') goto yy1417;
-yy1494:
-	yych = *++p;
-	if (yych == 'P') goto yy1495;
-	if (yych != 'p') goto yy1417;
-yy1495:
-	yych = *++p;
-	if (yych == 'T') goto yy1496;
-	if (yych != 't') goto yy1417;
-yy1496:
-	yych = *++p;
-	if (yych <= 0x1F) {
-		if (yych <= 0x08) goto yy1417;
-		if (yych >= 0x0E) goto yy1417;
-	} else {
-		if (yych <= ' ') goto yy1497;
-		if (yych != '>') goto yy1417;
-	}
-yy1497:
-	++p;
-yy1498:
-	{ return 1; }
-yy1499:
-	yych = *++p;
-	if (yych == 'L') goto yy1500;
-	if (yych != 'l') goto yy1417;
-yy1500:
-	yych = *++p;
-	if (yych == 'E') goto yy1496;
-	if (yych == 'e') goto yy1496;
-	goto yy1417;
-yy1501:
-	yych = *++p;
-	if (yych == 'T') goto yy1502;
-	if (yych != 't') goto yy1417;
-yy1502:
-	yych = *++p;
-	if (yych <= 'I') {
-		if (yych == 'G') goto yy1504;
-		if (yych <= 'H') goto yy1417;
-	} else {
-		if (yych <= 'g') {
-			if (yych <= 'f') goto yy1417;
-			goto yy1504;
-		} else {
-			if (yych != 'i') goto yy1417;
-		}
-	}
-	yych = *++p;
-	if (yych == 'O') goto yy1508;
-	if (yych == 'o') goto yy1508;
-	goto yy1417;
-yy1504:
-	yych = *++p;
-	if (yych == 'R') goto yy1505;
-	if (yych != 'r') goto yy1417;
-yy1505:
-	yych = *++p;
-	if (yych == 'O') goto yy1506;
-	if (yych != 'o') goto yy1417;
-yy1506:
-	yych = *++p;
-	if (yych == 'U') goto yy1507;
-	if (yych != 'u') goto yy1417;
-yy1507:
-	yych = *++p;
-	if (yych == 'P') goto yy1455;
-	if (yych == 'p') goto yy1455;
-	goto yy1417;
-yy1508:
-	yych = *++p;
-	if (yych == 'N') goto yy1455;
-	if (yych == 'n') goto yy1455;
-	goto yy1417;
-yy1509:
-	yych = *++p;
-	if (yych == 'F') goto yy1511;
-	if (yych == 'f') goto yy1511;
-	goto yy1417;
-yy1510:
-	yych = *++p;
-	if (yych == 'V') goto yy1455;
-	if (yych == 'v') goto yy1455;
-	goto yy1417;
-yy1511:
-	yych = *++p;
-	if (yych == 'R') goto yy1512;
-	if (yych != 'r') goto yy1417;
-yy1512:
-	yych = *++p;
-	if (yych == 'A') goto yy1513;
-	if (yych != 'a') goto yy1417;
-yy1513:
-	yych = *++p;
-	if (yych == 'M') goto yy1514;
-	if (yych != 'm') goto yy1417;
-yy1514:
-	yych = *++p;
-	if (yych == 'E') goto yy1515;
-	if (yych != 'e') goto yy1417;
-yy1515:
-	yych = *++p;
-	if (yych == 'S') goto yy1455;
-	if (yych == 's') goto yy1455;
-	goto yy1417;
-yy1516:
-	yych = *++p;
-	if (yych <= 'T') {
-		if (yych == 'N') goto yy1519;
-		if (yych <= 'S') goto yy1417;
-		goto yy1520;
-	} else {
-		if (yych <= 'n') {
-			if (yych <= 'm') goto yy1417;
-			goto yy1519;
-		} else {
-			if (yych == 't') goto yy1520;
-			goto yy1417;
-		}
-	}
-yy1517:
-	yych = *++p;
-	if (yych == 'I') goto yy1518;
-	if (yych != 'i') goto yy1417;
-yy1518:
-	yych = *++p;
-	if (yych == 'N') goto yy1455;
-	if (yych == 'n') goto yy1455;
-	goto yy1417;
-yy1519:
-	yych = *++p;
-	if (yych == 'U') goto yy1521;
-	if (yych == 'u') goto yy1521;
-	goto yy1417;
-yy1520:
-	yych = *++p;
-	if (yych == 'A') goto yy1455;
-	if (yych == 'a') goto yy1455;
-	goto yy1417;
-yy1521:
-	yych = *++p;
-	if (yych <= '/') {
-		if (yych <= 0x1F) {
-			if (yych <= 0x08) goto yy1417;
-			if (yych <= '\r') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= ' ') goto yy1456;
-			if (yych <= '.') goto yy1417;
-			goto yy1458;
-		}
-	} else {
-		if (yych <= 'H') {
-			if (yych == '>') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= 'I') goto yy1522;
-			if (yych != 'i') goto yy1417;
-		}
-	}
-yy1522:
-	yych = *++p;
-	if (yych == 'T') goto yy1523;
-	if (yych != 't') goto yy1417;
-yy1523:
-	yych = *++p;
-	if (yych == 'E') goto yy1524;
-	if (yych != 'e') goto yy1417;
-yy1524:
-	yych = *++p;
-	if (yych == 'M') goto yy1455;
-	if (yych == 'm') goto yy1455;
-	goto yy1417;
-yy1525:
-	yych = *++p;
-	if (yych <= '/') {
-		if (yych <= 0x1F) {
-			if (yych <= 0x08) goto yy1417;
-			if (yych <= '\r') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= ' ') goto yy1456;
-			if (yych <= '.') goto yy1417;
-			goto yy1458;
-		}
-	} else {
-		if (yych <= 'M') {
-			if (yych == '>') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= 'N') goto yy1530;
-			if (yych == 'n') goto yy1530;
-			goto yy1417;
-		}
-	}
-yy1526:
-	yych = *++p;
-	if (yych == 'G') goto yy1527;
-	if (yych != 'g') goto yy1417;
-yy1527:
-	yych = *++p;
-	if (yych == 'E') goto yy1528;
-	if (yych != 'e') goto yy1417;
-yy1528:
-	yych = *++p;
-	if (yych == 'N') goto yy1529;
-	if (yych != 'n') goto yy1417;
-yy1529:
-	yych = *++p;
-	if (yych == 'D') goto yy1455;
-	if (yych == 'd') goto yy1455;
-	goto yy1417;
-yy1530:
-	yych = *++p;
-	if (yych == 'K') goto yy1455;
-	if (yych == 'k') goto yy1455;
-	goto yy1417;
-yy1531:
-	yych = *++p;
-	if (yych == 'M') goto yy1536;
-	if (yych == 'm') goto yy1536;
-	goto yy1417;
-yy1532:
-	yych = *++p;
-	if (yych == 'A') goto yy1533;
-	if (yych != 'a') goto yy1417;
-yy1533:
-	yych = *++p;
-	if (yych == 'D') goto yy1534;
-	if (yych != 'd') goto yy1417;
-yy1534:
-	yych = *++p;
-	if (yych <= '/') {
-		if (yych <= 0x1F) {
-			if (yych <= 0x08) goto yy1417;
-			if (yych <= '\r') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= ' ') goto yy1456;
-			if (yych <= '.') goto yy1417;
-			goto yy1458;
-		}
-	} else {
-		if (yych <= 'D') {
-			if (yych == '>') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= 'E') goto yy1535;
-			if (yych != 'e') goto yy1417;
-		}
-	}
-yy1535:
-	yych = *++p;
-	if (yych == 'R') goto yy1455;
-	if (yych == 'r') goto yy1455;
-	goto yy1417;
-yy1536:
-	yych = *++p;
-	if (yych == 'L') goto yy1455;
-	if (yych == 'l') goto yy1455;
-	goto yy1417;
-yy1537:
-	yych = *++p;
-	if (yych == 'A') goto yy1558;
-	if (yych == 'a') goto yy1558;
-	goto yy1417;
-yy1538:
-	yych = *++p;
-	if (yych <= 'R') {
-		if (yych == 'O') goto yy1554;
-		if (yych <= 'Q') goto yy1417;
-		goto yy1555;
-	} else {
-		if (yych <= 'o') {
-			if (yych <= 'n') goto yy1417;
-			goto yy1554;
-		} else {
-			if (yych == 'r') goto yy1555;
-			goto yy1417;
-		}
-	}
-yy1539:
-	yych = *++p;
-	if (yych <= 'G') {
-		if (yych == 'E') goto yy1540;
-		if (yych <= 'F') goto yy1417;
-		goto yy1541;
-	} else {
-		if (yych <= 'e') {
-			if (yych <= 'd') goto yy1417;
-		} else {
-			if (yych == 'g') goto yy1541;
-			goto yy1417;
-		}
-	}
-yy1540:
-	yych = *++p;
-	if (yych == 'L') goto yy1550;
-	if (yych == 'l') goto yy1550;
-	goto yy1417;
-yy1541:
-	yych = *++p;
-	if (yych <= 'U') {
-		if (yych == 'C') goto yy1543;
-		if (yych <= 'T') goto yy1417;
-	} else {
-		if (yych <= 'c') {
-			if (yych <= 'b') goto yy1417;
-			goto yy1543;
-		} else {
-			if (yych != 'u') goto yy1417;
-		}
-	}
-	yych = *++p;
-	if (yych == 'R') goto yy1549;
-	if (yych == 'r') goto yy1549;
-	goto yy1417;
-yy1543:
-	yych = *++p;
-	if (yych == 'A') goto yy1544;
-	if (yych != 'a') goto yy1417;
-yy1544:
-	yych = *++p;
-	if (yych == 'P') goto yy1545;
-	if (yych != 'p') goto yy1417;
-yy1545:
-	yych = *++p;
-	if (yych == 'T') goto yy1546;
-	if (yych != 't') goto yy1417;
-yy1546:
-	yych = *++p;
-	if (yych == 'I') goto yy1547;
-	if (yych != 'i') goto yy1417;
-yy1547:
-	yych = *++p;
-	if (yych == 'O') goto yy1548;
-	if (yych != 'o') goto yy1417;
-yy1548:
-	yych = *++p;
-	if (yych == 'N') goto yy1455;
-	if (yych == 'n') goto yy1455;
-	goto yy1417;
-yy1549:
-	yych = *++p;
-	if (yych == 'E') goto yy1455;
-	if (yych == 'e') goto yy1455;
-	goto yy1417;
-yy1550:
-	yych = *++p;
-	if (yych == 'D') goto yy1551;
-	if (yych != 'd') goto yy1417;
-yy1551:
-	yych = *++p;
-	if (yych == 'S') goto yy1552;
-	if (yych != 's') goto yy1417;
-yy1552:
-	yych = *++p;
-	if (yych == 'E') goto yy1553;
-	if (yych != 'e') goto yy1417;
-yy1553:
-	yych = *++p;
-	if (yych == 'T') goto yy1455;
-	if (yych == 't') goto yy1455;
-	goto yy1417;
-yy1554:
-	yych = *++p;
-	if (yych == 'T') goto yy1556;
-	if (yych == 't') goto yy1556;
-	goto yy1417;
-yy1555:
-	yych = *++p;
-	if (yych == 'M') goto yy1455;
-	if (yych == 'm') goto yy1455;
-	goto yy1417;
-yy1556:
-	yych = *++p;
-	if (yych == 'E') goto yy1557;
-	if (yych != 'e') goto yy1417;
-yy1557:
-	yych = *++p;
-	if (yych == 'R') goto yy1455;
-	if (yych == 'r') goto yy1455;
-	goto yy1417;
-yy1558:
-	yych = *++p;
-	if (yych == 'M') goto yy1559;
-	if (yych != 'm') goto yy1417;
-yy1559:
-	yych = *++p;
-	if (yych == 'E') goto yy1560;
-	if (yych != 'e') goto yy1417;
-yy1560:
-	yych = *++p;
-	if (yych <= '/') {
-		if (yych <= 0x1F) {
-			if (yych <= 0x08) goto yy1417;
-			if (yych <= '\r') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= ' ') goto yy1456;
-			if (yych <= '.') goto yy1417;
-			goto yy1458;
-		}
-	} else {
-		if (yych <= 'R') {
-			if (yych == '>') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= 'S') goto yy1561;
-			if (yych != 's') goto yy1417;
-		}
-	}
-yy1561:
-	yych = *++p;
-	if (yych == 'E') goto yy1562;
-	if (yych != 'e') goto yy1417;
-yy1562:
-	yych = *++p;
-	if (yych == 'T') goto yy1455;
-	if (yych == 't') goto yy1455;
-	goto yy1417;
-yy1563:
-	yych = *++p;
-	if (yych <= 'V') {
-		if (yych <= 'Q') {
-			if (yych == 'A') goto yy1569;
-			goto yy1417;
-		} else {
-			if (yych <= 'R') goto yy1455;
-			if (yych <= 'U') goto yy1417;
-			goto yy1455;
-		}
-	} else {
-		if (yych <= 'q') {
-			if (yych == 'a') goto yy1569;
-			goto yy1417;
-		} else {
-			if (yych <= 'r') goto yy1455;
-			if (yych == 'v') goto yy1455;
-			goto yy1417;
-		}
-	}
-yy1564:
-	yych = *++p;
-	if (yych == 'T') goto yy1565;
-	if (yych != 't') goto yy1417;
-yy1565:
-	yych = *++p;
-	if (yych == 'A') goto yy1566;
-	if (yych != 'a') goto yy1417;
-yy1566:
-	yych = *++p;
-	if (yych == 'I') goto yy1567;
-	if (yych != 'i') goto yy1417;
-yy1567:
-	yych = *++p;
-	if (yych == 'L') goto yy1568;
-	if (yych != 'l') goto yy1417;
-yy1568:
-	yych = *++p;
-	if (yych == 'S') goto yy1455;
-	if (yych == 's') goto yy1455;
-	goto yy1417;
-yy1569:
-	yych = *++p;
-	if (yych == 'L') goto yy1570;
-	if (yych != 'l') goto yy1417;
-yy1570:
-	yych = *++p;
-	if (yych == 'O') goto yy1571;
-	if (yych != 'o') goto yy1417;
-yy1571:
-	yych = *++p;
-	if (yych == 'G') goto yy1455;
-	if (yych == 'g') goto yy1455;
-	goto yy1417;
-yy1572:
-	yych = *++p;
-	if (yych == 'L') goto yy1582;
-	if (yych == 'l') goto yy1582;
-	goto yy1417;
-yy1573:
-	yych = *++p;
-	if (yych == 'N') goto yy1579;
-	if (yych == 'n') goto yy1579;
-	goto yy1417;
-yy1574:
-	yych = *++p;
-	if (yych == 'P') goto yy1575;
-	if (yych != 'p') goto yy1417;
-yy1575:
-	yych = *++p;
-	if (yych == 'T') goto yy1576;
-	if (yych != 't') goto yy1417;
-yy1576:
-	yych = *++p;
-	if (yych == 'I') goto yy1577;
-	if (yych != 'i') goto yy1417;
-yy1577:
-	yych = *++p;
-	if (yych == 'O') goto yy1578;
-	if (yych != 'o') goto yy1417;
-yy1578:
-	yych = *++p;
-	if (yych == 'N') goto yy1455;
-	if (yych == 'n') goto yy1455;
-	goto yy1417;
-yy1579:
-	yych = *++p;
-	if (yych == 'T') goto yy1580;
-	if (yych != 't') goto yy1417;
-yy1580:
-	yych = *++p;
-	if (yych == 'E') goto yy1581;
-	if (yych != 'e') goto yy1417;
-yy1581:
-	yych = *++p;
-	if (yych == 'R') goto yy1455;
-	if (yych == 'r') goto yy1455;
-	goto yy1417;
-yy1582:
-	yych = *++p;
-	if (yych <= '/') {
-		if (yych <= 0x1F) {
-			if (yych <= 0x08) goto yy1417;
-			if (yych <= '\r') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= ' ') goto yy1456;
-			if (yych <= '.') goto yy1417;
-			goto yy1458;
-		}
-	} else {
-		if (yych <= 'F') {
-			if (yych == '>') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= 'G') goto yy1583;
-			if (yych != 'g') goto yy1417;
-		}
-	}
-yy1583:
-	yych = *++p;
-	if (yych == 'R') goto yy1584;
-	if (yych != 'r') goto yy1417;
-yy1584:
-	yych = *++p;
-	if (yych == 'O') goto yy1585;
-	if (yych != 'o') goto yy1417;
-yy1585:
-	yych = *++p;
-	if (yych == 'U') goto yy1586;
-	if (yych != 'u') goto yy1417;
-yy1586:
-	yych = *++p;
-	if (yych == 'P') goto yy1455;
-	if (yych == 'p') goto yy1455;
-	goto yy1417;
-yy1587:
-	yych = *++p;
-	if (yych == 'D') goto yy1602;
-	if (yych == 'd') goto yy1602;
-	goto yy1417;
-yy1588:
-	yych = *++p;
-	if (yych == 'O') goto yy1595;
-	if (yych == 'o') goto yy1595;
-	goto yy1417;
-yy1589:
-	yych = *++p;
-	if (yych == 'S') goto yy1590;
-	if (yych != 's') goto yy1417;
-yy1590:
-	yych = *++p;
-	if (yych == 'E') goto yy1591;
-	if (yych != 'e') goto yy1417;
-yy1591:
-	yych = *++p;
-	if (yych <= '/') {
-		if (yych <= 0x1F) {
-			if (yych <= 0x08) goto yy1417;
-			if (yych <= '\r') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= ' ') goto yy1456;
-			if (yych <= '.') goto yy1417;
-			goto yy1458;
-		}
-	} else {
-		if (yych <= 'E') {
-			if (yych == '>') goto yy1456;
-			goto yy1417;
-		} else {
-			if (yych <= 'F') goto yy1592;
-			if (yych != 'f') goto yy1417;
-		}
-	}
-yy1592:
-	yych = *++p;
-	if (yych == 'O') goto yy1593;
-	if (yych != 'o') goto yy1417;
-yy1593:
-	yych = *++p;
-	if (yych == 'N') goto yy1594;
-	if (yych != 'n') goto yy1417;
-yy1594:
-	yych = *++p;
-	if (yych == 'T') goto yy1455;
-	if (yych == 't') goto yy1455;
-	goto yy1417;
-yy1595:
-	yych = *++p;
-	if (yych == 'C') goto yy1596;
-	if (yych != 'c') goto yy1417;
-yy1596:
-	yych = *++p;
-	if (yych == 'K') goto yy1597;
-	if (yych != 'k') goto yy1417;
-yy1597:
-	yych = *++p;
-	if (yych == 'Q') goto yy1598;
-	if (yych != 'q') goto yy1417;
-yy1598:
-	yych = *++p;
-	if (yych == 'U') goto yy1599;
-	if (yych != 'u') goto yy1417;
-yy1599:
-	yych = *++p;
-	if (yych == 'O') goto yy1600;
-	if (yych != 'o') goto yy1417;
-yy1600:
-	yych = *++p;
-	if (yych == 'T') goto yy1601;
-	if (yych != 't') goto yy1417;
-yy1601:
-	yych = *++p;
-	if (yych == 'E') goto yy1455;
-	if (yych == 'e') goto yy1455;
-	goto yy1417;
-yy1602:
-	yych = *++p;
-	if (yych == 'Y') goto yy1455;
-	if (yych == 'y') goto yy1455;
-	goto yy1417;
-yy1603:
-	yych = *++p;
-	if (yych == 'I') goto yy1614;
-	if (yych == 'i') goto yy1614;
-	goto yy1417;
-yy1604:
-	yych = *++p;
-	if (yych == 'T') goto yy1610;
-	if (yych == 't') goto yy1610;
-	goto yy1417;
-yy1605:
-	yych = *++p;
-	if (yych == 'D') goto yy1606;
-	if (yych != 'd') goto yy1417;
-yy1606:
-	yych = *++p;
-	if (yych == 'R') goto yy1607;
-	if (yych != 'r') goto yy1417;
-yy1607:
-	yych = *++p;
-	if (yych == 'E') goto yy1608;
-	if (yych != 'e') goto yy1417;
-yy1608:
-	yych = *++p;
-	if (yych == 'S') goto yy1609;
-	if (yych != 's') goto yy1417;
-yy1609:
-	yych = *++p;
-	if (yych == 'S') goto yy1455;
-	if (yych == 's') goto yy1455;
-	goto yy1417;
-yy1610:
-	yych = *++p;
-	if (yych == 'I') goto yy1611;
-	if (yych != 'i') goto yy1417;
-yy1611:
-	yych = *++p;
-	if (yych == 'C') goto yy1612;
-	if (yych != 'c') goto yy1417;
-yy1612:
-	yych = *++p;
-	if (yych == 'L') goto yy1613;
-	if (yych != 'l') goto yy1417;
-yy1613:
-	yych = *++p;
-	if (yych == 'E') goto yy1455;
-	if (yych == 'e') goto yy1455;
-	goto yy1417;
-yy1614:
-	yych = *++p;
-	if (yych == 'D') goto yy1615;
-	if (yych != 'd') goto yy1417;
-yy1615:
-	yych = *++p;
-	if (yych == 'E') goto yy1455;
-	if (yych == 'e') goto yy1455;
-	goto yy1417;
-yy1616:
-	yych = *++p;
-	if (yych == 'E') goto yy1620;
-	if (yych == 'e') goto yy1620;
-	goto yy1417;
-yy1617:
-	yych = *++p;
-	if (yych == 'R') goto yy1618;
-	if (yych != 'r') goto yy1417;
-yy1618:
-	yych = *++p;
-	if (yych == 'A') goto yy1619;
-	if (yych != 'a') goto yy1417;
-yy1619:
-	yych = *++p;
-	if (yych == 'M') goto yy1455;
-	if (yych == 'm') goto yy1455;
-	goto yy1417;
-yy1620:
-	yych = *++p;
-	if (yych <= ' ') {
-		if (yych <= 0x08) goto yy1417;
-		if (yych <= '\r') goto yy1621;
-		if (yych <= 0x1F) goto yy1417;
-	} else {
-		if (yych <= '/') {
-			if (yych <= '.') goto yy1417;
-			goto yy1458;
-		} else {
-			if (yych != '>') goto yy1417;
-		}
-	}
-yy1621:
-	yych = *++p;
-	goto yy1498;
-yy1622:
-	yych = *++p;
-	if (yych <= '>') {
-		if (yych <= ' ') {
-			if (yych <= 0x08) goto yy1417;
-			if (yych <= '\r') goto yy1456;
-			if (yych <= 0x1F) goto yy1417;
-			goto yy1456;
-		} else {
-			if (yych == '/') goto yy1458;
-			if (yych <= '=') goto yy1417;
-			goto yy1456;
-		}
-	} else {
-		if (yych <= 'R') {
-			if (yych == 'A') goto yy1617;
-			if (yych <= 'Q') goto yy1417;
-			goto yy1624;
-		} else {
-			if (yych <= 'a') {
-				if (yych <= '`') goto yy1417;
-				goto yy1617;
-			} else {
-				if (yych == 'r') goto yy1624;
-				goto yy1417;
-			}
-		}
-	}
-yy1623:
-	yych = *++p;
-	if (yych <= 'U') {
-		if (yych <= 'N') {
-			if (yych == 'E') goto yy1481;
-			goto yy1417;
-		} else {
-			if (yych <= 'O') goto yy1480;
-			if (yych <= 'T') goto yy1417;
-			goto yy1479;
-		}
-	} else {
-		if (yych <= 'n') {
-			if (yych == 'e') goto yy1481;
-			goto yy1417;
-		} else {
-			if (yych <= 'o') goto yy1480;
-			if (yych == 'u') goto yy1479;
-			goto yy1417;
-		}
-	}
-yy1624:
-	++p;
-	if ((yych = *p) == 'E') goto yy1455;
-	if (yych == 'e') goto yy1455;
-	goto yy1417;
-}
-
+  {
+    unsigned char yych;
+    yych = *(marker = p);
+    if (yych <= 0xDF) {
+      if (yych <= ';') {
+        if (yych != '\n')
+          goto yy1415;
+      } else {
+        if (yych <= '<')
+          goto yy1414;
+        if (yych <= 0x7F)
+          goto yy1415;
+        if (yych >= 0xC2)
+          goto yy1416;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1418;
+        if (yych == 0xED)
+          goto yy1423;
+        goto yy1419;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1420;
+        if (yych <= 0xF3)
+          goto yy1421;
+        if (yych <= 0xF4)
+          goto yy1422;
+      }
+    }
+  yy1413 : { return 0; }
+  yy1414:
+    yych = *(marker = ++p);
+    switch (yych) {
+    case '!':
+      goto yy1439;
+    case '/':
+      goto yy1424;
+    case '?':
+      goto yy1440;
+    case 'A':
+    case 'a':
+      goto yy1426;
+    case 'B':
+    case 'b':
+      goto yy1427;
+    case 'C':
+    case 'c':
+      goto yy1428;
+    case 'D':
+    case 'd':
+      goto yy1429;
+    case 'F':
+    case 'f':
+      goto yy1430;
+    case 'H':
+    case 'h':
+      goto yy1431;
+    case 'L':
+    case 'l':
+      goto yy1432;
+    case 'M':
+    case 'm':
+      goto yy1433;
+    case 'N':
+    case 'n':
+      goto yy1434;
+    case 'O':
+    case 'o':
+      goto yy1435;
+    case 'P':
+    case 'p':
+      goto yy1425;
+    case 'S':
+    case 's':
+      goto yy1436;
+    case 'T':
+    case 't':
+      goto yy1437;
+    case 'U':
+    case 'u':
+      goto yy1438;
+    default:
+      goto yy1413;
+    }
+  yy1415:
+    yych = *++p;
+    goto yy1413;
+  yy1416:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1417;
+    if (yych <= 0xBF)
+      goto yy1415;
+  yy1417:
+    p = marker;
+    goto yy1413;
+  yy1418:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy1417;
+    if (yych <= 0xBF)
+      goto yy1416;
+    goto yy1417;
+  yy1419:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1417;
+    if (yych <= 0xBF)
+      goto yy1416;
+    goto yy1417;
+  yy1420:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy1417;
+    if (yych <= 0xBF)
+      goto yy1419;
+    goto yy1417;
+  yy1421:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1417;
+    if (yych <= 0xBF)
+      goto yy1419;
+    goto yy1417;
+  yy1422:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1417;
+    if (yych <= 0x8F)
+      goto yy1419;
+    goto yy1417;
+  yy1423:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1417;
+    if (yych <= 0x9F)
+      goto yy1416;
+    goto yy1417;
+  yy1424:
+    yych = *++p;
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy1426;
+    case 'B':
+    case 'b':
+      goto yy1427;
+    case 'C':
+    case 'c':
+      goto yy1428;
+    case 'D':
+    case 'd':
+      goto yy1429;
+    case 'F':
+    case 'f':
+      goto yy1430;
+    case 'H':
+    case 'h':
+      goto yy1431;
+    case 'L':
+    case 'l':
+      goto yy1432;
+    case 'M':
+    case 'm':
+      goto yy1433;
+    case 'N':
+    case 'n':
+      goto yy1434;
+    case 'O':
+    case 'o':
+      goto yy1435;
+    case 'P':
+    case 'p':
+      goto yy1622;
+    case 'S':
+    case 's':
+      goto yy1623;
+    case 'T':
+    case 't':
+      goto yy1437;
+    case 'U':
+    case 'u':
+      goto yy1438;
+    default:
+      goto yy1417;
+    }
+  yy1425:
+    yych = *++p;
+    if (yych <= '>') {
+      if (yych <= ' ') {
+        if (yych <= 0x08)
+          goto yy1417;
+        if (yych <= '\r')
+          goto yy1456;
+        if (yych <= 0x1F)
+          goto yy1417;
+        goto yy1456;
+      } else {
+        if (yych == '/')
+          goto yy1458;
+        if (yych <= '=')
+          goto yy1417;
+        goto yy1456;
+      }
+    } else {
+      if (yych <= 'R') {
+        if (yych == 'A')
+          goto yy1617;
+        if (yych <= 'Q')
+          goto yy1417;
+        goto yy1616;
+      } else {
+        if (yych <= 'a') {
+          if (yych <= '`')
+            goto yy1417;
+          goto yy1617;
+        } else {
+          if (yych == 'r')
+            goto yy1616;
+          goto yy1417;
+        }
+      }
+    }
+  yy1426:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych <= 'D') {
+        if (yych <= 'C')
+          goto yy1417;
+        goto yy1605;
+      } else {
+        if (yych <= 'Q')
+          goto yy1417;
+        if (yych <= 'R')
+          goto yy1604;
+        goto yy1603;
+      }
+    } else {
+      if (yych <= 'q') {
+        if (yych == 'd')
+          goto yy1605;
+        goto yy1417;
+      } else {
+        if (yych <= 'r')
+          goto yy1604;
+        if (yych <= 's')
+          goto yy1603;
+        goto yy1417;
+      }
+    }
+  yy1427:
+    yych = *++p;
+    if (yych <= 'O') {
+      if (yych <= 'K') {
+        if (yych == 'A')
+          goto yy1589;
+        goto yy1417;
+      } else {
+        if (yych <= 'L')
+          goto yy1588;
+        if (yych <= 'N')
+          goto yy1417;
+        goto yy1587;
+      }
+    } else {
+      if (yych <= 'k') {
+        if (yych == 'a')
+          goto yy1589;
+        goto yy1417;
+      } else {
+        if (yych <= 'l')
+          goto yy1588;
+        if (yych == 'o')
+          goto yy1587;
+        goto yy1417;
+      }
+    }
+  yy1428:
+    yych = *++p;
+    if (yych <= 'O') {
+      if (yych <= 'D') {
+        if (yych == 'A')
+          goto yy1574;
+        goto yy1417;
+      } else {
+        if (yych <= 'E')
+          goto yy1573;
+        if (yych <= 'N')
+          goto yy1417;
+        goto yy1572;
+      }
+    } else {
+      if (yych <= 'd') {
+        if (yych == 'a')
+          goto yy1574;
+        goto yy1417;
+      } else {
+        if (yych <= 'e')
+          goto yy1573;
+        if (yych == 'o')
+          goto yy1572;
+        goto yy1417;
+      }
+    }
+  yy1429:
+    yych = *++p;
+    switch (yych) {
+    case 'D':
+    case 'L':
+    case 'T':
+    case 'd':
+    case 'l':
+    case 't':
+      goto yy1455;
+    case 'E':
+    case 'e':
+      goto yy1564;
+    case 'I':
+    case 'i':
+      goto yy1563;
+    default:
+      goto yy1417;
+    }
+  yy1430:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych <= 'N') {
+        if (yych == 'I')
+          goto yy1539;
+        goto yy1417;
+      } else {
+        if (yych <= 'O')
+          goto yy1538;
+        if (yych <= 'Q')
+          goto yy1417;
+        goto yy1537;
+      }
+    } else {
+      if (yych <= 'n') {
+        if (yych == 'i')
+          goto yy1539;
+        goto yy1417;
+      } else {
+        if (yych <= 'o')
+          goto yy1538;
+        if (yych == 'r')
+          goto yy1537;
+        goto yy1417;
+      }
+    }
+  yy1431:
+    yych = *++p;
+    if (yych <= 'S') {
+      if (yych <= 'D') {
+        if (yych == '1')
+          goto yy1455;
+        goto yy1417;
+      } else {
+        if (yych <= 'E')
+          goto yy1532;
+        if (yych == 'R')
+          goto yy1455;
+        goto yy1417;
+      }
+    } else {
+      if (yych <= 'q') {
+        if (yych <= 'T')
+          goto yy1531;
+        if (yych == 'e')
+          goto yy1532;
+        goto yy1417;
+      } else {
+        if (yych <= 'r')
+          goto yy1455;
+        if (yych == 't')
+          goto yy1531;
+        goto yy1417;
+      }
+    }
+  yy1432:
+    yych = *++p;
+    if (yych <= 'I') {
+      if (yych == 'E')
+        goto yy1526;
+      if (yych <= 'H')
+        goto yy1417;
+      goto yy1525;
+    } else {
+      if (yych <= 'e') {
+        if (yych <= 'd')
+          goto yy1417;
+        goto yy1526;
+      } else {
+        if (yych == 'i')
+          goto yy1525;
+        goto yy1417;
+      }
+    }
+  yy1433:
+    yych = *++p;
+    if (yych <= 'E') {
+      if (yych == 'A')
+        goto yy1517;
+      if (yych <= 'D')
+        goto yy1417;
+      goto yy1516;
+    } else {
+      if (yych <= 'a') {
+        if (yych <= '`')
+          goto yy1417;
+        goto yy1517;
+      } else {
+        if (yych == 'e')
+          goto yy1516;
+        goto yy1417;
+      }
+    }
+  yy1434:
+    yych = *++p;
+    if (yych <= 'O') {
+      if (yych == 'A')
+        goto yy1510;
+      if (yych <= 'N')
+        goto yy1417;
+      goto yy1509;
+    } else {
+      if (yych <= 'a') {
+        if (yych <= '`')
+          goto yy1417;
+        goto yy1510;
+      } else {
+        if (yych == 'o')
+          goto yy1509;
+        goto yy1417;
+      }
+    }
+  yy1435:
+    yych = *++p;
+    if (yych <= 'P') {
+      if (yych == 'L')
+        goto yy1455;
+      if (yych <= 'O')
+        goto yy1417;
+      goto yy1501;
+    } else {
+      if (yych <= 'l') {
+        if (yych <= 'k')
+          goto yy1417;
+        goto yy1455;
+      } else {
+        if (yych == 'p')
+          goto yy1501;
+        goto yy1417;
+      }
+    }
+  yy1436:
+    yych = *++p;
+    if (yych <= 'U') {
+      if (yych <= 'E') {
+        if (yych == 'C')
+          goto yy1478;
+        if (yych <= 'D')
+          goto yy1417;
+        goto yy1481;
+      } else {
+        if (yych <= 'O') {
+          if (yych <= 'N')
+            goto yy1417;
+          goto yy1480;
+        } else {
+          if (yych <= 'S')
+            goto yy1417;
+          if (yych <= 'T')
+            goto yy1477;
+          goto yy1479;
+        }
+      }
+    } else {
+      if (yych <= 'n') {
+        if (yych <= 'c') {
+          if (yych <= 'b')
+            goto yy1417;
+          goto yy1478;
+        } else {
+          if (yych == 'e')
+            goto yy1481;
+          goto yy1417;
+        }
+      } else {
+        if (yych <= 's') {
+          if (yych <= 'o')
+            goto yy1480;
+          goto yy1417;
+        } else {
+          if (yych <= 't')
+            goto yy1477;
+          if (yych <= 'u')
+            goto yy1479;
+          goto yy1417;
+        }
+      }
+    }
+  yy1437:
+    yych = *++p;
+    switch (yych) {
+    case 'A':
+    case 'a':
+      goto yy1464;
+    case 'B':
+    case 'b':
+      goto yy1463;
+    case 'D':
+    case 'd':
+      goto yy1455;
+    case 'F':
+    case 'f':
+      goto yy1462;
+    case 'H':
+    case 'h':
+      goto yy1461;
+    case 'I':
+    case 'i':
+      goto yy1460;
+    case 'R':
+    case 'r':
+      goto yy1459;
+    default:
+      goto yy1417;
+    }
+  yy1438:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy1455;
+    if (yych == 'l')
+      goto yy1455;
+    goto yy1417;
+  yy1439:
+    yych = *++p;
+    if (yych <= '@') {
+      if (yych == '-')
+        goto yy1442;
+      goto yy1417;
+    } else {
+      if (yych <= 'Z')
+        goto yy1443;
+      if (yych <= '[')
+        goto yy1445;
+      goto yy1417;
+    }
+  yy1440:
+    ++p;
+    { return 3; }
+  yy1442:
+    yych = *++p;
+    if (yych == '-')
+      goto yy1453;
+    goto yy1417;
+  yy1443:
+    ++p;
+    { return 4; }
+  yy1445:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy1446;
+    if (yych != 'c')
+      goto yy1417;
+  yy1446:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy1447;
+    if (yych != 'd')
+      goto yy1417;
+  yy1447:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1448;
+    if (yych != 'a')
+      goto yy1417;
+  yy1448:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1449;
+    if (yych != 't')
+      goto yy1417;
+  yy1449:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1450;
+    if (yych != 'a')
+      goto yy1417;
+  yy1450:
+    yych = *++p;
+    if (yych != '[')
+      goto yy1417;
+    ++p;
+    { return 5; }
+  yy1453:
+    ++p;
+    { return 2; }
+  yy1455:
+    yych = *++p;
+    if (yych <= ' ') {
+      if (yych <= 0x08)
+        goto yy1417;
+      if (yych <= '\r')
+        goto yy1456;
+      if (yych <= 0x1F)
+        goto yy1417;
+    } else {
+      if (yych <= '/') {
+        if (yych <= '.')
+          goto yy1417;
+        goto yy1458;
+      } else {
+        if (yych != '>')
+          goto yy1417;
+      }
+    }
+  yy1456:
+    ++p;
+    { return 6; }
+  yy1458:
+    yych = *++p;
+    if (yych == '>')
+      goto yy1456;
+    goto yy1417;
+  yy1459:
+    yych = *++p;
+    if (yych <= '/') {
+      if (yych <= 0x1F) {
+        if (yych <= 0x08)
+          goto yy1417;
+        if (yych <= '\r')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= ' ')
+          goto yy1456;
+        if (yych <= '.')
+          goto yy1417;
+        goto yy1458;
+      }
+    } else {
+      if (yych <= '@') {
+        if (yych == '>')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= 'A')
+          goto yy1475;
+        if (yych == 'a')
+          goto yy1475;
+        goto yy1417;
+      }
+    }
+  yy1460:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1473;
+    if (yych == 't')
+      goto yy1473;
+    goto yy1417;
+  yy1461:
+    yych = *++p;
+    if (yych <= '/') {
+      if (yych <= 0x1F) {
+        if (yych <= 0x08)
+          goto yy1417;
+        if (yych <= '\r')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= ' ')
+          goto yy1456;
+        if (yych <= '.')
+          goto yy1417;
+        goto yy1458;
+      }
+    } else {
+      if (yych <= 'D') {
+        if (yych == '>')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= 'E')
+          goto yy1471;
+        if (yych == 'e')
+          goto yy1471;
+        goto yy1417;
+      }
+    }
+  yy1462:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1469;
+    if (yych == 'o')
+      goto yy1469;
+    goto yy1417;
+  yy1463:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1467;
+    if (yych == 'o')
+      goto yy1467;
+    goto yy1417;
+  yy1464:
+    yych = *++p;
+    if (yych == 'B')
+      goto yy1465;
+    if (yych != 'b')
+      goto yy1417;
+  yy1465:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy1466;
+    if (yych != 'l')
+      goto yy1417;
+  yy1466:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1455;
+    if (yych == 'e')
+      goto yy1455;
+    goto yy1417;
+  yy1467:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy1468;
+    if (yych != 'd')
+      goto yy1417;
+  yy1468:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy1455;
+    if (yych == 'y')
+      goto yy1455;
+    goto yy1417;
+  yy1469:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1470;
+    if (yych != 'o')
+      goto yy1417;
+  yy1470:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1455;
+    if (yych == 't')
+      goto yy1455;
+    goto yy1417;
+  yy1471:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1472;
+    if (yych != 'a')
+      goto yy1417;
+  yy1472:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy1455;
+    if (yych == 'd')
+      goto yy1455;
+    goto yy1417;
+  yy1473:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy1474;
+    if (yych != 'l')
+      goto yy1417;
+  yy1474:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1455;
+    if (yych == 'e')
+      goto yy1455;
+    goto yy1417;
+  yy1475:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy1476;
+    if (yych != 'c')
+      goto yy1417;
+  yy1476:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy1455;
+    if (yych == 'k')
+      goto yy1455;
+    goto yy1417;
+  yy1477:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy1499;
+    if (yych == 'y')
+      goto yy1499;
+    goto yy1417;
+  yy1478:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy1493;
+    if (yych == 'r')
+      goto yy1493;
+    goto yy1417;
+  yy1479:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy1489;
+    if (yych == 'm')
+      goto yy1489;
+    goto yy1417;
+  yy1480:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy1486;
+    if (yych == 'u')
+      goto yy1486;
+    goto yy1417;
+  yy1481:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy1482;
+    if (yych != 'c')
+      goto yy1417;
+  yy1482:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1483;
+    if (yych != 't')
+      goto yy1417;
+  yy1483:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy1484;
+    if (yych != 'i')
+      goto yy1417;
+  yy1484:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1485;
+    if (yych != 'o')
+      goto yy1417;
+  yy1485:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy1455;
+    if (yych == 'n')
+      goto yy1455;
+    goto yy1417;
+  yy1486:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy1487;
+    if (yych != 'r')
+      goto yy1417;
+  yy1487:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy1488;
+    if (yych != 'c')
+      goto yy1417;
+  yy1488:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1455;
+    if (yych == 'e')
+      goto yy1455;
+    goto yy1417;
+  yy1489:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy1490;
+    if (yych != 'm')
+      goto yy1417;
+  yy1490:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1491;
+    if (yych != 'a')
+      goto yy1417;
+  yy1491:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy1492;
+    if (yych != 'r')
+      goto yy1417;
+  yy1492:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy1455;
+    if (yych == 'y')
+      goto yy1455;
+    goto yy1417;
+  yy1493:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy1494;
+    if (yych != 'i')
+      goto yy1417;
+  yy1494:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy1495;
+    if (yych != 'p')
+      goto yy1417;
+  yy1495:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1496;
+    if (yych != 't')
+      goto yy1417;
+  yy1496:
+    yych = *++p;
+    if (yych <= 0x1F) {
+      if (yych <= 0x08)
+        goto yy1417;
+      if (yych >= 0x0E)
+        goto yy1417;
+    } else {
+      if (yych <= ' ')
+        goto yy1497;
+      if (yych != '>')
+        goto yy1417;
+    }
+  yy1497:
+    ++p;
+  yy1498 : { return 1; }
+  yy1499:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy1500;
+    if (yych != 'l')
+      goto yy1417;
+  yy1500:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1496;
+    if (yych == 'e')
+      goto yy1496;
+    goto yy1417;
+  yy1501:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1502;
+    if (yych != 't')
+      goto yy1417;
+  yy1502:
+    yych = *++p;
+    if (yych <= 'I') {
+      if (yych == 'G')
+        goto yy1504;
+      if (yych <= 'H')
+        goto yy1417;
+    } else {
+      if (yych <= 'g') {
+        if (yych <= 'f')
+          goto yy1417;
+        goto yy1504;
+      } else {
+        if (yych != 'i')
+          goto yy1417;
+      }
+    }
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1508;
+    if (yych == 'o')
+      goto yy1508;
+    goto yy1417;
+  yy1504:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy1505;
+    if (yych != 'r')
+      goto yy1417;
+  yy1505:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1506;
+    if (yych != 'o')
+      goto yy1417;
+  yy1506:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy1507;
+    if (yych != 'u')
+      goto yy1417;
+  yy1507:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy1455;
+    if (yych == 'p')
+      goto yy1455;
+    goto yy1417;
+  yy1508:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy1455;
+    if (yych == 'n')
+      goto yy1455;
+    goto yy1417;
+  yy1509:
+    yych = *++p;
+    if (yych == 'F')
+      goto yy1511;
+    if (yych == 'f')
+      goto yy1511;
+    goto yy1417;
+  yy1510:
+    yych = *++p;
+    if (yych == 'V')
+      goto yy1455;
+    if (yych == 'v')
+      goto yy1455;
+    goto yy1417;
+  yy1511:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy1512;
+    if (yych != 'r')
+      goto yy1417;
+  yy1512:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1513;
+    if (yych != 'a')
+      goto yy1417;
+  yy1513:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy1514;
+    if (yych != 'm')
+      goto yy1417;
+  yy1514:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1515;
+    if (yych != 'e')
+      goto yy1417;
+  yy1515:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy1455;
+    if (yych == 's')
+      goto yy1455;
+    goto yy1417;
+  yy1516:
+    yych = *++p;
+    if (yych <= 'T') {
+      if (yych == 'N')
+        goto yy1519;
+      if (yych <= 'S')
+        goto yy1417;
+      goto yy1520;
+    } else {
+      if (yych <= 'n') {
+        if (yych <= 'm')
+          goto yy1417;
+        goto yy1519;
+      } else {
+        if (yych == 't')
+          goto yy1520;
+        goto yy1417;
+      }
+    }
+  yy1517:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy1518;
+    if (yych != 'i')
+      goto yy1417;
+  yy1518:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy1455;
+    if (yych == 'n')
+      goto yy1455;
+    goto yy1417;
+  yy1519:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy1521;
+    if (yych == 'u')
+      goto yy1521;
+    goto yy1417;
+  yy1520:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1455;
+    if (yych == 'a')
+      goto yy1455;
+    goto yy1417;
+  yy1521:
+    yych = *++p;
+    if (yych <= '/') {
+      if (yych <= 0x1F) {
+        if (yych <= 0x08)
+          goto yy1417;
+        if (yych <= '\r')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= ' ')
+          goto yy1456;
+        if (yych <= '.')
+          goto yy1417;
+        goto yy1458;
+      }
+    } else {
+      if (yych <= 'H') {
+        if (yych == '>')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= 'I')
+          goto yy1522;
+        if (yych != 'i')
+          goto yy1417;
+      }
+    }
+  yy1522:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1523;
+    if (yych != 't')
+      goto yy1417;
+  yy1523:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1524;
+    if (yych != 'e')
+      goto yy1417;
+  yy1524:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy1455;
+    if (yych == 'm')
+      goto yy1455;
+    goto yy1417;
+  yy1525:
+    yych = *++p;
+    if (yych <= '/') {
+      if (yych <= 0x1F) {
+        if (yych <= 0x08)
+          goto yy1417;
+        if (yych <= '\r')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= ' ')
+          goto yy1456;
+        if (yych <= '.')
+          goto yy1417;
+        goto yy1458;
+      }
+    } else {
+      if (yych <= 'M') {
+        if (yych == '>')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= 'N')
+          goto yy1530;
+        if (yych == 'n')
+          goto yy1530;
+        goto yy1417;
+      }
+    }
+  yy1526:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy1527;
+    if (yych != 'g')
+      goto yy1417;
+  yy1527:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1528;
+    if (yych != 'e')
+      goto yy1417;
+  yy1528:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy1529;
+    if (yych != 'n')
+      goto yy1417;
+  yy1529:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy1455;
+    if (yych == 'd')
+      goto yy1455;
+    goto yy1417;
+  yy1530:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy1455;
+    if (yych == 'k')
+      goto yy1455;
+    goto yy1417;
+  yy1531:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy1536;
+    if (yych == 'm')
+      goto yy1536;
+    goto yy1417;
+  yy1532:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1533;
+    if (yych != 'a')
+      goto yy1417;
+  yy1533:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy1534;
+    if (yych != 'd')
+      goto yy1417;
+  yy1534:
+    yych = *++p;
+    if (yych <= '/') {
+      if (yych <= 0x1F) {
+        if (yych <= 0x08)
+          goto yy1417;
+        if (yych <= '\r')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= ' ')
+          goto yy1456;
+        if (yych <= '.')
+          goto yy1417;
+        goto yy1458;
+      }
+    } else {
+      if (yych <= 'D') {
+        if (yych == '>')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= 'E')
+          goto yy1535;
+        if (yych != 'e')
+          goto yy1417;
+      }
+    }
+  yy1535:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy1455;
+    if (yych == 'r')
+      goto yy1455;
+    goto yy1417;
+  yy1536:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy1455;
+    if (yych == 'l')
+      goto yy1455;
+    goto yy1417;
+  yy1537:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1558;
+    if (yych == 'a')
+      goto yy1558;
+    goto yy1417;
+  yy1538:
+    yych = *++p;
+    if (yych <= 'R') {
+      if (yych == 'O')
+        goto yy1554;
+      if (yych <= 'Q')
+        goto yy1417;
+      goto yy1555;
+    } else {
+      if (yych <= 'o') {
+        if (yych <= 'n')
+          goto yy1417;
+        goto yy1554;
+      } else {
+        if (yych == 'r')
+          goto yy1555;
+        goto yy1417;
+      }
+    }
+  yy1539:
+    yych = *++p;
+    if (yych <= 'G') {
+      if (yych == 'E')
+        goto yy1540;
+      if (yych <= 'F')
+        goto yy1417;
+      goto yy1541;
+    } else {
+      if (yych <= 'e') {
+        if (yych <= 'd')
+          goto yy1417;
+      } else {
+        if (yych == 'g')
+          goto yy1541;
+        goto yy1417;
+      }
+    }
+  yy1540:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy1550;
+    if (yych == 'l')
+      goto yy1550;
+    goto yy1417;
+  yy1541:
+    yych = *++p;
+    if (yych <= 'U') {
+      if (yych == 'C')
+        goto yy1543;
+      if (yych <= 'T')
+        goto yy1417;
+    } else {
+      if (yych <= 'c') {
+        if (yych <= 'b')
+          goto yy1417;
+        goto yy1543;
+      } else {
+        if (yych != 'u')
+          goto yy1417;
+      }
+    }
+    yych = *++p;
+    if (yych == 'R')
+      goto yy1549;
+    if (yych == 'r')
+      goto yy1549;
+    goto yy1417;
+  yy1543:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1544;
+    if (yych != 'a')
+      goto yy1417;
+  yy1544:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy1545;
+    if (yych != 'p')
+      goto yy1417;
+  yy1545:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1546;
+    if (yych != 't')
+      goto yy1417;
+  yy1546:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy1547;
+    if (yych != 'i')
+      goto yy1417;
+  yy1547:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1548;
+    if (yych != 'o')
+      goto yy1417;
+  yy1548:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy1455;
+    if (yych == 'n')
+      goto yy1455;
+    goto yy1417;
+  yy1549:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1455;
+    if (yych == 'e')
+      goto yy1455;
+    goto yy1417;
+  yy1550:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy1551;
+    if (yych != 'd')
+      goto yy1417;
+  yy1551:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy1552;
+    if (yych != 's')
+      goto yy1417;
+  yy1552:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1553;
+    if (yych != 'e')
+      goto yy1417;
+  yy1553:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1455;
+    if (yych == 't')
+      goto yy1455;
+    goto yy1417;
+  yy1554:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1556;
+    if (yych == 't')
+      goto yy1556;
+    goto yy1417;
+  yy1555:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy1455;
+    if (yych == 'm')
+      goto yy1455;
+    goto yy1417;
+  yy1556:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1557;
+    if (yych != 'e')
+      goto yy1417;
+  yy1557:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy1455;
+    if (yych == 'r')
+      goto yy1455;
+    goto yy1417;
+  yy1558:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy1559;
+    if (yych != 'm')
+      goto yy1417;
+  yy1559:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1560;
+    if (yych != 'e')
+      goto yy1417;
+  yy1560:
+    yych = *++p;
+    if (yych <= '/') {
+      if (yych <= 0x1F) {
+        if (yych <= 0x08)
+          goto yy1417;
+        if (yych <= '\r')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= ' ')
+          goto yy1456;
+        if (yych <= '.')
+          goto yy1417;
+        goto yy1458;
+      }
+    } else {
+      if (yych <= 'R') {
+        if (yych == '>')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= 'S')
+          goto yy1561;
+        if (yych != 's')
+          goto yy1417;
+      }
+    }
+  yy1561:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1562;
+    if (yych != 'e')
+      goto yy1417;
+  yy1562:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1455;
+    if (yych == 't')
+      goto yy1455;
+    goto yy1417;
+  yy1563:
+    yych = *++p;
+    if (yych <= 'V') {
+      if (yych <= 'Q') {
+        if (yych == 'A')
+          goto yy1569;
+        goto yy1417;
+      } else {
+        if (yych <= 'R')
+          goto yy1455;
+        if (yych <= 'U')
+          goto yy1417;
+        goto yy1455;
+      }
+    } else {
+      if (yych <= 'q') {
+        if (yych == 'a')
+          goto yy1569;
+        goto yy1417;
+      } else {
+        if (yych <= 'r')
+          goto yy1455;
+        if (yych == 'v')
+          goto yy1455;
+        goto yy1417;
+      }
+    }
+  yy1564:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1565;
+    if (yych != 't')
+      goto yy1417;
+  yy1565:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1566;
+    if (yych != 'a')
+      goto yy1417;
+  yy1566:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy1567;
+    if (yych != 'i')
+      goto yy1417;
+  yy1567:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy1568;
+    if (yych != 'l')
+      goto yy1417;
+  yy1568:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy1455;
+    if (yych == 's')
+      goto yy1455;
+    goto yy1417;
+  yy1569:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy1570;
+    if (yych != 'l')
+      goto yy1417;
+  yy1570:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1571;
+    if (yych != 'o')
+      goto yy1417;
+  yy1571:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy1455;
+    if (yych == 'g')
+      goto yy1455;
+    goto yy1417;
+  yy1572:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy1582;
+    if (yych == 'l')
+      goto yy1582;
+    goto yy1417;
+  yy1573:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy1579;
+    if (yych == 'n')
+      goto yy1579;
+    goto yy1417;
+  yy1574:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy1575;
+    if (yych != 'p')
+      goto yy1417;
+  yy1575:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1576;
+    if (yych != 't')
+      goto yy1417;
+  yy1576:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy1577;
+    if (yych != 'i')
+      goto yy1417;
+  yy1577:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1578;
+    if (yych != 'o')
+      goto yy1417;
+  yy1578:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy1455;
+    if (yych == 'n')
+      goto yy1455;
+    goto yy1417;
+  yy1579:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1580;
+    if (yych != 't')
+      goto yy1417;
+  yy1580:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1581;
+    if (yych != 'e')
+      goto yy1417;
+  yy1581:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy1455;
+    if (yych == 'r')
+      goto yy1455;
+    goto yy1417;
+  yy1582:
+    yych = *++p;
+    if (yych <= '/') {
+      if (yych <= 0x1F) {
+        if (yych <= 0x08)
+          goto yy1417;
+        if (yych <= '\r')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= ' ')
+          goto yy1456;
+        if (yych <= '.')
+          goto yy1417;
+        goto yy1458;
+      }
+    } else {
+      if (yych <= 'F') {
+        if (yych == '>')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= 'G')
+          goto yy1583;
+        if (yych != 'g')
+          goto yy1417;
+      }
+    }
+  yy1583:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy1584;
+    if (yych != 'r')
+      goto yy1417;
+  yy1584:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1585;
+    if (yych != 'o')
+      goto yy1417;
+  yy1585:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy1586;
+    if (yych != 'u')
+      goto yy1417;
+  yy1586:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy1455;
+    if (yych == 'p')
+      goto yy1455;
+    goto yy1417;
+  yy1587:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy1602;
+    if (yych == 'd')
+      goto yy1602;
+    goto yy1417;
+  yy1588:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1595;
+    if (yych == 'o')
+      goto yy1595;
+    goto yy1417;
+  yy1589:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy1590;
+    if (yych != 's')
+      goto yy1417;
+  yy1590:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1591;
+    if (yych != 'e')
+      goto yy1417;
+  yy1591:
+    yych = *++p;
+    if (yych <= '/') {
+      if (yych <= 0x1F) {
+        if (yych <= 0x08)
+          goto yy1417;
+        if (yych <= '\r')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= ' ')
+          goto yy1456;
+        if (yych <= '.')
+          goto yy1417;
+        goto yy1458;
+      }
+    } else {
+      if (yych <= 'E') {
+        if (yych == '>')
+          goto yy1456;
+        goto yy1417;
+      } else {
+        if (yych <= 'F')
+          goto yy1592;
+        if (yych != 'f')
+          goto yy1417;
+      }
+    }
+  yy1592:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1593;
+    if (yych != 'o')
+      goto yy1417;
+  yy1593:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy1594;
+    if (yych != 'n')
+      goto yy1417;
+  yy1594:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1455;
+    if (yych == 't')
+      goto yy1455;
+    goto yy1417;
+  yy1595:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy1596;
+    if (yych != 'c')
+      goto yy1417;
+  yy1596:
+    yych = *++p;
+    if (yych == 'K')
+      goto yy1597;
+    if (yych != 'k')
+      goto yy1417;
+  yy1597:
+    yych = *++p;
+    if (yych == 'Q')
+      goto yy1598;
+    if (yych != 'q')
+      goto yy1417;
+  yy1598:
+    yych = *++p;
+    if (yych == 'U')
+      goto yy1599;
+    if (yych != 'u')
+      goto yy1417;
+  yy1599:
+    yych = *++p;
+    if (yych == 'O')
+      goto yy1600;
+    if (yych != 'o')
+      goto yy1417;
+  yy1600:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1601;
+    if (yych != 't')
+      goto yy1417;
+  yy1601:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1455;
+    if (yych == 'e')
+      goto yy1455;
+    goto yy1417;
+  yy1602:
+    yych = *++p;
+    if (yych == 'Y')
+      goto yy1455;
+    if (yych == 'y')
+      goto yy1455;
+    goto yy1417;
+  yy1603:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy1614;
+    if (yych == 'i')
+      goto yy1614;
+    goto yy1417;
+  yy1604:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy1610;
+    if (yych == 't')
+      goto yy1610;
+    goto yy1417;
+  yy1605:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy1606;
+    if (yych != 'd')
+      goto yy1417;
+  yy1606:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy1607;
+    if (yych != 'r')
+      goto yy1417;
+  yy1607:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1608;
+    if (yych != 'e')
+      goto yy1417;
+  yy1608:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy1609;
+    if (yych != 's')
+      goto yy1417;
+  yy1609:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy1455;
+    if (yych == 's')
+      goto yy1455;
+    goto yy1417;
+  yy1610:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy1611;
+    if (yych != 'i')
+      goto yy1417;
+  yy1611:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy1612;
+    if (yych != 'c')
+      goto yy1417;
+  yy1612:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy1613;
+    if (yych != 'l')
+      goto yy1417;
+  yy1613:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1455;
+    if (yych == 'e')
+      goto yy1455;
+    goto yy1417;
+  yy1614:
+    yych = *++p;
+    if (yych == 'D')
+      goto yy1615;
+    if (yych != 'd')
+      goto yy1417;
+  yy1615:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1455;
+    if (yych == 'e')
+      goto yy1455;
+    goto yy1417;
+  yy1616:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy1620;
+    if (yych == 'e')
+      goto yy1620;
+    goto yy1417;
+  yy1617:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy1618;
+    if (yych != 'r')
+      goto yy1417;
+  yy1618:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy1619;
+    if (yych != 'a')
+      goto yy1417;
+  yy1619:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy1455;
+    if (yych == 'm')
+      goto yy1455;
+    goto yy1417;
+  yy1620:
+    yych = *++p;
+    if (yych <= ' ') {
+      if (yych <= 0x08)
+        goto yy1417;
+      if (yych <= '\r')
+        goto yy1621;
+      if (yych <= 0x1F)
+        goto yy1417;
+    } else {
+      if (yych <= '/') {
+        if (yych <= '.')
+          goto yy1417;
+        goto yy1458;
+      } else {
+        if (yych != '>')
+          goto yy1417;
+      }
+    }
+  yy1621:
+    yych = *++p;
+    goto yy1498;
+  yy1622:
+    yych = *++p;
+    if (yych <= '>') {
+      if (yych <= ' ') {
+        if (yych <= 0x08)
+          goto yy1417;
+        if (yych <= '\r')
+          goto yy1456;
+        if (yych <= 0x1F)
+          goto yy1417;
+        goto yy1456;
+      } else {
+        if (yych == '/')
+          goto yy1458;
+        if (yych <= '=')
+          goto yy1417;
+        goto yy1456;
+      }
+    } else {
+      if (yych <= 'R') {
+        if (yych == 'A')
+          goto yy1617;
+        if (yych <= 'Q')
+          goto yy1417;
+        goto yy1624;
+      } else {
+        if (yych <= 'a') {
+          if (yych <= '`')
+            goto yy1417;
+          goto yy1617;
+        } else {
+          if (yych == 'r')
+            goto yy1624;
+          goto yy1417;
+        }
+      }
+    }
+  yy1623:
+    yych = *++p;
+    if (yych <= 'U') {
+      if (yych <= 'N') {
+        if (yych == 'E')
+          goto yy1481;
+        goto yy1417;
+      } else {
+        if (yych <= 'O')
+          goto yy1480;
+        if (yych <= 'T')
+          goto yy1417;
+        goto yy1479;
+      }
+    } else {
+      if (yych <= 'n') {
+        if (yych == 'e')
+          goto yy1481;
+        goto yy1417;
+      } else {
+        if (yych <= 'o')
+          goto yy1480;
+        if (yych == 'u')
+          goto yy1479;
+        goto yy1417;
+      }
+    }
+  yy1624:
+    ++p;
+    if ((yych = *p) == 'E')
+      goto yy1455;
+    if (yych == 'e')
+      goto yy1455;
+    goto yy1417;
+  }
 }
 
 // Try to match an HTML block tag start line of type 7, returning
 // 7 if successful, 0 if not.
-bufsize_t _scan_html_block_start_7(const unsigned char *p)
-{
+bufsize_t _scan_html_block_start_7(const unsigned char *p) {
   const unsigned char *marker = NULL;
 
-{
-	unsigned char yych;
-	unsigned int yyaccept = 0;
-	static const unsigned char yybm[] = {
-		  0, 224, 224, 224, 224, 224, 224, 224, 
-		224, 198, 202, 194, 198, 194, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		198, 224,  64, 224, 224, 224, 224, 128, 
-		224, 224, 224, 224, 224, 241, 240, 224, 
-		241, 241, 241, 241, 241, 241, 241, 241, 
-		241, 241, 240, 224, 192, 192, 192, 224, 
-		224, 241, 241, 241, 241, 241, 241, 241, 
-		241, 241, 241, 241, 241, 241, 241, 241, 
-		241, 241, 241, 241, 241, 241, 241, 241, 
-		241, 241, 241, 224, 224, 224, 224, 240, 
-		192, 241, 241, 241, 241, 241, 241, 241, 
-		241, 241, 241, 241, 241, 241, 241, 241, 
-		241, 241, 241, 241, 241, 241, 241, 241, 
-		241, 241, 241, 224, 224, 224, 224, 224, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0xDF) {
-		if (yych <= ';') {
-			if (yych != '\n') goto yy1629;
-		} else {
-			if (yych <= '<') goto yy1628;
-			if (yych <= 0x7F) goto yy1629;
-			if (yych >= 0xC2) goto yy1630;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1632;
-			if (yych == 0xED) goto yy1637;
-			goto yy1633;
-		} else {
-			if (yych <= 0xF0) goto yy1634;
-			if (yych <= 0xF3) goto yy1635;
-			if (yych <= 0xF4) goto yy1636;
-		}
-	}
-yy1627:
-	{ return 0; }
-yy1628:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych <= '@') {
-		if (yych == '/') goto yy1640;
-		goto yy1627;
-	} else {
-		if (yych <= 'Z') goto yy1638;
-		if (yych <= '`') goto yy1627;
-		if (yych <= 'z') goto yy1638;
-		goto yy1627;
-	}
-yy1629:
-	yych = *++p;
-	goto yy1627;
-yy1630:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0xBF) goto yy1629;
-yy1631:
-	p = marker;
-	if (yyaccept == 0) {
-		goto yy1627;
-	} else {
-		goto yy1649;
-	}
-yy1632:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy1631;
-	if (yych <= 0xBF) goto yy1630;
-	goto yy1631;
-yy1633:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0xBF) goto yy1630;
-	goto yy1631;
-yy1634:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy1631;
-	if (yych <= 0xBF) goto yy1633;
-	goto yy1631;
-yy1635:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0xBF) goto yy1633;
-	goto yy1631;
-yy1636:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0x8F) goto yy1633;
-	goto yy1631;
-yy1637:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0x9F) goto yy1630;
-	goto yy1631;
-yy1638:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 1) {
-		goto yy1638;
-	}
-	if (yych <= ' ') {
-		if (yych <= 0x08) goto yy1631;
-		if (yych <= '\r') goto yy1651;
-		if (yych <= 0x1F) goto yy1631;
-		goto yy1651;
-	} else {
-		if (yych <= '/') {
-			if (yych <= '.') goto yy1631;
-			goto yy1653;
-		} else {
-			if (yych == '>') goto yy1645;
-			goto yy1631;
-		}
-	}
-yy1640:
-	yych = *++p;
-	if (yych <= '@') goto yy1631;
-	if (yych <= 'Z') goto yy1641;
-	if (yych <= '`') goto yy1631;
-	if (yych >= '{') goto yy1631;
-yy1641:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 2) {
-		goto yy1643;
-	}
-	if (yych <= '=') {
-		if (yych <= '-') {
-			if (yych <= ',') goto yy1631;
-			goto yy1641;
-		} else {
-			if (yych <= '/') goto yy1631;
-			if (yych <= '9') goto yy1641;
-			goto yy1631;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '>') goto yy1645;
-			if (yych <= '@') goto yy1631;
-			goto yy1641;
-		} else {
-			if (yych <= '`') goto yy1631;
-			if (yych <= 'z') goto yy1641;
-			goto yy1631;
-		}
-	}
-yy1643:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 2) {
-		goto yy1643;
-	}
-	if (yych != '>') goto yy1631;
-yy1645:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 4) {
-		goto yy1645;
-	}
-	if (yych <= 0x08) goto yy1631;
-	if (yych <= '\n') goto yy1647;
-	if (yych <= '\v') goto yy1631;
-	if (yych <= '\r') goto yy1650;
-	goto yy1631;
-yy1647:
-	yyaccept = 1;
-	marker = ++p;
-	yych = *p;
-	if (yybm[0+yych] & 4) {
-		goto yy1645;
-	}
-	if (yych <= 0x08) goto yy1649;
-	if (yych <= '\n') goto yy1647;
-	if (yych <= '\v') goto yy1649;
-	if (yych <= '\r') goto yy1650;
-yy1649:
-	{ return 7; }
-yy1650:
-	yych = *++p;
-	goto yy1649;
-yy1651:
-	++p;
-	yych = *p;
-	if (yych <= ':') {
-		if (yych <= ' ') {
-			if (yych <= 0x08) goto yy1631;
-			if (yych <= '\r') goto yy1651;
-			if (yych <= 0x1F) goto yy1631;
-			goto yy1651;
-		} else {
-			if (yych == '/') goto yy1653;
-			if (yych <= '9') goto yy1631;
-			goto yy1654;
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych == '>') goto yy1645;
-			if (yych <= '@') goto yy1631;
-			goto yy1654;
-		} else {
-			if (yych <= '_') {
-				if (yych <= '^') goto yy1631;
-				goto yy1654;
-			} else {
-				if (yych <= '`') goto yy1631;
-				if (yych <= 'z') goto yy1654;
-				goto yy1631;
-			}
-		}
-	}
-yy1653:
-	yych = *++p;
-	if (yych == '>') goto yy1645;
-	goto yy1631;
-yy1654:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 16) {
-		goto yy1654;
-	}
-	if (yych <= ',') {
-		if (yych <= '\r') {
-			if (yych <= 0x08) goto yy1631;
-		} else {
-			if (yych != ' ') goto yy1631;
-		}
-	} else {
-		if (yych <= '<') {
-			if (yych <= '/') goto yy1653;
-			goto yy1631;
-		} else {
-			if (yych <= '=') goto yy1658;
-			if (yych <= '>') goto yy1645;
-			goto yy1631;
-		}
-	}
-yy1656:
-	++p;
-	yych = *p;
-	if (yych <= '<') {
-		if (yych <= ' ') {
-			if (yych <= 0x08) goto yy1631;
-			if (yych <= '\r') goto yy1656;
-			if (yych <= 0x1F) goto yy1631;
-			goto yy1656;
-		} else {
-			if (yych <= '/') {
-				if (yych <= '.') goto yy1631;
-				goto yy1653;
-			} else {
-				if (yych == ':') goto yy1654;
-				goto yy1631;
-			}
-		}
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '=') goto yy1658;
-			if (yych <= '>') goto yy1645;
-			if (yych <= '@') goto yy1631;
-			goto yy1654;
-		} else {
-			if (yych <= '_') {
-				if (yych <= '^') goto yy1631;
-				goto yy1654;
-			} else {
-				if (yych <= '`') goto yy1631;
-				if (yych <= 'z') goto yy1654;
-				goto yy1631;
-			}
-		}
-	}
-yy1658:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy1660;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '"') {
-			if (yych <= 0x00) goto yy1631;
-			if (yych >= '!') goto yy1671;
-		} else {
-			if (yych <= '\'') goto yy1669;
-			if (yych <= 0xC1) goto yy1631;
-			if (yych <= 0xDF) goto yy1662;
-			goto yy1663;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1668;
-			goto yy1664;
-		} else {
-			if (yych <= 0xF0) goto yy1665;
-			if (yych <= 0xF3) goto yy1666;
-			if (yych <= 0xF4) goto yy1667;
-			goto yy1631;
-		}
-	}
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy1660;
-	}
-	if (yych <= 0xDF) {
-		if (yych <= '\'') {
-			if (yych <= 0x00) goto yy1631;
-			if (yych <= ' ') goto yy1694;
-			if (yych <= '"') goto yy1671;
-			goto yy1669;
-		} else {
-			if (yych == '>') goto yy1645;
-			if (yych <= 0xC1) goto yy1631;
-			goto yy1662;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1663;
-			if (yych == 0xED) goto yy1668;
-			goto yy1664;
-		} else {
-			if (yych <= 0xF0) goto yy1665;
-			if (yych <= 0xF3) goto yy1666;
-			if (yych <= 0xF4) goto yy1667;
-			goto yy1631;
-		}
-	}
-yy1660:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy1660;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '=') {
-			if (yych <= 0x00) goto yy1631;
-			if (yych <= ' ') goto yy1688;
-			goto yy1631;
-		} else {
-			if (yych <= '>') goto yy1645;
-			if (yych <= 0xC1) goto yy1631;
-			if (yych >= 0xE0) goto yy1663;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1668;
-			goto yy1664;
-		} else {
-			if (yych <= 0xF0) goto yy1665;
-			if (yych <= 0xF3) goto yy1666;
-			if (yych <= 0xF4) goto yy1667;
-			goto yy1631;
-		}
-	}
-yy1662:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0xBF) goto yy1660;
-	goto yy1631;
-yy1663:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1631;
-	if (yych <= 0xBF) goto yy1662;
-	goto yy1631;
-yy1664:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0xBF) goto yy1662;
-	goto yy1631;
-yy1665:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1631;
-	if (yych <= 0xBF) goto yy1664;
-	goto yy1631;
-yy1666:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0xBF) goto yy1664;
-	goto yy1631;
-yy1667:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0x8F) goto yy1664;
-	goto yy1631;
-yy1668:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0x9F) goto yy1662;
-	goto yy1631;
-yy1669:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1669;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x00) goto yy1631;
-			if (yych <= '\'') goto yy1680;
-			goto yy1631;
-		} else {
-			if (yych <= 0xDF) goto yy1681;
-			if (yych <= 0xE0) goto yy1682;
-			goto yy1683;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1687;
-			if (yych <= 0xEF) goto yy1683;
-			goto yy1684;
-		} else {
-			if (yych <= 0xF3) goto yy1685;
-			if (yych <= 0xF4) goto yy1686;
-			goto yy1631;
-		}
-	}
-yy1671:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy1671;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x00) goto yy1631;
-			if (yych <= '"') goto yy1680;
-			goto yy1631;
-		} else {
-			if (yych <= 0xDF) goto yy1673;
-			if (yych <= 0xE0) goto yy1674;
-			goto yy1675;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1679;
-			if (yych <= 0xEF) goto yy1675;
-			goto yy1676;
-		} else {
-			if (yych <= 0xF3) goto yy1677;
-			if (yych <= 0xF4) goto yy1678;
-			goto yy1631;
-		}
-	}
-yy1673:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0xBF) goto yy1671;
-	goto yy1631;
-yy1674:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1631;
-	if (yych <= 0xBF) goto yy1673;
-	goto yy1631;
-yy1675:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0xBF) goto yy1673;
-	goto yy1631;
-yy1676:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1631;
-	if (yych <= 0xBF) goto yy1675;
-	goto yy1631;
-yy1677:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0xBF) goto yy1675;
-	goto yy1631;
-yy1678:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0x8F) goto yy1675;
-	goto yy1631;
-yy1679:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0x9F) goto yy1673;
-	goto yy1631;
-yy1680:
-	++p;
-	yych = *p;
-	if (yych <= ' ') {
-		if (yych <= 0x08) goto yy1631;
-		if (yych <= '\r') goto yy1651;
-		if (yych <= 0x1F) goto yy1631;
-		goto yy1651;
-	} else {
-		if (yych <= '/') {
-			if (yych <= '.') goto yy1631;
-			goto yy1653;
-		} else {
-			if (yych == '>') goto yy1645;
-			goto yy1631;
-		}
-	}
-yy1681:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0xBF) goto yy1669;
-	goto yy1631;
-yy1682:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1631;
-	if (yych <= 0xBF) goto yy1681;
-	goto yy1631;
-yy1683:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0xBF) goto yy1681;
-	goto yy1631;
-yy1684:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1631;
-	if (yych <= 0xBF) goto yy1683;
-	goto yy1631;
-yy1685:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0xBF) goto yy1683;
-	goto yy1631;
-yy1686:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0x8F) goto yy1683;
-	goto yy1631;
-yy1687:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1631;
-	if (yych <= 0x9F) goto yy1681;
-	goto yy1631;
-yy1688:
-	++p;
-	yych = *p;
-	if (yych <= '@') {
-		if (yych <= '"') {
-			if (yych <= '\r') {
-				if (yych <= 0x00) goto yy1631;
-				if (yych <= 0x08) goto yy1660;
-				goto yy1688;
-			} else {
-				if (yych == ' ') goto yy1688;
-				if (yych <= '!') goto yy1660;
-				goto yy1631;
-			}
-		} else {
-			if (yych <= ':') {
-				if (yych == '\'') goto yy1631;
-				if (yych <= '9') goto yy1660;
-			} else {
-				if (yych <= ';') goto yy1660;
-				if (yych <= '=') goto yy1631;
-				if (yych <= '>') goto yy1645;
-				goto yy1660;
-			}
-		}
-	} else {
-		if (yych <= 0xDF) {
-			if (yych <= '`') {
-				if (yych <= 'Z') goto yy1690;
-				if (yych <= '^') goto yy1660;
-				if (yych >= '`') goto yy1631;
-			} else {
-				if (yych <= 'z') goto yy1690;
-				if (yych <= 0x7F) goto yy1660;
-				if (yych <= 0xC1) goto yy1631;
-				goto yy1662;
-			}
-		} else {
-			if (yych <= 0xEF) {
-				if (yych <= 0xE0) goto yy1663;
-				if (yych == 0xED) goto yy1668;
-				goto yy1664;
-			} else {
-				if (yych <= 0xF0) goto yy1665;
-				if (yych <= 0xF3) goto yy1666;
-				if (yych <= 0xF4) goto yy1667;
-				goto yy1631;
-			}
-		}
-	}
-yy1690:
-	++p;
-	yych = *p;
-	if (yych <= '>') {
-		if (yych <= '&') {
-			if (yych <= 0x1F) {
-				if (yych <= 0x00) goto yy1631;
-				if (yych <= 0x08) goto yy1660;
-				if (yych >= 0x0E) goto yy1660;
-			} else {
-				if (yych <= ' ') goto yy1692;
-				if (yych == '"') goto yy1631;
-				goto yy1660;
-			}
-		} else {
-			if (yych <= '/') {
-				if (yych <= '\'') goto yy1631;
-				if (yych <= ',') goto yy1660;
-				if (yych <= '.') goto yy1690;
-				goto yy1660;
-			} else {
-				if (yych <= ';') {
-					if (yych <= ':') goto yy1690;
-					goto yy1660;
-				} else {
-					if (yych <= '<') goto yy1631;
-					if (yych <= '=') goto yy1658;
-					goto yy1645;
-				}
-			}
-		}
-	} else {
-		if (yych <= 0xC1) {
-			if (yych <= '_') {
-				if (yych <= '@') goto yy1660;
-				if (yych <= 'Z') goto yy1690;
-				if (yych <= '^') goto yy1660;
-				goto yy1690;
-			} else {
-				if (yych <= '`') goto yy1631;
-				if (yych <= 'z') goto yy1690;
-				if (yych <= 0x7F) goto yy1660;
-				goto yy1631;
-			}
-		} else {
-			if (yych <= 0xED) {
-				if (yych <= 0xDF) goto yy1662;
-				if (yych <= 0xE0) goto yy1663;
-				if (yych <= 0xEC) goto yy1664;
-				goto yy1668;
-			} else {
-				if (yych <= 0xF0) {
-					if (yych <= 0xEF) goto yy1664;
-					goto yy1665;
-				} else {
-					if (yych <= 0xF3) goto yy1666;
-					if (yych <= 0xF4) goto yy1667;
-					goto yy1631;
-				}
-			}
-		}
-	}
-yy1692:
-	++p;
-	yych = *p;
-	if (yych <= '@') {
-		if (yych <= '&') {
-			if (yych <= 0x1F) {
-				if (yych <= 0x00) goto yy1631;
-				if (yych <= 0x08) goto yy1660;
-				if (yych <= '\r') goto yy1692;
-				goto yy1660;
-			} else {
-				if (yych <= ' ') goto yy1692;
-				if (yych == '"') goto yy1631;
-				goto yy1660;
-			}
-		} else {
-			if (yych <= ';') {
-				if (yych <= '\'') goto yy1631;
-				if (yych == ':') goto yy1690;
-				goto yy1660;
-			} else {
-				if (yych <= '<') goto yy1631;
-				if (yych <= '=') goto yy1658;
-				if (yych <= '>') goto yy1645;
-				goto yy1660;
-			}
-		}
-	} else {
-		if (yych <= 0xDF) {
-			if (yych <= '`') {
-				if (yych <= 'Z') goto yy1690;
-				if (yych <= '^') goto yy1660;
-				if (yych <= '_') goto yy1690;
-				goto yy1631;
-			} else {
-				if (yych <= 'z') goto yy1690;
-				if (yych <= 0x7F) goto yy1660;
-				if (yych <= 0xC1) goto yy1631;
-				goto yy1662;
-			}
-		} else {
-			if (yych <= 0xEF) {
-				if (yych <= 0xE0) goto yy1663;
-				if (yych == 0xED) goto yy1668;
-				goto yy1664;
-			} else {
-				if (yych <= 0xF0) goto yy1665;
-				if (yych <= 0xF3) goto yy1666;
-				if (yych <= 0xF4) goto yy1667;
-				goto yy1631;
-			}
-		}
-	}
-yy1694:
-	++p;
-	yych = *p;
-	if (yych <= '@') {
-		if (yych <= '"') {
-			if (yych <= '\r') {
-				if (yych <= 0x00) goto yy1631;
-				if (yych <= 0x08) goto yy1660;
-				goto yy1694;
-			} else {
-				if (yych == ' ') goto yy1694;
-				if (yych <= '!') goto yy1660;
-				goto yy1671;
-			}
-		} else {
-			if (yych <= ':') {
-				if (yych == '\'') goto yy1669;
-				if (yych <= '9') goto yy1660;
-				goto yy1690;
-			} else {
-				if (yych <= ';') goto yy1660;
-				if (yych <= '=') goto yy1631;
-				if (yych <= '>') goto yy1645;
-				goto yy1660;
-			}
-		}
-	} else {
-		if (yych <= 0xDF) {
-			if (yych <= '`') {
-				if (yych <= 'Z') goto yy1690;
-				if (yych <= '^') goto yy1660;
-				if (yych <= '_') goto yy1690;
-				goto yy1631;
-			} else {
-				if (yych <= 'z') goto yy1690;
-				if (yych <= 0x7F) goto yy1660;
-				if (yych <= 0xC1) goto yy1631;
-				goto yy1662;
-			}
-		} else {
-			if (yych <= 0xEF) {
-				if (yych <= 0xE0) goto yy1663;
-				if (yych == 0xED) goto yy1668;
-				goto yy1664;
-			} else {
-				if (yych <= 0xF0) goto yy1665;
-				if (yych <= 0xF3) goto yy1666;
-				if (yych <= 0xF4) goto yy1667;
-				goto yy1631;
-			}
-		}
-	}
-}
-
+  {
+    unsigned char yych;
+    unsigned int yyaccept = 0;
+    static const unsigned char yybm[] = {
+        0,   224, 224, 224, 224, 224, 224, 224, 224, 198, 202, 194, 198, 194,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 198, 224, 64,  224, 224, 224, 224, 128, 224, 224,
+        224, 224, 224, 241, 240, 224, 241, 241, 241, 241, 241, 241, 241, 241,
+        241, 241, 240, 224, 192, 192, 192, 224, 224, 241, 241, 241, 241, 241,
+        241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+        241, 241, 241, 241, 241, 241, 241, 224, 224, 224, 224, 240, 192, 241,
+        241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+        241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 224, 224, 224,
+        224, 224, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0xDF) {
+      if (yych <= ';') {
+        if (yych != '\n')
+          goto yy1629;
+      } else {
+        if (yych <= '<')
+          goto yy1628;
+        if (yych <= 0x7F)
+          goto yy1629;
+        if (yych >= 0xC2)
+          goto yy1630;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1632;
+        if (yych == 0xED)
+          goto yy1637;
+        goto yy1633;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1634;
+        if (yych <= 0xF3)
+          goto yy1635;
+        if (yych <= 0xF4)
+          goto yy1636;
+      }
+    }
+  yy1627 : { return 0; }
+  yy1628:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych <= '@') {
+      if (yych == '/')
+        goto yy1640;
+      goto yy1627;
+    } else {
+      if (yych <= 'Z')
+        goto yy1638;
+      if (yych <= '`')
+        goto yy1627;
+      if (yych <= 'z')
+        goto yy1638;
+      goto yy1627;
+    }
+  yy1629:
+    yych = *++p;
+    goto yy1627;
+  yy1630:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1629;
+  yy1631:
+    p = marker;
+    if (yyaccept == 0) {
+      goto yy1627;
+    } else {
+      goto yy1649;
+    }
+  yy1632:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1630;
+    goto yy1631;
+  yy1633:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1630;
+    goto yy1631;
+  yy1634:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1633;
+    goto yy1631;
+  yy1635:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1633;
+    goto yy1631;
+  yy1636:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0x8F)
+      goto yy1633;
+    goto yy1631;
+  yy1637:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0x9F)
+      goto yy1630;
+    goto yy1631;
+  yy1638:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 1) {
+      goto yy1638;
+    }
+    if (yych <= ' ') {
+      if (yych <= 0x08)
+        goto yy1631;
+      if (yych <= '\r')
+        goto yy1651;
+      if (yych <= 0x1F)
+        goto yy1631;
+      goto yy1651;
+    } else {
+      if (yych <= '/') {
+        if (yych <= '.')
+          goto yy1631;
+        goto yy1653;
+      } else {
+        if (yych == '>')
+          goto yy1645;
+        goto yy1631;
+      }
+    }
+  yy1640:
+    yych = *++p;
+    if (yych <= '@')
+      goto yy1631;
+    if (yych <= 'Z')
+      goto yy1641;
+    if (yych <= '`')
+      goto yy1631;
+    if (yych >= '{')
+      goto yy1631;
+  yy1641:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 2) {
+      goto yy1643;
+    }
+    if (yych <= '=') {
+      if (yych <= '-') {
+        if (yych <= ',')
+          goto yy1631;
+        goto yy1641;
+      } else {
+        if (yych <= '/')
+          goto yy1631;
+        if (yych <= '9')
+          goto yy1641;
+        goto yy1631;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '>')
+          goto yy1645;
+        if (yych <= '@')
+          goto yy1631;
+        goto yy1641;
+      } else {
+        if (yych <= '`')
+          goto yy1631;
+        if (yych <= 'z')
+          goto yy1641;
+        goto yy1631;
+      }
+    }
+  yy1643:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 2) {
+      goto yy1643;
+    }
+    if (yych != '>')
+      goto yy1631;
+  yy1645:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 4) {
+      goto yy1645;
+    }
+    if (yych <= 0x08)
+      goto yy1631;
+    if (yych <= '\n')
+      goto yy1647;
+    if (yych <= '\v')
+      goto yy1631;
+    if (yych <= '\r')
+      goto yy1650;
+    goto yy1631;
+  yy1647:
+    yyaccept = 1;
+    marker = ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 4) {
+      goto yy1645;
+    }
+    if (yych <= 0x08)
+      goto yy1649;
+    if (yych <= '\n')
+      goto yy1647;
+    if (yych <= '\v')
+      goto yy1649;
+    if (yych <= '\r')
+      goto yy1650;
+  yy1649 : { return 7; }
+  yy1650:
+    yych = *++p;
+    goto yy1649;
+  yy1651:
+    ++p;
+    yych = *p;
+    if (yych <= ':') {
+      if (yych <= ' ') {
+        if (yych <= 0x08)
+          goto yy1631;
+        if (yych <= '\r')
+          goto yy1651;
+        if (yych <= 0x1F)
+          goto yy1631;
+        goto yy1651;
+      } else {
+        if (yych == '/')
+          goto yy1653;
+        if (yych <= '9')
+          goto yy1631;
+        goto yy1654;
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych == '>')
+          goto yy1645;
+        if (yych <= '@')
+          goto yy1631;
+        goto yy1654;
+      } else {
+        if (yych <= '_') {
+          if (yych <= '^')
+            goto yy1631;
+          goto yy1654;
+        } else {
+          if (yych <= '`')
+            goto yy1631;
+          if (yych <= 'z')
+            goto yy1654;
+          goto yy1631;
+        }
+      }
+    }
+  yy1653:
+    yych = *++p;
+    if (yych == '>')
+      goto yy1645;
+    goto yy1631;
+  yy1654:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 16) {
+      goto yy1654;
+    }
+    if (yych <= ',') {
+      if (yych <= '\r') {
+        if (yych <= 0x08)
+          goto yy1631;
+      } else {
+        if (yych != ' ')
+          goto yy1631;
+      }
+    } else {
+      if (yych <= '<') {
+        if (yych <= '/')
+          goto yy1653;
+        goto yy1631;
+      } else {
+        if (yych <= '=')
+          goto yy1658;
+        if (yych <= '>')
+          goto yy1645;
+        goto yy1631;
+      }
+    }
+  yy1656:
+    ++p;
+    yych = *p;
+    if (yych <= '<') {
+      if (yych <= ' ') {
+        if (yych <= 0x08)
+          goto yy1631;
+        if (yych <= '\r')
+          goto yy1656;
+        if (yych <= 0x1F)
+          goto yy1631;
+        goto yy1656;
+      } else {
+        if (yych <= '/') {
+          if (yych <= '.')
+            goto yy1631;
+          goto yy1653;
+        } else {
+          if (yych == ':')
+            goto yy1654;
+          goto yy1631;
+        }
+      }
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '=')
+          goto yy1658;
+        if (yych <= '>')
+          goto yy1645;
+        if (yych <= '@')
+          goto yy1631;
+        goto yy1654;
+      } else {
+        if (yych <= '_') {
+          if (yych <= '^')
+            goto yy1631;
+          goto yy1654;
+        } else {
+          if (yych <= '`')
+            goto yy1631;
+          if (yych <= 'z')
+            goto yy1654;
+          goto yy1631;
+        }
+      }
+    }
+  yy1658:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy1660;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '"') {
+        if (yych <= 0x00)
+          goto yy1631;
+        if (yych >= '!')
+          goto yy1671;
+      } else {
+        if (yych <= '\'')
+          goto yy1669;
+        if (yych <= 0xC1)
+          goto yy1631;
+        if (yych <= 0xDF)
+          goto yy1662;
+        goto yy1663;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1668;
+        goto yy1664;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1665;
+        if (yych <= 0xF3)
+          goto yy1666;
+        if (yych <= 0xF4)
+          goto yy1667;
+        goto yy1631;
+      }
+    }
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy1660;
+    }
+    if (yych <= 0xDF) {
+      if (yych <= '\'') {
+        if (yych <= 0x00)
+          goto yy1631;
+        if (yych <= ' ')
+          goto yy1694;
+        if (yych <= '"')
+          goto yy1671;
+        goto yy1669;
+      } else {
+        if (yych == '>')
+          goto yy1645;
+        if (yych <= 0xC1)
+          goto yy1631;
+        goto yy1662;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1663;
+        if (yych == 0xED)
+          goto yy1668;
+        goto yy1664;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1665;
+        if (yych <= 0xF3)
+          goto yy1666;
+        if (yych <= 0xF4)
+          goto yy1667;
+        goto yy1631;
+      }
+    }
+  yy1660:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy1660;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '=') {
+        if (yych <= 0x00)
+          goto yy1631;
+        if (yych <= ' ')
+          goto yy1688;
+        goto yy1631;
+      } else {
+        if (yych <= '>')
+          goto yy1645;
+        if (yych <= 0xC1)
+          goto yy1631;
+        if (yych >= 0xE0)
+          goto yy1663;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1668;
+        goto yy1664;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1665;
+        if (yych <= 0xF3)
+          goto yy1666;
+        if (yych <= 0xF4)
+          goto yy1667;
+        goto yy1631;
+      }
+    }
+  yy1662:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1660;
+    goto yy1631;
+  yy1663:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1662;
+    goto yy1631;
+  yy1664:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1662;
+    goto yy1631;
+  yy1665:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1664;
+    goto yy1631;
+  yy1666:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1664;
+    goto yy1631;
+  yy1667:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0x8F)
+      goto yy1664;
+    goto yy1631;
+  yy1668:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0x9F)
+      goto yy1662;
+    goto yy1631;
+  yy1669:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1669;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x00)
+          goto yy1631;
+        if (yych <= '\'')
+          goto yy1680;
+        goto yy1631;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1681;
+        if (yych <= 0xE0)
+          goto yy1682;
+        goto yy1683;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1687;
+        if (yych <= 0xEF)
+          goto yy1683;
+        goto yy1684;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1685;
+        if (yych <= 0xF4)
+          goto yy1686;
+        goto yy1631;
+      }
+    }
+  yy1671:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy1671;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x00)
+          goto yy1631;
+        if (yych <= '"')
+          goto yy1680;
+        goto yy1631;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1673;
+        if (yych <= 0xE0)
+          goto yy1674;
+        goto yy1675;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1679;
+        if (yych <= 0xEF)
+          goto yy1675;
+        goto yy1676;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1677;
+        if (yych <= 0xF4)
+          goto yy1678;
+        goto yy1631;
+      }
+    }
+  yy1673:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1671;
+    goto yy1631;
+  yy1674:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1673;
+    goto yy1631;
+  yy1675:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1673;
+    goto yy1631;
+  yy1676:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1675;
+    goto yy1631;
+  yy1677:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1675;
+    goto yy1631;
+  yy1678:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0x8F)
+      goto yy1675;
+    goto yy1631;
+  yy1679:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0x9F)
+      goto yy1673;
+    goto yy1631;
+  yy1680:
+    ++p;
+    yych = *p;
+    if (yych <= ' ') {
+      if (yych <= 0x08)
+        goto yy1631;
+      if (yych <= '\r')
+        goto yy1651;
+      if (yych <= 0x1F)
+        goto yy1631;
+      goto yy1651;
+    } else {
+      if (yych <= '/') {
+        if (yych <= '.')
+          goto yy1631;
+        goto yy1653;
+      } else {
+        if (yych == '>')
+          goto yy1645;
+        goto yy1631;
+      }
+    }
+  yy1681:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1669;
+    goto yy1631;
+  yy1682:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1681;
+    goto yy1631;
+  yy1683:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1681;
+    goto yy1631;
+  yy1684:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1683;
+    goto yy1631;
+  yy1685:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0xBF)
+      goto yy1683;
+    goto yy1631;
+  yy1686:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0x8F)
+      goto yy1683;
+    goto yy1631;
+  yy1687:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1631;
+    if (yych <= 0x9F)
+      goto yy1681;
+    goto yy1631;
+  yy1688:
+    ++p;
+    yych = *p;
+    if (yych <= '@') {
+      if (yych <= '"') {
+        if (yych <= '\r') {
+          if (yych <= 0x00)
+            goto yy1631;
+          if (yych <= 0x08)
+            goto yy1660;
+          goto yy1688;
+        } else {
+          if (yych == ' ')
+            goto yy1688;
+          if (yych <= '!')
+            goto yy1660;
+          goto yy1631;
+        }
+      } else {
+        if (yych <= ':') {
+          if (yych == '\'')
+            goto yy1631;
+          if (yych <= '9')
+            goto yy1660;
+        } else {
+          if (yych <= ';')
+            goto yy1660;
+          if (yych <= '=')
+            goto yy1631;
+          if (yych <= '>')
+            goto yy1645;
+          goto yy1660;
+        }
+      }
+    } else {
+      if (yych <= 0xDF) {
+        if (yych <= '`') {
+          if (yych <= 'Z')
+            goto yy1690;
+          if (yych <= '^')
+            goto yy1660;
+          if (yych >= '`')
+            goto yy1631;
+        } else {
+          if (yych <= 'z')
+            goto yy1690;
+          if (yych <= 0x7F)
+            goto yy1660;
+          if (yych <= 0xC1)
+            goto yy1631;
+          goto yy1662;
+        }
+      } else {
+        if (yych <= 0xEF) {
+          if (yych <= 0xE0)
+            goto yy1663;
+          if (yych == 0xED)
+            goto yy1668;
+          goto yy1664;
+        } else {
+          if (yych <= 0xF0)
+            goto yy1665;
+          if (yych <= 0xF3)
+            goto yy1666;
+          if (yych <= 0xF4)
+            goto yy1667;
+          goto yy1631;
+        }
+      }
+    }
+  yy1690:
+    ++p;
+    yych = *p;
+    if (yych <= '>') {
+      if (yych <= '&') {
+        if (yych <= 0x1F) {
+          if (yych <= 0x00)
+            goto yy1631;
+          if (yych <= 0x08)
+            goto yy1660;
+          if (yych >= 0x0E)
+            goto yy1660;
+        } else {
+          if (yych <= ' ')
+            goto yy1692;
+          if (yych == '"')
+            goto yy1631;
+          goto yy1660;
+        }
+      } else {
+        if (yych <= '/') {
+          if (yych <= '\'')
+            goto yy1631;
+          if (yych <= ',')
+            goto yy1660;
+          if (yych <= '.')
+            goto yy1690;
+          goto yy1660;
+        } else {
+          if (yych <= ';') {
+            if (yych <= ':')
+              goto yy1690;
+            goto yy1660;
+          } else {
+            if (yych <= '<')
+              goto yy1631;
+            if (yych <= '=')
+              goto yy1658;
+            goto yy1645;
+          }
+        }
+      }
+    } else {
+      if (yych <= 0xC1) {
+        if (yych <= '_') {
+          if (yych <= '@')
+            goto yy1660;
+          if (yych <= 'Z')
+            goto yy1690;
+          if (yych <= '^')
+            goto yy1660;
+          goto yy1690;
+        } else {
+          if (yych <= '`')
+            goto yy1631;
+          if (yych <= 'z')
+            goto yy1690;
+          if (yych <= 0x7F)
+            goto yy1660;
+          goto yy1631;
+        }
+      } else {
+        if (yych <= 0xED) {
+          if (yych <= 0xDF)
+            goto yy1662;
+          if (yych <= 0xE0)
+            goto yy1663;
+          if (yych <= 0xEC)
+            goto yy1664;
+          goto yy1668;
+        } else {
+          if (yych <= 0xF0) {
+            if (yych <= 0xEF)
+              goto yy1664;
+            goto yy1665;
+          } else {
+            if (yych <= 0xF3)
+              goto yy1666;
+            if (yych <= 0xF4)
+              goto yy1667;
+            goto yy1631;
+          }
+        }
+      }
+    }
+  yy1692:
+    ++p;
+    yych = *p;
+    if (yych <= '@') {
+      if (yych <= '&') {
+        if (yych <= 0x1F) {
+          if (yych <= 0x00)
+            goto yy1631;
+          if (yych <= 0x08)
+            goto yy1660;
+          if (yych <= '\r')
+            goto yy1692;
+          goto yy1660;
+        } else {
+          if (yych <= ' ')
+            goto yy1692;
+          if (yych == '"')
+            goto yy1631;
+          goto yy1660;
+        }
+      } else {
+        if (yych <= ';') {
+          if (yych <= '\'')
+            goto yy1631;
+          if (yych == ':')
+            goto yy1690;
+          goto yy1660;
+        } else {
+          if (yych <= '<')
+            goto yy1631;
+          if (yych <= '=')
+            goto yy1658;
+          if (yych <= '>')
+            goto yy1645;
+          goto yy1660;
+        }
+      }
+    } else {
+      if (yych <= 0xDF) {
+        if (yych <= '`') {
+          if (yych <= 'Z')
+            goto yy1690;
+          if (yych <= '^')
+            goto yy1660;
+          if (yych <= '_')
+            goto yy1690;
+          goto yy1631;
+        } else {
+          if (yych <= 'z')
+            goto yy1690;
+          if (yych <= 0x7F)
+            goto yy1660;
+          if (yych <= 0xC1)
+            goto yy1631;
+          goto yy1662;
+        }
+      } else {
+        if (yych <= 0xEF) {
+          if (yych <= 0xE0)
+            goto yy1663;
+          if (yych == 0xED)
+            goto yy1668;
+          goto yy1664;
+        } else {
+          if (yych <= 0xF0)
+            goto yy1665;
+          if (yych <= 0xF3)
+            goto yy1666;
+          if (yych <= 0xF4)
+            goto yy1667;
+          goto yy1631;
+        }
+      }
+    }
+  yy1694:
+    ++p;
+    yych = *p;
+    if (yych <= '@') {
+      if (yych <= '"') {
+        if (yych <= '\r') {
+          if (yych <= 0x00)
+            goto yy1631;
+          if (yych <= 0x08)
+            goto yy1660;
+          goto yy1694;
+        } else {
+          if (yych == ' ')
+            goto yy1694;
+          if (yych <= '!')
+            goto yy1660;
+          goto yy1671;
+        }
+      } else {
+        if (yych <= ':') {
+          if (yych == '\'')
+            goto yy1669;
+          if (yych <= '9')
+            goto yy1660;
+          goto yy1690;
+        } else {
+          if (yych <= ';')
+            goto yy1660;
+          if (yych <= '=')
+            goto yy1631;
+          if (yych <= '>')
+            goto yy1645;
+          goto yy1660;
+        }
+      }
+    } else {
+      if (yych <= 0xDF) {
+        if (yych <= '`') {
+          if (yych <= 'Z')
+            goto yy1690;
+          if (yych <= '^')
+            goto yy1660;
+          if (yych <= '_')
+            goto yy1690;
+          goto yy1631;
+        } else {
+          if (yych <= 'z')
+            goto yy1690;
+          if (yych <= 0x7F)
+            goto yy1660;
+          if (yych <= 0xC1)
+            goto yy1631;
+          goto yy1662;
+        }
+      } else {
+        if (yych <= 0xEF) {
+          if (yych <= 0xE0)
+            goto yy1663;
+          if (yych == 0xED)
+            goto yy1668;
+          goto yy1664;
+        } else {
+          if (yych <= 0xF0)
+            goto yy1665;
+          if (yych <= 0xF3)
+            goto yy1666;
+          if (yych <= 0xF4)
+            goto yy1667;
+          goto yy1631;
+        }
+      }
+    }
+  }
 }
 
 // Try to match an HTML block end line of type 1
-bufsize_t _scan_html_block_end_1(const unsigned char *p)
-{
+bufsize_t _scan_html_block_end_1(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	unsigned int yyaccept = 0;
-	static const unsigned char yybm[] = {
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128,   0, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128,  64, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0xDF) {
-		if (yych <= ';') {
-			if (yych != '\n') goto yy1699;
-		} else {
-			if (yych <= '<') goto yy1700;
-			if (yych <= 0x7F) goto yy1699;
-			if (yych >= 0xC2) goto yy1701;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1703;
-			if (yych == 0xED) goto yy1708;
-			goto yy1704;
-		} else {
-			if (yych <= 0xF0) goto yy1705;
-			if (yych <= 0xF3) goto yy1706;
-			if (yych <= 0xF4) goto yy1707;
-		}
-	}
-yy1698:
-	{ return 0; }
-yy1699:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych <= 0x7F) {
-		if (yych == '\n') goto yy1698;
-		goto yy1713;
-	} else {
-		if (yych <= 0xC1) goto yy1698;
-		if (yych <= 0xF4) goto yy1713;
-		goto yy1698;
-	}
-yy1700:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych <= '/') {
-		if (yych == '\n') goto yy1698;
-		if (yych <= '.') goto yy1713;
-		goto yy1709;
-	} else {
-		if (yych <= 0x7F) goto yy1713;
-		if (yych <= 0xC1) goto yy1698;
-		if (yych <= 0xF4) goto yy1713;
-		goto yy1698;
-	}
-yy1701:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1702;
-	if (yych <= 0xBF) goto yy1699;
-yy1702:
-	p = marker;
-	if (yyaccept == 0) {
-		goto yy1698;
-	} else {
-		goto yy1730;
-	}
-yy1703:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy1702;
-	if (yych <= 0xBF) goto yy1701;
-	goto yy1702;
-yy1704:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1702;
-	if (yych <= 0xBF) goto yy1701;
-	goto yy1702;
-yy1705:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy1702;
-	if (yych <= 0xBF) goto yy1704;
-	goto yy1702;
-yy1706:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1702;
-	if (yych <= 0xBF) goto yy1704;
-	goto yy1702;
-yy1707:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1702;
-	if (yych <= 0x8F) goto yy1704;
-	goto yy1702;
-yy1708:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1702;
-	if (yych <= 0x9F) goto yy1701;
-	goto yy1702;
-yy1709:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 's') {
-		if (yych <= 'R') {
-			if (yych <= '\n') {
-				if (yych <= '\t') goto yy1712;
-				goto yy1702;
-			} else {
-				if (yych == 'P') goto yy1721;
-				goto yy1712;
-			}
-		} else {
-			if (yych <= 'o') {
-				if (yych <= 'S') goto yy1722;
-				goto yy1712;
-			} else {
-				if (yych <= 'p') goto yy1721;
-				if (yych <= 'r') goto yy1712;
-				goto yy1722;
-			}
-		}
-	} else {
-		if (yych <= 0xEC) {
-			if (yych <= 0xC1) {
-				if (yych <= 0x7F) goto yy1712;
-				goto yy1702;
-			} else {
-				if (yych <= 0xDF) goto yy1714;
-				if (yych <= 0xE0) goto yy1715;
-				goto yy1716;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xED) goto yy1720;
-				if (yych <= 0xEF) goto yy1716;
-				goto yy1717;
-			} else {
-				if (yych <= 0xF3) goto yy1718;
-				if (yych <= 0xF4) goto yy1719;
-				goto yy1702;
-			}
-		}
-	}
-yy1710:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 0xDF) {
-		if (yych <= '.') {
-			if (yych == '\n') goto yy1702;
-		} else {
-			if (yych <= '/') goto yy1709;
-			if (yych <= 0x7F) goto yy1712;
-			if (yych <= 0xC1) goto yy1702;
-			goto yy1714;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1715;
-			if (yych == 0xED) goto yy1720;
-			goto yy1716;
-		} else {
-			if (yych <= 0xF0) goto yy1717;
-			if (yych <= 0xF3) goto yy1718;
-			if (yych <= 0xF4) goto yy1719;
-			goto yy1702;
-		}
-	}
-yy1712:
-	++p;
-	yych = *p;
-yy1713:
-	if (yybm[0+yych] & 128) {
-		goto yy1712;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '\n') goto yy1702;
-			if (yych <= '<') goto yy1710;
-			goto yy1702;
-		} else {
-			if (yych <= 0xDF) goto yy1714;
-			if (yych <= 0xE0) goto yy1715;
-			goto yy1716;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1720;
-			if (yych <= 0xEF) goto yy1716;
-			goto yy1717;
-		} else {
-			if (yych <= 0xF3) goto yy1718;
-			if (yych <= 0xF4) goto yy1719;
-			goto yy1702;
-		}
-	}
-yy1714:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1702;
-	if (yych <= 0xBF) goto yy1712;
-	goto yy1702;
-yy1715:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1702;
-	if (yych <= 0xBF) goto yy1714;
-	goto yy1702;
-yy1716:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1702;
-	if (yych <= 0xBF) goto yy1714;
-	goto yy1702;
-yy1717:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1702;
-	if (yych <= 0xBF) goto yy1716;
-	goto yy1702;
-yy1718:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1702;
-	if (yych <= 0xBF) goto yy1716;
-	goto yy1702;
-yy1719:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1702;
-	if (yych <= 0x8F) goto yy1716;
-	goto yy1702;
-yy1720:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1702;
-	if (yych <= 0x9F) goto yy1714;
-	goto yy1702;
-yy1721:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 0xC1) {
-		if (yych <= 'R') {
-			if (yych == '\n') goto yy1702;
-			if (yych <= 'Q') goto yy1712;
-			goto yy1733;
-		} else {
-			if (yych == 'r') goto yy1733;
-			if (yych <= 0x7F) goto yy1712;
-			goto yy1702;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy1714;
-			if (yych <= 0xE0) goto yy1715;
-			if (yych <= 0xEC) goto yy1716;
-			goto yy1720;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1716;
-				goto yy1717;
-			} else {
-				if (yych <= 0xF3) goto yy1718;
-				if (yych <= 0xF4) goto yy1719;
-				goto yy1702;
-			}
-		}
-	}
-yy1722:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 't') {
-		if (yych <= 'S') {
-			if (yych <= '\n') {
-				if (yych <= '\t') goto yy1712;
-				goto yy1702;
-			} else {
-				if (yych == 'C') goto yy1724;
-				goto yy1712;
-			}
-		} else {
-			if (yych <= 'b') {
-				if (yych >= 'U') goto yy1712;
-			} else {
-				if (yych <= 'c') goto yy1724;
-				if (yych <= 's') goto yy1712;
-			}
-		}
-	} else {
-		if (yych <= 0xEC) {
-			if (yych <= 0xC1) {
-				if (yych <= 0x7F) goto yy1712;
-				goto yy1702;
-			} else {
-				if (yych <= 0xDF) goto yy1714;
-				if (yych <= 0xE0) goto yy1715;
-				goto yy1716;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xED) goto yy1720;
-				if (yych <= 0xEF) goto yy1716;
-				goto yy1717;
-			} else {
-				if (yych <= 0xF3) goto yy1718;
-				if (yych <= 0xF4) goto yy1719;
-				goto yy1702;
-			}
-		}
-	}
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 0xC1) {
-		if (yych <= 'Y') {
-			if (yych == '\n') goto yy1702;
-			if (yych <= 'X') goto yy1712;
-			goto yy1731;
-		} else {
-			if (yych == 'y') goto yy1731;
-			if (yych <= 0x7F) goto yy1712;
-			goto yy1702;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy1714;
-			if (yych <= 0xE0) goto yy1715;
-			if (yych <= 0xEC) goto yy1716;
-			goto yy1720;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1716;
-				goto yy1717;
-			} else {
-				if (yych <= 0xF3) goto yy1718;
-				if (yych <= 0xF4) goto yy1719;
-				goto yy1702;
-			}
-		}
-	}
-yy1724:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 0xC1) {
-		if (yych <= 'R') {
-			if (yych == '\n') goto yy1702;
-			if (yych <= 'Q') goto yy1712;
-		} else {
-			if (yych == 'r') goto yy1725;
-			if (yych <= 0x7F) goto yy1712;
-			goto yy1702;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy1714;
-			if (yych <= 0xE0) goto yy1715;
-			if (yych <= 0xEC) goto yy1716;
-			goto yy1720;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1716;
-				goto yy1717;
-			} else {
-				if (yych <= 0xF3) goto yy1718;
-				if (yych <= 0xF4) goto yy1719;
-				goto yy1702;
-			}
-		}
-	}
-yy1725:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 0xC1) {
-		if (yych <= 'I') {
-			if (yych == '\n') goto yy1702;
-			if (yych <= 'H') goto yy1712;
-		} else {
-			if (yych == 'i') goto yy1726;
-			if (yych <= 0x7F) goto yy1712;
-			goto yy1702;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy1714;
-			if (yych <= 0xE0) goto yy1715;
-			if (yych <= 0xEC) goto yy1716;
-			goto yy1720;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1716;
-				goto yy1717;
-			} else {
-				if (yych <= 0xF3) goto yy1718;
-				if (yych <= 0xF4) goto yy1719;
-				goto yy1702;
-			}
-		}
-	}
-yy1726:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 0xC1) {
-		if (yych <= 'P') {
-			if (yych == '\n') goto yy1702;
-			if (yych <= 'O') goto yy1712;
-		} else {
-			if (yych == 'p') goto yy1727;
-			if (yych <= 0x7F) goto yy1712;
-			goto yy1702;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy1714;
-			if (yych <= 0xE0) goto yy1715;
-			if (yych <= 0xEC) goto yy1716;
-			goto yy1720;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1716;
-				goto yy1717;
-			} else {
-				if (yych <= 0xF3) goto yy1718;
-				if (yych <= 0xF4) goto yy1719;
-				goto yy1702;
-			}
-		}
-	}
-yy1727:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 0xC1) {
-		if (yych <= 'T') {
-			if (yych == '\n') goto yy1702;
-			if (yych <= 'S') goto yy1712;
-		} else {
-			if (yych == 't') goto yy1728;
-			if (yych <= 0x7F) goto yy1712;
-			goto yy1702;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy1714;
-			if (yych <= 0xE0) goto yy1715;
-			if (yych <= 0xEC) goto yy1716;
-			goto yy1720;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1716;
-				goto yy1717;
-			} else {
-				if (yych <= 0xF3) goto yy1718;
-				if (yych <= 0xF4) goto yy1719;
-				goto yy1702;
-			}
-		}
-	}
-yy1728:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 0xDF) {
-		if (yych <= '=') {
-			if (yych == '\n') goto yy1702;
-			goto yy1712;
-		} else {
-			if (yych <= '>') goto yy1729;
-			if (yych <= 0x7F) goto yy1712;
-			if (yych <= 0xC1) goto yy1702;
-			goto yy1714;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1715;
-			if (yych == 0xED) goto yy1720;
-			goto yy1716;
-		} else {
-			if (yych <= 0xF0) goto yy1717;
-			if (yych <= 0xF3) goto yy1718;
-			if (yych <= 0xF4) goto yy1719;
-			goto yy1702;
-		}
-	}
-yy1729:
-	yyaccept = 1;
-	marker = ++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy1712;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '\n') goto yy1730;
-			if (yych <= '<') goto yy1710;
-		} else {
-			if (yych <= 0xDF) goto yy1714;
-			if (yych <= 0xE0) goto yy1715;
-			goto yy1716;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1720;
-			if (yych <= 0xEF) goto yy1716;
-			goto yy1717;
-		} else {
-			if (yych <= 0xF3) goto yy1718;
-			if (yych <= 0xF4) goto yy1719;
-		}
-	}
-yy1730:
-	{ return (bufsize_t)(p - start); }
-yy1731:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 0xC1) {
-		if (yych <= 'L') {
-			if (yych == '\n') goto yy1702;
-			if (yych <= 'K') goto yy1712;
-		} else {
-			if (yych == 'l') goto yy1732;
-			if (yych <= 0x7F) goto yy1712;
-			goto yy1702;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy1714;
-			if (yych <= 0xE0) goto yy1715;
-			if (yych <= 0xEC) goto yy1716;
-			goto yy1720;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1716;
-				goto yy1717;
-			} else {
-				if (yych <= 0xF3) goto yy1718;
-				if (yych <= 0xF4) goto yy1719;
-				goto yy1702;
-			}
-		}
-	}
-yy1732:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 0xC1) {
-		if (yych <= 'E') {
-			if (yych == '\n') goto yy1702;
-			if (yych <= 'D') goto yy1712;
-			goto yy1728;
-		} else {
-			if (yych == 'e') goto yy1728;
-			if (yych <= 0x7F) goto yy1712;
-			goto yy1702;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy1714;
-			if (yych <= 0xE0) goto yy1715;
-			if (yych <= 0xEC) goto yy1716;
-			goto yy1720;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1716;
-				goto yy1717;
-			} else {
-				if (yych <= 0xF3) goto yy1718;
-				if (yych <= 0xF4) goto yy1719;
-				goto yy1702;
-			}
-		}
-	}
-yy1733:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1710;
-	}
-	if (yych <= 0xC1) {
-		if (yych <= 'E') {
-			if (yych == '\n') goto yy1702;
-			if (yych <= 'D') goto yy1712;
-			goto yy1728;
-		} else {
-			if (yych == 'e') goto yy1728;
-			if (yych <= 0x7F) goto yy1712;
-			goto yy1702;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy1714;
-			if (yych <= 0xE0) goto yy1715;
-			if (yych <= 0xEC) goto yy1716;
-			goto yy1720;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1716;
-				goto yy1717;
-			} else {
-				if (yych <= 0xF3) goto yy1718;
-				if (yych <= 0xF4) goto yy1719;
-				goto yy1702;
-			}
-		}
-	}
-}
-
+  {
+    unsigned char yych;
+    unsigned int yyaccept = 0;
+    static const unsigned char yybm[] = {
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0,   128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 64,  128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0xDF) {
+      if (yych <= ';') {
+        if (yych != '\n')
+          goto yy1699;
+      } else {
+        if (yych <= '<')
+          goto yy1700;
+        if (yych <= 0x7F)
+          goto yy1699;
+        if (yych >= 0xC2)
+          goto yy1701;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1703;
+        if (yych == 0xED)
+          goto yy1708;
+        goto yy1704;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1705;
+        if (yych <= 0xF3)
+          goto yy1706;
+        if (yych <= 0xF4)
+          goto yy1707;
+      }
+    }
+  yy1698 : { return 0; }
+  yy1699:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych <= 0x7F) {
+      if (yych == '\n')
+        goto yy1698;
+      goto yy1713;
+    } else {
+      if (yych <= 0xC1)
+        goto yy1698;
+      if (yych <= 0xF4)
+        goto yy1713;
+      goto yy1698;
+    }
+  yy1700:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych <= '/') {
+      if (yych == '\n')
+        goto yy1698;
+      if (yych <= '.')
+        goto yy1713;
+      goto yy1709;
+    } else {
+      if (yych <= 0x7F)
+        goto yy1713;
+      if (yych <= 0xC1)
+        goto yy1698;
+      if (yych <= 0xF4)
+        goto yy1713;
+      goto yy1698;
+    }
+  yy1701:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1702;
+    if (yych <= 0xBF)
+      goto yy1699;
+  yy1702:
+    p = marker;
+    if (yyaccept == 0) {
+      goto yy1698;
+    } else {
+      goto yy1730;
+    }
+  yy1703:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy1702;
+    if (yych <= 0xBF)
+      goto yy1701;
+    goto yy1702;
+  yy1704:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1702;
+    if (yych <= 0xBF)
+      goto yy1701;
+    goto yy1702;
+  yy1705:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy1702;
+    if (yych <= 0xBF)
+      goto yy1704;
+    goto yy1702;
+  yy1706:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1702;
+    if (yych <= 0xBF)
+      goto yy1704;
+    goto yy1702;
+  yy1707:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1702;
+    if (yych <= 0x8F)
+      goto yy1704;
+    goto yy1702;
+  yy1708:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1702;
+    if (yych <= 0x9F)
+      goto yy1701;
+    goto yy1702;
+  yy1709:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 's') {
+      if (yych <= 'R') {
+        if (yych <= '\n') {
+          if (yych <= '\t')
+            goto yy1712;
+          goto yy1702;
+        } else {
+          if (yych == 'P')
+            goto yy1721;
+          goto yy1712;
+        }
+      } else {
+        if (yych <= 'o') {
+          if (yych <= 'S')
+            goto yy1722;
+          goto yy1712;
+        } else {
+          if (yych <= 'p')
+            goto yy1721;
+          if (yych <= 'r')
+            goto yy1712;
+          goto yy1722;
+        }
+      }
+    } else {
+      if (yych <= 0xEC) {
+        if (yych <= 0xC1) {
+          if (yych <= 0x7F)
+            goto yy1712;
+          goto yy1702;
+        } else {
+          if (yych <= 0xDF)
+            goto yy1714;
+          if (yych <= 0xE0)
+            goto yy1715;
+          goto yy1716;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xED)
+            goto yy1720;
+          if (yych <= 0xEF)
+            goto yy1716;
+          goto yy1717;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1718;
+          if (yych <= 0xF4)
+            goto yy1719;
+          goto yy1702;
+        }
+      }
+    }
+  yy1710:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 0xDF) {
+      if (yych <= '.') {
+        if (yych == '\n')
+          goto yy1702;
+      } else {
+        if (yych <= '/')
+          goto yy1709;
+        if (yych <= 0x7F)
+          goto yy1712;
+        if (yych <= 0xC1)
+          goto yy1702;
+        goto yy1714;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1715;
+        if (yych == 0xED)
+          goto yy1720;
+        goto yy1716;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1717;
+        if (yych <= 0xF3)
+          goto yy1718;
+        if (yych <= 0xF4)
+          goto yy1719;
+        goto yy1702;
+      }
+    }
+  yy1712:
+    ++p;
+    yych = *p;
+  yy1713:
+    if (yybm[0 + yych] & 128) {
+      goto yy1712;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '\n')
+          goto yy1702;
+        if (yych <= '<')
+          goto yy1710;
+        goto yy1702;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1714;
+        if (yych <= 0xE0)
+          goto yy1715;
+        goto yy1716;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1720;
+        if (yych <= 0xEF)
+          goto yy1716;
+        goto yy1717;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1718;
+        if (yych <= 0xF4)
+          goto yy1719;
+        goto yy1702;
+      }
+    }
+  yy1714:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1702;
+    if (yych <= 0xBF)
+      goto yy1712;
+    goto yy1702;
+  yy1715:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1702;
+    if (yych <= 0xBF)
+      goto yy1714;
+    goto yy1702;
+  yy1716:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1702;
+    if (yych <= 0xBF)
+      goto yy1714;
+    goto yy1702;
+  yy1717:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1702;
+    if (yych <= 0xBF)
+      goto yy1716;
+    goto yy1702;
+  yy1718:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1702;
+    if (yych <= 0xBF)
+      goto yy1716;
+    goto yy1702;
+  yy1719:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1702;
+    if (yych <= 0x8F)
+      goto yy1716;
+    goto yy1702;
+  yy1720:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1702;
+    if (yych <= 0x9F)
+      goto yy1714;
+    goto yy1702;
+  yy1721:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 0xC1) {
+      if (yych <= 'R') {
+        if (yych == '\n')
+          goto yy1702;
+        if (yych <= 'Q')
+          goto yy1712;
+        goto yy1733;
+      } else {
+        if (yych == 'r')
+          goto yy1733;
+        if (yych <= 0x7F)
+          goto yy1712;
+        goto yy1702;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy1714;
+        if (yych <= 0xE0)
+          goto yy1715;
+        if (yych <= 0xEC)
+          goto yy1716;
+        goto yy1720;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1716;
+          goto yy1717;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1718;
+          if (yych <= 0xF4)
+            goto yy1719;
+          goto yy1702;
+        }
+      }
+    }
+  yy1722:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 't') {
+      if (yych <= 'S') {
+        if (yych <= '\n') {
+          if (yych <= '\t')
+            goto yy1712;
+          goto yy1702;
+        } else {
+          if (yych == 'C')
+            goto yy1724;
+          goto yy1712;
+        }
+      } else {
+        if (yych <= 'b') {
+          if (yych >= 'U')
+            goto yy1712;
+        } else {
+          if (yych <= 'c')
+            goto yy1724;
+          if (yych <= 's')
+            goto yy1712;
+        }
+      }
+    } else {
+      if (yych <= 0xEC) {
+        if (yych <= 0xC1) {
+          if (yych <= 0x7F)
+            goto yy1712;
+          goto yy1702;
+        } else {
+          if (yych <= 0xDF)
+            goto yy1714;
+          if (yych <= 0xE0)
+            goto yy1715;
+          goto yy1716;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xED)
+            goto yy1720;
+          if (yych <= 0xEF)
+            goto yy1716;
+          goto yy1717;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1718;
+          if (yych <= 0xF4)
+            goto yy1719;
+          goto yy1702;
+        }
+      }
+    }
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 0xC1) {
+      if (yych <= 'Y') {
+        if (yych == '\n')
+          goto yy1702;
+        if (yych <= 'X')
+          goto yy1712;
+        goto yy1731;
+      } else {
+        if (yych == 'y')
+          goto yy1731;
+        if (yych <= 0x7F)
+          goto yy1712;
+        goto yy1702;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy1714;
+        if (yych <= 0xE0)
+          goto yy1715;
+        if (yych <= 0xEC)
+          goto yy1716;
+        goto yy1720;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1716;
+          goto yy1717;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1718;
+          if (yych <= 0xF4)
+            goto yy1719;
+          goto yy1702;
+        }
+      }
+    }
+  yy1724:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 0xC1) {
+      if (yych <= 'R') {
+        if (yych == '\n')
+          goto yy1702;
+        if (yych <= 'Q')
+          goto yy1712;
+      } else {
+        if (yych == 'r')
+          goto yy1725;
+        if (yych <= 0x7F)
+          goto yy1712;
+        goto yy1702;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy1714;
+        if (yych <= 0xE0)
+          goto yy1715;
+        if (yych <= 0xEC)
+          goto yy1716;
+        goto yy1720;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1716;
+          goto yy1717;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1718;
+          if (yych <= 0xF4)
+            goto yy1719;
+          goto yy1702;
+        }
+      }
+    }
+  yy1725:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 0xC1) {
+      if (yych <= 'I') {
+        if (yych == '\n')
+          goto yy1702;
+        if (yych <= 'H')
+          goto yy1712;
+      } else {
+        if (yych == 'i')
+          goto yy1726;
+        if (yych <= 0x7F)
+          goto yy1712;
+        goto yy1702;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy1714;
+        if (yych <= 0xE0)
+          goto yy1715;
+        if (yych <= 0xEC)
+          goto yy1716;
+        goto yy1720;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1716;
+          goto yy1717;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1718;
+          if (yych <= 0xF4)
+            goto yy1719;
+          goto yy1702;
+        }
+      }
+    }
+  yy1726:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 0xC1) {
+      if (yych <= 'P') {
+        if (yych == '\n')
+          goto yy1702;
+        if (yych <= 'O')
+          goto yy1712;
+      } else {
+        if (yych == 'p')
+          goto yy1727;
+        if (yych <= 0x7F)
+          goto yy1712;
+        goto yy1702;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy1714;
+        if (yych <= 0xE0)
+          goto yy1715;
+        if (yych <= 0xEC)
+          goto yy1716;
+        goto yy1720;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1716;
+          goto yy1717;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1718;
+          if (yych <= 0xF4)
+            goto yy1719;
+          goto yy1702;
+        }
+      }
+    }
+  yy1727:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 0xC1) {
+      if (yych <= 'T') {
+        if (yych == '\n')
+          goto yy1702;
+        if (yych <= 'S')
+          goto yy1712;
+      } else {
+        if (yych == 't')
+          goto yy1728;
+        if (yych <= 0x7F)
+          goto yy1712;
+        goto yy1702;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy1714;
+        if (yych <= 0xE0)
+          goto yy1715;
+        if (yych <= 0xEC)
+          goto yy1716;
+        goto yy1720;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1716;
+          goto yy1717;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1718;
+          if (yych <= 0xF4)
+            goto yy1719;
+          goto yy1702;
+        }
+      }
+    }
+  yy1728:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 0xDF) {
+      if (yych <= '=') {
+        if (yych == '\n')
+          goto yy1702;
+        goto yy1712;
+      } else {
+        if (yych <= '>')
+          goto yy1729;
+        if (yych <= 0x7F)
+          goto yy1712;
+        if (yych <= 0xC1)
+          goto yy1702;
+        goto yy1714;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1715;
+        if (yych == 0xED)
+          goto yy1720;
+        goto yy1716;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1717;
+        if (yych <= 0xF3)
+          goto yy1718;
+        if (yych <= 0xF4)
+          goto yy1719;
+        goto yy1702;
+      }
+    }
+  yy1729:
+    yyaccept = 1;
+    marker = ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy1712;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '\n')
+          goto yy1730;
+        if (yych <= '<')
+          goto yy1710;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1714;
+        if (yych <= 0xE0)
+          goto yy1715;
+        goto yy1716;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1720;
+        if (yych <= 0xEF)
+          goto yy1716;
+        goto yy1717;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1718;
+        if (yych <= 0xF4)
+          goto yy1719;
+      }
+    }
+  yy1730 : { return (bufsize_t)(p - start); }
+  yy1731:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 0xC1) {
+      if (yych <= 'L') {
+        if (yych == '\n')
+          goto yy1702;
+        if (yych <= 'K')
+          goto yy1712;
+      } else {
+        if (yych == 'l')
+          goto yy1732;
+        if (yych <= 0x7F)
+          goto yy1712;
+        goto yy1702;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy1714;
+        if (yych <= 0xE0)
+          goto yy1715;
+        if (yych <= 0xEC)
+          goto yy1716;
+        goto yy1720;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1716;
+          goto yy1717;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1718;
+          if (yych <= 0xF4)
+            goto yy1719;
+          goto yy1702;
+        }
+      }
+    }
+  yy1732:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 0xC1) {
+      if (yych <= 'E') {
+        if (yych == '\n')
+          goto yy1702;
+        if (yych <= 'D')
+          goto yy1712;
+        goto yy1728;
+      } else {
+        if (yych == 'e')
+          goto yy1728;
+        if (yych <= 0x7F)
+          goto yy1712;
+        goto yy1702;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy1714;
+        if (yych <= 0xE0)
+          goto yy1715;
+        if (yych <= 0xEC)
+          goto yy1716;
+        goto yy1720;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1716;
+          goto yy1717;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1718;
+          if (yych <= 0xF4)
+            goto yy1719;
+          goto yy1702;
+        }
+      }
+    }
+  yy1733:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1710;
+    }
+    if (yych <= 0xC1) {
+      if (yych <= 'E') {
+        if (yych == '\n')
+          goto yy1702;
+        if (yych <= 'D')
+          goto yy1712;
+        goto yy1728;
+      } else {
+        if (yych == 'e')
+          goto yy1728;
+        if (yych <= 0x7F)
+          goto yy1712;
+        goto yy1702;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy1714;
+        if (yych <= 0xE0)
+          goto yy1715;
+        if (yych <= 0xEC)
+          goto yy1716;
+        goto yy1720;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1716;
+          goto yy1717;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1718;
+          if (yych <= 0xF4)
+            goto yy1719;
+          goto yy1702;
+        }
+      }
+    }
+  }
 }
 
 // Try to match an HTML block end line of type 2
-bufsize_t _scan_html_block_end_2(const unsigned char *p)
-{
+bufsize_t _scan_html_block_end_2(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	unsigned int yyaccept = 0;
-	static const unsigned char yybm[] = {
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128,   0, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128,  64, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0xDF) {
-		if (yych <= ',') {
-			if (yych != '\n') goto yy1737;
-		} else {
-			if (yych <= '-') goto yy1738;
-			if (yych <= 0x7F) goto yy1737;
-			if (yych >= 0xC2) goto yy1739;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1741;
-			if (yych == 0xED) goto yy1746;
-			goto yy1742;
-		} else {
-			if (yych <= 0xF0) goto yy1743;
-			if (yych <= 0xF3) goto yy1744;
-			if (yych <= 0xF4) goto yy1745;
-		}
-	}
-yy1736:
-	{ return 0; }
-yy1737:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych <= 0x7F) {
-		if (yych == '\n') goto yy1736;
-		goto yy1750;
-	} else {
-		if (yych <= 0xC1) goto yy1736;
-		if (yych <= 0xF4) goto yy1750;
-		goto yy1736;
-	}
-yy1738:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yybm[0+yych] & 64) {
-		goto yy1747;
-	}
-	if (yych <= 0x7F) {
-		if (yych == '\n') goto yy1736;
-		goto yy1750;
-	} else {
-		if (yych <= 0xC1) goto yy1736;
-		if (yych <= 0xF4) goto yy1750;
-		goto yy1736;
-	}
-yy1739:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1740;
-	if (yych <= 0xBF) goto yy1737;
-yy1740:
-	p = marker;
-	if (yyaccept == 0) {
-		goto yy1736;
-	} else {
-		goto yy1760;
-	}
-yy1741:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy1740;
-	if (yych <= 0xBF) goto yy1739;
-	goto yy1740;
-yy1742:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1740;
-	if (yych <= 0xBF) goto yy1739;
-	goto yy1740;
-yy1743:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy1740;
-	if (yych <= 0xBF) goto yy1742;
-	goto yy1740;
-yy1744:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1740;
-	if (yych <= 0xBF) goto yy1742;
-	goto yy1740;
-yy1745:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1740;
-	if (yych <= 0x8F) goto yy1742;
-	goto yy1740;
-yy1746:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1740;
-	if (yych <= 0x9F) goto yy1739;
-	goto yy1740;
-yy1747:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1747;
-	}
-	if (yych <= 0xDF) {
-		if (yych <= '=') {
-			if (yych == '\n') goto yy1740;
-		} else {
-			if (yych <= '>') goto yy1759;
-			if (yych <= 0x7F) goto yy1749;
-			if (yych <= 0xC1) goto yy1740;
-			goto yy1751;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1752;
-			if (yych == 0xED) goto yy1757;
-			goto yy1753;
-		} else {
-			if (yych <= 0xF0) goto yy1754;
-			if (yych <= 0xF3) goto yy1755;
-			if (yych <= 0xF4) goto yy1756;
-			goto yy1740;
-		}
-	}
-yy1749:
-	++p;
-	yych = *p;
-yy1750:
-	if (yybm[0+yych] & 128) {
-		goto yy1749;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '\n') goto yy1740;
-			if (yych <= '-') goto yy1758;
-			goto yy1740;
-		} else {
-			if (yych <= 0xDF) goto yy1751;
-			if (yych <= 0xE0) goto yy1752;
-			goto yy1753;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1757;
-			if (yych <= 0xEF) goto yy1753;
-			goto yy1754;
-		} else {
-			if (yych <= 0xF3) goto yy1755;
-			if (yych <= 0xF4) goto yy1756;
-			goto yy1740;
-		}
-	}
-yy1751:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1740;
-	if (yych <= 0xBF) goto yy1749;
-	goto yy1740;
-yy1752:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1740;
-	if (yych <= 0xBF) goto yy1751;
-	goto yy1740;
-yy1753:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1740;
-	if (yych <= 0xBF) goto yy1751;
-	goto yy1740;
-yy1754:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1740;
-	if (yych <= 0xBF) goto yy1753;
-	goto yy1740;
-yy1755:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1740;
-	if (yych <= 0xBF) goto yy1753;
-	goto yy1740;
-yy1756:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1740;
-	if (yych <= 0x8F) goto yy1753;
-	goto yy1740;
-yy1757:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1740;
-	if (yych <= 0x9F) goto yy1751;
-	goto yy1740;
-yy1758:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy1749;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '\n') goto yy1740;
-			if (yych <= '-') goto yy1747;
-			goto yy1740;
-		} else {
-			if (yych <= 0xDF) goto yy1751;
-			if (yych <= 0xE0) goto yy1752;
-			goto yy1753;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1757;
-			if (yych <= 0xEF) goto yy1753;
-			goto yy1754;
-		} else {
-			if (yych <= 0xF3) goto yy1755;
-			if (yych <= 0xF4) goto yy1756;
-			goto yy1740;
-		}
-	}
-yy1759:
-	yyaccept = 1;
-	marker = ++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy1749;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '\n') goto yy1760;
-			if (yych <= '-') goto yy1758;
-		} else {
-			if (yych <= 0xDF) goto yy1751;
-			if (yych <= 0xE0) goto yy1752;
-			goto yy1753;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1757;
-			if (yych <= 0xEF) goto yy1753;
-			goto yy1754;
-		} else {
-			if (yych <= 0xF3) goto yy1755;
-			if (yych <= 0xF4) goto yy1756;
-		}
-	}
-yy1760:
-	{ return (bufsize_t)(p - start); }
-}
-
+  {
+    unsigned char yych;
+    unsigned int yyaccept = 0;
+    static const unsigned char yybm[] = {
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0,   128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 64,  128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0xDF) {
+      if (yych <= ',') {
+        if (yych != '\n')
+          goto yy1737;
+      } else {
+        if (yych <= '-')
+          goto yy1738;
+        if (yych <= 0x7F)
+          goto yy1737;
+        if (yych >= 0xC2)
+          goto yy1739;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1741;
+        if (yych == 0xED)
+          goto yy1746;
+        goto yy1742;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1743;
+        if (yych <= 0xF3)
+          goto yy1744;
+        if (yych <= 0xF4)
+          goto yy1745;
+      }
+    }
+  yy1736 : { return 0; }
+  yy1737:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych <= 0x7F) {
+      if (yych == '\n')
+        goto yy1736;
+      goto yy1750;
+    } else {
+      if (yych <= 0xC1)
+        goto yy1736;
+      if (yych <= 0xF4)
+        goto yy1750;
+      goto yy1736;
+    }
+  yy1738:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yybm[0 + yych] & 64) {
+      goto yy1747;
+    }
+    if (yych <= 0x7F) {
+      if (yych == '\n')
+        goto yy1736;
+      goto yy1750;
+    } else {
+      if (yych <= 0xC1)
+        goto yy1736;
+      if (yych <= 0xF4)
+        goto yy1750;
+      goto yy1736;
+    }
+  yy1739:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1740;
+    if (yych <= 0xBF)
+      goto yy1737;
+  yy1740:
+    p = marker;
+    if (yyaccept == 0) {
+      goto yy1736;
+    } else {
+      goto yy1760;
+    }
+  yy1741:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy1740;
+    if (yych <= 0xBF)
+      goto yy1739;
+    goto yy1740;
+  yy1742:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1740;
+    if (yych <= 0xBF)
+      goto yy1739;
+    goto yy1740;
+  yy1743:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy1740;
+    if (yych <= 0xBF)
+      goto yy1742;
+    goto yy1740;
+  yy1744:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1740;
+    if (yych <= 0xBF)
+      goto yy1742;
+    goto yy1740;
+  yy1745:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1740;
+    if (yych <= 0x8F)
+      goto yy1742;
+    goto yy1740;
+  yy1746:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1740;
+    if (yych <= 0x9F)
+      goto yy1739;
+    goto yy1740;
+  yy1747:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1747;
+    }
+    if (yych <= 0xDF) {
+      if (yych <= '=') {
+        if (yych == '\n')
+          goto yy1740;
+      } else {
+        if (yych <= '>')
+          goto yy1759;
+        if (yych <= 0x7F)
+          goto yy1749;
+        if (yych <= 0xC1)
+          goto yy1740;
+        goto yy1751;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1752;
+        if (yych == 0xED)
+          goto yy1757;
+        goto yy1753;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1754;
+        if (yych <= 0xF3)
+          goto yy1755;
+        if (yych <= 0xF4)
+          goto yy1756;
+        goto yy1740;
+      }
+    }
+  yy1749:
+    ++p;
+    yych = *p;
+  yy1750:
+    if (yybm[0 + yych] & 128) {
+      goto yy1749;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '\n')
+          goto yy1740;
+        if (yych <= '-')
+          goto yy1758;
+        goto yy1740;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1751;
+        if (yych <= 0xE0)
+          goto yy1752;
+        goto yy1753;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1757;
+        if (yych <= 0xEF)
+          goto yy1753;
+        goto yy1754;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1755;
+        if (yych <= 0xF4)
+          goto yy1756;
+        goto yy1740;
+      }
+    }
+  yy1751:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1740;
+    if (yych <= 0xBF)
+      goto yy1749;
+    goto yy1740;
+  yy1752:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1740;
+    if (yych <= 0xBF)
+      goto yy1751;
+    goto yy1740;
+  yy1753:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1740;
+    if (yych <= 0xBF)
+      goto yy1751;
+    goto yy1740;
+  yy1754:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1740;
+    if (yych <= 0xBF)
+      goto yy1753;
+    goto yy1740;
+  yy1755:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1740;
+    if (yych <= 0xBF)
+      goto yy1753;
+    goto yy1740;
+  yy1756:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1740;
+    if (yych <= 0x8F)
+      goto yy1753;
+    goto yy1740;
+  yy1757:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1740;
+    if (yych <= 0x9F)
+      goto yy1751;
+    goto yy1740;
+  yy1758:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy1749;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '\n')
+          goto yy1740;
+        if (yych <= '-')
+          goto yy1747;
+        goto yy1740;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1751;
+        if (yych <= 0xE0)
+          goto yy1752;
+        goto yy1753;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1757;
+        if (yych <= 0xEF)
+          goto yy1753;
+        goto yy1754;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1755;
+        if (yych <= 0xF4)
+          goto yy1756;
+        goto yy1740;
+      }
+    }
+  yy1759:
+    yyaccept = 1;
+    marker = ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy1749;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '\n')
+          goto yy1760;
+        if (yych <= '-')
+          goto yy1758;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1751;
+        if (yych <= 0xE0)
+          goto yy1752;
+        goto yy1753;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1757;
+        if (yych <= 0xEF)
+          goto yy1753;
+        goto yy1754;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1755;
+        if (yych <= 0xF4)
+          goto yy1756;
+      }
+    }
+  yy1760 : { return (bufsize_t)(p - start); }
+  }
 }
 
 // Try to match an HTML block end line of type 3
-bufsize_t _scan_html_block_end_3(const unsigned char *p)
-{
+bufsize_t _scan_html_block_end_3(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	unsigned int yyaccept = 0;
-	static const unsigned char yybm[] = {
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128,   0, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128,  64, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0xDF) {
-		if (yych <= '>') {
-			if (yych != '\n') goto yy1764;
-		} else {
-			if (yych <= '?') goto yy1765;
-			if (yych <= 0x7F) goto yy1764;
-			if (yych >= 0xC2) goto yy1766;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1768;
-			if (yych == 0xED) goto yy1773;
-			goto yy1769;
-		} else {
-			if (yych <= 0xF0) goto yy1770;
-			if (yych <= 0xF3) goto yy1771;
-			if (yych <= 0xF4) goto yy1772;
-		}
-	}
-yy1763:
-	{ return 0; }
-yy1764:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych <= 0x7F) {
-		if (yych == '\n') goto yy1763;
-		goto yy1779;
-	} else {
-		if (yych <= 0xC1) goto yy1763;
-		if (yych <= 0xF4) goto yy1779;
-		goto yy1763;
-	}
-yy1765:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych <= '>') {
-		if (yych == '\n') goto yy1763;
-		if (yych <= '=') goto yy1779;
-		goto yy1774;
-	} else {
-		if (yych <= 0x7F) goto yy1779;
-		if (yych <= 0xC1) goto yy1763;
-		if (yych <= 0xF4) goto yy1779;
-		goto yy1763;
-	}
-yy1766:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1767;
-	if (yych <= 0xBF) goto yy1764;
-yy1767:
-	p = marker;
-	if (yyaccept == 0) {
-		goto yy1763;
-	} else {
-		goto yy1775;
-	}
-yy1768:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy1767;
-	if (yych <= 0xBF) goto yy1766;
-	goto yy1767;
-yy1769:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1767;
-	if (yych <= 0xBF) goto yy1766;
-	goto yy1767;
-yy1770:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy1767;
-	if (yych <= 0xBF) goto yy1769;
-	goto yy1767;
-yy1771:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1767;
-	if (yych <= 0xBF) goto yy1769;
-	goto yy1767;
-yy1772:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1767;
-	if (yych <= 0x8F) goto yy1769;
-	goto yy1767;
-yy1773:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1767;
-	if (yych <= 0x9F) goto yy1766;
-	goto yy1767;
-yy1774:
-	yyaccept = 1;
-	marker = ++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy1778;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '\n') goto yy1775;
-			if (yych <= '?') goto yy1776;
-		} else {
-			if (yych <= 0xDF) goto yy1780;
-			if (yych <= 0xE0) goto yy1781;
-			goto yy1782;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1786;
-			if (yych <= 0xEF) goto yy1782;
-			goto yy1783;
-		} else {
-			if (yych <= 0xF3) goto yy1784;
-			if (yych <= 0xF4) goto yy1785;
-		}
-	}
-yy1775:
-	{ return (bufsize_t)(p - start); }
-yy1776:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1776;
-	}
-	if (yych <= 0xDF) {
-		if (yych <= '=') {
-			if (yych == '\n') goto yy1767;
-		} else {
-			if (yych <= '>') goto yy1774;
-			if (yych <= 0x7F) goto yy1778;
-			if (yych <= 0xC1) goto yy1767;
-			goto yy1780;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1781;
-			if (yych == 0xED) goto yy1786;
-			goto yy1782;
-		} else {
-			if (yych <= 0xF0) goto yy1783;
-			if (yych <= 0xF3) goto yy1784;
-			if (yych <= 0xF4) goto yy1785;
-			goto yy1767;
-		}
-	}
-yy1778:
-	++p;
-	yych = *p;
-yy1779:
-	if (yybm[0+yych] & 128) {
-		goto yy1778;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '\n') goto yy1767;
-			if (yych <= '?') goto yy1776;
-			goto yy1767;
-		} else {
-			if (yych <= 0xDF) goto yy1780;
-			if (yych <= 0xE0) goto yy1781;
-			goto yy1782;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1786;
-			if (yych <= 0xEF) goto yy1782;
-			goto yy1783;
-		} else {
-			if (yych <= 0xF3) goto yy1784;
-			if (yych <= 0xF4) goto yy1785;
-			goto yy1767;
-		}
-	}
-yy1780:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1767;
-	if (yych <= 0xBF) goto yy1778;
-	goto yy1767;
-yy1781:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1767;
-	if (yych <= 0xBF) goto yy1780;
-	goto yy1767;
-yy1782:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1767;
-	if (yych <= 0xBF) goto yy1780;
-	goto yy1767;
-yy1783:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1767;
-	if (yych <= 0xBF) goto yy1782;
-	goto yy1767;
-yy1784:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1767;
-	if (yych <= 0xBF) goto yy1782;
-	goto yy1767;
-yy1785:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1767;
-	if (yych <= 0x8F) goto yy1782;
-	goto yy1767;
-yy1786:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1767;
-	if (yych <= 0x9F) goto yy1780;
-	goto yy1767;
-}
-
+  {
+    unsigned char yych;
+    unsigned int yyaccept = 0;
+    static const unsigned char yybm[] = {
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0,   128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 64,  128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0xDF) {
+      if (yych <= '>') {
+        if (yych != '\n')
+          goto yy1764;
+      } else {
+        if (yych <= '?')
+          goto yy1765;
+        if (yych <= 0x7F)
+          goto yy1764;
+        if (yych >= 0xC2)
+          goto yy1766;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1768;
+        if (yych == 0xED)
+          goto yy1773;
+        goto yy1769;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1770;
+        if (yych <= 0xF3)
+          goto yy1771;
+        if (yych <= 0xF4)
+          goto yy1772;
+      }
+    }
+  yy1763 : { return 0; }
+  yy1764:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych <= 0x7F) {
+      if (yych == '\n')
+        goto yy1763;
+      goto yy1779;
+    } else {
+      if (yych <= 0xC1)
+        goto yy1763;
+      if (yych <= 0xF4)
+        goto yy1779;
+      goto yy1763;
+    }
+  yy1765:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych <= '>') {
+      if (yych == '\n')
+        goto yy1763;
+      if (yych <= '=')
+        goto yy1779;
+      goto yy1774;
+    } else {
+      if (yych <= 0x7F)
+        goto yy1779;
+      if (yych <= 0xC1)
+        goto yy1763;
+      if (yych <= 0xF4)
+        goto yy1779;
+      goto yy1763;
+    }
+  yy1766:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1767;
+    if (yych <= 0xBF)
+      goto yy1764;
+  yy1767:
+    p = marker;
+    if (yyaccept == 0) {
+      goto yy1763;
+    } else {
+      goto yy1775;
+    }
+  yy1768:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy1767;
+    if (yych <= 0xBF)
+      goto yy1766;
+    goto yy1767;
+  yy1769:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1767;
+    if (yych <= 0xBF)
+      goto yy1766;
+    goto yy1767;
+  yy1770:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy1767;
+    if (yych <= 0xBF)
+      goto yy1769;
+    goto yy1767;
+  yy1771:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1767;
+    if (yych <= 0xBF)
+      goto yy1769;
+    goto yy1767;
+  yy1772:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1767;
+    if (yych <= 0x8F)
+      goto yy1769;
+    goto yy1767;
+  yy1773:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1767;
+    if (yych <= 0x9F)
+      goto yy1766;
+    goto yy1767;
+  yy1774:
+    yyaccept = 1;
+    marker = ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy1778;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '\n')
+          goto yy1775;
+        if (yych <= '?')
+          goto yy1776;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1780;
+        if (yych <= 0xE0)
+          goto yy1781;
+        goto yy1782;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1786;
+        if (yych <= 0xEF)
+          goto yy1782;
+        goto yy1783;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1784;
+        if (yych <= 0xF4)
+          goto yy1785;
+      }
+    }
+  yy1775 : { return (bufsize_t)(p - start); }
+  yy1776:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1776;
+    }
+    if (yych <= 0xDF) {
+      if (yych <= '=') {
+        if (yych == '\n')
+          goto yy1767;
+      } else {
+        if (yych <= '>')
+          goto yy1774;
+        if (yych <= 0x7F)
+          goto yy1778;
+        if (yych <= 0xC1)
+          goto yy1767;
+        goto yy1780;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1781;
+        if (yych == 0xED)
+          goto yy1786;
+        goto yy1782;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1783;
+        if (yych <= 0xF3)
+          goto yy1784;
+        if (yych <= 0xF4)
+          goto yy1785;
+        goto yy1767;
+      }
+    }
+  yy1778:
+    ++p;
+    yych = *p;
+  yy1779:
+    if (yybm[0 + yych] & 128) {
+      goto yy1778;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '\n')
+          goto yy1767;
+        if (yych <= '?')
+          goto yy1776;
+        goto yy1767;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1780;
+        if (yych <= 0xE0)
+          goto yy1781;
+        goto yy1782;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1786;
+        if (yych <= 0xEF)
+          goto yy1782;
+        goto yy1783;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1784;
+        if (yych <= 0xF4)
+          goto yy1785;
+        goto yy1767;
+      }
+    }
+  yy1780:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1767;
+    if (yych <= 0xBF)
+      goto yy1778;
+    goto yy1767;
+  yy1781:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1767;
+    if (yych <= 0xBF)
+      goto yy1780;
+    goto yy1767;
+  yy1782:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1767;
+    if (yych <= 0xBF)
+      goto yy1780;
+    goto yy1767;
+  yy1783:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1767;
+    if (yych <= 0xBF)
+      goto yy1782;
+    goto yy1767;
+  yy1784:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1767;
+    if (yych <= 0xBF)
+      goto yy1782;
+    goto yy1767;
+  yy1785:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1767;
+    if (yych <= 0x8F)
+      goto yy1782;
+    goto yy1767;
+  yy1786:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1767;
+    if (yych <= 0x9F)
+      goto yy1780;
+    goto yy1767;
+  }
 }
 
 // Try to match an HTML block end line of type 4
-bufsize_t _scan_html_block_end_4(const unsigned char *p)
-{
+bufsize_t _scan_html_block_end_4(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	unsigned int yyaccept = 0;
-	static const unsigned char yybm[] = {
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128,   0, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128,  64, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0xDF) {
-		if (yych <= '=') {
-			if (yych != '\n') goto yy1790;
-		} else {
-			if (yych <= '>') goto yy1791;
-			if (yych <= 0x7F) goto yy1790;
-			if (yych >= 0xC2) goto yy1793;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1795;
-			if (yych == 0xED) goto yy1800;
-			goto yy1796;
-		} else {
-			if (yych <= 0xF0) goto yy1797;
-			if (yych <= 0xF3) goto yy1798;
-			if (yych <= 0xF4) goto yy1799;
-		}
-	}
-yy1789:
-	{ return 0; }
-yy1790:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych <= 0x7F) {
-		if (yych == '\n') goto yy1789;
-		goto yy1804;
-	} else {
-		if (yych <= 0xC1) goto yy1789;
-		if (yych <= 0xF4) goto yy1804;
-		goto yy1789;
-	}
-yy1791:
-	yyaccept = 1;
-	yych = *(marker = ++p);
-	if (yych <= 0x7F) {
-		if (yych != '\n') goto yy1804;
-	} else {
-		if (yych <= 0xC1) goto yy1792;
-		if (yych <= 0xF4) goto yy1804;
-	}
-yy1792:
-	{ return (bufsize_t)(p - start); }
-yy1793:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1794;
-	if (yych <= 0xBF) goto yy1790;
-yy1794:
-	p = marker;
-	if (yyaccept == 0) {
-		goto yy1789;
-	} else {
-		goto yy1792;
-	}
-yy1795:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy1794;
-	if (yych <= 0xBF) goto yy1793;
-	goto yy1794;
-yy1796:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1794;
-	if (yych <= 0xBF) goto yy1793;
-	goto yy1794;
-yy1797:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy1794;
-	if (yych <= 0xBF) goto yy1796;
-	goto yy1794;
-yy1798:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1794;
-	if (yych <= 0xBF) goto yy1796;
-	goto yy1794;
-yy1799:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1794;
-	if (yych <= 0x8F) goto yy1796;
-	goto yy1794;
-yy1800:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1794;
-	if (yych <= 0x9F) goto yy1793;
-	goto yy1794;
-yy1801:
-	yyaccept = 1;
-	marker = ++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy1803;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '\n') goto yy1792;
-			if (yych <= '>') goto yy1801;
-			goto yy1792;
-		} else {
-			if (yych <= 0xDF) goto yy1805;
-			if (yych <= 0xE0) goto yy1806;
-			goto yy1807;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1811;
-			if (yych <= 0xEF) goto yy1807;
-			goto yy1808;
-		} else {
-			if (yych <= 0xF3) goto yy1809;
-			if (yych <= 0xF4) goto yy1810;
-			goto yy1792;
-		}
-	}
-yy1803:
-	++p;
-	yych = *p;
-yy1804:
-	if (yybm[0+yych] & 128) {
-		goto yy1803;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '\n') goto yy1794;
-			if (yych <= '>') goto yy1801;
-			goto yy1794;
-		} else {
-			if (yych <= 0xDF) goto yy1805;
-			if (yych <= 0xE0) goto yy1806;
-			goto yy1807;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1811;
-			if (yych <= 0xEF) goto yy1807;
-			goto yy1808;
-		} else {
-			if (yych <= 0xF3) goto yy1809;
-			if (yych <= 0xF4) goto yy1810;
-			goto yy1794;
-		}
-	}
-yy1805:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1794;
-	if (yych <= 0xBF) goto yy1803;
-	goto yy1794;
-yy1806:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1794;
-	if (yych <= 0xBF) goto yy1805;
-	goto yy1794;
-yy1807:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1794;
-	if (yych <= 0xBF) goto yy1805;
-	goto yy1794;
-yy1808:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1794;
-	if (yych <= 0xBF) goto yy1807;
-	goto yy1794;
-yy1809:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1794;
-	if (yych <= 0xBF) goto yy1807;
-	goto yy1794;
-yy1810:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1794;
-	if (yych <= 0x8F) goto yy1807;
-	goto yy1794;
-yy1811:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1794;
-	if (yych <= 0x9F) goto yy1805;
-	goto yy1794;
-}
-
+  {
+    unsigned char yych;
+    unsigned int yyaccept = 0;
+    static const unsigned char yybm[] = {
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0,   128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 64,  128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0xDF) {
+      if (yych <= '=') {
+        if (yych != '\n')
+          goto yy1790;
+      } else {
+        if (yych <= '>')
+          goto yy1791;
+        if (yych <= 0x7F)
+          goto yy1790;
+        if (yych >= 0xC2)
+          goto yy1793;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1795;
+        if (yych == 0xED)
+          goto yy1800;
+        goto yy1796;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1797;
+        if (yych <= 0xF3)
+          goto yy1798;
+        if (yych <= 0xF4)
+          goto yy1799;
+      }
+    }
+  yy1789 : { return 0; }
+  yy1790:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych <= 0x7F) {
+      if (yych == '\n')
+        goto yy1789;
+      goto yy1804;
+    } else {
+      if (yych <= 0xC1)
+        goto yy1789;
+      if (yych <= 0xF4)
+        goto yy1804;
+      goto yy1789;
+    }
+  yy1791:
+    yyaccept = 1;
+    yych = *(marker = ++p);
+    if (yych <= 0x7F) {
+      if (yych != '\n')
+        goto yy1804;
+    } else {
+      if (yych <= 0xC1)
+        goto yy1792;
+      if (yych <= 0xF4)
+        goto yy1804;
+    }
+  yy1792 : { return (bufsize_t)(p - start); }
+  yy1793:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1794;
+    if (yych <= 0xBF)
+      goto yy1790;
+  yy1794:
+    p = marker;
+    if (yyaccept == 0) {
+      goto yy1789;
+    } else {
+      goto yy1792;
+    }
+  yy1795:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy1794;
+    if (yych <= 0xBF)
+      goto yy1793;
+    goto yy1794;
+  yy1796:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1794;
+    if (yych <= 0xBF)
+      goto yy1793;
+    goto yy1794;
+  yy1797:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy1794;
+    if (yych <= 0xBF)
+      goto yy1796;
+    goto yy1794;
+  yy1798:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1794;
+    if (yych <= 0xBF)
+      goto yy1796;
+    goto yy1794;
+  yy1799:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1794;
+    if (yych <= 0x8F)
+      goto yy1796;
+    goto yy1794;
+  yy1800:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1794;
+    if (yych <= 0x9F)
+      goto yy1793;
+    goto yy1794;
+  yy1801:
+    yyaccept = 1;
+    marker = ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy1803;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '\n')
+          goto yy1792;
+        if (yych <= '>')
+          goto yy1801;
+        goto yy1792;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1805;
+        if (yych <= 0xE0)
+          goto yy1806;
+        goto yy1807;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1811;
+        if (yych <= 0xEF)
+          goto yy1807;
+        goto yy1808;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1809;
+        if (yych <= 0xF4)
+          goto yy1810;
+        goto yy1792;
+      }
+    }
+  yy1803:
+    ++p;
+    yych = *p;
+  yy1804:
+    if (yybm[0 + yych] & 128) {
+      goto yy1803;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '\n')
+          goto yy1794;
+        if (yych <= '>')
+          goto yy1801;
+        goto yy1794;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1805;
+        if (yych <= 0xE0)
+          goto yy1806;
+        goto yy1807;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1811;
+        if (yych <= 0xEF)
+          goto yy1807;
+        goto yy1808;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1809;
+        if (yych <= 0xF4)
+          goto yy1810;
+        goto yy1794;
+      }
+    }
+  yy1805:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1794;
+    if (yych <= 0xBF)
+      goto yy1803;
+    goto yy1794;
+  yy1806:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1794;
+    if (yych <= 0xBF)
+      goto yy1805;
+    goto yy1794;
+  yy1807:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1794;
+    if (yych <= 0xBF)
+      goto yy1805;
+    goto yy1794;
+  yy1808:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1794;
+    if (yych <= 0xBF)
+      goto yy1807;
+    goto yy1794;
+  yy1809:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1794;
+    if (yych <= 0xBF)
+      goto yy1807;
+    goto yy1794;
+  yy1810:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1794;
+    if (yych <= 0x8F)
+      goto yy1807;
+    goto yy1794;
+  yy1811:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1794;
+    if (yych <= 0x9F)
+      goto yy1805;
+    goto yy1794;
+  }
 }
 
 // Try to match an HTML block end line of type 5
-bufsize_t _scan_html_block_end_5(const unsigned char *p)
-{
+bufsize_t _scan_html_block_end_5(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	unsigned int yyaccept = 0;
-	static const unsigned char yybm[] = {
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128,   0, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128,  64, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0xDF) {
-		if (yych <= '\\') {
-			if (yych != '\n') goto yy1815;
-		} else {
-			if (yych <= ']') goto yy1816;
-			if (yych <= 0x7F) goto yy1815;
-			if (yych >= 0xC2) goto yy1817;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1819;
-			if (yych == 0xED) goto yy1824;
-			goto yy1820;
-		} else {
-			if (yych <= 0xF0) goto yy1821;
-			if (yych <= 0xF3) goto yy1822;
-			if (yych <= 0xF4) goto yy1823;
-		}
-	}
-yy1814:
-	{ return 0; }
-yy1815:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych <= 0x7F) {
-		if (yych == '\n') goto yy1814;
-		goto yy1828;
-	} else {
-		if (yych <= 0xC1) goto yy1814;
-		if (yych <= 0xF4) goto yy1828;
-		goto yy1814;
-	}
-yy1816:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yybm[0+yych] & 64) {
-		goto yy1825;
-	}
-	if (yych <= 0x7F) {
-		if (yych == '\n') goto yy1814;
-		goto yy1828;
-	} else {
-		if (yych <= 0xC1) goto yy1814;
-		if (yych <= 0xF4) goto yy1828;
-		goto yy1814;
-	}
-yy1817:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1818;
-	if (yych <= 0xBF) goto yy1815;
-yy1818:
-	p = marker;
-	if (yyaccept == 0) {
-		goto yy1814;
-	} else {
-		goto yy1838;
-	}
-yy1819:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy1818;
-	if (yych <= 0xBF) goto yy1817;
-	goto yy1818;
-yy1820:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1818;
-	if (yych <= 0xBF) goto yy1817;
-	goto yy1818;
-yy1821:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy1818;
-	if (yych <= 0xBF) goto yy1820;
-	goto yy1818;
-yy1822:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1818;
-	if (yych <= 0xBF) goto yy1820;
-	goto yy1818;
-yy1823:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1818;
-	if (yych <= 0x8F) goto yy1820;
-	goto yy1818;
-yy1824:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1818;
-	if (yych <= 0x9F) goto yy1817;
-	goto yy1818;
-yy1825:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1825;
-	}
-	if (yych <= 0xDF) {
-		if (yych <= '=') {
-			if (yych == '\n') goto yy1818;
-		} else {
-			if (yych <= '>') goto yy1837;
-			if (yych <= 0x7F) goto yy1827;
-			if (yych <= 0xC1) goto yy1818;
-			goto yy1829;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1830;
-			if (yych == 0xED) goto yy1835;
-			goto yy1831;
-		} else {
-			if (yych <= 0xF0) goto yy1832;
-			if (yych <= 0xF3) goto yy1833;
-			if (yych <= 0xF4) goto yy1834;
-			goto yy1818;
-		}
-	}
-yy1827:
-	++p;
-	yych = *p;
-yy1828:
-	if (yybm[0+yych] & 128) {
-		goto yy1827;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '\n') goto yy1818;
-			if (yych <= ']') goto yy1836;
-			goto yy1818;
-		} else {
-			if (yych <= 0xDF) goto yy1829;
-			if (yych <= 0xE0) goto yy1830;
-			goto yy1831;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1835;
-			if (yych <= 0xEF) goto yy1831;
-			goto yy1832;
-		} else {
-			if (yych <= 0xF3) goto yy1833;
-			if (yych <= 0xF4) goto yy1834;
-			goto yy1818;
-		}
-	}
-yy1829:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1818;
-	if (yych <= 0xBF) goto yy1827;
-	goto yy1818;
-yy1830:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1818;
-	if (yych <= 0xBF) goto yy1829;
-	goto yy1818;
-yy1831:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1818;
-	if (yych <= 0xBF) goto yy1829;
-	goto yy1818;
-yy1832:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1818;
-	if (yych <= 0xBF) goto yy1831;
-	goto yy1818;
-yy1833:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1818;
-	if (yych <= 0xBF) goto yy1831;
-	goto yy1818;
-yy1834:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1818;
-	if (yych <= 0x8F) goto yy1831;
-	goto yy1818;
-yy1835:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1818;
-	if (yych <= 0x9F) goto yy1829;
-	goto yy1818;
-yy1836:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy1827;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '\n') goto yy1818;
-			if (yych <= ']') goto yy1825;
-			goto yy1818;
-		} else {
-			if (yych <= 0xDF) goto yy1829;
-			if (yych <= 0xE0) goto yy1830;
-			goto yy1831;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1835;
-			if (yych <= 0xEF) goto yy1831;
-			goto yy1832;
-		} else {
-			if (yych <= 0xF3) goto yy1833;
-			if (yych <= 0xF4) goto yy1834;
-			goto yy1818;
-		}
-	}
-yy1837:
-	yyaccept = 1;
-	marker = ++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy1827;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= '\n') goto yy1838;
-			if (yych <= ']') goto yy1836;
-		} else {
-			if (yych <= 0xDF) goto yy1829;
-			if (yych <= 0xE0) goto yy1830;
-			goto yy1831;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1835;
-			if (yych <= 0xEF) goto yy1831;
-			goto yy1832;
-		} else {
-			if (yych <= 0xF3) goto yy1833;
-			if (yych <= 0xF4) goto yy1834;
-		}
-	}
-yy1838:
-	{ return (bufsize_t)(p - start); }
-}
-
+  {
+    unsigned char yych;
+    unsigned int yyaccept = 0;
+    static const unsigned char yybm[] = {
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0,   128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 64,  128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0xDF) {
+      if (yych <= '\\') {
+        if (yych != '\n')
+          goto yy1815;
+      } else {
+        if (yych <= ']')
+          goto yy1816;
+        if (yych <= 0x7F)
+          goto yy1815;
+        if (yych >= 0xC2)
+          goto yy1817;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1819;
+        if (yych == 0xED)
+          goto yy1824;
+        goto yy1820;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1821;
+        if (yych <= 0xF3)
+          goto yy1822;
+        if (yych <= 0xF4)
+          goto yy1823;
+      }
+    }
+  yy1814 : { return 0; }
+  yy1815:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych <= 0x7F) {
+      if (yych == '\n')
+        goto yy1814;
+      goto yy1828;
+    } else {
+      if (yych <= 0xC1)
+        goto yy1814;
+      if (yych <= 0xF4)
+        goto yy1828;
+      goto yy1814;
+    }
+  yy1816:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yybm[0 + yych] & 64) {
+      goto yy1825;
+    }
+    if (yych <= 0x7F) {
+      if (yych == '\n')
+        goto yy1814;
+      goto yy1828;
+    } else {
+      if (yych <= 0xC1)
+        goto yy1814;
+      if (yych <= 0xF4)
+        goto yy1828;
+      goto yy1814;
+    }
+  yy1817:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1818;
+    if (yych <= 0xBF)
+      goto yy1815;
+  yy1818:
+    p = marker;
+    if (yyaccept == 0) {
+      goto yy1814;
+    } else {
+      goto yy1838;
+    }
+  yy1819:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy1818;
+    if (yych <= 0xBF)
+      goto yy1817;
+    goto yy1818;
+  yy1820:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1818;
+    if (yych <= 0xBF)
+      goto yy1817;
+    goto yy1818;
+  yy1821:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy1818;
+    if (yych <= 0xBF)
+      goto yy1820;
+    goto yy1818;
+  yy1822:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1818;
+    if (yych <= 0xBF)
+      goto yy1820;
+    goto yy1818;
+  yy1823:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1818;
+    if (yych <= 0x8F)
+      goto yy1820;
+    goto yy1818;
+  yy1824:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1818;
+    if (yych <= 0x9F)
+      goto yy1817;
+    goto yy1818;
+  yy1825:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1825;
+    }
+    if (yych <= 0xDF) {
+      if (yych <= '=') {
+        if (yych == '\n')
+          goto yy1818;
+      } else {
+        if (yych <= '>')
+          goto yy1837;
+        if (yych <= 0x7F)
+          goto yy1827;
+        if (yych <= 0xC1)
+          goto yy1818;
+        goto yy1829;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1830;
+        if (yych == 0xED)
+          goto yy1835;
+        goto yy1831;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1832;
+        if (yych <= 0xF3)
+          goto yy1833;
+        if (yych <= 0xF4)
+          goto yy1834;
+        goto yy1818;
+      }
+    }
+  yy1827:
+    ++p;
+    yych = *p;
+  yy1828:
+    if (yybm[0 + yych] & 128) {
+      goto yy1827;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '\n')
+          goto yy1818;
+        if (yych <= ']')
+          goto yy1836;
+        goto yy1818;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1829;
+        if (yych <= 0xE0)
+          goto yy1830;
+        goto yy1831;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1835;
+        if (yych <= 0xEF)
+          goto yy1831;
+        goto yy1832;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1833;
+        if (yych <= 0xF4)
+          goto yy1834;
+        goto yy1818;
+      }
+    }
+  yy1829:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1818;
+    if (yych <= 0xBF)
+      goto yy1827;
+    goto yy1818;
+  yy1830:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1818;
+    if (yych <= 0xBF)
+      goto yy1829;
+    goto yy1818;
+  yy1831:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1818;
+    if (yych <= 0xBF)
+      goto yy1829;
+    goto yy1818;
+  yy1832:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1818;
+    if (yych <= 0xBF)
+      goto yy1831;
+    goto yy1818;
+  yy1833:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1818;
+    if (yych <= 0xBF)
+      goto yy1831;
+    goto yy1818;
+  yy1834:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1818;
+    if (yych <= 0x8F)
+      goto yy1831;
+    goto yy1818;
+  yy1835:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1818;
+    if (yych <= 0x9F)
+      goto yy1829;
+    goto yy1818;
+  yy1836:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy1827;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '\n')
+          goto yy1818;
+        if (yych <= ']')
+          goto yy1825;
+        goto yy1818;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1829;
+        if (yych <= 0xE0)
+          goto yy1830;
+        goto yy1831;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1835;
+        if (yych <= 0xEF)
+          goto yy1831;
+        goto yy1832;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1833;
+        if (yych <= 0xF4)
+          goto yy1834;
+        goto yy1818;
+      }
+    }
+  yy1837:
+    yyaccept = 1;
+    marker = ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy1827;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= '\n')
+          goto yy1838;
+        if (yych <= ']')
+          goto yy1836;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1829;
+        if (yych <= 0xE0)
+          goto yy1830;
+        goto yy1831;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1835;
+        if (yych <= 0xEF)
+          goto yy1831;
+        goto yy1832;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1833;
+        if (yych <= 0xF4)
+          goto yy1834;
+      }
+    }
+  yy1838 : { return (bufsize_t)(p - start); }
+  }
 }
 
 // Try to match a URL in a link or reference, return number of chars matched.
 // This may optionally be contained in <..>; otherwise
 // whitespace and unbalanced right parentheses aren't allowed.
 // Newlines aren't ever allowed.
-bufsize_t _scan_link_url(const unsigned char *p)
-{
+bufsize_t _scan_link_url(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	unsigned int yyaccept = 0;
-	static const unsigned char yybm[] = {
-		  0, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128,   8, 128, 128,   8, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		128, 128, 128, 128, 128, 128, 128, 128, 
-		136, 224, 224, 224, 224, 224, 224, 224, 
-		128, 128, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224,  32, 224,  32, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224,  16, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= '[') {
-		if (yych <= ' ') {
-			if (yych <= '\f') {
-				if (yych == '\n') goto yy1842;
-				goto yy1858;
-			} else {
-				if (yych <= '\r') goto yy1844;
-				if (yych <= 0x1F) goto yy1858;
-				goto yy1844;
-			}
-		} else {
-			if (yych <= ')') {
-				if (yych <= '\'') goto yy1846;
-				if (yych <= '(') goto yy1857;
-				goto yy1858;
-			} else {
-				if (yych == '<') goto yy1845;
-				goto yy1846;
-			}
-		}
-	} else {
-		if (yych <= 0xEC) {
-			if (yych <= 0xC1) {
-				if (yych <= '\\') goto yy1855;
-				if (yych <= 0x7F) goto yy1846;
-			} else {
-				if (yych <= 0xDF) goto yy1847;
-				if (yych <= 0xE0) goto yy1849;
-				goto yy1850;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xED) goto yy1854;
-				if (yych <= 0xEF) goto yy1850;
-				goto yy1851;
-			} else {
-				if (yych <= 0xF3) goto yy1852;
-				if (yych <= 0xF4) goto yy1853;
-			}
-		}
-	}
-yy1841:
-	{ return (bufsize_t)(p - start); }
-yy1842:
-	yyaccept = 0;
-	marker = ++p;
-	yych = *p;
-yy1843:
-	if (yybm[0+yych] & 8) {
-		goto yy1842;
-	}
-	if (yych <= 0x7F) {
-		if (yych <= ')') {
-			if (yych <= 0x1F) goto yy1841;
-			if (yych <= '\'') goto yy1870;
-			if (yych <= '(') goto yy1861;
-			goto yy1841;
-		} else {
-			if (yych <= '<') {
-				if (yych <= ';') goto yy1870;
-				goto yy1905;
-			} else {
-				if (yych == '\\') goto yy1879;
-				goto yy1870;
-			}
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) {
-				if (yych <= 0xC1) goto yy1841;
-				goto yy1872;
-			} else {
-				if (yych <= 0xE0) goto yy1873;
-				if (yych <= 0xEC) goto yy1874;
-				goto yy1878;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1874;
-				goto yy1875;
-			} else {
-				if (yych <= 0xF3) goto yy1876;
-				if (yych <= 0xF4) goto yy1877;
-				goto yy1841;
-			}
-		}
-	}
-yy1844:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	goto yy1843;
-yy1845:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yybm[0+yych] & 64) {
-		goto yy1905;
-	}
-	if (yych <= '>') {
-		if (yych <= '\r') {
-			if (yych <= '\t') {
-				if (yych <= 0x00) goto yy1841;
-				goto yy1919;
-			} else {
-				if (yych <= '\n') goto yy1841;
-				if (yych <= '\f') goto yy1919;
-				goto yy1841;
-			}
-		} else {
-			if (yych <= '(') {
-				if (yych <= ' ') goto yy1919;
-				goto yy1917;
-			} else {
-				if (yych <= ')') goto yy1919;
-				if (yych <= '<') goto yy1870;
-				goto yy1907;
-			}
-		}
-	} else {
-		if (yych <= 0xEC) {
-			if (yych <= 0xC1) {
-				if (yych <= '\\') goto yy1916;
-				goto yy1841;
-			} else {
-				if (yych <= 0xDF) goto yy1909;
-				if (yych <= 0xE0) goto yy1910;
-				goto yy1911;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xED) goto yy1915;
-				if (yych <= 0xEF) goto yy1911;
-				goto yy1912;
-			} else {
-				if (yych <= 0xF3) goto yy1913;
-				if (yych <= 0xF4) goto yy1914;
-				goto yy1841;
-			}
-		}
-	}
-yy1846:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	goto yy1871;
-yy1847:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1846;
-yy1848:
-	p = marker;
-	if (yyaccept <= 1) {
-		if (yyaccept == 0) {
-			goto yy1841;
-		} else {
-			goto yy1856;
-		}
-	} else {
-		goto yy1908;
-	}
-yy1849:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy1848;
-	if (yych <= 0xBF) goto yy1847;
-	goto yy1848;
-yy1850:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1847;
-	goto yy1848;
-yy1851:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy1848;
-	if (yych <= 0xBF) goto yy1850;
-	goto yy1848;
-yy1852:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1850;
-	goto yy1848;
-yy1853:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x8F) goto yy1850;
-	goto yy1848;
-yy1854:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x9F) goto yy1847;
-	goto yy1848;
-yy1855:
-	yyaccept = 1;
-	yych = *(marker = ++p);
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x7F) goto yy1870;
-		} else {
-			if (yych <= 0xDF) goto yy1880;
-			if (yych <= 0xE0) goto yy1881;
-			goto yy1882;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1886;
-			if (yych <= 0xEF) goto yy1882;
-			goto yy1883;
-		} else {
-			if (yych <= 0xF3) goto yy1884;
-			if (yych <= 0xF4) goto yy1885;
-		}
-	}
-yy1856:
-	{ return 0; }
-yy1857:
-	yyaccept = 1;
-	yych = *(marker = ++p);
-	if (yych <= '(') {
-		if (yych <= ' ') goto yy1856;
-		if (yych <= '\'') goto yy1862;
-		goto yy1856;
-	} else {
-		if (yych <= 0x7F) goto yy1862;
-		if (yych <= 0xC1) goto yy1856;
-		if (yych <= 0xF4) goto yy1862;
-		goto yy1856;
-	}
-yy1858:
-	yych = *++p;
-	goto yy1856;
-yy1859:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 16) {
-		goto yy1859;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= ')') {
-			if (yych <= ' ') goto yy1848;
-			if (yych >= ')') goto yy1887;
-		} else {
-			if (yych <= 0x7F) goto yy1861;
-			if (yych <= 0xC1) goto yy1848;
-			if (yych <= 0xDF) goto yy1863;
-			goto yy1864;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1869;
-			goto yy1865;
-		} else {
-			if (yych <= 0xF0) goto yy1866;
-			if (yych <= 0xF3) goto yy1867;
-			if (yych <= 0xF4) goto yy1868;
-			goto yy1848;
-		}
-	}
-yy1861:
-	++p;
-	yych = *p;
-yy1862:
-	if (yybm[0+yych] & 32) {
-		goto yy1861;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= '(') goto yy1848;
-			if (yych <= ')') goto yy1870;
-			goto yy1859;
-		} else {
-			if (yych <= 0xC1) goto yy1848;
-			if (yych >= 0xE0) goto yy1864;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1869;
-			goto yy1865;
-		} else {
-			if (yych <= 0xF0) goto yy1866;
-			if (yych <= 0xF3) goto yy1867;
-			if (yych <= 0xF4) goto yy1868;
-			goto yy1848;
-		}
-	}
-yy1863:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1861;
-	goto yy1848;
-yy1864:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1848;
-	if (yych <= 0xBF) goto yy1863;
-	goto yy1848;
-yy1865:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1863;
-	goto yy1848;
-yy1866:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1848;
-	if (yych <= 0xBF) goto yy1865;
-	goto yy1848;
-yy1867:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1865;
-	goto yy1848;
-yy1868:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x8F) goto yy1865;
-	goto yy1848;
-yy1869:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x9F) goto yy1863;
-	goto yy1848;
-yy1870:
-	yyaccept = 0;
-	marker = ++p;
-	yych = *p;
-yy1871:
-	if (yych <= 0xC1) {
-		if (yych <= ')') {
-			if (yych <= ' ') goto yy1841;
-			if (yych <= '\'') goto yy1870;
-			if (yych <= '(') goto yy1861;
-			goto yy1841;
-		} else {
-			if (yych == '\\') goto yy1879;
-			if (yych <= 0x7F) goto yy1870;
-			goto yy1841;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy1872;
-			if (yych <= 0xE0) goto yy1873;
-			if (yych <= 0xEC) goto yy1874;
-			goto yy1878;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1874;
-				goto yy1875;
-			} else {
-				if (yych <= 0xF3) goto yy1876;
-				if (yych <= 0xF4) goto yy1877;
-				goto yy1841;
-			}
-		}
-	}
-yy1872:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1870;
-	goto yy1848;
-yy1873:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1848;
-	if (yych <= 0xBF) goto yy1872;
-	goto yy1848;
-yy1874:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1872;
-	goto yy1848;
-yy1875:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1848;
-	if (yych <= 0xBF) goto yy1874;
-	goto yy1848;
-yy1876:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1874;
-	goto yy1848;
-yy1877:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x8F) goto yy1874;
-	goto yy1848;
-yy1878:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x9F) goto yy1872;
-	goto yy1848;
-yy1879:
-	++p;
-	yych = *p;
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x7F) goto yy1870;
-			goto yy1848;
-		} else {
-			if (yych <= 0xDF) goto yy1880;
-			if (yych <= 0xE0) goto yy1881;
-			goto yy1882;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy1886;
-			if (yych <= 0xEF) goto yy1882;
-			goto yy1883;
-		} else {
-			if (yych <= 0xF3) goto yy1884;
-			if (yych <= 0xF4) goto yy1885;
-			goto yy1848;
-		}
-	}
-yy1880:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1870;
-	goto yy1848;
-yy1881:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1848;
-	if (yych <= 0xBF) goto yy1880;
-	goto yy1848;
-yy1882:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1880;
-	goto yy1848;
-yy1883:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1848;
-	if (yych <= 0xBF) goto yy1882;
-	goto yy1848;
-yy1884:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1882;
-	goto yy1848;
-yy1885:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x8F) goto yy1882;
-	goto yy1848;
-yy1886:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x9F) goto yy1880;
-	goto yy1848;
-yy1887:
-	yyaccept = 0;
-	marker = ++p;
-	yych = *p;
-yy1888:
-	if (yych <= 0xC1) {
-		if (yych <= ')') {
-			if (yych <= ' ') goto yy1841;
-			if (yych <= '\'') goto yy1887;
-			if (yych <= '(') goto yy1861;
-			goto yy1870;
-		} else {
-			if (yych == '\\') goto yy1896;
-			if (yych <= 0x7F) goto yy1887;
-			goto yy1841;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy1889;
-			if (yych <= 0xE0) goto yy1890;
-			if (yych <= 0xEC) goto yy1891;
-			goto yy1895;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1891;
-				goto yy1892;
-			} else {
-				if (yych <= 0xF3) goto yy1893;
-				if (yych <= 0xF4) goto yy1894;
-				goto yy1841;
-			}
-		}
-	}
-yy1889:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1887;
-	goto yy1848;
-yy1890:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1848;
-	if (yych <= 0xBF) goto yy1889;
-	goto yy1848;
-yy1891:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1889;
-	goto yy1848;
-yy1892:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1848;
-	if (yych <= 0xBF) goto yy1891;
-	goto yy1848;
-yy1893:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1891;
-	goto yy1848;
-yy1894:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x8F) goto yy1891;
-	goto yy1848;
-yy1895:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x9F) goto yy1889;
-	goto yy1848;
-yy1896:
-	++p;
-	yych = *p;
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= ' ') goto yy1870;
-			if (yych <= '[') goto yy1887;
-		} else {
-			if (yych <= 0x7F) goto yy1887;
-			if (yych <= 0xC1) goto yy1848;
-			if (yych <= 0xDF) goto yy1898;
-			goto yy1899;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1904;
-			goto yy1900;
-		} else {
-			if (yych <= 0xF0) goto yy1901;
-			if (yych <= 0xF3) goto yy1902;
-			if (yych <= 0xF4) goto yy1903;
-			goto yy1848;
-		}
-	}
-	yyaccept = 0;
-	marker = ++p;
-	yych = *p;
-	if (yych <= 0xDF) {
-		if (yych <= '[') {
-			if (yych <= ' ') goto yy1841;
-			if (yych == '(') goto yy1861;
-			goto yy1887;
-		} else {
-			if (yych <= '\\') goto yy1896;
-			if (yych <= 0x7F) goto yy1887;
-			if (yych <= 0xC1) goto yy1841;
-			goto yy1889;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy1890;
-			if (yych == 0xED) goto yy1895;
-			goto yy1891;
-		} else {
-			if (yych <= 0xF0) goto yy1892;
-			if (yych <= 0xF3) goto yy1893;
-			if (yych <= 0xF4) goto yy1894;
-			goto yy1841;
-		}
-	}
-yy1898:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1887;
-	goto yy1848;
-yy1899:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1848;
-	if (yych <= 0xBF) goto yy1898;
-	goto yy1848;
-yy1900:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1898;
-	goto yy1848;
-yy1901:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1848;
-	if (yych <= 0xBF) goto yy1900;
-	goto yy1848;
-yy1902:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1900;
-	goto yy1848;
-yy1903:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x8F) goto yy1900;
-	goto yy1848;
-yy1904:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x9F) goto yy1898;
-	goto yy1848;
-yy1905:
-	yyaccept = 0;
-	marker = ++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1905;
-	}
-	if (yych <= '>') {
-		if (yych <= '\r') {
-			if (yych <= '\t') {
-				if (yych <= 0x00) goto yy1841;
-				goto yy1919;
-			} else {
-				if (yych <= '\n') goto yy1841;
-				if (yych <= '\f') goto yy1919;
-				goto yy1841;
-			}
-		} else {
-			if (yych <= '(') {
-				if (yych <= ' ') goto yy1919;
-				goto yy1917;
-			} else {
-				if (yych <= ')') goto yy1919;
-				if (yych <= '<') goto yy1870;
-			}
-		}
-	} else {
-		if (yych <= 0xEC) {
-			if (yych <= 0xC1) {
-				if (yych <= '\\') goto yy1916;
-				goto yy1841;
-			} else {
-				if (yych <= 0xDF) goto yy1909;
-				if (yych <= 0xE0) goto yy1910;
-				goto yy1911;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xED) goto yy1915;
-				if (yych <= 0xEF) goto yy1911;
-				goto yy1912;
-			} else {
-				if (yych <= 0xF3) goto yy1913;
-				if (yych <= 0xF4) goto yy1914;
-				goto yy1841;
-			}
-		}
-	}
-yy1907:
-	yyaccept = 2;
-	yych = *(marker = ++p);
-	if (yych <= ')') {
-		if (yych <= ' ') goto yy1908;
-		if (yych <= '(') goto yy1871;
-	} else {
-		if (yych <= 0x7F) goto yy1871;
-		if (yych <= 0xC1) goto yy1908;
-		if (yych <= 0xF4) goto yy1871;
-	}
-yy1908:
-	{ return (bufsize_t)(p - start); }
-yy1909:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1905;
-	goto yy1848;
-yy1910:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1848;
-	if (yych <= 0xBF) goto yy1909;
-	goto yy1848;
-yy1911:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1909;
-	goto yy1848;
-yy1912:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1848;
-	if (yych <= 0xBF) goto yy1911;
-	goto yy1848;
-yy1913:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1911;
-	goto yy1848;
-yy1914:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x8F) goto yy1911;
-	goto yy1848;
-yy1915:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x9F) goto yy1909;
-	goto yy1848;
-yy1916:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) {
-		if (yych <= '\r') {
-			if (yych <= '\t') {
-				if (yych <= 0x00) goto yy1870;
-				goto yy1905;
-			} else {
-				if (yych <= '\n') goto yy1870;
-				if (yych <= '\f') goto yy1905;
-				goto yy1870;
-			}
-		} else {
-			if (yych <= '>') {
-				if (yych <= '=') goto yy1905;
-				goto yy1963;
-			} else {
-				if (yych == '\\') goto yy1964;
-				goto yy1905;
-			}
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) {
-				if (yych <= 0xC1) goto yy1848;
-				goto yy1965;
-			} else {
-				if (yych <= 0xE0) goto yy1966;
-				if (yych <= 0xEC) goto yy1967;
-				goto yy1971;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1967;
-				goto yy1968;
-			} else {
-				if (yych <= 0xF3) goto yy1969;
-				if (yych <= 0xF4) goto yy1970;
-				goto yy1848;
-			}
-		}
-	}
-yy1917:
-	++p;
-	yych = *p;
-	if (yych <= '>') {
-		if (yych <= ' ') {
-			if (yych <= '\n') {
-				if (yych <= 0x00) goto yy1848;
-				if (yych >= '\n') goto yy1848;
-			} else {
-				if (yych == '\r') goto yy1848;
-			}
-		} else {
-			if (yych <= ')') {
-				if (yych <= '\'') goto yy1917;
-				if (yych >= ')') goto yy1905;
-			} else {
-				if (yych == '<') goto yy1861;
-				if (yych <= '=') goto yy1917;
-				goto yy1932;
-			}
-		}
-	} else {
-		if (yych <= 0xE0) {
-			if (yych <= 0x7F) {
-				if (yych == '\\') goto yy1933;
-				goto yy1917;
-			} else {
-				if (yych <= 0xC1) goto yy1848;
-				if (yych <= 0xDF) goto yy1935;
-				goto yy1936;
-			}
-		} else {
-			if (yych <= 0xEF) {
-				if (yych == 0xED) goto yy1941;
-				goto yy1937;
-			} else {
-				if (yych <= 0xF0) goto yy1938;
-				if (yych <= 0xF3) goto yy1939;
-				if (yych <= 0xF4) goto yy1940;
-				goto yy1848;
-			}
-		}
-	}
-yy1919:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy1919;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= '<') goto yy1848;
-			if (yych >= '?') goto yy1922;
-		} else {
-			if (yych <= 0xC1) goto yy1848;
-			if (yych <= 0xDF) goto yy1924;
-			goto yy1925;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1930;
-			goto yy1926;
-		} else {
-			if (yych <= 0xF0) goto yy1927;
-			if (yych <= 0xF3) goto yy1928;
-			if (yych <= 0xF4) goto yy1929;
-			goto yy1848;
-		}
-	}
-yy1921:
-	yych = *++p;
-	goto yy1908;
-yy1922:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) {
-		if (yych <= '\r') {
-			if (yych <= '\t') {
-				if (yych <= 0x00) goto yy1848;
-				goto yy1919;
-			} else {
-				if (yych <= '\n') goto yy1848;
-				if (yych <= '\f') goto yy1919;
-				goto yy1848;
-			}
-		} else {
-			if (yych <= '>') {
-				if (yych <= '=') goto yy1919;
-				goto yy1931;
-			} else {
-				if (yych == '\\') goto yy1922;
-				goto yy1919;
-			}
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) {
-				if (yych <= 0xC1) goto yy1848;
-			} else {
-				if (yych <= 0xE0) goto yy1925;
-				if (yych <= 0xEC) goto yy1926;
-				goto yy1930;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1926;
-				goto yy1927;
-			} else {
-				if (yych <= 0xF3) goto yy1928;
-				if (yych <= 0xF4) goto yy1929;
-				goto yy1848;
-			}
-		}
-	}
-yy1924:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1919;
-	goto yy1848;
-yy1925:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1848;
-	if (yych <= 0xBF) goto yy1924;
-	goto yy1848;
-yy1926:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1924;
-	goto yy1848;
-yy1927:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1848;
-	if (yych <= 0xBF) goto yy1926;
-	goto yy1848;
-yy1928:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1926;
-	goto yy1848;
-yy1929:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x8F) goto yy1926;
-	goto yy1848;
-yy1930:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x9F) goto yy1924;
-	goto yy1848;
-yy1931:
-	yyaccept = 2;
-	marker = ++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy1919;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= '<') goto yy1908;
-			if (yych <= '>') goto yy1921;
-			goto yy1922;
-		} else {
-			if (yych <= 0xC1) goto yy1908;
-			if (yych <= 0xDF) goto yy1924;
-			goto yy1925;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1930;
-			goto yy1926;
-		} else {
-			if (yych <= 0xF0) goto yy1927;
-			if (yych <= 0xF3) goto yy1928;
-			if (yych <= 0xF4) goto yy1929;
-			goto yy1908;
-		}
-	}
-yy1932:
-	yyaccept = 2;
-	yych = *(marker = ++p);
-	if (yych <= '(') {
-		if (yych <= ' ') goto yy1908;
-		if (yych <= '\'') goto yy1862;
-		goto yy1908;
-	} else {
-		if (yych <= 0x7F) goto yy1862;
-		if (yych <= 0xC1) goto yy1908;
-		if (yych <= 0xF4) goto yy1862;
-		goto yy1908;
-	}
-yy1933:
-	++p;
-	yych = *p;
-	if (yych <= '[') {
-		if (yych <= '\r') {
-			if (yych <= '\t') {
-				if (yych <= 0x00) goto yy1848;
-				goto yy1919;
-			} else {
-				if (yych <= '\n') goto yy1848;
-				if (yych <= '\f') goto yy1919;
-				goto yy1848;
-			}
-		} else {
-			if (yych <= ')') {
-				if (yych <= ' ') goto yy1919;
-				if (yych <= '(') goto yy1917;
-				goto yy1942;
-			} else {
-				if (yych == '>') goto yy1944;
-				goto yy1917;
-			}
-		}
-	} else {
-		if (yych <= 0xEC) {
-			if (yych <= 0xC1) {
-				if (yych <= '\\') goto yy1933;
-				if (yych <= 0x7F) goto yy1917;
-				goto yy1848;
-			} else {
-				if (yych <= 0xDF) goto yy1935;
-				if (yych <= 0xE0) goto yy1936;
-				goto yy1937;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xED) goto yy1941;
-				if (yych <= 0xEF) goto yy1937;
-				goto yy1938;
-			} else {
-				if (yych <= 0xF3) goto yy1939;
-				if (yych <= 0xF4) goto yy1940;
-				goto yy1848;
-			}
-		}
-	}
-yy1935:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1917;
-	goto yy1848;
-yy1936:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1848;
-	if (yych <= 0xBF) goto yy1935;
-	goto yy1848;
-yy1937:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1935;
-	goto yy1848;
-yy1938:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1848;
-	if (yych <= 0xBF) goto yy1937;
-	goto yy1848;
-yy1939:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1937;
-	goto yy1848;
-yy1940:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x8F) goto yy1937;
-	goto yy1848;
-yy1941:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x9F) goto yy1935;
-	goto yy1848;
-yy1942:
-	yyaccept = 0;
-	marker = ++p;
-	yych = *p;
-	if (yych <= '>') {
-		if (yych <= ' ') {
-			if (yych <= '\n') {
-				if (yych <= 0x00) goto yy1841;
-				if (yych <= '\t') goto yy1919;
-				goto yy1841;
-			} else {
-				if (yych == '\r') goto yy1841;
-				goto yy1919;
-			}
-		} else {
-			if (yych <= ')') {
-				if (yych <= '\'') goto yy1942;
-				if (yych <= '(') goto yy1917;
-				goto yy1905;
-			} else {
-				if (yych == '<') goto yy1887;
-				if (yych <= '=') goto yy1942;
-				goto yy1945;
-			}
-		}
-	} else {
-		if (yych <= 0xE0) {
-			if (yych <= 0x7F) {
-				if (yych == '\\') goto yy1946;
-				goto yy1942;
-			} else {
-				if (yych <= 0xC1) goto yy1841;
-				if (yych <= 0xDF) goto yy1947;
-				goto yy1948;
-			}
-		} else {
-			if (yych <= 0xEF) {
-				if (yych == 0xED) goto yy1953;
-				goto yy1949;
-			} else {
-				if (yych <= 0xF0) goto yy1950;
-				if (yych <= 0xF3) goto yy1951;
-				if (yych <= 0xF4) goto yy1952;
-				goto yy1841;
-			}
-		}
-	}
-yy1944:
-	yyaccept = 2;
-	marker = ++p;
-	yych = *p;
-	if (yych <= '>') {
-		if (yych <= ' ') {
-			if (yych <= '\n') {
-				if (yych <= 0x00) goto yy1908;
-				if (yych <= '\t') goto yy1919;
-				goto yy1908;
-			} else {
-				if (yych == '\r') goto yy1908;
-				goto yy1919;
-			}
-		} else {
-			if (yych <= ')') {
-				if (yych <= '\'') goto yy1917;
-				if (yych <= '(') goto yy1919;
-				goto yy1905;
-			} else {
-				if (yych == '<') goto yy1861;
-				if (yych <= '=') goto yy1917;
-				goto yy1932;
-			}
-		}
-	} else {
-		if (yych <= 0xE0) {
-			if (yych <= 0x7F) {
-				if (yych == '\\') goto yy1933;
-				goto yy1917;
-			} else {
-				if (yych <= 0xC1) goto yy1908;
-				if (yych <= 0xDF) goto yy1935;
-				goto yy1936;
-			}
-		} else {
-			if (yych <= 0xEF) {
-				if (yych == 0xED) goto yy1941;
-				goto yy1937;
-			} else {
-				if (yych <= 0xF0) goto yy1938;
-				if (yych <= 0xF3) goto yy1939;
-				if (yych <= 0xF4) goto yy1940;
-				goto yy1908;
-			}
-		}
-	}
-yy1945:
-	yyaccept = 2;
-	yych = *(marker = ++p);
-	if (yych <= ' ') goto yy1908;
-	if (yych <= 0x7F) goto yy1888;
-	if (yych <= 0xC1) goto yy1908;
-	if (yych <= 0xF4) goto yy1888;
-	goto yy1908;
-yy1946:
-	++p;
-	yych = *p;
-	if (yych <= '\\') {
-		if (yych <= '\r') {
-			if (yych <= '\t') {
-				if (yych <= 0x00) goto yy1870;
-				goto yy1905;
-			} else {
-				if (yych <= '\n') goto yy1870;
-				if (yych <= '\f') goto yy1905;
-				goto yy1870;
-			}
-		} else {
-			if (yych <= '=') {
-				if (yych <= ' ') goto yy1905;
-				goto yy1942;
-			} else {
-				if (yych <= '>') goto yy1954;
-				if (yych <= '[') goto yy1942;
-				goto yy1955;
-			}
-		}
-	} else {
-		if (yych <= 0xEC) {
-			if (yych <= 0xC1) {
-				if (yych <= 0x7F) goto yy1942;
-				goto yy1848;
-			} else {
-				if (yych <= 0xDF) goto yy1956;
-				if (yych <= 0xE0) goto yy1957;
-				goto yy1958;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xED) goto yy1962;
-				if (yych <= 0xEF) goto yy1958;
-				goto yy1959;
-			} else {
-				if (yych <= 0xF3) goto yy1960;
-				if (yych <= 0xF4) goto yy1961;
-				goto yy1848;
-			}
-		}
-	}
-yy1947:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1942;
-	goto yy1848;
-yy1948:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1848;
-	if (yych <= 0xBF) goto yy1947;
-	goto yy1848;
-yy1949:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1947;
-	goto yy1848;
-yy1950:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1848;
-	if (yych <= 0xBF) goto yy1949;
-	goto yy1848;
-yy1951:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1949;
-	goto yy1848;
-yy1952:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x8F) goto yy1949;
-	goto yy1848;
-yy1953:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x9F) goto yy1947;
-	goto yy1848;
-yy1954:
-	yyaccept = 2;
-	marker = ++p;
-	yych = *p;
-	if (yych <= '>') {
-		if (yych <= ' ') {
-			if (yych <= '\n') {
-				if (yych <= 0x00) goto yy1908;
-				if (yych <= '\t') goto yy1919;
-				goto yy1908;
-			} else {
-				if (yych == '\r') goto yy1908;
-				goto yy1919;
-			}
-		} else {
-			if (yych <= ')') {
-				if (yych <= '\'') goto yy1942;
-				if (yych <= '(') goto yy1917;
-				goto yy1905;
-			} else {
-				if (yych == '<') goto yy1887;
-				if (yych <= '=') goto yy1942;
-				goto yy1945;
-			}
-		}
-	} else {
-		if (yych <= 0xE0) {
-			if (yych <= 0x7F) {
-				if (yych == '\\') goto yy1946;
-				goto yy1942;
-			} else {
-				if (yych <= 0xC1) goto yy1908;
-				if (yych <= 0xDF) goto yy1947;
-				goto yy1948;
-			}
-		} else {
-			if (yych <= 0xEF) {
-				if (yych == 0xED) goto yy1953;
-				goto yy1949;
-			} else {
-				if (yych <= 0xF0) goto yy1950;
-				if (yych <= 0xF3) goto yy1951;
-				if (yych <= 0xF4) goto yy1952;
-				goto yy1908;
-			}
-		}
-	}
-yy1955:
-	yyaccept = 0;
-	marker = ++p;
-	yych = *p;
-	if (yych <= '[') {
-		if (yych <= '\r') {
-			if (yych <= '\t') {
-				if (yych <= 0x00) goto yy1841;
-				goto yy1919;
-			} else {
-				if (yych <= '\n') goto yy1841;
-				if (yych <= '\f') goto yy1919;
-				goto yy1841;
-			}
-		} else {
-			if (yych <= '(') {
-				if (yych <= ' ') goto yy1919;
-				if (yych <= '\'') goto yy1942;
-				goto yy1917;
-			} else {
-				if (yych == '>') goto yy1954;
-				goto yy1942;
-			}
-		}
-	} else {
-		if (yych <= 0xEC) {
-			if (yych <= 0xC1) {
-				if (yych <= '\\') goto yy1946;
-				if (yych <= 0x7F) goto yy1942;
-				goto yy1841;
-			} else {
-				if (yych <= 0xDF) goto yy1947;
-				if (yych <= 0xE0) goto yy1948;
-				goto yy1949;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xED) goto yy1953;
-				if (yych <= 0xEF) goto yy1949;
-				goto yy1950;
-			} else {
-				if (yych <= 0xF3) goto yy1951;
-				if (yych <= 0xF4) goto yy1952;
-				goto yy1841;
-			}
-		}
-	}
-yy1956:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1942;
-	goto yy1848;
-yy1957:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1848;
-	if (yych <= 0xBF) goto yy1956;
-	goto yy1848;
-yy1958:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1956;
-	goto yy1848;
-yy1959:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1848;
-	if (yych <= 0xBF) goto yy1958;
-	goto yy1848;
-yy1960:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1958;
-	goto yy1848;
-yy1961:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x8F) goto yy1958;
-	goto yy1848;
-yy1962:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x9F) goto yy1956;
-	goto yy1848;
-yy1963:
-	yyaccept = 2;
-	marker = ++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy1905;
-	}
-	if (yych <= '>') {
-		if (yych <= '\r') {
-			if (yych <= '\t') {
-				if (yych <= 0x00) goto yy1908;
-				goto yy1919;
-			} else {
-				if (yych <= '\n') goto yy1908;
-				if (yych <= '\f') goto yy1919;
-				goto yy1908;
-			}
-		} else {
-			if (yych <= '(') {
-				if (yych <= ' ') goto yy1919;
-				goto yy1917;
-			} else {
-				if (yych <= ')') goto yy1919;
-				if (yych <= '<') goto yy1870;
-				goto yy1907;
-			}
-		}
-	} else {
-		if (yych <= 0xEC) {
-			if (yych <= 0xC1) {
-				if (yych <= '\\') goto yy1916;
-				goto yy1908;
-			} else {
-				if (yych <= 0xDF) goto yy1909;
-				if (yych <= 0xE0) goto yy1910;
-				goto yy1911;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xED) goto yy1915;
-				if (yych <= 0xEF) goto yy1911;
-				goto yy1912;
-			} else {
-				if (yych <= 0xF3) goto yy1913;
-				if (yych <= 0xF4) goto yy1914;
-				goto yy1908;
-			}
-		}
-	}
-yy1964:
-	yyaccept = 0;
-	marker = ++p;
-	yych = *p;
-	if (yych <= '[') {
-		if (yych <= ' ') {
-			if (yych <= '\n') {
-				if (yych <= 0x00) goto yy1841;
-				if (yych <= '\t') goto yy1919;
-				goto yy1841;
-			} else {
-				if (yych == '\r') goto yy1841;
-				goto yy1919;
-			}
-		} else {
-			if (yych <= ')') {
-				if (yych <= '\'') goto yy1905;
-				if (yych <= '(') goto yy1917;
-				goto yy1919;
-			} else {
-				if (yych == '>') goto yy1963;
-				goto yy1905;
-			}
-		}
-	} else {
-		if (yych <= 0xEC) {
-			if (yych <= 0xC1) {
-				if (yych <= '\\') goto yy1916;
-				if (yych <= 0x7F) goto yy1905;
-				goto yy1841;
-			} else {
-				if (yych <= 0xDF) goto yy1909;
-				if (yych <= 0xE0) goto yy1910;
-				goto yy1911;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xED) goto yy1915;
-				if (yych <= 0xEF) goto yy1911;
-				goto yy1912;
-			} else {
-				if (yych <= 0xF3) goto yy1913;
-				if (yych <= 0xF4) goto yy1914;
-				goto yy1841;
-			}
-		}
-	}
-yy1965:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1905;
-	goto yy1848;
-yy1966:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1848;
-	if (yych <= 0xBF) goto yy1965;
-	goto yy1848;
-yy1967:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1965;
-	goto yy1848;
-yy1968:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1848;
-	if (yych <= 0xBF) goto yy1967;
-	goto yy1848;
-yy1969:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0xBF) goto yy1967;
-	goto yy1848;
-yy1970:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x8F) goto yy1967;
-	goto yy1848;
-yy1971:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1848;
-	if (yych <= 0x9F) goto yy1965;
-	goto yy1848;
-}
-
+  {
+    unsigned char yych;
+    unsigned int yyaccept = 0;
+    static const unsigned char yybm[] = {
+        0,   128, 128, 128, 128, 128, 128, 128, 128, 128, 8,   128, 128, 8,
+        128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+        128, 128, 128, 128, 136, 224, 224, 224, 224, 224, 224, 224, 128, 128,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 32,  224, 32,  224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 224, 16,  224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+    };
+    yych = *(marker = p);
+    if (yych <= '[') {
+      if (yych <= ' ') {
+        if (yych <= '\f') {
+          if (yych == '\n')
+            goto yy1842;
+          goto yy1858;
+        } else {
+          if (yych <= '\r')
+            goto yy1844;
+          if (yych <= 0x1F)
+            goto yy1858;
+          goto yy1844;
+        }
+      } else {
+        if (yych <= ')') {
+          if (yych <= '\'')
+            goto yy1846;
+          if (yych <= '(')
+            goto yy1857;
+          goto yy1858;
+        } else {
+          if (yych == '<')
+            goto yy1845;
+          goto yy1846;
+        }
+      }
+    } else {
+      if (yych <= 0xEC) {
+        if (yych <= 0xC1) {
+          if (yych <= '\\')
+            goto yy1855;
+          if (yych <= 0x7F)
+            goto yy1846;
+        } else {
+          if (yych <= 0xDF)
+            goto yy1847;
+          if (yych <= 0xE0)
+            goto yy1849;
+          goto yy1850;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xED)
+            goto yy1854;
+          if (yych <= 0xEF)
+            goto yy1850;
+          goto yy1851;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1852;
+          if (yych <= 0xF4)
+            goto yy1853;
+        }
+      }
+    }
+  yy1841 : { return (bufsize_t)(p - start); }
+  yy1842:
+    yyaccept = 0;
+    marker = ++p;
+    yych = *p;
+  yy1843:
+    if (yybm[0 + yych] & 8) {
+      goto yy1842;
+    }
+    if (yych <= 0x7F) {
+      if (yych <= ')') {
+        if (yych <= 0x1F)
+          goto yy1841;
+        if (yych <= '\'')
+          goto yy1870;
+        if (yych <= '(')
+          goto yy1861;
+        goto yy1841;
+      } else {
+        if (yych <= '<') {
+          if (yych <= ';')
+            goto yy1870;
+          goto yy1905;
+        } else {
+          if (yych == '\\')
+            goto yy1879;
+          goto yy1870;
+        }
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF) {
+          if (yych <= 0xC1)
+            goto yy1841;
+          goto yy1872;
+        } else {
+          if (yych <= 0xE0)
+            goto yy1873;
+          if (yych <= 0xEC)
+            goto yy1874;
+          goto yy1878;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1874;
+          goto yy1875;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1876;
+          if (yych <= 0xF4)
+            goto yy1877;
+          goto yy1841;
+        }
+      }
+    }
+  yy1844:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    goto yy1843;
+  yy1845:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yybm[0 + yych] & 64) {
+      goto yy1905;
+    }
+    if (yych <= '>') {
+      if (yych <= '\r') {
+        if (yych <= '\t') {
+          if (yych <= 0x00)
+            goto yy1841;
+          goto yy1919;
+        } else {
+          if (yych <= '\n')
+            goto yy1841;
+          if (yych <= '\f')
+            goto yy1919;
+          goto yy1841;
+        }
+      } else {
+        if (yych <= '(') {
+          if (yych <= ' ')
+            goto yy1919;
+          goto yy1917;
+        } else {
+          if (yych <= ')')
+            goto yy1919;
+          if (yych <= '<')
+            goto yy1870;
+          goto yy1907;
+        }
+      }
+    } else {
+      if (yych <= 0xEC) {
+        if (yych <= 0xC1) {
+          if (yych <= '\\')
+            goto yy1916;
+          goto yy1841;
+        } else {
+          if (yych <= 0xDF)
+            goto yy1909;
+          if (yych <= 0xE0)
+            goto yy1910;
+          goto yy1911;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xED)
+            goto yy1915;
+          if (yych <= 0xEF)
+            goto yy1911;
+          goto yy1912;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1913;
+          if (yych <= 0xF4)
+            goto yy1914;
+          goto yy1841;
+        }
+      }
+    }
+  yy1846:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    goto yy1871;
+  yy1847:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1846;
+  yy1848:
+    p = marker;
+    if (yyaccept <= 1) {
+      if (yyaccept == 0) {
+        goto yy1841;
+      } else {
+        goto yy1856;
+      }
+    } else {
+      goto yy1908;
+    }
+  yy1849:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1847;
+    goto yy1848;
+  yy1850:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1847;
+    goto yy1848;
+  yy1851:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1850;
+    goto yy1848;
+  yy1852:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1850;
+    goto yy1848;
+  yy1853:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x8F)
+      goto yy1850;
+    goto yy1848;
+  yy1854:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x9F)
+      goto yy1847;
+    goto yy1848;
+  yy1855:
+    yyaccept = 1;
+    yych = *(marker = ++p);
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x7F)
+          goto yy1870;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1880;
+        if (yych <= 0xE0)
+          goto yy1881;
+        goto yy1882;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1886;
+        if (yych <= 0xEF)
+          goto yy1882;
+        goto yy1883;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1884;
+        if (yych <= 0xF4)
+          goto yy1885;
+      }
+    }
+  yy1856 : { return 0; }
+  yy1857:
+    yyaccept = 1;
+    yych = *(marker = ++p);
+    if (yych <= '(') {
+      if (yych <= ' ')
+        goto yy1856;
+      if (yych <= '\'')
+        goto yy1862;
+      goto yy1856;
+    } else {
+      if (yych <= 0x7F)
+        goto yy1862;
+      if (yych <= 0xC1)
+        goto yy1856;
+      if (yych <= 0xF4)
+        goto yy1862;
+      goto yy1856;
+    }
+  yy1858:
+    yych = *++p;
+    goto yy1856;
+  yy1859:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 16) {
+      goto yy1859;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= ')') {
+        if (yych <= ' ')
+          goto yy1848;
+        if (yych >= ')')
+          goto yy1887;
+      } else {
+        if (yych <= 0x7F)
+          goto yy1861;
+        if (yych <= 0xC1)
+          goto yy1848;
+        if (yych <= 0xDF)
+          goto yy1863;
+        goto yy1864;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1869;
+        goto yy1865;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1866;
+        if (yych <= 0xF3)
+          goto yy1867;
+        if (yych <= 0xF4)
+          goto yy1868;
+        goto yy1848;
+      }
+    }
+  yy1861:
+    ++p;
+    yych = *p;
+  yy1862:
+    if (yybm[0 + yych] & 32) {
+      goto yy1861;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= '(')
+          goto yy1848;
+        if (yych <= ')')
+          goto yy1870;
+        goto yy1859;
+      } else {
+        if (yych <= 0xC1)
+          goto yy1848;
+        if (yych >= 0xE0)
+          goto yy1864;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1869;
+        goto yy1865;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1866;
+        if (yych <= 0xF3)
+          goto yy1867;
+        if (yych <= 0xF4)
+          goto yy1868;
+        goto yy1848;
+      }
+    }
+  yy1863:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1861;
+    goto yy1848;
+  yy1864:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1863;
+    goto yy1848;
+  yy1865:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1863;
+    goto yy1848;
+  yy1866:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1865;
+    goto yy1848;
+  yy1867:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1865;
+    goto yy1848;
+  yy1868:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x8F)
+      goto yy1865;
+    goto yy1848;
+  yy1869:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x9F)
+      goto yy1863;
+    goto yy1848;
+  yy1870:
+    yyaccept = 0;
+    marker = ++p;
+    yych = *p;
+  yy1871:
+    if (yych <= 0xC1) {
+      if (yych <= ')') {
+        if (yych <= ' ')
+          goto yy1841;
+        if (yych <= '\'')
+          goto yy1870;
+        if (yych <= '(')
+          goto yy1861;
+        goto yy1841;
+      } else {
+        if (yych == '\\')
+          goto yy1879;
+        if (yych <= 0x7F)
+          goto yy1870;
+        goto yy1841;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy1872;
+        if (yych <= 0xE0)
+          goto yy1873;
+        if (yych <= 0xEC)
+          goto yy1874;
+        goto yy1878;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1874;
+          goto yy1875;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1876;
+          if (yych <= 0xF4)
+            goto yy1877;
+          goto yy1841;
+        }
+      }
+    }
+  yy1872:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1870;
+    goto yy1848;
+  yy1873:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1872;
+    goto yy1848;
+  yy1874:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1872;
+    goto yy1848;
+  yy1875:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1874;
+    goto yy1848;
+  yy1876:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1874;
+    goto yy1848;
+  yy1877:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x8F)
+      goto yy1874;
+    goto yy1848;
+  yy1878:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x9F)
+      goto yy1872;
+    goto yy1848;
+  yy1879:
+    ++p;
+    yych = *p;
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x7F)
+          goto yy1870;
+        goto yy1848;
+      } else {
+        if (yych <= 0xDF)
+          goto yy1880;
+        if (yych <= 0xE0)
+          goto yy1881;
+        goto yy1882;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy1886;
+        if (yych <= 0xEF)
+          goto yy1882;
+        goto yy1883;
+      } else {
+        if (yych <= 0xF3)
+          goto yy1884;
+        if (yych <= 0xF4)
+          goto yy1885;
+        goto yy1848;
+      }
+    }
+  yy1880:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1870;
+    goto yy1848;
+  yy1881:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1880;
+    goto yy1848;
+  yy1882:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1880;
+    goto yy1848;
+  yy1883:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1882;
+    goto yy1848;
+  yy1884:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1882;
+    goto yy1848;
+  yy1885:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x8F)
+      goto yy1882;
+    goto yy1848;
+  yy1886:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x9F)
+      goto yy1880;
+    goto yy1848;
+  yy1887:
+    yyaccept = 0;
+    marker = ++p;
+    yych = *p;
+  yy1888:
+    if (yych <= 0xC1) {
+      if (yych <= ')') {
+        if (yych <= ' ')
+          goto yy1841;
+        if (yych <= '\'')
+          goto yy1887;
+        if (yych <= '(')
+          goto yy1861;
+        goto yy1870;
+      } else {
+        if (yych == '\\')
+          goto yy1896;
+        if (yych <= 0x7F)
+          goto yy1887;
+        goto yy1841;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy1889;
+        if (yych <= 0xE0)
+          goto yy1890;
+        if (yych <= 0xEC)
+          goto yy1891;
+        goto yy1895;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1891;
+          goto yy1892;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1893;
+          if (yych <= 0xF4)
+            goto yy1894;
+          goto yy1841;
+        }
+      }
+    }
+  yy1889:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1887;
+    goto yy1848;
+  yy1890:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1889;
+    goto yy1848;
+  yy1891:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1889;
+    goto yy1848;
+  yy1892:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1891;
+    goto yy1848;
+  yy1893:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1891;
+    goto yy1848;
+  yy1894:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x8F)
+      goto yy1891;
+    goto yy1848;
+  yy1895:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x9F)
+      goto yy1889;
+    goto yy1848;
+  yy1896:
+    ++p;
+    yych = *p;
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= ' ')
+          goto yy1870;
+        if (yych <= '[')
+          goto yy1887;
+      } else {
+        if (yych <= 0x7F)
+          goto yy1887;
+        if (yych <= 0xC1)
+          goto yy1848;
+        if (yych <= 0xDF)
+          goto yy1898;
+        goto yy1899;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1904;
+        goto yy1900;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1901;
+        if (yych <= 0xF3)
+          goto yy1902;
+        if (yych <= 0xF4)
+          goto yy1903;
+        goto yy1848;
+      }
+    }
+    yyaccept = 0;
+    marker = ++p;
+    yych = *p;
+    if (yych <= 0xDF) {
+      if (yych <= '[') {
+        if (yych <= ' ')
+          goto yy1841;
+        if (yych == '(')
+          goto yy1861;
+        goto yy1887;
+      } else {
+        if (yych <= '\\')
+          goto yy1896;
+        if (yych <= 0x7F)
+          goto yy1887;
+        if (yych <= 0xC1)
+          goto yy1841;
+        goto yy1889;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy1890;
+        if (yych == 0xED)
+          goto yy1895;
+        goto yy1891;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1892;
+        if (yych <= 0xF3)
+          goto yy1893;
+        if (yych <= 0xF4)
+          goto yy1894;
+        goto yy1841;
+      }
+    }
+  yy1898:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1887;
+    goto yy1848;
+  yy1899:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1898;
+    goto yy1848;
+  yy1900:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1898;
+    goto yy1848;
+  yy1901:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1900;
+    goto yy1848;
+  yy1902:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1900;
+    goto yy1848;
+  yy1903:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x8F)
+      goto yy1900;
+    goto yy1848;
+  yy1904:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x9F)
+      goto yy1898;
+    goto yy1848;
+  yy1905:
+    yyaccept = 0;
+    marker = ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1905;
+    }
+    if (yych <= '>') {
+      if (yych <= '\r') {
+        if (yych <= '\t') {
+          if (yych <= 0x00)
+            goto yy1841;
+          goto yy1919;
+        } else {
+          if (yych <= '\n')
+            goto yy1841;
+          if (yych <= '\f')
+            goto yy1919;
+          goto yy1841;
+        }
+      } else {
+        if (yych <= '(') {
+          if (yych <= ' ')
+            goto yy1919;
+          goto yy1917;
+        } else {
+          if (yych <= ')')
+            goto yy1919;
+          if (yych <= '<')
+            goto yy1870;
+        }
+      }
+    } else {
+      if (yych <= 0xEC) {
+        if (yych <= 0xC1) {
+          if (yych <= '\\')
+            goto yy1916;
+          goto yy1841;
+        } else {
+          if (yych <= 0xDF)
+            goto yy1909;
+          if (yych <= 0xE0)
+            goto yy1910;
+          goto yy1911;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xED)
+            goto yy1915;
+          if (yych <= 0xEF)
+            goto yy1911;
+          goto yy1912;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1913;
+          if (yych <= 0xF4)
+            goto yy1914;
+          goto yy1841;
+        }
+      }
+    }
+  yy1907:
+    yyaccept = 2;
+    yych = *(marker = ++p);
+    if (yych <= ')') {
+      if (yych <= ' ')
+        goto yy1908;
+      if (yych <= '(')
+        goto yy1871;
+    } else {
+      if (yych <= 0x7F)
+        goto yy1871;
+      if (yych <= 0xC1)
+        goto yy1908;
+      if (yych <= 0xF4)
+        goto yy1871;
+    }
+  yy1908 : { return (bufsize_t)(p - start); }
+  yy1909:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1905;
+    goto yy1848;
+  yy1910:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1909;
+    goto yy1848;
+  yy1911:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1909;
+    goto yy1848;
+  yy1912:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1911;
+    goto yy1848;
+  yy1913:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1911;
+    goto yy1848;
+  yy1914:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x8F)
+      goto yy1911;
+    goto yy1848;
+  yy1915:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x9F)
+      goto yy1909;
+    goto yy1848;
+  yy1916:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F) {
+      if (yych <= '\r') {
+        if (yych <= '\t') {
+          if (yych <= 0x00)
+            goto yy1870;
+          goto yy1905;
+        } else {
+          if (yych <= '\n')
+            goto yy1870;
+          if (yych <= '\f')
+            goto yy1905;
+          goto yy1870;
+        }
+      } else {
+        if (yych <= '>') {
+          if (yych <= '=')
+            goto yy1905;
+          goto yy1963;
+        } else {
+          if (yych == '\\')
+            goto yy1964;
+          goto yy1905;
+        }
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF) {
+          if (yych <= 0xC1)
+            goto yy1848;
+          goto yy1965;
+        } else {
+          if (yych <= 0xE0)
+            goto yy1966;
+          if (yych <= 0xEC)
+            goto yy1967;
+          goto yy1971;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1967;
+          goto yy1968;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1969;
+          if (yych <= 0xF4)
+            goto yy1970;
+          goto yy1848;
+        }
+      }
+    }
+  yy1917:
+    ++p;
+    yych = *p;
+    if (yych <= '>') {
+      if (yych <= ' ') {
+        if (yych <= '\n') {
+          if (yych <= 0x00)
+            goto yy1848;
+          if (yych >= '\n')
+            goto yy1848;
+        } else {
+          if (yych == '\r')
+            goto yy1848;
+        }
+      } else {
+        if (yych <= ')') {
+          if (yych <= '\'')
+            goto yy1917;
+          if (yych >= ')')
+            goto yy1905;
+        } else {
+          if (yych == '<')
+            goto yy1861;
+          if (yych <= '=')
+            goto yy1917;
+          goto yy1932;
+        }
+      }
+    } else {
+      if (yych <= 0xE0) {
+        if (yych <= 0x7F) {
+          if (yych == '\\')
+            goto yy1933;
+          goto yy1917;
+        } else {
+          if (yych <= 0xC1)
+            goto yy1848;
+          if (yych <= 0xDF)
+            goto yy1935;
+          goto yy1936;
+        }
+      } else {
+        if (yych <= 0xEF) {
+          if (yych == 0xED)
+            goto yy1941;
+          goto yy1937;
+        } else {
+          if (yych <= 0xF0)
+            goto yy1938;
+          if (yych <= 0xF3)
+            goto yy1939;
+          if (yych <= 0xF4)
+            goto yy1940;
+          goto yy1848;
+        }
+      }
+    }
+  yy1919:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy1919;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= '<')
+          goto yy1848;
+        if (yych >= '?')
+          goto yy1922;
+      } else {
+        if (yych <= 0xC1)
+          goto yy1848;
+        if (yych <= 0xDF)
+          goto yy1924;
+        goto yy1925;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1930;
+        goto yy1926;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1927;
+        if (yych <= 0xF3)
+          goto yy1928;
+        if (yych <= 0xF4)
+          goto yy1929;
+        goto yy1848;
+      }
+    }
+  yy1921:
+    yych = *++p;
+    goto yy1908;
+  yy1922:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F) {
+      if (yych <= '\r') {
+        if (yych <= '\t') {
+          if (yych <= 0x00)
+            goto yy1848;
+          goto yy1919;
+        } else {
+          if (yych <= '\n')
+            goto yy1848;
+          if (yych <= '\f')
+            goto yy1919;
+          goto yy1848;
+        }
+      } else {
+        if (yych <= '>') {
+          if (yych <= '=')
+            goto yy1919;
+          goto yy1931;
+        } else {
+          if (yych == '\\')
+            goto yy1922;
+          goto yy1919;
+        }
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF) {
+          if (yych <= 0xC1)
+            goto yy1848;
+        } else {
+          if (yych <= 0xE0)
+            goto yy1925;
+          if (yych <= 0xEC)
+            goto yy1926;
+          goto yy1930;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1926;
+          goto yy1927;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1928;
+          if (yych <= 0xF4)
+            goto yy1929;
+          goto yy1848;
+        }
+      }
+    }
+  yy1924:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1919;
+    goto yy1848;
+  yy1925:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1924;
+    goto yy1848;
+  yy1926:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1924;
+    goto yy1848;
+  yy1927:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1926;
+    goto yy1848;
+  yy1928:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1926;
+    goto yy1848;
+  yy1929:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x8F)
+      goto yy1926;
+    goto yy1848;
+  yy1930:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x9F)
+      goto yy1924;
+    goto yy1848;
+  yy1931:
+    yyaccept = 2;
+    marker = ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy1919;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= '<')
+          goto yy1908;
+        if (yych <= '>')
+          goto yy1921;
+        goto yy1922;
+      } else {
+        if (yych <= 0xC1)
+          goto yy1908;
+        if (yych <= 0xDF)
+          goto yy1924;
+        goto yy1925;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1930;
+        goto yy1926;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1927;
+        if (yych <= 0xF3)
+          goto yy1928;
+        if (yych <= 0xF4)
+          goto yy1929;
+        goto yy1908;
+      }
+    }
+  yy1932:
+    yyaccept = 2;
+    yych = *(marker = ++p);
+    if (yych <= '(') {
+      if (yych <= ' ')
+        goto yy1908;
+      if (yych <= '\'')
+        goto yy1862;
+      goto yy1908;
+    } else {
+      if (yych <= 0x7F)
+        goto yy1862;
+      if (yych <= 0xC1)
+        goto yy1908;
+      if (yych <= 0xF4)
+        goto yy1862;
+      goto yy1908;
+    }
+  yy1933:
+    ++p;
+    yych = *p;
+    if (yych <= '[') {
+      if (yych <= '\r') {
+        if (yych <= '\t') {
+          if (yych <= 0x00)
+            goto yy1848;
+          goto yy1919;
+        } else {
+          if (yych <= '\n')
+            goto yy1848;
+          if (yych <= '\f')
+            goto yy1919;
+          goto yy1848;
+        }
+      } else {
+        if (yych <= ')') {
+          if (yych <= ' ')
+            goto yy1919;
+          if (yych <= '(')
+            goto yy1917;
+          goto yy1942;
+        } else {
+          if (yych == '>')
+            goto yy1944;
+          goto yy1917;
+        }
+      }
+    } else {
+      if (yych <= 0xEC) {
+        if (yych <= 0xC1) {
+          if (yych <= '\\')
+            goto yy1933;
+          if (yych <= 0x7F)
+            goto yy1917;
+          goto yy1848;
+        } else {
+          if (yych <= 0xDF)
+            goto yy1935;
+          if (yych <= 0xE0)
+            goto yy1936;
+          goto yy1937;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xED)
+            goto yy1941;
+          if (yych <= 0xEF)
+            goto yy1937;
+          goto yy1938;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1939;
+          if (yych <= 0xF4)
+            goto yy1940;
+          goto yy1848;
+        }
+      }
+    }
+  yy1935:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1917;
+    goto yy1848;
+  yy1936:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1935;
+    goto yy1848;
+  yy1937:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1935;
+    goto yy1848;
+  yy1938:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1937;
+    goto yy1848;
+  yy1939:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1937;
+    goto yy1848;
+  yy1940:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x8F)
+      goto yy1937;
+    goto yy1848;
+  yy1941:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x9F)
+      goto yy1935;
+    goto yy1848;
+  yy1942:
+    yyaccept = 0;
+    marker = ++p;
+    yych = *p;
+    if (yych <= '>') {
+      if (yych <= ' ') {
+        if (yych <= '\n') {
+          if (yych <= 0x00)
+            goto yy1841;
+          if (yych <= '\t')
+            goto yy1919;
+          goto yy1841;
+        } else {
+          if (yych == '\r')
+            goto yy1841;
+          goto yy1919;
+        }
+      } else {
+        if (yych <= ')') {
+          if (yych <= '\'')
+            goto yy1942;
+          if (yych <= '(')
+            goto yy1917;
+          goto yy1905;
+        } else {
+          if (yych == '<')
+            goto yy1887;
+          if (yych <= '=')
+            goto yy1942;
+          goto yy1945;
+        }
+      }
+    } else {
+      if (yych <= 0xE0) {
+        if (yych <= 0x7F) {
+          if (yych == '\\')
+            goto yy1946;
+          goto yy1942;
+        } else {
+          if (yych <= 0xC1)
+            goto yy1841;
+          if (yych <= 0xDF)
+            goto yy1947;
+          goto yy1948;
+        }
+      } else {
+        if (yych <= 0xEF) {
+          if (yych == 0xED)
+            goto yy1953;
+          goto yy1949;
+        } else {
+          if (yych <= 0xF0)
+            goto yy1950;
+          if (yych <= 0xF3)
+            goto yy1951;
+          if (yych <= 0xF4)
+            goto yy1952;
+          goto yy1841;
+        }
+      }
+    }
+  yy1944:
+    yyaccept = 2;
+    marker = ++p;
+    yych = *p;
+    if (yych <= '>') {
+      if (yych <= ' ') {
+        if (yych <= '\n') {
+          if (yych <= 0x00)
+            goto yy1908;
+          if (yych <= '\t')
+            goto yy1919;
+          goto yy1908;
+        } else {
+          if (yych == '\r')
+            goto yy1908;
+          goto yy1919;
+        }
+      } else {
+        if (yych <= ')') {
+          if (yych <= '\'')
+            goto yy1917;
+          if (yych <= '(')
+            goto yy1919;
+          goto yy1905;
+        } else {
+          if (yych == '<')
+            goto yy1861;
+          if (yych <= '=')
+            goto yy1917;
+          goto yy1932;
+        }
+      }
+    } else {
+      if (yych <= 0xE0) {
+        if (yych <= 0x7F) {
+          if (yych == '\\')
+            goto yy1933;
+          goto yy1917;
+        } else {
+          if (yych <= 0xC1)
+            goto yy1908;
+          if (yych <= 0xDF)
+            goto yy1935;
+          goto yy1936;
+        }
+      } else {
+        if (yych <= 0xEF) {
+          if (yych == 0xED)
+            goto yy1941;
+          goto yy1937;
+        } else {
+          if (yych <= 0xF0)
+            goto yy1938;
+          if (yych <= 0xF3)
+            goto yy1939;
+          if (yych <= 0xF4)
+            goto yy1940;
+          goto yy1908;
+        }
+      }
+    }
+  yy1945:
+    yyaccept = 2;
+    yych = *(marker = ++p);
+    if (yych <= ' ')
+      goto yy1908;
+    if (yych <= 0x7F)
+      goto yy1888;
+    if (yych <= 0xC1)
+      goto yy1908;
+    if (yych <= 0xF4)
+      goto yy1888;
+    goto yy1908;
+  yy1946:
+    ++p;
+    yych = *p;
+    if (yych <= '\\') {
+      if (yych <= '\r') {
+        if (yych <= '\t') {
+          if (yych <= 0x00)
+            goto yy1870;
+          goto yy1905;
+        } else {
+          if (yych <= '\n')
+            goto yy1870;
+          if (yych <= '\f')
+            goto yy1905;
+          goto yy1870;
+        }
+      } else {
+        if (yych <= '=') {
+          if (yych <= ' ')
+            goto yy1905;
+          goto yy1942;
+        } else {
+          if (yych <= '>')
+            goto yy1954;
+          if (yych <= '[')
+            goto yy1942;
+          goto yy1955;
+        }
+      }
+    } else {
+      if (yych <= 0xEC) {
+        if (yych <= 0xC1) {
+          if (yych <= 0x7F)
+            goto yy1942;
+          goto yy1848;
+        } else {
+          if (yych <= 0xDF)
+            goto yy1956;
+          if (yych <= 0xE0)
+            goto yy1957;
+          goto yy1958;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xED)
+            goto yy1962;
+          if (yych <= 0xEF)
+            goto yy1958;
+          goto yy1959;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1960;
+          if (yych <= 0xF4)
+            goto yy1961;
+          goto yy1848;
+        }
+      }
+    }
+  yy1947:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1942;
+    goto yy1848;
+  yy1948:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1947;
+    goto yy1848;
+  yy1949:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1947;
+    goto yy1848;
+  yy1950:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1949;
+    goto yy1848;
+  yy1951:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1949;
+    goto yy1848;
+  yy1952:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x8F)
+      goto yy1949;
+    goto yy1848;
+  yy1953:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x9F)
+      goto yy1947;
+    goto yy1848;
+  yy1954:
+    yyaccept = 2;
+    marker = ++p;
+    yych = *p;
+    if (yych <= '>') {
+      if (yych <= ' ') {
+        if (yych <= '\n') {
+          if (yych <= 0x00)
+            goto yy1908;
+          if (yych <= '\t')
+            goto yy1919;
+          goto yy1908;
+        } else {
+          if (yych == '\r')
+            goto yy1908;
+          goto yy1919;
+        }
+      } else {
+        if (yych <= ')') {
+          if (yych <= '\'')
+            goto yy1942;
+          if (yych <= '(')
+            goto yy1917;
+          goto yy1905;
+        } else {
+          if (yych == '<')
+            goto yy1887;
+          if (yych <= '=')
+            goto yy1942;
+          goto yy1945;
+        }
+      }
+    } else {
+      if (yych <= 0xE0) {
+        if (yych <= 0x7F) {
+          if (yych == '\\')
+            goto yy1946;
+          goto yy1942;
+        } else {
+          if (yych <= 0xC1)
+            goto yy1908;
+          if (yych <= 0xDF)
+            goto yy1947;
+          goto yy1948;
+        }
+      } else {
+        if (yych <= 0xEF) {
+          if (yych == 0xED)
+            goto yy1953;
+          goto yy1949;
+        } else {
+          if (yych <= 0xF0)
+            goto yy1950;
+          if (yych <= 0xF3)
+            goto yy1951;
+          if (yych <= 0xF4)
+            goto yy1952;
+          goto yy1908;
+        }
+      }
+    }
+  yy1955:
+    yyaccept = 0;
+    marker = ++p;
+    yych = *p;
+    if (yych <= '[') {
+      if (yych <= '\r') {
+        if (yych <= '\t') {
+          if (yych <= 0x00)
+            goto yy1841;
+          goto yy1919;
+        } else {
+          if (yych <= '\n')
+            goto yy1841;
+          if (yych <= '\f')
+            goto yy1919;
+          goto yy1841;
+        }
+      } else {
+        if (yych <= '(') {
+          if (yych <= ' ')
+            goto yy1919;
+          if (yych <= '\'')
+            goto yy1942;
+          goto yy1917;
+        } else {
+          if (yych == '>')
+            goto yy1954;
+          goto yy1942;
+        }
+      }
+    } else {
+      if (yych <= 0xEC) {
+        if (yych <= 0xC1) {
+          if (yych <= '\\')
+            goto yy1946;
+          if (yych <= 0x7F)
+            goto yy1942;
+          goto yy1841;
+        } else {
+          if (yych <= 0xDF)
+            goto yy1947;
+          if (yych <= 0xE0)
+            goto yy1948;
+          goto yy1949;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xED)
+            goto yy1953;
+          if (yych <= 0xEF)
+            goto yy1949;
+          goto yy1950;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1951;
+          if (yych <= 0xF4)
+            goto yy1952;
+          goto yy1841;
+        }
+      }
+    }
+  yy1956:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1942;
+    goto yy1848;
+  yy1957:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1956;
+    goto yy1848;
+  yy1958:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1956;
+    goto yy1848;
+  yy1959:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1958;
+    goto yy1848;
+  yy1960:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1958;
+    goto yy1848;
+  yy1961:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x8F)
+      goto yy1958;
+    goto yy1848;
+  yy1962:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x9F)
+      goto yy1956;
+    goto yy1848;
+  yy1963:
+    yyaccept = 2;
+    marker = ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy1905;
+    }
+    if (yych <= '>') {
+      if (yych <= '\r') {
+        if (yych <= '\t') {
+          if (yych <= 0x00)
+            goto yy1908;
+          goto yy1919;
+        } else {
+          if (yych <= '\n')
+            goto yy1908;
+          if (yych <= '\f')
+            goto yy1919;
+          goto yy1908;
+        }
+      } else {
+        if (yych <= '(') {
+          if (yych <= ' ')
+            goto yy1919;
+          goto yy1917;
+        } else {
+          if (yych <= ')')
+            goto yy1919;
+          if (yych <= '<')
+            goto yy1870;
+          goto yy1907;
+        }
+      }
+    } else {
+      if (yych <= 0xEC) {
+        if (yych <= 0xC1) {
+          if (yych <= '\\')
+            goto yy1916;
+          goto yy1908;
+        } else {
+          if (yych <= 0xDF)
+            goto yy1909;
+          if (yych <= 0xE0)
+            goto yy1910;
+          goto yy1911;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xED)
+            goto yy1915;
+          if (yych <= 0xEF)
+            goto yy1911;
+          goto yy1912;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1913;
+          if (yych <= 0xF4)
+            goto yy1914;
+          goto yy1908;
+        }
+      }
+    }
+  yy1964:
+    yyaccept = 0;
+    marker = ++p;
+    yych = *p;
+    if (yych <= '[') {
+      if (yych <= ' ') {
+        if (yych <= '\n') {
+          if (yych <= 0x00)
+            goto yy1841;
+          if (yych <= '\t')
+            goto yy1919;
+          goto yy1841;
+        } else {
+          if (yych == '\r')
+            goto yy1841;
+          goto yy1919;
+        }
+      } else {
+        if (yych <= ')') {
+          if (yych <= '\'')
+            goto yy1905;
+          if (yych <= '(')
+            goto yy1917;
+          goto yy1919;
+        } else {
+          if (yych == '>')
+            goto yy1963;
+          goto yy1905;
+        }
+      }
+    } else {
+      if (yych <= 0xEC) {
+        if (yych <= 0xC1) {
+          if (yych <= '\\')
+            goto yy1916;
+          if (yych <= 0x7F)
+            goto yy1905;
+          goto yy1841;
+        } else {
+          if (yych <= 0xDF)
+            goto yy1909;
+          if (yych <= 0xE0)
+            goto yy1910;
+          goto yy1911;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xED)
+            goto yy1915;
+          if (yych <= 0xEF)
+            goto yy1911;
+          goto yy1912;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1913;
+          if (yych <= 0xF4)
+            goto yy1914;
+          goto yy1841;
+        }
+      }
+    }
+  yy1965:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1905;
+    goto yy1848;
+  yy1966:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1965;
+    goto yy1848;
+  yy1967:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1965;
+    goto yy1848;
+  yy1968:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1967;
+    goto yy1848;
+  yy1969:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0xBF)
+      goto yy1967;
+    goto yy1848;
+  yy1970:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x8F)
+      goto yy1967;
+    goto yy1848;
+  yy1971:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1848;
+    if (yych <= 0x9F)
+      goto yy1965;
+    goto yy1848;
+  }
 }
 
 // Try to match a link title (in single quotes, in double quotes, or
 // in parentheses), returning number of chars matched.  Allow one
 // level of internal nesting (quotes within quotes).
-bufsize_t _scan_link_title(const unsigned char *p)
-{
+bufsize_t _scan_link_title(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	unsigned int yyaccept = 0;
-	static const unsigned char yybm[] = {
-		  0, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224,  96, 224, 224, 224, 224, 160, 
-		224, 192, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224,  16, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		224, 224, 224, 224, 224, 224, 224, 224, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0xC1) {
-		if (yych <= '"') {
-			if (yych == '\n') goto yy1974;
-			if (yych <= '!') goto yy1978;
-			goto yy1975;
-		} else {
-			if (yych <= '\'') {
-				if (yych <= '&') goto yy1978;
-				goto yy1976;
-			} else {
-				if (yych <= '(') goto yy1977;
-				if (yych <= 0x7F) goto yy1978;
-			}
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy1979;
-			if (yych <= 0xE0) goto yy1981;
-			if (yych <= 0xEC) goto yy1982;
-			goto yy1986;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy1982;
-				goto yy1983;
-			} else {
-				if (yych <= 0xF3) goto yy1984;
-				if (yych <= 0xF4) goto yy1985;
-			}
-		}
-	}
-yy1974:
-	{ return 0; }
-yy1975:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych <= 0x00) goto yy1974;
-	if (yych <= 0x7F) goto yy2018;
-	if (yych <= 0xC1) goto yy1974;
-	if (yych <= 0xF4) goto yy2018;
-	goto yy1974;
-yy1976:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych <= 0x00) goto yy1974;
-	if (yych <= 0x7F) goto yy2004;
-	if (yych <= 0xC1) goto yy1974;
-	if (yych <= 0xF4) goto yy2004;
-	goto yy1974;
-yy1977:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych <= 0x00) goto yy1974;
-	if (yych <= 0x7F) goto yy1990;
-	if (yych <= 0xC1) goto yy1974;
-	if (yych <= 0xF4) goto yy1990;
-	goto yy1974;
-yy1978:
-	yych = *++p;
-	goto yy1974;
-yy1979:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0xBF) goto yy1978;
-yy1980:
-	p = marker;
-	if (yyaccept <= 1) {
-		if (yyaccept == 0) {
-			goto yy1974;
-		} else {
-			goto yy1999;
-		}
-	} else {
-		if (yyaccept == 2) {
-			goto yy2013;
-		} else {
-			goto yy2027;
-		}
-	}
-yy1981:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy1980;
-	if (yych <= 0xBF) goto yy1979;
-	goto yy1980;
-yy1982:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0xBF) goto yy1979;
-	goto yy1980;
-yy1983:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy1980;
-	if (yych <= 0xBF) goto yy1982;
-	goto yy1980;
-yy1984:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0xBF) goto yy1982;
-	goto yy1980;
-yy1985:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0x8F) goto yy1982;
-	goto yy1980;
-yy1986:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0x9F) goto yy1979;
-	goto yy1980;
-yy1987:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy1989;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= 0x00) goto yy1980;
-			if (yych <= ')') goto yy2000;
-			goto yy1987;
-		} else {
-			if (yych <= 0xC1) goto yy1980;
-			if (yych <= 0xDF) goto yy1991;
-			goto yy1992;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1997;
-			goto yy1993;
-		} else {
-			if (yych <= 0xF0) goto yy1994;
-			if (yych <= 0xF3) goto yy1995;
-			if (yych <= 0xF4) goto yy1996;
-			goto yy1980;
-		}
-	}
-yy1989:
-	++p;
-	yych = *p;
-yy1990:
-	if (yybm[0+yych] & 32) {
-		goto yy1989;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= 0x00) goto yy1980;
-			if (yych <= ')') goto yy1998;
-			goto yy1987;
-		} else {
-			if (yych <= 0xC1) goto yy1980;
-			if (yych >= 0xE0) goto yy1992;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1997;
-			goto yy1993;
-		} else {
-			if (yych <= 0xF0) goto yy1994;
-			if (yych <= 0xF3) goto yy1995;
-			if (yych <= 0xF4) goto yy1996;
-			goto yy1980;
-		}
-	}
-yy1991:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0xBF) goto yy1989;
-	goto yy1980;
-yy1992:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1980;
-	if (yych <= 0xBF) goto yy1991;
-	goto yy1980;
-yy1993:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0xBF) goto yy1991;
-	goto yy1980;
-yy1994:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1980;
-	if (yych <= 0xBF) goto yy1993;
-	goto yy1980;
-yy1995:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0xBF) goto yy1993;
-	goto yy1980;
-yy1996:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0x8F) goto yy1993;
-	goto yy1980;
-yy1997:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0x9F) goto yy1991;
-	goto yy1980;
-yy1998:
-	++p;
-yy1999:
-	{ return (bufsize_t)(p - start); }
-yy2000:
-	yyaccept = 1;
-	marker = ++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy1989;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= 0x00) goto yy1999;
-			if (yych <= ')') goto yy1998;
-			goto yy1987;
-		} else {
-			if (yych <= 0xC1) goto yy1999;
-			if (yych <= 0xDF) goto yy1991;
-			goto yy1992;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy1997;
-			goto yy1993;
-		} else {
-			if (yych <= 0xF0) goto yy1994;
-			if (yych <= 0xF3) goto yy1995;
-			if (yych <= 0xF4) goto yy1996;
-			goto yy1999;
-		}
-	}
-yy2001:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy2003;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= 0x00) goto yy1980;
-			if (yych <= '\'') goto yy2014;
-			goto yy2001;
-		} else {
-			if (yych <= 0xC1) goto yy1980;
-			if (yych <= 0xDF) goto yy2005;
-			goto yy2006;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy2011;
-			goto yy2007;
-		} else {
-			if (yych <= 0xF0) goto yy2008;
-			if (yych <= 0xF3) goto yy2009;
-			if (yych <= 0xF4) goto yy2010;
-			goto yy1980;
-		}
-	}
-yy2003:
-	++p;
-	yych = *p;
-yy2004:
-	if (yybm[0+yych] & 64) {
-		goto yy2003;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= 0x00) goto yy1980;
-			if (yych <= '\'') goto yy2012;
-			goto yy2001;
-		} else {
-			if (yych <= 0xC1) goto yy1980;
-			if (yych >= 0xE0) goto yy2006;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy2011;
-			goto yy2007;
-		} else {
-			if (yych <= 0xF0) goto yy2008;
-			if (yych <= 0xF3) goto yy2009;
-			if (yych <= 0xF4) goto yy2010;
-			goto yy1980;
-		}
-	}
-yy2005:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0xBF) goto yy2003;
-	goto yy1980;
-yy2006:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1980;
-	if (yych <= 0xBF) goto yy2005;
-	goto yy1980;
-yy2007:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0xBF) goto yy2005;
-	goto yy1980;
-yy2008:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1980;
-	if (yych <= 0xBF) goto yy2007;
-	goto yy1980;
-yy2009:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0xBF) goto yy2007;
-	goto yy1980;
-yy2010:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0x8F) goto yy2007;
-	goto yy1980;
-yy2011:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0x9F) goto yy2005;
-	goto yy1980;
-yy2012:
-	++p;
-yy2013:
-	{ return (bufsize_t)(p - start); }
-yy2014:
-	yyaccept = 2;
-	marker = ++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy2003;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= 0x00) goto yy2013;
-			if (yych <= '\'') goto yy2012;
-			goto yy2001;
-		} else {
-			if (yych <= 0xC1) goto yy2013;
-			if (yych <= 0xDF) goto yy2005;
-			goto yy2006;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy2011;
-			goto yy2007;
-		} else {
-			if (yych <= 0xF0) goto yy2008;
-			if (yych <= 0xF3) goto yy2009;
-			if (yych <= 0xF4) goto yy2010;
-			goto yy2013;
-		}
-	}
-yy2015:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy2017;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= 0x00) goto yy1980;
-			if (yych <= '"') goto yy2028;
-			goto yy2015;
-		} else {
-			if (yych <= 0xC1) goto yy1980;
-			if (yych <= 0xDF) goto yy2019;
-			goto yy2020;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy2025;
-			goto yy2021;
-		} else {
-			if (yych <= 0xF0) goto yy2022;
-			if (yych <= 0xF3) goto yy2023;
-			if (yych <= 0xF4) goto yy2024;
-			goto yy1980;
-		}
-	}
-yy2017:
-	++p;
-	yych = *p;
-yy2018:
-	if (yybm[0+yych] & 128) {
-		goto yy2017;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= 0x00) goto yy1980;
-			if (yych <= '"') goto yy2026;
-			goto yy2015;
-		} else {
-			if (yych <= 0xC1) goto yy1980;
-			if (yych >= 0xE0) goto yy2020;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy2025;
-			goto yy2021;
-		} else {
-			if (yych <= 0xF0) goto yy2022;
-			if (yych <= 0xF3) goto yy2023;
-			if (yych <= 0xF4) goto yy2024;
-			goto yy1980;
-		}
-	}
-yy2019:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0xBF) goto yy2017;
-	goto yy1980;
-yy2020:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy1980;
-	if (yych <= 0xBF) goto yy2019;
-	goto yy1980;
-yy2021:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0xBF) goto yy2019;
-	goto yy1980;
-yy2022:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy1980;
-	if (yych <= 0xBF) goto yy2021;
-	goto yy1980;
-yy2023:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0xBF) goto yy2021;
-	goto yy1980;
-yy2024:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0x8F) goto yy2021;
-	goto yy1980;
-yy2025:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy1980;
-	if (yych <= 0x9F) goto yy2019;
-	goto yy1980;
-yy2026:
-	++p;
-yy2027:
-	{ return (bufsize_t)(p - start); }
-yy2028:
-	yyaccept = 3;
-	marker = ++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy2017;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '\\') {
-			if (yych <= 0x00) goto yy2027;
-			if (yych <= '"') goto yy2026;
-			goto yy2015;
-		} else {
-			if (yych <= 0xC1) goto yy2027;
-			if (yych <= 0xDF) goto yy2019;
-			goto yy2020;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy2025;
-			goto yy2021;
-		} else {
-			if (yych <= 0xF0) goto yy2022;
-			if (yych <= 0xF3) goto yy2023;
-			if (yych <= 0xF4) goto yy2024;
-			goto yy2027;
-		}
-	}
-}
-
+  {
+    unsigned char yych;
+    unsigned int yyaccept = 0;
+    static const unsigned char yybm[] = {
+        0,   224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 96,  224, 224, 224, 224, 160, 224, 192,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 224, 16,  224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+        224, 224, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0xC1) {
+      if (yych <= '"') {
+        if (yych == '\n')
+          goto yy1974;
+        if (yych <= '!')
+          goto yy1978;
+        goto yy1975;
+      } else {
+        if (yych <= '\'') {
+          if (yych <= '&')
+            goto yy1978;
+          goto yy1976;
+        } else {
+          if (yych <= '(')
+            goto yy1977;
+          if (yych <= 0x7F)
+            goto yy1978;
+        }
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy1979;
+        if (yych <= 0xE0)
+          goto yy1981;
+        if (yych <= 0xEC)
+          goto yy1982;
+        goto yy1986;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy1982;
+          goto yy1983;
+        } else {
+          if (yych <= 0xF3)
+            goto yy1984;
+          if (yych <= 0xF4)
+            goto yy1985;
+        }
+      }
+    }
+  yy1974 : { return 0; }
+  yy1975:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych <= 0x00)
+      goto yy1974;
+    if (yych <= 0x7F)
+      goto yy2018;
+    if (yych <= 0xC1)
+      goto yy1974;
+    if (yych <= 0xF4)
+      goto yy2018;
+    goto yy1974;
+  yy1976:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych <= 0x00)
+      goto yy1974;
+    if (yych <= 0x7F)
+      goto yy2004;
+    if (yych <= 0xC1)
+      goto yy1974;
+    if (yych <= 0xF4)
+      goto yy2004;
+    goto yy1974;
+  yy1977:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych <= 0x00)
+      goto yy1974;
+    if (yych <= 0x7F)
+      goto yy1990;
+    if (yych <= 0xC1)
+      goto yy1974;
+    if (yych <= 0xF4)
+      goto yy1990;
+    goto yy1974;
+  yy1978:
+    yych = *++p;
+    goto yy1974;
+  yy1979:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy1978;
+  yy1980:
+    p = marker;
+    if (yyaccept <= 1) {
+      if (yyaccept == 0) {
+        goto yy1974;
+      } else {
+        goto yy1999;
+      }
+    } else {
+      if (yyaccept == 2) {
+        goto yy2013;
+      } else {
+        goto yy2027;
+      }
+    }
+  yy1981:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy1979;
+    goto yy1980;
+  yy1982:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy1979;
+    goto yy1980;
+  yy1983:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy1982;
+    goto yy1980;
+  yy1984:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy1982;
+    goto yy1980;
+  yy1985:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0x8F)
+      goto yy1982;
+    goto yy1980;
+  yy1986:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0x9F)
+      goto yy1979;
+    goto yy1980;
+  yy1987:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy1989;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= 0x00)
+          goto yy1980;
+        if (yych <= ')')
+          goto yy2000;
+        goto yy1987;
+      } else {
+        if (yych <= 0xC1)
+          goto yy1980;
+        if (yych <= 0xDF)
+          goto yy1991;
+        goto yy1992;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1997;
+        goto yy1993;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1994;
+        if (yych <= 0xF3)
+          goto yy1995;
+        if (yych <= 0xF4)
+          goto yy1996;
+        goto yy1980;
+      }
+    }
+  yy1989:
+    ++p;
+    yych = *p;
+  yy1990:
+    if (yybm[0 + yych] & 32) {
+      goto yy1989;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= 0x00)
+          goto yy1980;
+        if (yych <= ')')
+          goto yy1998;
+        goto yy1987;
+      } else {
+        if (yych <= 0xC1)
+          goto yy1980;
+        if (yych >= 0xE0)
+          goto yy1992;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1997;
+        goto yy1993;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1994;
+        if (yych <= 0xF3)
+          goto yy1995;
+        if (yych <= 0xF4)
+          goto yy1996;
+        goto yy1980;
+      }
+    }
+  yy1991:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy1989;
+    goto yy1980;
+  yy1992:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy1991;
+    goto yy1980;
+  yy1993:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy1991;
+    goto yy1980;
+  yy1994:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy1993;
+    goto yy1980;
+  yy1995:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy1993;
+    goto yy1980;
+  yy1996:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0x8F)
+      goto yy1993;
+    goto yy1980;
+  yy1997:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0x9F)
+      goto yy1991;
+    goto yy1980;
+  yy1998:
+    ++p;
+  yy1999 : { return (bufsize_t)(p - start); }
+  yy2000:
+    yyaccept = 1;
+    marker = ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy1989;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= 0x00)
+          goto yy1999;
+        if (yych <= ')')
+          goto yy1998;
+        goto yy1987;
+      } else {
+        if (yych <= 0xC1)
+          goto yy1999;
+        if (yych <= 0xDF)
+          goto yy1991;
+        goto yy1992;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy1997;
+        goto yy1993;
+      } else {
+        if (yych <= 0xF0)
+          goto yy1994;
+        if (yych <= 0xF3)
+          goto yy1995;
+        if (yych <= 0xF4)
+          goto yy1996;
+        goto yy1999;
+      }
+    }
+  yy2001:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy2003;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= 0x00)
+          goto yy1980;
+        if (yych <= '\'')
+          goto yy2014;
+        goto yy2001;
+      } else {
+        if (yych <= 0xC1)
+          goto yy1980;
+        if (yych <= 0xDF)
+          goto yy2005;
+        goto yy2006;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy2011;
+        goto yy2007;
+      } else {
+        if (yych <= 0xF0)
+          goto yy2008;
+        if (yych <= 0xF3)
+          goto yy2009;
+        if (yych <= 0xF4)
+          goto yy2010;
+        goto yy1980;
+      }
+    }
+  yy2003:
+    ++p;
+    yych = *p;
+  yy2004:
+    if (yybm[0 + yych] & 64) {
+      goto yy2003;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= 0x00)
+          goto yy1980;
+        if (yych <= '\'')
+          goto yy2012;
+        goto yy2001;
+      } else {
+        if (yych <= 0xC1)
+          goto yy1980;
+        if (yych >= 0xE0)
+          goto yy2006;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy2011;
+        goto yy2007;
+      } else {
+        if (yych <= 0xF0)
+          goto yy2008;
+        if (yych <= 0xF3)
+          goto yy2009;
+        if (yych <= 0xF4)
+          goto yy2010;
+        goto yy1980;
+      }
+    }
+  yy2005:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy2003;
+    goto yy1980;
+  yy2006:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy2005;
+    goto yy1980;
+  yy2007:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy2005;
+    goto yy1980;
+  yy2008:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy2007;
+    goto yy1980;
+  yy2009:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy2007;
+    goto yy1980;
+  yy2010:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0x8F)
+      goto yy2007;
+    goto yy1980;
+  yy2011:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0x9F)
+      goto yy2005;
+    goto yy1980;
+  yy2012:
+    ++p;
+  yy2013 : { return (bufsize_t)(p - start); }
+  yy2014:
+    yyaccept = 2;
+    marker = ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy2003;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= 0x00)
+          goto yy2013;
+        if (yych <= '\'')
+          goto yy2012;
+        goto yy2001;
+      } else {
+        if (yych <= 0xC1)
+          goto yy2013;
+        if (yych <= 0xDF)
+          goto yy2005;
+        goto yy2006;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy2011;
+        goto yy2007;
+      } else {
+        if (yych <= 0xF0)
+          goto yy2008;
+        if (yych <= 0xF3)
+          goto yy2009;
+        if (yych <= 0xF4)
+          goto yy2010;
+        goto yy2013;
+      }
+    }
+  yy2015:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2017;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= 0x00)
+          goto yy1980;
+        if (yych <= '"')
+          goto yy2028;
+        goto yy2015;
+      } else {
+        if (yych <= 0xC1)
+          goto yy1980;
+        if (yych <= 0xDF)
+          goto yy2019;
+        goto yy2020;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy2025;
+        goto yy2021;
+      } else {
+        if (yych <= 0xF0)
+          goto yy2022;
+        if (yych <= 0xF3)
+          goto yy2023;
+        if (yych <= 0xF4)
+          goto yy2024;
+        goto yy1980;
+      }
+    }
+  yy2017:
+    ++p;
+    yych = *p;
+  yy2018:
+    if (yybm[0 + yych] & 128) {
+      goto yy2017;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= 0x00)
+          goto yy1980;
+        if (yych <= '"')
+          goto yy2026;
+        goto yy2015;
+      } else {
+        if (yych <= 0xC1)
+          goto yy1980;
+        if (yych >= 0xE0)
+          goto yy2020;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy2025;
+        goto yy2021;
+      } else {
+        if (yych <= 0xF0)
+          goto yy2022;
+        if (yych <= 0xF3)
+          goto yy2023;
+        if (yych <= 0xF4)
+          goto yy2024;
+        goto yy1980;
+      }
+    }
+  yy2019:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy2017;
+    goto yy1980;
+  yy2020:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy2019;
+    goto yy1980;
+  yy2021:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy2019;
+    goto yy1980;
+  yy2022:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy2021;
+    goto yy1980;
+  yy2023:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0xBF)
+      goto yy2021;
+    goto yy1980;
+  yy2024:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0x8F)
+      goto yy2021;
+    goto yy1980;
+  yy2025:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy1980;
+    if (yych <= 0x9F)
+      goto yy2019;
+    goto yy1980;
+  yy2026:
+    ++p;
+  yy2027 : { return (bufsize_t)(p - start); }
+  yy2028:
+    yyaccept = 3;
+    marker = ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2017;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '\\') {
+        if (yych <= 0x00)
+          goto yy2027;
+        if (yych <= '"')
+          goto yy2026;
+        goto yy2015;
+      } else {
+        if (yych <= 0xC1)
+          goto yy2027;
+        if (yych <= 0xDF)
+          goto yy2019;
+        goto yy2020;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy2025;
+        goto yy2021;
+      } else {
+        if (yych <= 0xF0)
+          goto yy2022;
+        if (yych <= 0xF3)
+          goto yy2023;
+        if (yych <= 0xF4)
+          goto yy2024;
+        goto yy2027;
+      }
+    }
+  }
 }
 
 // Match space characters, including newlines.
-bufsize_t _scan_spacechars(const unsigned char *p)
-{
-  const unsigned char *marker = NULL;
-  const unsigned char *start = p; \
-
-{
-	unsigned char yych;
-	static const unsigned char yybm[] = {
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0, 128, 128, 128, 128, 128,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		128,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0xC1) {
-		if (yych <= '\r') {
-			if (yych <= 0x08) goto yy2035;
-			if (yych == '\n') goto yy2033;
-			goto yy2032;
-		} else {
-			if (yych == ' ') goto yy2032;
-			if (yych <= 0x7F) goto yy2035;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy2037;
-			if (yych <= 0xE0) goto yy2039;
-			if (yych <= 0xEC) goto yy2040;
-			goto yy2044;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy2040;
-				goto yy2041;
-			} else {
-				if (yych <= 0xF3) goto yy2042;
-				if (yych <= 0xF4) goto yy2043;
-			}
-		}
-	}
-yy2031:
-	{ return (bufsize_t)(p - start); }
-yy2032:
-	yych = *++p;
-	goto yy2034;
-yy2033:
-	++p;
-	yych = *p;
-yy2034:
-	if (yybm[0+yych] & 128) {
-		goto yy2033;
-	}
-	goto yy2031;
-yy2035:
-	++p;
-	{ return 0; }
-yy2037:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2038;
-	if (yych <= 0xBF) goto yy2035;
-yy2038:
-	p = marker;
-	goto yy2031;
-yy2039:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy2038;
-	if (yych <= 0xBF) goto yy2037;
-	goto yy2038;
-yy2040:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2038;
-	if (yych <= 0xBF) goto yy2037;
-	goto yy2038;
-yy2041:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy2038;
-	if (yych <= 0xBF) goto yy2040;
-	goto yy2038;
-yy2042:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2038;
-	if (yych <= 0xBF) goto yy2040;
-	goto yy2038;
-yy2043:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2038;
-	if (yych <= 0x8F) goto yy2040;
-	goto yy2038;
-yy2044:
-	++p;
-	if ((yych = *p) <= 0x7F) goto yy2038;
-	if (yych <= 0x9F) goto yy2037;
-	goto yy2038;
-}
-
-}
-
-// Match ATX header start.
-bufsize_t _scan_atx_header_start(const unsigned char *p)
-{
+bufsize_t _scan_spacechars(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	static const unsigned char yybm[] = {
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		128,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0xDF) {
-		if (yych <= '"') {
-			if (yych != '\n') goto yy2049;
-		} else {
-			if (yych <= '#') goto yy2048;
-			if (yych <= 0x7F) goto yy2049;
-			if (yych >= 0xC2) goto yy2050;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy2052;
-			if (yych == 0xED) goto yy2057;
-			goto yy2053;
-		} else {
-			if (yych <= 0xF0) goto yy2054;
-			if (yych <= 0xF3) goto yy2055;
-			if (yych <= 0xF4) goto yy2056;
-		}
-	}
-yy2047:
-	{ return 0; }
-yy2048:
-	yych = *(marker = ++p);
-	if (yybm[0+yych] & 128) {
-		goto yy2060;
-	}
-	if (yych <= '\f') {
-		if (yych == '\n') goto yy2058;
-		goto yy2047;
-	} else {
-		if (yych <= '\r') goto yy2058;
-		if (yych == '#') goto yy2062;
-		goto yy2047;
-	}
-yy2049:
-	yych = *++p;
-	goto yy2047;
-yy2050:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2051;
-	if (yych <= 0xBF) goto yy2049;
-yy2051:
-	p = marker;
-	goto yy2047;
-yy2052:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy2051;
-	if (yych <= 0xBF) goto yy2050;
-	goto yy2051;
-yy2053:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2051;
-	if (yych <= 0xBF) goto yy2050;
-	goto yy2051;
-yy2054:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy2051;
-	if (yych <= 0xBF) goto yy2053;
-	goto yy2051;
-yy2055:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2051;
-	if (yych <= 0xBF) goto yy2053;
-	goto yy2051;
-yy2056:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2051;
-	if (yych <= 0x8F) goto yy2053;
-	goto yy2051;
-yy2057:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2051;
-	if (yych <= 0x9F) goto yy2050;
-	goto yy2051;
-yy2058:
-	++p;
-yy2059:
-	{ return (bufsize_t)(p - start); }
-yy2060:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy2060;
-	}
-	goto yy2059;
-yy2062:
-	yych = *++p;
-	if (yybm[0+yych] & 128) {
-		goto yy2060;
-	}
-	if (yych <= '\f') {
-		if (yych == '\n') goto yy2058;
-		goto yy2051;
-	} else {
-		if (yych <= '\r') goto yy2058;
-		if (yych != '#') goto yy2051;
-	}
-	yych = *++p;
-	if (yybm[0+yych] & 128) {
-		goto yy2060;
-	}
-	if (yych <= '\f') {
-		if (yych == '\n') goto yy2058;
-		goto yy2051;
-	} else {
-		if (yych <= '\r') goto yy2058;
-		if (yych != '#') goto yy2051;
-	}
-	yych = *++p;
-	if (yybm[0+yych] & 128) {
-		goto yy2060;
-	}
-	if (yych <= '\f') {
-		if (yych == '\n') goto yy2058;
-		goto yy2051;
-	} else {
-		if (yych <= '\r') goto yy2058;
-		if (yych != '#') goto yy2051;
-	}
-	yych = *++p;
-	if (yybm[0+yych] & 128) {
-		goto yy2060;
-	}
-	if (yych <= '\f') {
-		if (yych == '\n') goto yy2058;
-		goto yy2051;
-	} else {
-		if (yych <= '\r') goto yy2058;
-		if (yych != '#') goto yy2051;
-	}
-	++p;
-	if (yybm[0+(yych = *p)] & 128) {
-		goto yy2060;
-	}
-	if (yych == '\n') goto yy2058;
-	if (yych == '\r') goto yy2058;
-	goto yy2051;
+  {
+    unsigned char yych;
+    static const unsigned char yybm[] = {
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   128, 0,   0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0, 0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0xC1) {
+      if (yych <= '\r') {
+        if (yych <= 0x08)
+          goto yy2035;
+        if (yych == '\n')
+          goto yy2033;
+        goto yy2032;
+      } else {
+        if (yych == ' ')
+          goto yy2032;
+        if (yych <= 0x7F)
+          goto yy2035;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy2037;
+        if (yych <= 0xE0)
+          goto yy2039;
+        if (yych <= 0xEC)
+          goto yy2040;
+        goto yy2044;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy2040;
+          goto yy2041;
+        } else {
+          if (yych <= 0xF3)
+            goto yy2042;
+          if (yych <= 0xF4)
+            goto yy2043;
+        }
+      }
+    }
+  yy2031 : { return (bufsize_t)(p - start); }
+  yy2032:
+    yych = *++p;
+    goto yy2034;
+  yy2033:
+    ++p;
+    yych = *p;
+  yy2034:
+    if (yybm[0 + yych] & 128) {
+      goto yy2033;
+    }
+    goto yy2031;
+  yy2035:
+    ++p;
+    { return 0; }
+  yy2037:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2038;
+    if (yych <= 0xBF)
+      goto yy2035;
+  yy2038:
+    p = marker;
+    goto yy2031;
+  yy2039:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy2038;
+    if (yych <= 0xBF)
+      goto yy2037;
+    goto yy2038;
+  yy2040:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2038;
+    if (yych <= 0xBF)
+      goto yy2037;
+    goto yy2038;
+  yy2041:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy2038;
+    if (yych <= 0xBF)
+      goto yy2040;
+    goto yy2038;
+  yy2042:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2038;
+    if (yych <= 0xBF)
+      goto yy2040;
+    goto yy2038;
+  yy2043:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2038;
+    if (yych <= 0x8F)
+      goto yy2040;
+    goto yy2038;
+  yy2044:
+    ++p;
+    if ((yych = *p) <= 0x7F)
+      goto yy2038;
+    if (yych <= 0x9F)
+      goto yy2037;
+    goto yy2038;
+  }
 }
 
+// Match ATX header start.
+bufsize_t _scan_atx_header_start(const unsigned char *p) {
+  const unsigned char *marker = NULL;
+  const unsigned char *start = p;
+
+  {
+    unsigned char yych;
+    static const unsigned char yybm[] = {
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0xDF) {
+      if (yych <= '"') {
+        if (yych != '\n')
+          goto yy2049;
+      } else {
+        if (yych <= '#')
+          goto yy2048;
+        if (yych <= 0x7F)
+          goto yy2049;
+        if (yych >= 0xC2)
+          goto yy2050;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy2052;
+        if (yych == 0xED)
+          goto yy2057;
+        goto yy2053;
+      } else {
+        if (yych <= 0xF0)
+          goto yy2054;
+        if (yych <= 0xF3)
+          goto yy2055;
+        if (yych <= 0xF4)
+          goto yy2056;
+      }
+    }
+  yy2047 : { return 0; }
+  yy2048:
+    yych = *(marker = ++p);
+    if (yybm[0 + yych] & 128) {
+      goto yy2060;
+    }
+    if (yych <= '\f') {
+      if (yych == '\n')
+        goto yy2058;
+      goto yy2047;
+    } else {
+      if (yych <= '\r')
+        goto yy2058;
+      if (yych == '#')
+        goto yy2062;
+      goto yy2047;
+    }
+  yy2049:
+    yych = *++p;
+    goto yy2047;
+  yy2050:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2051;
+    if (yych <= 0xBF)
+      goto yy2049;
+  yy2051:
+    p = marker;
+    goto yy2047;
+  yy2052:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy2051;
+    if (yych <= 0xBF)
+      goto yy2050;
+    goto yy2051;
+  yy2053:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2051;
+    if (yych <= 0xBF)
+      goto yy2050;
+    goto yy2051;
+  yy2054:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy2051;
+    if (yych <= 0xBF)
+      goto yy2053;
+    goto yy2051;
+  yy2055:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2051;
+    if (yych <= 0xBF)
+      goto yy2053;
+    goto yy2051;
+  yy2056:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2051;
+    if (yych <= 0x8F)
+      goto yy2053;
+    goto yy2051;
+  yy2057:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2051;
+    if (yych <= 0x9F)
+      goto yy2050;
+    goto yy2051;
+  yy2058:
+    ++p;
+  yy2059 : { return (bufsize_t)(p - start); }
+  yy2060:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2060;
+    }
+    goto yy2059;
+  yy2062:
+    yych = *++p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2060;
+    }
+    if (yych <= '\f') {
+      if (yych == '\n')
+        goto yy2058;
+      goto yy2051;
+    } else {
+      if (yych <= '\r')
+        goto yy2058;
+      if (yych != '#')
+        goto yy2051;
+    }
+    yych = *++p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2060;
+    }
+    if (yych <= '\f') {
+      if (yych == '\n')
+        goto yy2058;
+      goto yy2051;
+    } else {
+      if (yych <= '\r')
+        goto yy2058;
+      if (yych != '#')
+        goto yy2051;
+    }
+    yych = *++p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2060;
+    }
+    if (yych <= '\f') {
+      if (yych == '\n')
+        goto yy2058;
+      goto yy2051;
+    } else {
+      if (yych <= '\r')
+        goto yy2058;
+      if (yych != '#')
+        goto yy2051;
+    }
+    yych = *++p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2060;
+    }
+    if (yych <= '\f') {
+      if (yych == '\n')
+        goto yy2058;
+      goto yy2051;
+    } else {
+      if (yych <= '\r')
+        goto yy2058;
+      if (yych != '#')
+        goto yy2051;
+    }
+    ++p;
+    if (yybm[0 + (yych = *p)] & 128) {
+      goto yy2060;
+    }
+    if (yych == '\n')
+      goto yy2058;
+    if (yych == '\r')
+      goto yy2058;
+    goto yy2051;
+  }
 }
 
 // Match setext header line.  Return 1 for level-1 header,
 // 2 for level-2, 0 for no match.
-bufsize_t _scan_setext_header_line(const unsigned char *p)
-{
+bufsize_t _scan_setext_header_line(const unsigned char *p) {
   const unsigned char *marker = NULL;
 
-{
-	unsigned char yych;
-	static const unsigned char yybm[] = {
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		 32,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,  64,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0, 128,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0xC1) {
-		if (yych <= '-') {
-			if (yych == '\n') goto yy2069;
-			if (yych <= ',') goto yy2072;
-			goto yy2071;
-		} else {
-			if (yych == '=') goto yy2070;
-			if (yych <= 0x7F) goto yy2072;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy2073;
-			if (yych <= 0xE0) goto yy2075;
-			if (yych <= 0xEC) goto yy2076;
-			goto yy2080;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy2076;
-				goto yy2077;
-			} else {
-				if (yych <= 0xF3) goto yy2078;
-				if (yych <= 0xF4) goto yy2079;
-			}
-		}
-	}
-yy2069:
-	{ return 0; }
-yy2070:
-	yych = *(marker = ++p);
-	if (yybm[0+yych] & 128) {
-		goto yy2091;
-	}
-	if (yych <= '\f') {
-		if (yych == '\n') goto yy2089;
-		goto yy2069;
-	} else {
-		if (yych <= '\r') goto yy2089;
-		if (yych == ' ') goto yy2087;
-		goto yy2069;
-	}
-yy2071:
-	yych = *(marker = ++p);
-	if (yybm[0+yych] & 32) {
-		goto yy2081;
-	}
-	if (yych <= '\f') {
-		if (yych == '\n') goto yy2083;
-		goto yy2069;
-	} else {
-		if (yych <= '\r') goto yy2083;
-		if (yych == '-') goto yy2085;
-		goto yy2069;
-	}
-yy2072:
-	yych = *++p;
-	goto yy2069;
-yy2073:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2074;
-	if (yych <= 0xBF) goto yy2072;
-yy2074:
-	p = marker;
-	goto yy2069;
-yy2075:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy2074;
-	if (yych <= 0xBF) goto yy2073;
-	goto yy2074;
-yy2076:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2074;
-	if (yych <= 0xBF) goto yy2073;
-	goto yy2074;
-yy2077:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy2074;
-	if (yych <= 0xBF) goto yy2076;
-	goto yy2074;
-yy2078:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2074;
-	if (yych <= 0xBF) goto yy2076;
-	goto yy2074;
-yy2079:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2074;
-	if (yych <= 0x8F) goto yy2076;
-	goto yy2074;
-yy2080:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2074;
-	if (yych <= 0x9F) goto yy2073;
-	goto yy2074;
-yy2081:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy2081;
-	}
-	if (yych == '\n') goto yy2083;
-	if (yych != '\r') goto yy2074;
-yy2083:
-	++p;
-	{ return 2; }
-yy2085:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy2081;
-	}
-	if (yych <= '\f') {
-		if (yych == '\n') goto yy2083;
-		goto yy2074;
-	} else {
-		if (yych <= '\r') goto yy2083;
-		if (yych == '-') goto yy2085;
-		goto yy2074;
-	}
-yy2087:
-	++p;
-	yych = *p;
-	if (yych <= '\f') {
-		if (yych != '\n') goto yy2074;
-	} else {
-		if (yych <= '\r') goto yy2089;
-		if (yych == ' ') goto yy2087;
-		goto yy2074;
-	}
-yy2089:
-	++p;
-	{ return 1; }
-yy2091:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy2091;
-	}
-	if (yych <= '\f') {
-		if (yych == '\n') goto yy2089;
-		goto yy2074;
-	} else {
-		if (yych <= '\r') goto yy2089;
-		if (yych == ' ') goto yy2087;
-		goto yy2074;
-	}
-}
-
+  {
+    unsigned char yych;
+    static const unsigned char yybm[] = {
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
+        0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0xC1) {
+      if (yych <= '-') {
+        if (yych == '\n')
+          goto yy2069;
+        if (yych <= ',')
+          goto yy2072;
+        goto yy2071;
+      } else {
+        if (yych == '=')
+          goto yy2070;
+        if (yych <= 0x7F)
+          goto yy2072;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy2073;
+        if (yych <= 0xE0)
+          goto yy2075;
+        if (yych <= 0xEC)
+          goto yy2076;
+        goto yy2080;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy2076;
+          goto yy2077;
+        } else {
+          if (yych <= 0xF3)
+            goto yy2078;
+          if (yych <= 0xF4)
+            goto yy2079;
+        }
+      }
+    }
+  yy2069 : { return 0; }
+  yy2070:
+    yych = *(marker = ++p);
+    if (yybm[0 + yych] & 128) {
+      goto yy2091;
+    }
+    if (yych <= '\f') {
+      if (yych == '\n')
+        goto yy2089;
+      goto yy2069;
+    } else {
+      if (yych <= '\r')
+        goto yy2089;
+      if (yych == ' ')
+        goto yy2087;
+      goto yy2069;
+    }
+  yy2071:
+    yych = *(marker = ++p);
+    if (yybm[0 + yych] & 32) {
+      goto yy2081;
+    }
+    if (yych <= '\f') {
+      if (yych == '\n')
+        goto yy2083;
+      goto yy2069;
+    } else {
+      if (yych <= '\r')
+        goto yy2083;
+      if (yych == '-')
+        goto yy2085;
+      goto yy2069;
+    }
+  yy2072:
+    yych = *++p;
+    goto yy2069;
+  yy2073:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2074;
+    if (yych <= 0xBF)
+      goto yy2072;
+  yy2074:
+    p = marker;
+    goto yy2069;
+  yy2075:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy2074;
+    if (yych <= 0xBF)
+      goto yy2073;
+    goto yy2074;
+  yy2076:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2074;
+    if (yych <= 0xBF)
+      goto yy2073;
+    goto yy2074;
+  yy2077:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy2074;
+    if (yych <= 0xBF)
+      goto yy2076;
+    goto yy2074;
+  yy2078:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2074;
+    if (yych <= 0xBF)
+      goto yy2076;
+    goto yy2074;
+  yy2079:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2074;
+    if (yych <= 0x8F)
+      goto yy2076;
+    goto yy2074;
+  yy2080:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2074;
+    if (yych <= 0x9F)
+      goto yy2073;
+    goto yy2074;
+  yy2081:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy2081;
+    }
+    if (yych == '\n')
+      goto yy2083;
+    if (yych != '\r')
+      goto yy2074;
+  yy2083:
+    ++p;
+    { return 2; }
+  yy2085:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy2081;
+    }
+    if (yych <= '\f') {
+      if (yych == '\n')
+        goto yy2083;
+      goto yy2074;
+    } else {
+      if (yych <= '\r')
+        goto yy2083;
+      if (yych == '-')
+        goto yy2085;
+      goto yy2074;
+    }
+  yy2087:
+    ++p;
+    yych = *p;
+    if (yych <= '\f') {
+      if (yych != '\n')
+        goto yy2074;
+    } else {
+      if (yych <= '\r')
+        goto yy2089;
+      if (yych == ' ')
+        goto yy2087;
+      goto yy2074;
+    }
+  yy2089:
+    ++p;
+    { return 1; }
+  yy2091:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2091;
+    }
+    if (yych <= '\f') {
+      if (yych == '\n')
+        goto yy2089;
+      goto yy2074;
+    } else {
+      if (yych <= '\r')
+        goto yy2089;
+      if (yych == ' ')
+        goto yy2087;
+      goto yy2074;
+    }
+  }
 }
 
 // Scan a horizontal rule line: "...three or more hyphens, asterisks,
 // or underscores on a line by themselves. If you wish, you may use
 // spaces between the hyphens or asterisks."
-bufsize_t _scan_hrule(const unsigned char *p)
-{
+bufsize_t _scan_hrule(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	static const unsigned char yybm[] = {
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,  32,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		248,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0, 128,   0,   0,  16,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,  64, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0x7F) {
-		if (yych <= '*') {
-			if (yych == '\n') goto yy2095;
-			if (yych <= ')') goto yy2099;
-			goto yy2096;
-		} else {
-			if (yych <= '-') {
-				if (yych <= ',') goto yy2099;
-				goto yy2098;
-			} else {
-				if (yych == '_') goto yy2097;
-				goto yy2099;
-			}
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) {
-				if (yych >= 0xC2) goto yy2100;
-			} else {
-				if (yych <= 0xE0) goto yy2102;
-				if (yych <= 0xEC) goto yy2103;
-				goto yy2107;
-			}
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy2103;
-				goto yy2104;
-			} else {
-				if (yych <= 0xF3) goto yy2105;
-				if (yych <= 0xF4) goto yy2106;
-			}
-		}
-	}
-yy2095:
-	{ return 0; }
-yy2096:
-	yych = *(marker = ++p);
-	if (yych == ' ') goto yy2128;
-	if (yych == '*') goto yy2130;
-	goto yy2095;
-yy2097:
-	yych = *(marker = ++p);
-	if (yych == ' ') goto yy2118;
-	if (yych == '_') goto yy2120;
-	goto yy2095;
-yy2098:
-	yych = *(marker = ++p);
-	if (yybm[0+yych] & 8) {
-		goto yy2108;
-	}
-	if (yych == '-') goto yy2110;
-	goto yy2095;
-yy2099:
-	yych = *++p;
-	goto yy2095;
-yy2100:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2101;
-	if (yych <= 0xBF) goto yy2099;
-yy2101:
-	p = marker;
-	goto yy2095;
-yy2102:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy2101;
-	if (yych <= 0xBF) goto yy2100;
-	goto yy2101;
-yy2103:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2101;
-	if (yych <= 0xBF) goto yy2100;
-	goto yy2101;
-yy2104:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy2101;
-	if (yych <= 0xBF) goto yy2103;
-	goto yy2101;
-yy2105:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2101;
-	if (yych <= 0xBF) goto yy2103;
-	goto yy2101;
-yy2106:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2101;
-	if (yych <= 0x8F) goto yy2103;
-	goto yy2101;
-yy2107:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2101;
-	if (yych <= 0x9F) goto yy2100;
-	goto yy2101;
-yy2108:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 8) {
-		goto yy2108;
-	}
-	if (yych != '-') goto yy2101;
-yy2110:
-	++p;
-	yych = *p;
-	if (yych == ' ') goto yy2110;
-	if (yych != '-') goto yy2101;
-yy2112:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 16) {
-		goto yy2112;
-	}
-	if (yych <= '\n') {
-		if (yych <= 0x08) goto yy2101;
-		if (yych >= '\n') goto yy2116;
-	} else {
-		if (yych == '\r') goto yy2116;
-		goto yy2101;
-	}
-yy2114:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy2114;
-	}
-	if (yych <= 0x08) goto yy2101;
-	if (yych <= '\n') goto yy2116;
-	if (yych != '\r') goto yy2101;
-yy2116:
-	++p;
-	{ return (bufsize_t)(p - start); }
-yy2118:
-	++p;
-	yych = *p;
-	if (yych == ' ') goto yy2118;
-	if (yych != '_') goto yy2101;
-yy2120:
-	++p;
-	yych = *p;
-	if (yych == ' ') goto yy2120;
-	if (yych != '_') goto yy2101;
-yy2122:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy2122;
-	}
-	if (yych <= '\n') {
-		if (yych <= 0x08) goto yy2101;
-		if (yych >= '\n') goto yy2126;
-	} else {
-		if (yych == '\r') goto yy2126;
-		goto yy2101;
-	}
-yy2124:
-	++p;
-	yych = *p;
-	if (yych <= '\f') {
-		if (yych <= 0x08) goto yy2101;
-		if (yych <= '\t') goto yy2124;
-		if (yych >= '\v') goto yy2101;
-	} else {
-		if (yych <= '\r') goto yy2126;
-		if (yych == ' ') goto yy2124;
-		goto yy2101;
-	}
-yy2126:
-	++p;
-	{ return (bufsize_t)(p - start); }
-yy2128:
-	++p;
-	yych = *p;
-	if (yych == ' ') goto yy2128;
-	if (yych != '*') goto yy2101;
-yy2130:
-	++p;
-	yych = *p;
-	if (yych == ' ') goto yy2130;
-	if (yych != '*') goto yy2101;
-yy2132:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy2132;
-	}
-	if (yych <= '\n') {
-		if (yych <= 0x08) goto yy2101;
-		if (yych >= '\n') goto yy2136;
-	} else {
-		if (yych == '\r') goto yy2136;
-		goto yy2101;
-	}
-yy2134:
-	++p;
-	yych = *p;
-	if (yych <= '\f') {
-		if (yych <= 0x08) goto yy2101;
-		if (yych <= '\t') goto yy2134;
-		if (yych >= '\v') goto yy2101;
-	} else {
-		if (yych <= '\r') goto yy2136;
-		if (yych == ' ') goto yy2134;
-		goto yy2101;
-	}
-yy2136:
-	++p;
-	{ return (bufsize_t)(p - start); }
-}
-
+  {
+    unsigned char yych;
+    static const unsigned char yybm[] = {
+        0, 0,  0, 0, 0, 0, 0, 0,  0, 32, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,
+        0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0,
+        0, 16, 0, 0, 0, 0, 0, 0,  0, 0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,
+        0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,
+        0, 0,  0, 0, 0, 0, 0, 64, 0, 0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,
+        0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,
+        0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,
+        0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,
+        0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,
+        0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,
+        0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,
+        0, 0,  0, 0, 0, 0, 0, 0,  0, 0,  0,   0, 0, 0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0x7F) {
+      if (yych <= '*') {
+        if (yych == '\n')
+          goto yy2095;
+        if (yych <= ')')
+          goto yy2099;
+        goto yy2096;
+      } else {
+        if (yych <= '-') {
+          if (yych <= ',')
+            goto yy2099;
+          goto yy2098;
+        } else {
+          if (yych == '_')
+            goto yy2097;
+          goto yy2099;
+        }
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF) {
+          if (yych >= 0xC2)
+            goto yy2100;
+        } else {
+          if (yych <= 0xE0)
+            goto yy2102;
+          if (yych <= 0xEC)
+            goto yy2103;
+          goto yy2107;
+        }
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy2103;
+          goto yy2104;
+        } else {
+          if (yych <= 0xF3)
+            goto yy2105;
+          if (yych <= 0xF4)
+            goto yy2106;
+        }
+      }
+    }
+  yy2095 : { return 0; }
+  yy2096:
+    yych = *(marker = ++p);
+    if (yych == ' ')
+      goto yy2128;
+    if (yych == '*')
+      goto yy2130;
+    goto yy2095;
+  yy2097:
+    yych = *(marker = ++p);
+    if (yych == ' ')
+      goto yy2118;
+    if (yych == '_')
+      goto yy2120;
+    goto yy2095;
+  yy2098:
+    yych = *(marker = ++p);
+    if (yybm[0 + yych] & 8) {
+      goto yy2108;
+    }
+    if (yych == '-')
+      goto yy2110;
+    goto yy2095;
+  yy2099:
+    yych = *++p;
+    goto yy2095;
+  yy2100:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2101;
+    if (yych <= 0xBF)
+      goto yy2099;
+  yy2101:
+    p = marker;
+    goto yy2095;
+  yy2102:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy2101;
+    if (yych <= 0xBF)
+      goto yy2100;
+    goto yy2101;
+  yy2103:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2101;
+    if (yych <= 0xBF)
+      goto yy2100;
+    goto yy2101;
+  yy2104:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy2101;
+    if (yych <= 0xBF)
+      goto yy2103;
+    goto yy2101;
+  yy2105:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2101;
+    if (yych <= 0xBF)
+      goto yy2103;
+    goto yy2101;
+  yy2106:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2101;
+    if (yych <= 0x8F)
+      goto yy2103;
+    goto yy2101;
+  yy2107:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2101;
+    if (yych <= 0x9F)
+      goto yy2100;
+    goto yy2101;
+  yy2108:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 8) {
+      goto yy2108;
+    }
+    if (yych != '-')
+      goto yy2101;
+  yy2110:
+    ++p;
+    yych = *p;
+    if (yych == ' ')
+      goto yy2110;
+    if (yych != '-')
+      goto yy2101;
+  yy2112:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 16) {
+      goto yy2112;
+    }
+    if (yych <= '\n') {
+      if (yych <= 0x08)
+        goto yy2101;
+      if (yych >= '\n')
+        goto yy2116;
+    } else {
+      if (yych == '\r')
+        goto yy2116;
+      goto yy2101;
+    }
+  yy2114:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy2114;
+    }
+    if (yych <= 0x08)
+      goto yy2101;
+    if (yych <= '\n')
+      goto yy2116;
+    if (yych != '\r')
+      goto yy2101;
+  yy2116:
+    ++p;
+    { return (bufsize_t)(p - start); }
+  yy2118:
+    ++p;
+    yych = *p;
+    if (yych == ' ')
+      goto yy2118;
+    if (yych != '_')
+      goto yy2101;
+  yy2120:
+    ++p;
+    yych = *p;
+    if (yych == ' ')
+      goto yy2120;
+    if (yych != '_')
+      goto yy2101;
+  yy2122:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy2122;
+    }
+    if (yych <= '\n') {
+      if (yych <= 0x08)
+        goto yy2101;
+      if (yych >= '\n')
+        goto yy2126;
+    } else {
+      if (yych == '\r')
+        goto yy2126;
+      goto yy2101;
+    }
+  yy2124:
+    ++p;
+    yych = *p;
+    if (yych <= '\f') {
+      if (yych <= 0x08)
+        goto yy2101;
+      if (yych <= '\t')
+        goto yy2124;
+      if (yych >= '\v')
+        goto yy2101;
+    } else {
+      if (yych <= '\r')
+        goto yy2126;
+      if (yych == ' ')
+        goto yy2124;
+      goto yy2101;
+    }
+  yy2126:
+    ++p;
+    { return (bufsize_t)(p - start); }
+  yy2128:
+    ++p;
+    yych = *p;
+    if (yych == ' ')
+      goto yy2128;
+    if (yych != '*')
+      goto yy2101;
+  yy2130:
+    ++p;
+    yych = *p;
+    if (yych == ' ')
+      goto yy2130;
+    if (yych != '*')
+      goto yy2101;
+  yy2132:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2132;
+    }
+    if (yych <= '\n') {
+      if (yych <= 0x08)
+        goto yy2101;
+      if (yych >= '\n')
+        goto yy2136;
+    } else {
+      if (yych == '\r')
+        goto yy2136;
+      goto yy2101;
+    }
+  yy2134:
+    ++p;
+    yych = *p;
+    if (yych <= '\f') {
+      if (yych <= 0x08)
+        goto yy2101;
+      if (yych <= '\t')
+        goto yy2134;
+      if (yych >= '\v')
+        goto yy2101;
+    } else {
+      if (yych <= '\r')
+        goto yy2136;
+      if (yych == ' ')
+        goto yy2134;
+      goto yy2101;
+    }
+  yy2136:
+    ++p;
+    { return (bufsize_t)(p - start); }
+  }
 }
 
 // Scan an opening code fence.
-bufsize_t _scan_open_code_fence(const unsigned char *p)
-{
+bufsize_t _scan_open_code_fence(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	static const unsigned char yybm[] = {
-		  0, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160,   0, 160, 160,   0, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		 96, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 160, 160, 
-		160, 160, 160, 160, 160, 160, 144, 160, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0xC1) {
-		if (yych <= '`') {
-			if (yych == '\n') goto yy2140;
-			if (yych <= '_') goto yy2143;
-			goto yy2141;
-		} else {
-			if (yych == '~') goto yy2142;
-			if (yych <= 0x7F) goto yy2143;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy2144;
-			if (yych <= 0xE0) goto yy2146;
-			if (yych <= 0xEC) goto yy2147;
-			goto yy2151;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy2147;
-				goto yy2148;
-			} else {
-				if (yych <= 0xF3) goto yy2149;
-				if (yych <= 0xF4) goto yy2150;
-			}
-		}
-	}
-yy2140:
-	{ return 0; }
-yy2141:
-	yych = *(marker = ++p);
-	if (yych == '`') goto yy2166;
-	goto yy2140;
-yy2142:
-	yych = *(marker = ++p);
-	if (yych == '~') goto yy2152;
-	goto yy2140;
-yy2143:
-	yych = *++p;
-	goto yy2140;
-yy2144:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0xBF) goto yy2143;
-yy2145:
-	p = marker;
-	goto yy2140;
-yy2146:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy2145;
-	if (yych <= 0xBF) goto yy2144;
-	goto yy2145;
-yy2147:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0xBF) goto yy2144;
-	goto yy2145;
-yy2148:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy2145;
-	if (yych <= 0xBF) goto yy2147;
-	goto yy2145;
-yy2149:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0xBF) goto yy2147;
-	goto yy2145;
-yy2150:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0x8F) goto yy2147;
-	goto yy2145;
-yy2151:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0x9F) goto yy2144;
-	goto yy2145;
-yy2152:
-	yych = *++p;
-	if (yybm[0+yych] & 16) {
-		goto yy2153;
-	}
-	goto yy2145;
-yy2153:
-	marker = p + 1;
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy2155;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '~') {
-			if (yych <= 0x00) goto yy2145;
-			if (yych <= '\r') goto yy2164;
-			goto yy2153;
-		} else {
-			if (yych <= 0xC1) goto yy2145;
-			if (yych <= 0xDF) goto yy2157;
-			goto yy2158;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy2163;
-			goto yy2159;
-		} else {
-			if (yych <= 0xF0) goto yy2160;
-			if (yych <= 0xF3) goto yy2161;
-			if (yych <= 0xF4) goto yy2162;
-			goto yy2145;
-		}
-	}
-yy2155:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 32) {
-		goto yy2155;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x00) goto yy2145;
-			if (yych <= '\r') goto yy2164;
-			goto yy2145;
-		} else {
-			if (yych <= 0xDF) goto yy2157;
-			if (yych <= 0xE0) goto yy2158;
-			goto yy2159;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy2163;
-			if (yych <= 0xEF) goto yy2159;
-			goto yy2160;
-		} else {
-			if (yych <= 0xF3) goto yy2161;
-			if (yych <= 0xF4) goto yy2162;
-			goto yy2145;
-		}
-	}
-yy2157:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0xBF) goto yy2155;
-	goto yy2145;
-yy2158:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy2145;
-	if (yych <= 0xBF) goto yy2157;
-	goto yy2145;
-yy2159:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0xBF) goto yy2157;
-	goto yy2145;
-yy2160:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy2145;
-	if (yych <= 0xBF) goto yy2159;
-	goto yy2145;
-yy2161:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0xBF) goto yy2159;
-	goto yy2145;
-yy2162:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0x8F) goto yy2159;
-	goto yy2145;
-yy2163:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0x9F) goto yy2157;
-	goto yy2145;
-yy2164:
-	++p;
-	p = marker;
-	{ return (bufsize_t)(p - start); }
-yy2166:
-	yych = *++p;
-	if (yybm[0+yych] & 64) {
-		goto yy2167;
-	}
-	goto yy2145;
-yy2167:
-	marker = p + 1;
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy2169;
-	}
-	if (yych <= 0xE0) {
-		if (yych <= '`') {
-			if (yych <= 0x00) goto yy2145;
-			if (yych <= '\r') goto yy2178;
-			goto yy2167;
-		} else {
-			if (yych <= 0xC1) goto yy2145;
-			if (yych <= 0xDF) goto yy2171;
-			goto yy2172;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych == 0xED) goto yy2177;
-			goto yy2173;
-		} else {
-			if (yych <= 0xF0) goto yy2174;
-			if (yych <= 0xF3) goto yy2175;
-			if (yych <= 0xF4) goto yy2176;
-			goto yy2145;
-		}
-	}
-yy2169:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy2169;
-	}
-	if (yych <= 0xEC) {
-		if (yych <= 0xC1) {
-			if (yych <= 0x00) goto yy2145;
-			if (yych <= '\r') goto yy2178;
-			goto yy2145;
-		} else {
-			if (yych <= 0xDF) goto yy2171;
-			if (yych <= 0xE0) goto yy2172;
-			goto yy2173;
-		}
-	} else {
-		if (yych <= 0xF0) {
-			if (yych <= 0xED) goto yy2177;
-			if (yych <= 0xEF) goto yy2173;
-			goto yy2174;
-		} else {
-			if (yych <= 0xF3) goto yy2175;
-			if (yych <= 0xF4) goto yy2176;
-			goto yy2145;
-		}
-	}
-yy2171:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0xBF) goto yy2169;
-	goto yy2145;
-yy2172:
-	++p;
-	yych = *p;
-	if (yych <= 0x9F) goto yy2145;
-	if (yych <= 0xBF) goto yy2171;
-	goto yy2145;
-yy2173:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0xBF) goto yy2171;
-	goto yy2145;
-yy2174:
-	++p;
-	yych = *p;
-	if (yych <= 0x8F) goto yy2145;
-	if (yych <= 0xBF) goto yy2173;
-	goto yy2145;
-yy2175:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0xBF) goto yy2173;
-	goto yy2145;
-yy2176:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0x8F) goto yy2173;
-	goto yy2145;
-yy2177:
-	++p;
-	yych = *p;
-	if (yych <= 0x7F) goto yy2145;
-	if (yych <= 0x9F) goto yy2171;
-	goto yy2145;
-yy2178:
-	++p;
-	p = marker;
-	{ return (bufsize_t)(p - start); }
-}
-
+  {
+    unsigned char yych;
+    static const unsigned char yybm[] = {
+        0,   160, 160, 160, 160, 160, 160, 160, 160, 160, 0,   160, 160, 0,
+        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 96,  160,
+        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+        144, 160, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+        0,   0,   0,   0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0xC1) {
+      if (yych <= '`') {
+        if (yych == '\n')
+          goto yy2140;
+        if (yych <= '_')
+          goto yy2143;
+        goto yy2141;
+      } else {
+        if (yych == '~')
+          goto yy2142;
+        if (yych <= 0x7F)
+          goto yy2143;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy2144;
+        if (yych <= 0xE0)
+          goto yy2146;
+        if (yych <= 0xEC)
+          goto yy2147;
+        goto yy2151;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy2147;
+          goto yy2148;
+        } else {
+          if (yych <= 0xF3)
+            goto yy2149;
+          if (yych <= 0xF4)
+            goto yy2150;
+        }
+      }
+    }
+  yy2140 : { return 0; }
+  yy2141:
+    yych = *(marker = ++p);
+    if (yych == '`')
+      goto yy2166;
+    goto yy2140;
+  yy2142:
+    yych = *(marker = ++p);
+    if (yych == '~')
+      goto yy2152;
+    goto yy2140;
+  yy2143:
+    yych = *++p;
+    goto yy2140;
+  yy2144:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2143;
+  yy2145:
+    p = marker;
+    goto yy2140;
+  yy2146:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2144;
+    goto yy2145;
+  yy2147:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2144;
+    goto yy2145;
+  yy2148:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2147;
+    goto yy2145;
+  yy2149:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2147;
+    goto yy2145;
+  yy2150:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0x8F)
+      goto yy2147;
+    goto yy2145;
+  yy2151:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0x9F)
+      goto yy2144;
+    goto yy2145;
+  yy2152:
+    yych = *++p;
+    if (yybm[0 + yych] & 16) {
+      goto yy2153;
+    }
+    goto yy2145;
+  yy2153:
+    marker = p + 1;
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy2155;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '~') {
+        if (yych <= 0x00)
+          goto yy2145;
+        if (yych <= '\r')
+          goto yy2164;
+        goto yy2153;
+      } else {
+        if (yych <= 0xC1)
+          goto yy2145;
+        if (yych <= 0xDF)
+          goto yy2157;
+        goto yy2158;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy2163;
+        goto yy2159;
+      } else {
+        if (yych <= 0xF0)
+          goto yy2160;
+        if (yych <= 0xF3)
+          goto yy2161;
+        if (yych <= 0xF4)
+          goto yy2162;
+        goto yy2145;
+      }
+    }
+  yy2155:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 32) {
+      goto yy2155;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x00)
+          goto yy2145;
+        if (yych <= '\r')
+          goto yy2164;
+        goto yy2145;
+      } else {
+        if (yych <= 0xDF)
+          goto yy2157;
+        if (yych <= 0xE0)
+          goto yy2158;
+        goto yy2159;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy2163;
+        if (yych <= 0xEF)
+          goto yy2159;
+        goto yy2160;
+      } else {
+        if (yych <= 0xF3)
+          goto yy2161;
+        if (yych <= 0xF4)
+          goto yy2162;
+        goto yy2145;
+      }
+    }
+  yy2157:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2155;
+    goto yy2145;
+  yy2158:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2157;
+    goto yy2145;
+  yy2159:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2157;
+    goto yy2145;
+  yy2160:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2159;
+    goto yy2145;
+  yy2161:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2159;
+    goto yy2145;
+  yy2162:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0x8F)
+      goto yy2159;
+    goto yy2145;
+  yy2163:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0x9F)
+      goto yy2157;
+    goto yy2145;
+  yy2164:
+    ++p;
+    p = marker;
+    { return (bufsize_t)(p - start); }
+  yy2166:
+    yych = *++p;
+    if (yybm[0 + yych] & 64) {
+      goto yy2167;
+    }
+    goto yy2145;
+  yy2167:
+    marker = p + 1;
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2169;
+    }
+    if (yych <= 0xE0) {
+      if (yych <= '`') {
+        if (yych <= 0x00)
+          goto yy2145;
+        if (yych <= '\r')
+          goto yy2178;
+        goto yy2167;
+      } else {
+        if (yych <= 0xC1)
+          goto yy2145;
+        if (yych <= 0xDF)
+          goto yy2171;
+        goto yy2172;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych == 0xED)
+          goto yy2177;
+        goto yy2173;
+      } else {
+        if (yych <= 0xF0)
+          goto yy2174;
+        if (yych <= 0xF3)
+          goto yy2175;
+        if (yych <= 0xF4)
+          goto yy2176;
+        goto yy2145;
+      }
+    }
+  yy2169:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2169;
+    }
+    if (yych <= 0xEC) {
+      if (yych <= 0xC1) {
+        if (yych <= 0x00)
+          goto yy2145;
+        if (yych <= '\r')
+          goto yy2178;
+        goto yy2145;
+      } else {
+        if (yych <= 0xDF)
+          goto yy2171;
+        if (yych <= 0xE0)
+          goto yy2172;
+        goto yy2173;
+      }
+    } else {
+      if (yych <= 0xF0) {
+        if (yych <= 0xED)
+          goto yy2177;
+        if (yych <= 0xEF)
+          goto yy2173;
+        goto yy2174;
+      } else {
+        if (yych <= 0xF3)
+          goto yy2175;
+        if (yych <= 0xF4)
+          goto yy2176;
+        goto yy2145;
+      }
+    }
+  yy2171:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2169;
+    goto yy2145;
+  yy2172:
+    ++p;
+    yych = *p;
+    if (yych <= 0x9F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2171;
+    goto yy2145;
+  yy2173:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2171;
+    goto yy2145;
+  yy2174:
+    ++p;
+    yych = *p;
+    if (yych <= 0x8F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2173;
+    goto yy2145;
+  yy2175:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0xBF)
+      goto yy2173;
+    goto yy2145;
+  yy2176:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0x8F)
+      goto yy2173;
+    goto yy2145;
+  yy2177:
+    ++p;
+    yych = *p;
+    if (yych <= 0x7F)
+      goto yy2145;
+    if (yych <= 0x9F)
+      goto yy2171;
+    goto yy2145;
+  yy2178:
+    ++p;
+    p = marker;
+    { return (bufsize_t)(p - start); }
+  }
 }
 
 // Scan a closing code fence with length at least len.
-bufsize_t _scan_close_code_fence(const unsigned char *p)
-{
+bufsize_t _scan_close_code_fence(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	static const unsigned char yybm[] = {
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,  64,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		 64,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		128,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,  32,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-		  0,   0,   0,   0,   0,   0,   0,   0, 
-	};
-	yych = *(marker = p);
-	if (yych <= 0xC1) {
-		if (yych <= '`') {
-			if (yych == '\n') goto yy2182;
-			if (yych <= '_') goto yy2185;
-			goto yy2183;
-		} else {
-			if (yych == '~') goto yy2184;
-			if (yych <= 0x7F) goto yy2185;
-		}
-	} else {
-		if (yych <= 0xED) {
-			if (yych <= 0xDF) goto yy2186;
-			if (yych <= 0xE0) goto yy2188;
-			if (yych <= 0xEC) goto yy2189;
-			goto yy2193;
-		} else {
-			if (yych <= 0xF0) {
-				if (yych <= 0xEF) goto yy2189;
-				goto yy2190;
-			} else {
-				if (yych <= 0xF3) goto yy2191;
-				if (yych <= 0xF4) goto yy2192;
-			}
-		}
-	}
-yy2182:
-	{ return 0; }
-yy2183:
-	yych = *(marker = ++p);
-	if (yych == '`') goto yy2201;
-	goto yy2182;
-yy2184:
-	yych = *(marker = ++p);
-	if (yych == '~') goto yy2194;
-	goto yy2182;
-yy2185:
-	yych = *++p;
-	goto yy2182;
-yy2186:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2187;
-	if (yych <= 0xBF) goto yy2185;
-yy2187:
-	p = marker;
-	goto yy2182;
-yy2188:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy2187;
-	if (yych <= 0xBF) goto yy2186;
-	goto yy2187;
-yy2189:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2187;
-	if (yych <= 0xBF) goto yy2186;
-	goto yy2187;
-yy2190:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy2187;
-	if (yych <= 0xBF) goto yy2189;
-	goto yy2187;
-yy2191:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2187;
-	if (yych <= 0xBF) goto yy2189;
-	goto yy2187;
-yy2192:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2187;
-	if (yych <= 0x8F) goto yy2189;
-	goto yy2187;
-yy2193:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2187;
-	if (yych <= 0x9F) goto yy2186;
-	goto yy2187;
-yy2194:
-	yych = *++p;
-	if (yybm[0+yych] & 32) {
-		goto yy2195;
-	}
-	goto yy2187;
-yy2195:
-	marker = p + 1;
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy2197;
-	}
-	if (yych <= '\f') {
-		if (yych <= 0x08) goto yy2187;
-		if (yych <= '\n') goto yy2199;
-		goto yy2187;
-	} else {
-		if (yych <= '\r') goto yy2199;
-		if (yych == '~') goto yy2195;
-		goto yy2187;
-	}
-yy2197:
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 64) {
-		goto yy2197;
-	}
-	if (yych <= 0x08) goto yy2187;
-	if (yych <= '\n') goto yy2199;
-	if (yych != '\r') goto yy2187;
-yy2199:
-	++p;
-	p = marker;
-	{ return (bufsize_t)(p - start); }
-yy2201:
-	yych = *++p;
-	if (yybm[0+yych] & 128) {
-		goto yy2202;
-	}
-	goto yy2187;
-yy2202:
-	marker = p + 1;
-	++p;
-	yych = *p;
-	if (yybm[0+yych] & 128) {
-		goto yy2202;
-	}
-	if (yych <= '\f') {
-		if (yych <= 0x08) goto yy2187;
-		if (yych <= '\t') goto yy2204;
-		if (yych <= '\n') goto yy2206;
-		goto yy2187;
-	} else {
-		if (yych <= '\r') goto yy2206;
-		if (yych != ' ') goto yy2187;
-	}
-yy2204:
-	++p;
-	yych = *p;
-	if (yych <= '\f') {
-		if (yych <= 0x08) goto yy2187;
-		if (yych <= '\t') goto yy2204;
-		if (yych >= '\v') goto yy2187;
-	} else {
-		if (yych <= '\r') goto yy2206;
-		if (yych == ' ') goto yy2204;
-		goto yy2187;
-	}
-yy2206:
-	++p;
-	p = marker;
-	{ return (bufsize_t)(p - start); }
-}
-
+  {
+    unsigned char yych;
+    static const unsigned char yybm[] = {
+        0, 0, 0, 0, 0, 0, 0, 0, 0,   64, 0,  0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  64, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 128, 0,  0,  0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0,
+    };
+    yych = *(marker = p);
+    if (yych <= 0xC1) {
+      if (yych <= '`') {
+        if (yych == '\n')
+          goto yy2182;
+        if (yych <= '_')
+          goto yy2185;
+        goto yy2183;
+      } else {
+        if (yych == '~')
+          goto yy2184;
+        if (yych <= 0x7F)
+          goto yy2185;
+      }
+    } else {
+      if (yych <= 0xED) {
+        if (yych <= 0xDF)
+          goto yy2186;
+        if (yych <= 0xE0)
+          goto yy2188;
+        if (yych <= 0xEC)
+          goto yy2189;
+        goto yy2193;
+      } else {
+        if (yych <= 0xF0) {
+          if (yych <= 0xEF)
+            goto yy2189;
+          goto yy2190;
+        } else {
+          if (yych <= 0xF3)
+            goto yy2191;
+          if (yych <= 0xF4)
+            goto yy2192;
+        }
+      }
+    }
+  yy2182 : { return 0; }
+  yy2183:
+    yych = *(marker = ++p);
+    if (yych == '`')
+      goto yy2201;
+    goto yy2182;
+  yy2184:
+    yych = *(marker = ++p);
+    if (yych == '~')
+      goto yy2194;
+    goto yy2182;
+  yy2185:
+    yych = *++p;
+    goto yy2182;
+  yy2186:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2187;
+    if (yych <= 0xBF)
+      goto yy2185;
+  yy2187:
+    p = marker;
+    goto yy2182;
+  yy2188:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy2187;
+    if (yych <= 0xBF)
+      goto yy2186;
+    goto yy2187;
+  yy2189:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2187;
+    if (yych <= 0xBF)
+      goto yy2186;
+    goto yy2187;
+  yy2190:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy2187;
+    if (yych <= 0xBF)
+      goto yy2189;
+    goto yy2187;
+  yy2191:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2187;
+    if (yych <= 0xBF)
+      goto yy2189;
+    goto yy2187;
+  yy2192:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2187;
+    if (yych <= 0x8F)
+      goto yy2189;
+    goto yy2187;
+  yy2193:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2187;
+    if (yych <= 0x9F)
+      goto yy2186;
+    goto yy2187;
+  yy2194:
+    yych = *++p;
+    if (yybm[0 + yych] & 32) {
+      goto yy2195;
+    }
+    goto yy2187;
+  yy2195:
+    marker = p + 1;
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy2197;
+    }
+    if (yych <= '\f') {
+      if (yych <= 0x08)
+        goto yy2187;
+      if (yych <= '\n')
+        goto yy2199;
+      goto yy2187;
+    } else {
+      if (yych <= '\r')
+        goto yy2199;
+      if (yych == '~')
+        goto yy2195;
+      goto yy2187;
+    }
+  yy2197:
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 64) {
+      goto yy2197;
+    }
+    if (yych <= 0x08)
+      goto yy2187;
+    if (yych <= '\n')
+      goto yy2199;
+    if (yych != '\r')
+      goto yy2187;
+  yy2199:
+    ++p;
+    p = marker;
+    { return (bufsize_t)(p - start); }
+  yy2201:
+    yych = *++p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2202;
+    }
+    goto yy2187;
+  yy2202:
+    marker = p + 1;
+    ++p;
+    yych = *p;
+    if (yybm[0 + yych] & 128) {
+      goto yy2202;
+    }
+    if (yych <= '\f') {
+      if (yych <= 0x08)
+        goto yy2187;
+      if (yych <= '\t')
+        goto yy2204;
+      if (yych <= '\n')
+        goto yy2206;
+      goto yy2187;
+    } else {
+      if (yych <= '\r')
+        goto yy2206;
+      if (yych != ' ')
+        goto yy2187;
+    }
+  yy2204:
+    ++p;
+    yych = *p;
+    if (yych <= '\f') {
+      if (yych <= 0x08)
+        goto yy2187;
+      if (yych <= '\t')
+        goto yy2204;
+      if (yych >= '\v')
+        goto yy2187;
+    } else {
+      if (yych <= '\r')
+        goto yy2206;
+      if (yych == ' ')
+        goto yy2204;
+      goto yy2187;
+    }
+  yy2206:
+    ++p;
+    p = marker;
+    { return (bufsize_t)(p - start); }
+  }
 }
 
 // Scans an entity.
 // Returns number of chars matched.
-bufsize_t _scan_entity(const unsigned char *p)
-{
+bufsize_t _scan_entity(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	yych = *(marker = p);
-	if (yych <= 0xDF) {
-		if (yych <= '%') {
-			if (yych != '\n') goto yy2212;
-		} else {
-			if (yych <= '&') goto yy2211;
-			if (yych <= 0x7F) goto yy2212;
-			if (yych >= 0xC2) goto yy2213;
-		}
-	} else {
-		if (yych <= 0xEF) {
-			if (yych <= 0xE0) goto yy2215;
-			if (yych == 0xED) goto yy2220;
-			goto yy2216;
-		} else {
-			if (yych <= 0xF0) goto yy2217;
-			if (yych <= 0xF3) goto yy2218;
-			if (yych <= 0xF4) goto yy2219;
-		}
-	}
-yy2210:
-	{ return 0; }
-yy2211:
-	yych = *(marker = ++p);
-	if (yych <= '@') {
-		if (yych == '#') goto yy2221;
-		goto yy2210;
-	} else {
-		if (yych <= 'Z') goto yy2222;
-		if (yych <= '`') goto yy2210;
-		if (yych <= 'z') goto yy2222;
-		goto yy2210;
-	}
-yy2212:
-	yych = *++p;
-	goto yy2210;
-yy2213:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2214;
-	if (yych <= 0xBF) goto yy2212;
-yy2214:
-	p = marker;
-	goto yy2210;
-yy2215:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy2214;
-	if (yych <= 0xBF) goto yy2213;
-	goto yy2214;
-yy2216:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2214;
-	if (yych <= 0xBF) goto yy2213;
-	goto yy2214;
-yy2217:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy2214;
-	if (yych <= 0xBF) goto yy2216;
-	goto yy2214;
-yy2218:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2214;
-	if (yych <= 0xBF) goto yy2216;
-	goto yy2214;
-yy2219:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2214;
-	if (yych <= 0x8F) goto yy2216;
-	goto yy2214;
-yy2220:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2214;
-	if (yych <= 0x9F) goto yy2213;
-	goto yy2214;
-yy2221:
-	yych = *++p;
-	if (yych <= 'W') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2257;
-		goto yy2214;
-	} else {
-		if (yych <= 'X') goto yy2256;
-		if (yych == 'x') goto yy2256;
-		goto yy2214;
-	}
-yy2222:
-	yych = *++p;
-	if (yych <= '@') {
-		if (yych <= '/') goto yy2214;
-		if (yych >= ':') goto yy2214;
-	} else {
-		if (yych <= 'Z') goto yy2223;
-		if (yych <= '`') goto yy2214;
-		if (yych >= '{') goto yy2214;
-	}
-yy2223:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2226;
-		if (yych <= ':') goto yy2214;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-			goto yy2226;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych <= 'z') goto yy2226;
-			goto yy2214;
-		}
-	}
-yy2224:
-	++p;
-	{ return (bufsize_t)(p - start); }
-yy2226:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2227;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2227:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2228;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2228:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2229;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2229:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2230;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2230:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2231;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2231:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2232;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2232:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2233;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2233:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2234;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2234:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2235;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2235:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2236;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2236:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2237;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2237:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2238;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2238:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2239;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2239:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2240;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2240:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2241;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2241:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2242;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2242:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2243;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2243:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2244;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2244:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2245;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2245:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2246;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2246:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2247;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2247:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2248;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2248:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2249;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2249:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2250;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2250:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2251;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2251:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2252;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2252:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2253;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2253:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2254;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2254:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2255;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'Z') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= '{') goto yy2214;
-		}
-	}
-yy2255:
-	yych = *++p;
-	if (yych == ';') goto yy2224;
-	goto yy2214;
-yy2256:
-	yych = *++p;
-	if (yych <= '@') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2264;
-		goto yy2214;
-	} else {
-		if (yych <= 'F') goto yy2264;
-		if (yych <= '`') goto yy2214;
-		if (yych <= 'f') goto yy2264;
-		goto yy2214;
-	}
-yy2257:
-	yych = *++p;
-	if (yych <= '/') goto yy2214;
-	if (yych <= '9') goto yy2258;
-	if (yych == ';') goto yy2224;
-	goto yy2214;
-yy2258:
-	yych = *++p;
-	if (yych <= '/') goto yy2214;
-	if (yych <= '9') goto yy2259;
-	if (yych == ';') goto yy2224;
-	goto yy2214;
-yy2259:
-	yych = *++p;
-	if (yych <= '/') goto yy2214;
-	if (yych <= '9') goto yy2260;
-	if (yych == ';') goto yy2224;
-	goto yy2214;
-yy2260:
-	yych = *++p;
-	if (yych <= '/') goto yy2214;
-	if (yych <= '9') goto yy2261;
-	if (yych == ';') goto yy2224;
-	goto yy2214;
-yy2261:
-	yych = *++p;
-	if (yych <= '/') goto yy2214;
-	if (yych <= '9') goto yy2262;
-	if (yych == ';') goto yy2224;
-	goto yy2214;
-yy2262:
-	yych = *++p;
-	if (yych <= '/') goto yy2214;
-	if (yych <= '9') goto yy2263;
-	if (yych == ';') goto yy2224;
-	goto yy2214;
-yy2263:
-	yych = *++p;
-	if (yych <= '/') goto yy2214;
-	if (yych <= '9') goto yy2255;
-	if (yych == ';') goto yy2224;
-	goto yy2214;
-yy2264:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2265;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'F') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= 'g') goto yy2214;
-		}
-	}
-yy2265:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2266;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'F') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= 'g') goto yy2214;
-		}
-	}
-yy2266:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2267;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'F') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= 'g') goto yy2214;
-		}
-	}
-yy2267:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2268;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'F') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= 'g') goto yy2214;
-		}
-	}
-yy2268:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2269;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'F') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= 'g') goto yy2214;
-		}
-	}
-yy2269:
-	yych = *++p;
-	if (yych <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2270;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'F') {
-			if (yych <= '@') goto yy2214;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych >= 'g') goto yy2214;
-		}
-	}
-yy2270:
-	++p;
-	if ((yych = *p) <= ';') {
-		if (yych <= '/') goto yy2214;
-		if (yych <= '9') goto yy2255;
-		if (yych <= ':') goto yy2214;
-		goto yy2224;
-	} else {
-		if (yych <= 'F') {
-			if (yych <= '@') goto yy2214;
-			goto yy2255;
-		} else {
-			if (yych <= '`') goto yy2214;
-			if (yych <= 'f') goto yy2255;
-			goto yy2214;
-		}
-	}
-}
-
+  {
+    unsigned char yych;
+    yych = *(marker = p);
+    if (yych <= 0xDF) {
+      if (yych <= '%') {
+        if (yych != '\n')
+          goto yy2212;
+      } else {
+        if (yych <= '&')
+          goto yy2211;
+        if (yych <= 0x7F)
+          goto yy2212;
+        if (yych >= 0xC2)
+          goto yy2213;
+      }
+    } else {
+      if (yych <= 0xEF) {
+        if (yych <= 0xE0)
+          goto yy2215;
+        if (yych == 0xED)
+          goto yy2220;
+        goto yy2216;
+      } else {
+        if (yych <= 0xF0)
+          goto yy2217;
+        if (yych <= 0xF3)
+          goto yy2218;
+        if (yych <= 0xF4)
+          goto yy2219;
+      }
+    }
+  yy2210 : { return 0; }
+  yy2211:
+    yych = *(marker = ++p);
+    if (yych <= '@') {
+      if (yych == '#')
+        goto yy2221;
+      goto yy2210;
+    } else {
+      if (yych <= 'Z')
+        goto yy2222;
+      if (yych <= '`')
+        goto yy2210;
+      if (yych <= 'z')
+        goto yy2222;
+      goto yy2210;
+    }
+  yy2212:
+    yych = *++p;
+    goto yy2210;
+  yy2213:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2214;
+    if (yych <= 0xBF)
+      goto yy2212;
+  yy2214:
+    p = marker;
+    goto yy2210;
+  yy2215:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy2214;
+    if (yych <= 0xBF)
+      goto yy2213;
+    goto yy2214;
+  yy2216:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2214;
+    if (yych <= 0xBF)
+      goto yy2213;
+    goto yy2214;
+  yy2217:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy2214;
+    if (yych <= 0xBF)
+      goto yy2216;
+    goto yy2214;
+  yy2218:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2214;
+    if (yych <= 0xBF)
+      goto yy2216;
+    goto yy2214;
+  yy2219:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2214;
+    if (yych <= 0x8F)
+      goto yy2216;
+    goto yy2214;
+  yy2220:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2214;
+    if (yych <= 0x9F)
+      goto yy2213;
+    goto yy2214;
+  yy2221:
+    yych = *++p;
+    if (yych <= 'W') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2257;
+      goto yy2214;
+    } else {
+      if (yych <= 'X')
+        goto yy2256;
+      if (yych == 'x')
+        goto yy2256;
+      goto yy2214;
+    }
+  yy2222:
+    yych = *++p;
+    if (yych <= '@') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych >= ':')
+        goto yy2214;
+    } else {
+      if (yych <= 'Z')
+        goto yy2223;
+      if (yych <= '`')
+        goto yy2214;
+      if (yych >= '{')
+        goto yy2214;
+    }
+  yy2223:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2226;
+      if (yych <= ':')
+        goto yy2214;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+        goto yy2226;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych <= 'z')
+          goto yy2226;
+        goto yy2214;
+      }
+    }
+  yy2224:
+    ++p;
+    { return (bufsize_t)(p - start); }
+  yy2226:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2227;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2227:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2228;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2228:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2229;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2229:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2230;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2230:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2231;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2231:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2232;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2232:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2233;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2233:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2234;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2234:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2235;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2235:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2236;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2236:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2237;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2237:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2238;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2238:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2239;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2239:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2240;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2240:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2241;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2241:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2242;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2242:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2243;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2243:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2244;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2244:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2245;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2245:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2246;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2246:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2247;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2247:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2248;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2248:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2249;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2249:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2250;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2250:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2251;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2251:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2252;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2252:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2253;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2253:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2254;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2254:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2255;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'Z') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= '{')
+          goto yy2214;
+      }
+    }
+  yy2255:
+    yych = *++p;
+    if (yych == ';')
+      goto yy2224;
+    goto yy2214;
+  yy2256:
+    yych = *++p;
+    if (yych <= '@') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2264;
+      goto yy2214;
+    } else {
+      if (yych <= 'F')
+        goto yy2264;
+      if (yych <= '`')
+        goto yy2214;
+      if (yych <= 'f')
+        goto yy2264;
+      goto yy2214;
+    }
+  yy2257:
+    yych = *++p;
+    if (yych <= '/')
+      goto yy2214;
+    if (yych <= '9')
+      goto yy2258;
+    if (yych == ';')
+      goto yy2224;
+    goto yy2214;
+  yy2258:
+    yych = *++p;
+    if (yych <= '/')
+      goto yy2214;
+    if (yych <= '9')
+      goto yy2259;
+    if (yych == ';')
+      goto yy2224;
+    goto yy2214;
+  yy2259:
+    yych = *++p;
+    if (yych <= '/')
+      goto yy2214;
+    if (yych <= '9')
+      goto yy2260;
+    if (yych == ';')
+      goto yy2224;
+    goto yy2214;
+  yy2260:
+    yych = *++p;
+    if (yych <= '/')
+      goto yy2214;
+    if (yych <= '9')
+      goto yy2261;
+    if (yych == ';')
+      goto yy2224;
+    goto yy2214;
+  yy2261:
+    yych = *++p;
+    if (yych <= '/')
+      goto yy2214;
+    if (yych <= '9')
+      goto yy2262;
+    if (yych == ';')
+      goto yy2224;
+    goto yy2214;
+  yy2262:
+    yych = *++p;
+    if (yych <= '/')
+      goto yy2214;
+    if (yych <= '9')
+      goto yy2263;
+    if (yych == ';')
+      goto yy2224;
+    goto yy2214;
+  yy2263:
+    yych = *++p;
+    if (yych <= '/')
+      goto yy2214;
+    if (yych <= '9')
+      goto yy2255;
+    if (yych == ';')
+      goto yy2224;
+    goto yy2214;
+  yy2264:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2265;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'F') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= 'g')
+          goto yy2214;
+      }
+    }
+  yy2265:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2266;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'F') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= 'g')
+          goto yy2214;
+      }
+    }
+  yy2266:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2267;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'F') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= 'g')
+          goto yy2214;
+      }
+    }
+  yy2267:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2268;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'F') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= 'g')
+          goto yy2214;
+      }
+    }
+  yy2268:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2269;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'F') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= 'g')
+          goto yy2214;
+      }
+    }
+  yy2269:
+    yych = *++p;
+    if (yych <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2270;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'F') {
+        if (yych <= '@')
+          goto yy2214;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych >= 'g')
+          goto yy2214;
+      }
+    }
+  yy2270:
+    ++p;
+    if ((yych = *p) <= ';') {
+      if (yych <= '/')
+        goto yy2214;
+      if (yych <= '9')
+        goto yy2255;
+      if (yych <= ':')
+        goto yy2214;
+      goto yy2224;
+    } else {
+      if (yych <= 'F') {
+        if (yych <= '@')
+          goto yy2214;
+        goto yy2255;
+      } else {
+        if (yych <= '`')
+          goto yy2214;
+        if (yych <= 'f')
+          goto yy2255;
+        goto yy2214;
+      }
+    }
+  }
 }
 
 // Returns positive value if a URL begins in a way that is potentially
 // dangerous, with javascript:, vbscript:, file:, or data:, otherwise 0.
-bufsize_t _scan_dangerous_url(const unsigned char *p)
-{
+bufsize_t _scan_dangerous_url(const unsigned char *p) {
   const unsigned char *marker = NULL;
   const unsigned char *start = p;
 
-{
-	unsigned char yych;
-	unsigned int yyaccept = 0;
-	yych = *(marker = p);
-	if (yych <= 'f') {
-		if (yych <= 'I') {
-			if (yych <= 'C') {
-				if (yych != '\n') goto yy2278;
-			} else {
-				if (yych <= 'D') goto yy2274;
-				if (yych == 'F') goto yy2277;
-				goto yy2278;
-			}
-		} else {
-			if (yych <= 'V') {
-				if (yych <= 'J') goto yy2275;
-				if (yych <= 'U') goto yy2278;
-				goto yy2276;
-			} else {
-				if (yych == 'd') goto yy2274;
-				if (yych <= 'e') goto yy2278;
-				goto yy2277;
-			}
-		}
-	} else {
-		if (yych <= 0xDF) {
-			if (yych <= 'u') {
-				if (yych == 'j') goto yy2275;
-				goto yy2278;
-			} else {
-				if (yych <= 'v') goto yy2276;
-				if (yych <= 0x7F) goto yy2278;
-				if (yych >= 0xC2) goto yy2279;
-			}
-		} else {
-			if (yych <= 0xEF) {
-				if (yych <= 0xE0) goto yy2281;
-				if (yych == 0xED) goto yy2286;
-				goto yy2282;
-			} else {
-				if (yych <= 0xF0) goto yy2283;
-				if (yych <= 0xF3) goto yy2284;
-				if (yych <= 0xF4) goto yy2285;
-			}
-		}
-	}
-yy2273:
-	{ return 0; }
-yy2274:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych == 'A') goto yy2308;
-	if (yych == 'a') goto yy2308;
-	goto yy2273;
-yy2275:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych == 'A') goto yy2299;
-	if (yych == 'a') goto yy2299;
-	goto yy2273;
-yy2276:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych == 'B') goto yy2292;
-	if (yych == 'b') goto yy2292;
-	goto yy2273;
-yy2277:
-	yyaccept = 0;
-	yych = *(marker = ++p);
-	if (yych == 'I') goto yy2287;
-	if (yych == 'i') goto yy2287;
-	goto yy2273;
-yy2278:
-	yych = *++p;
-	goto yy2273;
-yy2279:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2280;
-	if (yych <= 0xBF) goto yy2278;
-yy2280:
-	p = marker;
-	if (yyaccept == 0) {
-		goto yy2273;
-	} else {
-		goto yy2291;
-	}
-yy2281:
-	yych = *++p;
-	if (yych <= 0x9F) goto yy2280;
-	if (yych <= 0xBF) goto yy2279;
-	goto yy2280;
-yy2282:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2280;
-	if (yych <= 0xBF) goto yy2279;
-	goto yy2280;
-yy2283:
-	yych = *++p;
-	if (yych <= 0x8F) goto yy2280;
-	if (yych <= 0xBF) goto yy2282;
-	goto yy2280;
-yy2284:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2280;
-	if (yych <= 0xBF) goto yy2282;
-	goto yy2280;
-yy2285:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2280;
-	if (yych <= 0x8F) goto yy2282;
-	goto yy2280;
-yy2286:
-	yych = *++p;
-	if (yych <= 0x7F) goto yy2280;
-	if (yych <= 0x9F) goto yy2279;
-	goto yy2280;
-yy2287:
-	yych = *++p;
-	if (yych == 'L') goto yy2288;
-	if (yych != 'l') goto yy2280;
-yy2288:
-	yych = *++p;
-	if (yych == 'E') goto yy2289;
-	if (yych != 'e') goto yy2280;
-yy2289:
-	yych = *++p;
-	if (yych != ':') goto yy2280;
-yy2290:
-	++p;
-yy2291:
-	{ return (bufsize_t)(p - start); }
-yy2292:
-	yych = *++p;
-	if (yych == 'S') goto yy2293;
-	if (yych != 's') goto yy2280;
-yy2293:
-	yych = *++p;
-	if (yych == 'C') goto yy2294;
-	if (yych != 'c') goto yy2280;
-yy2294:
-	yych = *++p;
-	if (yych == 'R') goto yy2295;
-	if (yych != 'r') goto yy2280;
-yy2295:
-	yych = *++p;
-	if (yych == 'I') goto yy2296;
-	if (yych != 'i') goto yy2280;
-yy2296:
-	yych = *++p;
-	if (yych == 'P') goto yy2297;
-	if (yych != 'p') goto yy2280;
-yy2297:
-	yych = *++p;
-	if (yych == 'T') goto yy2298;
-	if (yych != 't') goto yy2280;
-yy2298:
-	yych = *++p;
-	if (yych == ':') goto yy2290;
-	goto yy2280;
-yy2299:
-	yych = *++p;
-	if (yych == 'V') goto yy2300;
-	if (yych != 'v') goto yy2280;
-yy2300:
-	yych = *++p;
-	if (yych == 'A') goto yy2301;
-	if (yych != 'a') goto yy2280;
-yy2301:
-	yych = *++p;
-	if (yych == 'S') goto yy2302;
-	if (yych != 's') goto yy2280;
-yy2302:
-	yych = *++p;
-	if (yych == 'C') goto yy2303;
-	if (yych != 'c') goto yy2280;
-yy2303:
-	yych = *++p;
-	if (yych == 'R') goto yy2304;
-	if (yych != 'r') goto yy2280;
-yy2304:
-	yych = *++p;
-	if (yych == 'I') goto yy2305;
-	if (yych != 'i') goto yy2280;
-yy2305:
-	yych = *++p;
-	if (yych == 'P') goto yy2306;
-	if (yych != 'p') goto yy2280;
-yy2306:
-	yych = *++p;
-	if (yych == 'T') goto yy2307;
-	if (yych != 't') goto yy2280;
-yy2307:
-	yych = *++p;
-	if (yych == ':') goto yy2290;
-	goto yy2280;
-yy2308:
-	yych = *++p;
-	if (yych == 'T') goto yy2309;
-	if (yych != 't') goto yy2280;
-yy2309:
-	yych = *++p;
-	if (yych == 'A') goto yy2310;
-	if (yych != 'a') goto yy2280;
-yy2310:
-	yych = *++p;
-	if (yych != ':') goto yy2280;
-	yyaccept = 1;
-	yych = *(marker = ++p);
-	if (yych == 'I') goto yy2312;
-	if (yych != 'i') goto yy2291;
-yy2312:
-	yych = *++p;
-	if (yych == 'M') goto yy2313;
-	if (yych != 'm') goto yy2280;
-yy2313:
-	yych = *++p;
-	if (yych == 'A') goto yy2314;
-	if (yych != 'a') goto yy2280;
-yy2314:
-	yych = *++p;
-	if (yych == 'G') goto yy2315;
-	if (yych != 'g') goto yy2280;
-yy2315:
-	yych = *++p;
-	if (yych == 'E') goto yy2316;
-	if (yych != 'e') goto yy2280;
-yy2316:
-	yych = *++p;
-	if (yych != '/') goto yy2280;
-	yych = *++p;
-	if (yych <= 'W') {
-		if (yych <= 'J') {
-			if (yych == 'G') goto yy2319;
-			if (yych <= 'I') goto yy2280;
-			goto yy2320;
-		} else {
-			if (yych == 'P') goto yy2318;
-			if (yych <= 'V') goto yy2280;
-			goto yy2321;
-		}
-	} else {
-		if (yych <= 'j') {
-			if (yych == 'g') goto yy2319;
-			if (yych <= 'i') goto yy2280;
-			goto yy2320;
-		} else {
-			if (yych <= 'p') {
-				if (yych <= 'o') goto yy2280;
-			} else {
-				if (yych == 'w') goto yy2321;
-				goto yy2280;
-			}
-		}
-	}
-yy2318:
-	yych = *++p;
-	if (yych == 'N') goto yy2329;
-	if (yych == 'n') goto yy2329;
-	goto yy2280;
-yy2319:
-	yych = *++p;
-	if (yych == 'I') goto yy2328;
-	if (yych == 'i') goto yy2328;
-	goto yy2280;
-yy2320:
-	yych = *++p;
-	if (yych == 'P') goto yy2326;
-	if (yych == 'p') goto yy2326;
-	goto yy2280;
-yy2321:
-	yych = *++p;
-	if (yych == 'E') goto yy2322;
-	if (yych != 'e') goto yy2280;
-yy2322:
-	yych = *++p;
-	if (yych == 'B') goto yy2323;
-	if (yych != 'b') goto yy2280;
-yy2323:
-	yych = *++p;
-	if (yych == 'P') goto yy2324;
-	if (yych != 'p') goto yy2280;
-yy2324:
-	++p;
-	{ return 0; }
-yy2326:
-	yych = *++p;
-	if (yych == 'E') goto yy2327;
-	if (yych != 'e') goto yy2280;
-yy2327:
-	yych = *++p;
-	if (yych == 'G') goto yy2324;
-	if (yych == 'g') goto yy2324;
-	goto yy2280;
-yy2328:
-	yych = *++p;
-	if (yych == 'F') goto yy2324;
-	if (yych == 'f') goto yy2324;
-	goto yy2280;
-yy2329:
-	++p;
-	if ((yych = *p) == 'G') goto yy2324;
-	if (yych == 'g') goto yy2324;
-	goto yy2280;
+  {
+    unsigned char yych;
+    unsigned int yyaccept = 0;
+    yych = *(marker = p);
+    if (yych <= 'f') {
+      if (yych <= 'I') {
+        if (yych <= 'C') {
+          if (yych != '\n')
+            goto yy2278;
+        } else {
+          if (yych <= 'D')
+            goto yy2274;
+          if (yych == 'F')
+            goto yy2277;
+          goto yy2278;
+        }
+      } else {
+        if (yych <= 'V') {
+          if (yych <= 'J')
+            goto yy2275;
+          if (yych <= 'U')
+            goto yy2278;
+          goto yy2276;
+        } else {
+          if (yych == 'd')
+            goto yy2274;
+          if (yych <= 'e')
+            goto yy2278;
+          goto yy2277;
+        }
+      }
+    } else {
+      if (yych <= 0xDF) {
+        if (yych <= 'u') {
+          if (yych == 'j')
+            goto yy2275;
+          goto yy2278;
+        } else {
+          if (yych <= 'v')
+            goto yy2276;
+          if (yych <= 0x7F)
+            goto yy2278;
+          if (yych >= 0xC2)
+            goto yy2279;
+        }
+      } else {
+        if (yych <= 0xEF) {
+          if (yych <= 0xE0)
+            goto yy2281;
+          if (yych == 0xED)
+            goto yy2286;
+          goto yy2282;
+        } else {
+          if (yych <= 0xF0)
+            goto yy2283;
+          if (yych <= 0xF3)
+            goto yy2284;
+          if (yych <= 0xF4)
+            goto yy2285;
+        }
+      }
+    }
+  yy2273 : { return 0; }
+  yy2274:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych == 'A')
+      goto yy2308;
+    if (yych == 'a')
+      goto yy2308;
+    goto yy2273;
+  yy2275:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych == 'A')
+      goto yy2299;
+    if (yych == 'a')
+      goto yy2299;
+    goto yy2273;
+  yy2276:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych == 'B')
+      goto yy2292;
+    if (yych == 'b')
+      goto yy2292;
+    goto yy2273;
+  yy2277:
+    yyaccept = 0;
+    yych = *(marker = ++p);
+    if (yych == 'I')
+      goto yy2287;
+    if (yych == 'i')
+      goto yy2287;
+    goto yy2273;
+  yy2278:
+    yych = *++p;
+    goto yy2273;
+  yy2279:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2280;
+    if (yych <= 0xBF)
+      goto yy2278;
+  yy2280:
+    p = marker;
+    if (yyaccept == 0) {
+      goto yy2273;
+    } else {
+      goto yy2291;
+    }
+  yy2281:
+    yych = *++p;
+    if (yych <= 0x9F)
+      goto yy2280;
+    if (yych <= 0xBF)
+      goto yy2279;
+    goto yy2280;
+  yy2282:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2280;
+    if (yych <= 0xBF)
+      goto yy2279;
+    goto yy2280;
+  yy2283:
+    yych = *++p;
+    if (yych <= 0x8F)
+      goto yy2280;
+    if (yych <= 0xBF)
+      goto yy2282;
+    goto yy2280;
+  yy2284:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2280;
+    if (yych <= 0xBF)
+      goto yy2282;
+    goto yy2280;
+  yy2285:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2280;
+    if (yych <= 0x8F)
+      goto yy2282;
+    goto yy2280;
+  yy2286:
+    yych = *++p;
+    if (yych <= 0x7F)
+      goto yy2280;
+    if (yych <= 0x9F)
+      goto yy2279;
+    goto yy2280;
+  yy2287:
+    yych = *++p;
+    if (yych == 'L')
+      goto yy2288;
+    if (yych != 'l')
+      goto yy2280;
+  yy2288:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy2289;
+    if (yych != 'e')
+      goto yy2280;
+  yy2289:
+    yych = *++p;
+    if (yych != ':')
+      goto yy2280;
+  yy2290:
+    ++p;
+  yy2291 : { return (bufsize_t)(p - start); }
+  yy2292:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy2293;
+    if (yych != 's')
+      goto yy2280;
+  yy2293:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy2294;
+    if (yych != 'c')
+      goto yy2280;
+  yy2294:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy2295;
+    if (yych != 'r')
+      goto yy2280;
+  yy2295:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy2296;
+    if (yych != 'i')
+      goto yy2280;
+  yy2296:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy2297;
+    if (yych != 'p')
+      goto yy2280;
+  yy2297:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy2298;
+    if (yych != 't')
+      goto yy2280;
+  yy2298:
+    yych = *++p;
+    if (yych == ':')
+      goto yy2290;
+    goto yy2280;
+  yy2299:
+    yych = *++p;
+    if (yych == 'V')
+      goto yy2300;
+    if (yych != 'v')
+      goto yy2280;
+  yy2300:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy2301;
+    if (yych != 'a')
+      goto yy2280;
+  yy2301:
+    yych = *++p;
+    if (yych == 'S')
+      goto yy2302;
+    if (yych != 's')
+      goto yy2280;
+  yy2302:
+    yych = *++p;
+    if (yych == 'C')
+      goto yy2303;
+    if (yych != 'c')
+      goto yy2280;
+  yy2303:
+    yych = *++p;
+    if (yych == 'R')
+      goto yy2304;
+    if (yych != 'r')
+      goto yy2280;
+  yy2304:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy2305;
+    if (yych != 'i')
+      goto yy2280;
+  yy2305:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy2306;
+    if (yych != 'p')
+      goto yy2280;
+  yy2306:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy2307;
+    if (yych != 't')
+      goto yy2280;
+  yy2307:
+    yych = *++p;
+    if (yych == ':')
+      goto yy2290;
+    goto yy2280;
+  yy2308:
+    yych = *++p;
+    if (yych == 'T')
+      goto yy2309;
+    if (yych != 't')
+      goto yy2280;
+  yy2309:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy2310;
+    if (yych != 'a')
+      goto yy2280;
+  yy2310:
+    yych = *++p;
+    if (yych != ':')
+      goto yy2280;
+    yyaccept = 1;
+    yych = *(marker = ++p);
+    if (yych == 'I')
+      goto yy2312;
+    if (yych != 'i')
+      goto yy2291;
+  yy2312:
+    yych = *++p;
+    if (yych == 'M')
+      goto yy2313;
+    if (yych != 'm')
+      goto yy2280;
+  yy2313:
+    yych = *++p;
+    if (yych == 'A')
+      goto yy2314;
+    if (yych != 'a')
+      goto yy2280;
+  yy2314:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy2315;
+    if (yych != 'g')
+      goto yy2280;
+  yy2315:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy2316;
+    if (yych != 'e')
+      goto yy2280;
+  yy2316:
+    yych = *++p;
+    if (yych != '/')
+      goto yy2280;
+    yych = *++p;
+    if (yych <= 'W') {
+      if (yych <= 'J') {
+        if (yych == 'G')
+          goto yy2319;
+        if (yych <= 'I')
+          goto yy2280;
+        goto yy2320;
+      } else {
+        if (yych == 'P')
+          goto yy2318;
+        if (yych <= 'V')
+          goto yy2280;
+        goto yy2321;
+      }
+    } else {
+      if (yych <= 'j') {
+        if (yych == 'g')
+          goto yy2319;
+        if (yych <= 'i')
+          goto yy2280;
+        goto yy2320;
+      } else {
+        if (yych <= 'p') {
+          if (yych <= 'o')
+            goto yy2280;
+        } else {
+          if (yych == 'w')
+            goto yy2321;
+          goto yy2280;
+        }
+      }
+    }
+  yy2318:
+    yych = *++p;
+    if (yych == 'N')
+      goto yy2329;
+    if (yych == 'n')
+      goto yy2329;
+    goto yy2280;
+  yy2319:
+    yych = *++p;
+    if (yych == 'I')
+      goto yy2328;
+    if (yych == 'i')
+      goto yy2328;
+    goto yy2280;
+  yy2320:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy2326;
+    if (yych == 'p')
+      goto yy2326;
+    goto yy2280;
+  yy2321:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy2322;
+    if (yych != 'e')
+      goto yy2280;
+  yy2322:
+    yych = *++p;
+    if (yych == 'B')
+      goto yy2323;
+    if (yych != 'b')
+      goto yy2280;
+  yy2323:
+    yych = *++p;
+    if (yych == 'P')
+      goto yy2324;
+    if (yych != 'p')
+      goto yy2280;
+  yy2324:
+    ++p;
+    { return 0; }
+  yy2326:
+    yych = *++p;
+    if (yych == 'E')
+      goto yy2327;
+    if (yych != 'e')
+      goto yy2280;
+  yy2327:
+    yych = *++p;
+    if (yych == 'G')
+      goto yy2324;
+    if (yych == 'g')
+      goto yy2324;
+    goto yy2280;
+  yy2328:
+    yych = *++p;
+    if (yych == 'F')
+      goto yy2324;
+    if (yych == 'f')
+      goto yy2324;
+    goto yy2280;
+  yy2329:
+    ++p;
+    if ((yych = *p) == 'G')
+      goto yy2324;
+    if (yych == 'g')
+      goto yy2324;
+    goto yy2280;
+  }
 }
-
-}
-
diff --git a/src/scanners.h b/src/scanners.h
index a6a71bf..4616f9f 100644
--- a/src/scanners.h
+++ b/src/scanners.h
@@ -5,7 +5,8 @@
 extern "C" {
 #endif
 
-bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset);
+bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c,
+                   bufsize_t offset);
 bufsize_t _scan_scheme(const unsigned char *p);
 bufsize_t _scan_autolink_uri(const unsigned char *p);
 bufsize_t _scan_autolink_email(const unsigned char *p);
diff --git a/src/utf8.c b/src/utf8.c
index ffe6652..21e751d 100644
--- a/src/utf8.c
+++ b/src/utf8.c
@@ -6,452 +6,309 @@
 #include "utf8.h"
 
 static const int8_t utf8proc_utf8class[256] = {
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	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, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-	4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0
-};
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    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, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+    4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0};
 
-static void encode_unknown(cmark_strbuf *buf)
-{
-	static const uint8_t repl[] = {239, 191, 189};
-	cmark_strbuf_put(buf, repl, 3);
+static void encode_unknown(cmark_strbuf *buf) {
+  static const uint8_t repl[] = {239, 191, 189};
+  cmark_strbuf_put(buf, repl, 3);
 }
 
-static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len)
-{
-	int length, i;
+static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) {
+  int length, i;
 
-	if (!str_len)
-		return 0;
+  if (!str_len)
+    return 0;
 
-	length = utf8proc_utf8class[str[0]];
+  length = utf8proc_utf8class[str[0]];
 
-	if (!length)
-		return -1;
+  if (!length)
+    return -1;
 
-	if (str_len >= 0 && (bufsize_t)length > str_len)
-		return -str_len;
+  if (str_len >= 0 && (bufsize_t)length > str_len)
+    return -str_len;
 
-	for (i = 1; i < length; i++) {
-		if ((str[i] & 0xC0) != 0x80)
-			return -i;
-	}
+  for (i = 1; i < length; i++) {
+    if ((str[i] & 0xC0) != 0x80)
+      return -i;
+  }
 
-	return length;
+  return length;
 }
 
 // Validate a single UTF-8 character according to RFC 3629.
-static int utf8proc_valid(const uint8_t *str, bufsize_t str_len)
-{
-	int length = utf8proc_utf8class[str[0]];
+static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) {
+  int length = utf8proc_utf8class[str[0]];
 
-	if (!length)
-		return -1;
+  if (!length)
+    return -1;
 
-	if ((bufsize_t)length > str_len)
-		return -str_len;
+  if ((bufsize_t)length > str_len)
+    return -str_len;
 
-	switch (length) {
-	case 2:
-		if ((str[1] & 0xC0) != 0x80)
-			return -1;
-		if (str[0] < 0xC2) {
-			// Overlong
-			return -length;
-		}
-		break;
+  switch (length) {
+  case 2:
+    if ((str[1] & 0xC0) != 0x80)
+      return -1;
+    if (str[0] < 0xC2) {
+      // Overlong
+      return -length;
+    }
+    break;
 
-	case 3:
-		if ((str[1] & 0xC0) != 0x80)
-			return -1;
-		if ((str[2] & 0xC0) != 0x80)
-			return -2;
-		if (str[0] == 0xE0) {
-			if (str[1] < 0xA0) {
-				// Overlong
-				return -length;
-			}
-		} else if (str[0] == 0xED) {
-			if (str[1] >= 0xA0) {
-				// Surrogate
-				return -length;
-			}
-		}
-		break;
+  case 3:
+    if ((str[1] & 0xC0) != 0x80)
+      return -1;
+    if ((str[2] & 0xC0) != 0x80)
+      return -2;
+    if (str[0] == 0xE0) {
+      if (str[1] < 0xA0) {
+        // Overlong
+        return -length;
+      }
+    } else if (str[0] == 0xED) {
+      if (str[1] >= 0xA0) {
+        // Surrogate
+        return -length;
+      }
+    }
+    break;
 
-	case 4:
-		if ((str[1] & 0xC0) != 0x80)
-			return -1;
-		if ((str[2] & 0xC0) != 0x80)
-			return -2;
-		if ((str[3] & 0xC0) != 0x80)
-			return -3;
-		if (str[0] == 0xF0) {
-			if (str[1] < 0x90) {
-				// Overlong
-				return -length;
-			}
-		} else if (str[0] >= 0xF4) {
-			if (str[0] > 0xF4 || str[1] >= 0x90) {
-				// Above 0x10FFFF
-				return -length;
-			}
-		}
-		break;
-	}
+  case 4:
+    if ((str[1] & 0xC0) != 0x80)
+      return -1;
+    if ((str[2] & 0xC0) != 0x80)
+      return -2;
+    if ((str[3] & 0xC0) != 0x80)
+      return -3;
+    if (str[0] == 0xF0) {
+      if (str[1] < 0x90) {
+        // Overlong
+        return -length;
+      }
+    } else if (str[0] >= 0xF4) {
+      if (str[0] > 0xF4 || str[1] >= 0x90) {
+        // Above 0x10FFFF
+        return -length;
+      }
+    }
+    break;
+  }
 
-	return length;
+  return length;
 }
 
-void utf8proc_check(cmark_strbuf *ob, const uint8_t *line, bufsize_t size)
-{
-	bufsize_t i = 0;
+void utf8proc_check(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) {
+  bufsize_t i = 0;
 
-	while (i < size) {
-		bufsize_t org = i;
-		int charlen = 0;
+  while (i < size) {
+    bufsize_t org = i;
+    int charlen = 0;
 
-		while (i < size) {
-			if (line[i] < 0x80 && line[i] != 0) {
-				i++;
-			} else if (line[i] >= 0x80) {
-				charlen = utf8proc_valid(line + i, size - i);
-				if (charlen < 0) {
-					charlen = -charlen;
-					break;
-				}
-				i += charlen;
-			} else if (line[i] == 0) {
-				// ASCII NUL is technically valid but rejected
-				// for security reasons.
-				charlen = 1;
-				break;
-			}
-		}
+    while (i < size) {
+      if (line[i] < 0x80 && line[i] != 0) {
+        i++;
+      } else if (line[i] >= 0x80) {
+        charlen = utf8proc_valid(line + i, size - i);
+        if (charlen < 0) {
+          charlen = -charlen;
+          break;
+        }
+        i += charlen;
+      } else if (line[i] == 0) {
+        // ASCII NUL is technically valid but rejected
+        // for security reasons.
+        charlen = 1;
+        break;
+      }
+    }
 
-		if (i > org) {
-			cmark_strbuf_put(ob, line + org, i - org);
-		}
+    if (i > org) {
+      cmark_strbuf_put(ob, line + org, i - org);
+    }
 
-		if (i >= size) {
-			break;
-		} else {
-			// Invalid UTF-8
-			encode_unknown(ob);
-			i += charlen;
-		}
-	}
+    if (i >= size) {
+      break;
+    } else {
+      // Invalid UTF-8
+      encode_unknown(ob);
+      i += charlen;
+    }
+  }
 }
 
-int utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst)
-{
-	int length;
-	int32_t uc = -1;
+int utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst) {
+  int length;
+  int32_t uc = -1;
 
-	*dst = -1;
-	length = utf8proc_charlen(str, str_len);
-	if (length < 0)
-		return -1;
+  *dst = -1;
+  length = utf8proc_charlen(str, str_len);
+  if (length < 0)
+    return -1;
 
-	switch (length) {
-	case 1:
-		uc = str[0];
-		break;
-	case 2:
-		uc = ((str[0] & 0x1F) <<  6) + (str[1] & 0x3F);
-		if (uc < 0x80) uc = -1;
-		break;
-	case 3:
-		uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) <<  6)
-		     + (str[2] & 0x3F);
-		if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000)) uc = -1;
-		break;
-	case 4:
-		uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12)
-		     + ((str[2] & 0x3F) <<  6) + (str[3] & 0x3F);
-		if (uc < 0x10000 || uc >= 0x110000) uc = -1;
-		break;
-	}
+  switch (length) {
+  case 1:
+    uc = str[0];
+    break;
+  case 2:
+    uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F);
+    if (uc < 0x80)
+      uc = -1;
+    break;
+  case 3:
+    uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6) + (str[2] & 0x3F);
+    if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000))
+      uc = -1;
+    break;
+  case 4:
+    uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12) +
+         ((str[2] & 0x3F) << 6) + (str[3] & 0x3F);
+    if (uc < 0x10000 || uc >= 0x110000)
+      uc = -1;
+    break;
+  }
 
-	if (uc < 0)
-		return -1;
+  if (uc < 0)
+    return -1;
 
-	*dst = uc;
-	return length;
+  *dst = uc;
+  return length;
 }
 
-void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf)
-{
-	uint8_t dst[4];
-	bufsize_t len = 0;
+void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) {
+  uint8_t dst[4];
+  bufsize_t len = 0;
 
-	assert(uc >= 0);
+  assert(uc >= 0);
 
-	if (uc < 0x80) {
-		dst[0] = uc;
-		len = 1;
-	} else if (uc < 0x800) {
-		dst[0] = 0xC0 + (uc >> 6);
-		dst[1] = 0x80 + (uc & 0x3F);
-		len = 2;
-	} else if (uc == 0xFFFF) {
-		dst[0] = 0xFF;
-		len = 1;
-	} else if (uc == 0xFFFE) {
-		dst[0] = 0xFE;
-		len = 1;
-	} else if (uc < 0x10000) {
-		dst[0] = 0xE0 + (uc >> 12);
-		dst[1] = 0x80 + ((uc >> 6) & 0x3F);
-		dst[2] = 0x80 + (uc & 0x3F);
-		len = 3;
-	} else if (uc < 0x110000) {
-		dst[0] = 0xF0 + (uc >> 18);
-		dst[1] = 0x80 + ((uc >> 12) & 0x3F);
-		dst[2] = 0x80 + ((uc >> 6) & 0x3F);
-		dst[3] = 0x80 + (uc & 0x3F);
-		len = 4;
-	} else {
-		encode_unknown(buf);
-		return;
-	}
+  if (uc < 0x80) {
+    dst[0] = uc;
+    len = 1;
+  } else if (uc < 0x800) {
+    dst[0] = 0xC0 + (uc >> 6);
+    dst[1] = 0x80 + (uc & 0x3F);
+    len = 2;
+  } else if (uc == 0xFFFF) {
+    dst[0] = 0xFF;
+    len = 1;
+  } else if (uc == 0xFFFE) {
+    dst[0] = 0xFE;
+    len = 1;
+  } else if (uc < 0x10000) {
+    dst[0] = 0xE0 + (uc >> 12);
+    dst[1] = 0x80 + ((uc >> 6) & 0x3F);
+    dst[2] = 0x80 + (uc & 0x3F);
+    len = 3;
+  } else if (uc < 0x110000) {
+    dst[0] = 0xF0 + (uc >> 18);
+    dst[1] = 0x80 + ((uc >> 12) & 0x3F);
+    dst[2] = 0x80 + ((uc >> 6) & 0x3F);
+    dst[3] = 0x80 + (uc & 0x3F);
+    len = 4;
+  } else {
+    encode_unknown(buf);
+    return;
+  }
 
-	cmark_strbuf_put(buf, dst, len);
+  cmark_strbuf_put(buf, dst, len);
 }
 
-void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len)
-{
-	int32_t c;
+void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len) {
+  int32_t c;
 
-#define bufpush(x)				\
-	utf8proc_encode_char(x, dest)
+#define bufpush(x) utf8proc_encode_char(x, dest)
 
-	while (len > 0) {
-		bufsize_t char_len = utf8proc_iterate(str, len, &c);
+  while (len > 0) {
+    bufsize_t char_len = utf8proc_iterate(str, len, &c);
 
-		if (char_len >= 0) {
+    if (char_len >= 0) {
 #include "case_fold_switch.inc"
-		} else {
-			encode_unknown(dest);
-			char_len = -char_len;
-		}
+    } else {
+      encode_unknown(dest);
+      char_len = -char_len;
+    }
 
-		str += char_len;
-		len -= char_len;
-	}
+    str += char_len;
+    len -= char_len;
+  }
 }
 
 // matches anything in the Zs class, plus LF, CR, TAB, FF.
-int utf8proc_is_space(int32_t uc)
-{
-	return (uc == 9 ||
-	        uc == 10 ||
-	        uc == 12 ||
-	        uc == 13 ||
-	        uc == 32 ||
-	        uc == 160 ||
-	        uc == 5760 ||
-	        (uc >= 8192 && uc <= 8202) ||
-	        uc == 8239 ||
-	        uc == 8287 ||
-	        uc == 12288);
+int utf8proc_is_space(int32_t uc) {
+  return (uc == 9 || uc == 10 || uc == 12 || uc == 13 || uc == 32 ||
+          uc == 160 || uc == 5760 || (uc >= 8192 && uc <= 8202) || uc == 8239 ||
+          uc == 8287 || uc == 12288);
 }
 
 // matches anything in the P[cdefios] classes.
-int utf8proc_is_punctuation(int32_t uc)
-{
-	return ((uc < 128 && cmark_ispunct((char)uc)) ||
-	        uc == 161 ||
-	        uc == 167 ||
-	        uc == 171 ||
-	        uc == 182 ||
-	        uc == 183 ||
-	        uc == 187 ||
-	        uc == 191 ||
-	        uc == 894 ||
-	        uc == 903 ||
-	        (uc >= 1370 && uc <= 1375) ||
-	        uc == 1417 ||
-	        uc == 1418 ||
-	        uc == 1470 ||
-	        uc == 1472 ||
-	        uc == 1475 ||
-	        uc == 1478 ||
-	        uc == 1523 ||
-	        uc == 1524 ||
-	        uc == 1545 ||
-	        uc == 1546 ||
-	        uc == 1548 ||
-	        uc == 1549 ||
-	        uc == 1563 ||
-	        uc == 1566 ||
-	        uc == 1567 ||
-	        (uc >= 1642 && uc <= 1645) ||
-	        uc == 1748 ||
-	        (uc >= 1792 && uc <= 1805) ||
-	        (uc >= 2039 && uc <= 2041) ||
-	        (uc >= 2096 && uc <= 2110) ||
-	        uc == 2142 ||
-	        uc == 2404 ||
-	        uc == 2405 ||
-	        uc == 2416 ||
-	        uc == 2800 ||
-	        uc == 3572 ||
-	        uc == 3663 ||
-	        uc == 3674 ||
-	        uc == 3675 ||
-	        (uc >= 3844 && uc <= 3858) ||
-	        uc == 3860 ||
-	        (uc >= 3898 && uc <= 3901) ||
-	        uc == 3973 ||
-	        (uc >= 4048 && uc <= 4052) ||
-	        uc == 4057 ||
-	        uc == 4058 ||
-	        (uc >= 4170 && uc <= 4175) ||
-	        uc == 4347 ||
-	        (uc >= 4960 && uc <= 4968) ||
-	        uc == 5120 ||
-	        uc == 5741 ||
-	        uc == 5742 ||
-	        uc == 5787 ||
-	        uc == 5788 ||
-	        (uc >= 5867 && uc <= 5869) ||
-	        uc == 5941 ||
-	        uc == 5942 ||
-	        (uc >= 6100 && uc <= 6102) ||
-	        (uc >= 6104 && uc <= 6106) ||
-	        (uc >= 6144 && uc <= 6154) ||
-	        uc == 6468 ||
-	        uc == 6469 ||
-	        uc == 6686 ||
-	        uc == 6687 ||
-	        (uc >= 6816 && uc <= 6822) ||
-	        (uc >= 6824 && uc <= 6829) ||
-	        (uc >= 7002 && uc <= 7008) ||
-	        (uc >= 7164 && uc <= 7167) ||
-	        (uc >= 7227 && uc <= 7231) ||
-	        uc == 7294 ||
-	        uc == 7295 ||
-	        (uc >= 7360 && uc <= 7367) ||
-	        uc == 7379 ||
-	        (uc >= 8208 && uc <= 8231) ||
-	        (uc >= 8240 && uc <= 8259) ||
-	        (uc >= 8261 && uc <= 8273) ||
-	        (uc >= 8275 && uc <= 8286) ||
-	        uc == 8317 ||
-	        uc == 8318 ||
-	        uc == 8333 ||
-	        uc == 8334 ||
-	        (uc >= 8968 && uc <= 8971) ||
-	        uc == 9001 ||
-	        uc == 9002 ||
-	        (uc >= 10088 && uc <= 10101) ||
-	        uc == 10181 ||
-	        uc == 10182 ||
-	        (uc >= 10214 && uc <= 10223) ||
-	        (uc >= 10627 && uc <= 10648) ||
-	        (uc >= 10712 && uc <= 10715) ||
-	        uc == 10748 ||
-	        uc == 10749 ||
-	        (uc >= 11513 && uc <= 11516) ||
-	        uc == 11518 ||
-	        uc == 11519 ||
-	        uc == 11632 ||
-	        (uc >= 11776 && uc <= 11822) ||
-	        (uc >= 11824 && uc <= 11842) ||
-	        (uc >= 12289 && uc <= 12291) ||
-	        (uc >= 12296 && uc <= 12305) ||
-	        (uc >= 12308 && uc <= 12319) ||
-	        uc == 12336 ||
-	        uc == 12349 ||
-	        uc == 12448 ||
-	        uc == 12539 ||
-	        uc == 42238 ||
-	        uc == 42239 ||
-	        (uc >= 42509 && uc <= 42511) ||
-	        uc == 42611 ||
-	        uc == 42622 ||
-	        (uc >= 42738 && uc <= 42743) ||
-	        (uc >= 43124 && uc <= 43127) ||
-	        uc == 43214 ||
-	        uc == 43215 ||
-	        (uc >= 43256 && uc <= 43258) ||
-	        uc == 43310 ||
-	        uc == 43311 ||
-	        uc == 43359 ||
-	        (uc >= 43457 && uc <= 43469) ||
-	        uc == 43486 ||
-	        uc == 43487 ||
-	        (uc >= 43612 && uc <= 43615) ||
-	        uc == 43742 ||
-	        uc == 43743 ||
-	        uc == 43760 ||
-	        uc == 43761 ||
-	        uc == 44011 ||
-	        uc == 64830 ||
-	        uc == 64831 ||
-	        (uc >= 65040 && uc <= 65049) ||
-	        (uc >= 65072 && uc <= 65106) ||
-	        (uc >= 65108 && uc <= 65121) ||
-	        uc == 65123 ||
-	        uc == 65128 ||
-	        uc == 65130 ||
-	        uc == 65131 ||
-	        (uc >= 65281 && uc <= 65283) ||
-	        (uc >= 65285 && uc <= 65290) ||
-	        (uc >= 65292 && uc <= 65295) ||
-	        uc == 65306 ||
-	        uc == 65307 ||
-	        uc == 65311 ||
-	        uc == 65312 ||
-	        (uc >= 65339 && uc <= 65341) ||
-	        uc == 65343 ||
-	        uc == 65371 ||
-	        uc == 65373 ||
-	        (uc >= 65375 && uc <= 65381) ||
-	        (uc >= 65792 && uc <= 65794) ||
-	        uc == 66463 ||
-	        uc == 66512 ||
-	        uc == 66927 ||
-	        uc == 67671 ||
-	        uc == 67871 ||
-	        uc == 67903 ||
-	        (uc >= 68176 && uc <= 68184) ||
-	        uc == 68223 ||
-	        (uc >= 68336 && uc <= 68342) ||
-	        (uc >= 68409 && uc <= 68415) ||
-	        (uc >= 68505 && uc <= 68508) ||
-	        (uc >= 69703 && uc <= 69709) ||
-	        uc == 69819 ||
-	        uc == 69820 ||
-	        (uc >= 69822 && uc <= 69825) ||
-	        (uc >= 69952 && uc <= 69955) ||
-	        uc == 70004 ||
-	        uc == 70005 ||
-	        (uc >= 70085 && uc <= 70088) ||
-	        uc == 70093 ||
-	        (uc >= 70200 && uc <= 70205) ||
-	        uc == 70854 ||
-	        (uc >= 71105 && uc <= 71113) ||
-	        (uc >= 71233 && uc <= 71235) ||
-	        (uc >= 74864 && uc <= 74868) ||
-	        uc == 92782 ||
-	        uc == 92783 ||
-	        uc == 92917 ||
-	        (uc >= 92983 && uc <= 92987) ||
-	        uc == 92996 ||
-	        uc == 113823);
+int utf8proc_is_punctuation(int32_t uc) {
+  return (
+      (uc < 128 && cmark_ispunct((char)uc)) || uc == 161 || uc == 167 ||
+      uc == 171 || uc == 182 || uc == 183 || uc == 187 || uc == 191 ||
+      uc == 894 || uc == 903 || (uc >= 1370 && uc <= 1375) || uc == 1417 ||
+      uc == 1418 || uc == 1470 || uc == 1472 || uc == 1475 || uc == 1478 ||
+      uc == 1523 || uc == 1524 || uc == 1545 || uc == 1546 || uc == 1548 ||
+      uc == 1549 || uc == 1563 || uc == 1566 || uc == 1567 ||
+      (uc >= 1642 && uc <= 1645) || uc == 1748 || (uc >= 1792 && uc <= 1805) ||
+      (uc >= 2039 && uc <= 2041) || (uc >= 2096 && uc <= 2110) || uc == 2142 ||
+      uc == 2404 || uc == 2405 || uc == 2416 || uc == 2800 || uc == 3572 ||
+      uc == 3663 || uc == 3674 || uc == 3675 || (uc >= 3844 && uc <= 3858) ||
+      uc == 3860 || (uc >= 3898 && uc <= 3901) || uc == 3973 ||
+      (uc >= 4048 && uc <= 4052) || uc == 4057 || uc == 4058 ||
+      (uc >= 4170 && uc <= 4175) || uc == 4347 || (uc >= 4960 && uc <= 4968) ||
+      uc == 5120 || uc == 5741 || uc == 5742 || uc == 5787 || uc == 5788 ||
+      (uc >= 5867 && uc <= 5869) || uc == 5941 || uc == 5942 ||
+      (uc >= 6100 && uc <= 6102) || (uc >= 6104 && uc <= 6106) ||
+      (uc >= 6144 && uc <= 6154) || uc == 6468 || uc == 6469 || uc == 6686 ||
+      uc == 6687 || (uc >= 6816 && uc <= 6822) || (uc >= 6824 && uc <= 6829) ||
+      (uc >= 7002 && uc <= 7008) || (uc >= 7164 && uc <= 7167) ||
+      (uc >= 7227 && uc <= 7231) || uc == 7294 || uc == 7295 ||
+      (uc >= 7360 && uc <= 7367) || uc == 7379 || (uc >= 8208 && uc <= 8231) ||
+      (uc >= 8240 && uc <= 8259) || (uc >= 8261 && uc <= 8273) ||
+      (uc >= 8275 && uc <= 8286) || uc == 8317 || uc == 8318 || uc == 8333 ||
+      uc == 8334 || (uc >= 8968 && uc <= 8971) || uc == 9001 || uc == 9002 ||
+      (uc >= 10088 && uc <= 10101) || uc == 10181 || uc == 10182 ||
+      (uc >= 10214 && uc <= 10223) || (uc >= 10627 && uc <= 10648) ||
+      (uc >= 10712 && uc <= 10715) || uc == 10748 || uc == 10749 ||
+      (uc >= 11513 && uc <= 11516) || uc == 11518 || uc == 11519 ||
+      uc == 11632 || (uc >= 11776 && uc <= 11822) ||
+      (uc >= 11824 && uc <= 11842) || (uc >= 12289 && uc <= 12291) ||
+      (uc >= 12296 && uc <= 12305) || (uc >= 12308 && uc <= 12319) ||
+      uc == 12336 || uc == 12349 || uc == 12448 || uc == 12539 || uc == 42238 ||
+      uc == 42239 || (uc >= 42509 && uc <= 42511) || uc == 42611 ||
+      uc == 42622 || (uc >= 42738 && uc <= 42743) ||
+      (uc >= 43124 && uc <= 43127) || uc == 43214 || uc == 43215 ||
+      (uc >= 43256 && uc <= 43258) || uc == 43310 || uc == 43311 ||
+      uc == 43359 || (uc >= 43457 && uc <= 43469) || uc == 43486 ||
+      uc == 43487 || (uc >= 43612 && uc <= 43615) || uc == 43742 ||
+      uc == 43743 || uc == 43760 || uc == 43761 || uc == 44011 || uc == 64830 ||
+      uc == 64831 || (uc >= 65040 && uc <= 65049) ||
+      (uc >= 65072 && uc <= 65106) || (uc >= 65108 && uc <= 65121) ||
+      uc == 65123 || uc == 65128 || uc == 65130 || uc == 65131 ||
+      (uc >= 65281 && uc <= 65283) || (uc >= 65285 && uc <= 65290) ||
+      (uc >= 65292 && uc <= 65295) || uc == 65306 || uc == 65307 ||
+      uc == 65311 || uc == 65312 || (uc >= 65339 && uc <= 65341) ||
+      uc == 65343 || uc == 65371 || uc == 65373 ||
+      (uc >= 65375 && uc <= 65381) || (uc >= 65792 && uc <= 65794) ||
+      uc == 66463 || uc == 66512 || uc == 66927 || uc == 67671 || uc == 67871 ||
+      uc == 67903 || (uc >= 68176 && uc <= 68184) || uc == 68223 ||
+      (uc >= 68336 && uc <= 68342) || (uc >= 68409 && uc <= 68415) ||
+      (uc >= 68505 && uc <= 68508) || (uc >= 69703 && uc <= 69709) ||
+      uc == 69819 || uc == 69820 || (uc >= 69822 && uc <= 69825) ||
+      (uc >= 69952 && uc <= 69955) || uc == 70004 || uc == 70005 ||
+      (uc >= 70085 && uc <= 70088) || uc == 70093 ||
+      (uc >= 70200 && uc <= 70205) || uc == 70854 ||
+      (uc >= 71105 && uc <= 71113) || (uc >= 71233 && uc <= 71235) ||
+      (uc >= 74864 && uc <= 74868) || uc == 92782 || uc == 92783 ||
+      uc == 92917 || (uc >= 92983 && uc <= 92987) || uc == 92996 ||
+      uc == 113823);
 }
diff --git a/src/xml.c b/src/xml.c
index 2882f50..0b225fa 100644
--- a/src/xml.c
+++ b/src/xml.c
@@ -11,163 +11,142 @@
 
 // Functions to convert cmark_nodes to XML strings.
 
-static void escape_xml(cmark_strbuf *dest, const unsigned char *source, bufsize_t length)
-{
-	houdini_escape_html0(dest, source, length, 0);
+static void escape_xml(cmark_strbuf *dest, const unsigned char *source,
+                       bufsize_t length) {
+  houdini_escape_html0(dest, source, length, 0);
 }
 
 struct render_state {
-	cmark_strbuf* xml;
-	int indent;
+  cmark_strbuf *xml;
+  int indent;
 };
 
-static inline void indent(struct render_state *state)
-{
-	int i;
-	for (i = 0; i < state->indent; i++) {
-		cmark_strbuf_putc(state->xml, ' ');
-	}
+static inline void indent(struct render_state *state) {
+  int i;
+  for (i = 0; i < state->indent; i++) {
+    cmark_strbuf_putc(state->xml, ' ');
+  }
 }
 
-static int
-S_render_node(cmark_node *node, cmark_event_type ev_type,
-              struct render_state *state, int options)
-{
-	cmark_strbuf *xml = state->xml;
-	bool literal = false;
-	cmark_delim_type delim;
-	bool entering = (ev_type == CMARK_EVENT_ENTER);
-	char buffer[100];
+static int S_render_node(cmark_node *node, cmark_event_type ev_type,
+                         struct render_state *state, int options) {
+  cmark_strbuf *xml = state->xml;
+  bool literal = false;
+  cmark_delim_type delim;
+  bool entering = (ev_type == CMARK_EVENT_ENTER);
+  char buffer[100];
 
-	if (entering) {
-		indent(state);
-		cmark_strbuf_putc(xml, '<');
-		cmark_strbuf_puts(xml, cmark_node_get_type_string(node));
+  if (entering) {
+    indent(state);
+    cmark_strbuf_putc(xml, '<');
+    cmark_strbuf_puts(xml, cmark_node_get_type_string(node));
 
-		if (options & CMARK_OPT_SOURCEPOS && node->start_line != 0) {
-			sprintf(buffer, " sourcepos=\"%d:%d-%d:%d\"",
-				node->start_line,
-				node->start_column,
-				node->end_line,
-				node->end_column);
-			cmark_strbuf_puts(xml, buffer);
-		}
+    if (options & CMARK_OPT_SOURCEPOS && node->start_line != 0) {
+      sprintf(buffer, " sourcepos=\"%d:%d-%d:%d\"", node->start_line,
+              node->start_column, node->end_line, node->end_column);
+      cmark_strbuf_puts(xml, buffer);
+    }
 
-		literal = false;
+    literal = false;
 
-		switch (node->type) {
-		case CMARK_NODE_TEXT:
-		case CMARK_NODE_CODE:
-		case CMARK_NODE_HTML:
-		case CMARK_NODE_INLINE_HTML:
-			cmark_strbuf_puts(xml, ">");
-			escape_xml(xml, node->as.literal.data,
-			           node->as.literal.len);
-			cmark_strbuf_puts(xml, "</");
-			cmark_strbuf_puts(xml,
-			                  cmark_node_get_type_string(node));
-			literal = true;
-			break;
-		case CMARK_NODE_LIST:
-			switch (cmark_node_get_list_type(node)) {
-			case CMARK_ORDERED_LIST:
-				cmark_strbuf_puts(xml, " type=\"ordered\"");
-				sprintf(buffer," start=\"%d\"",
-					cmark_node_get_list_start(node));
-				cmark_strbuf_puts(xml, buffer);
-				delim = cmark_node_get_list_delim(node);
-				if (delim == CMARK_PAREN_DELIM) {
-					cmark_strbuf_puts(xml,
-					                  " delim=\"paren\"");
-				} else if (delim == CMARK_PERIOD_DELIM) {
-					cmark_strbuf_puts(xml,
-					                  " delim=\"period\"");
-				}
-				break;
-			case CMARK_BULLET_LIST:
-				cmark_strbuf_puts(xml, " type=\"bullet\"");
-				break;
-			default:
-				break;
-			}
-			sprintf(buffer, " tight=\"%s\"",
-				(cmark_node_get_list_tight(node) ?
-				 "true" : "false"));
-			cmark_strbuf_puts(xml, buffer);
-			break;
-		case CMARK_NODE_HEADER:
-			sprintf(buffer, " level=\"%d\"",
-				node->as.header.level);
-			cmark_strbuf_puts(xml, buffer);
-			break;
-		case CMARK_NODE_CODE_BLOCK:
-			if (node->as.code.info.len > 0) {
-				cmark_strbuf_puts(xml, " info=\"");
-				escape_xml(xml, node->as.code.info.data,
-				           node->as.code.info.len);
-				cmark_strbuf_putc(xml, '"');
-			}
-			cmark_strbuf_puts(xml, ">");
-			escape_xml(xml, node->as.code.literal.data,
-			           node->as.code.literal.len);
-			cmark_strbuf_puts(xml, "</");
-			cmark_strbuf_puts(xml,
-			                  cmark_node_get_type_string(node));
-			literal = true;
-			break;
-		case CMARK_NODE_LINK:
-		case CMARK_NODE_IMAGE:
-			cmark_strbuf_puts(xml, " destination=\"");
-			escape_xml(xml, node->as.link.url.data,
-			           node->as.link.url.len);
-			cmark_strbuf_putc(xml, '"');
-			cmark_strbuf_puts(xml, " title=\"");
-			escape_xml(xml, node->as.link.title.data,
-			           node->as.link.title.len);
-			cmark_strbuf_putc(xml, '"');
-			break;
-		default:
-			break;
-		}
-		if (node->first_child) {
-			state->indent += 2;
-		} else if (!literal) {
-			cmark_strbuf_puts(xml, " /");
-		}
-		cmark_strbuf_puts(xml, ">\n");
+    switch (node->type) {
+    case CMARK_NODE_TEXT:
+    case CMARK_NODE_CODE:
+    case CMARK_NODE_HTML:
+    case CMARK_NODE_INLINE_HTML:
+      cmark_strbuf_puts(xml, ">");
+      escape_xml(xml, node->as.literal.data, node->as.literal.len);
+      cmark_strbuf_puts(xml, "</");
+      cmark_strbuf_puts(xml, cmark_node_get_type_string(node));
+      literal = true;
+      break;
+    case CMARK_NODE_LIST:
+      switch (cmark_node_get_list_type(node)) {
+      case CMARK_ORDERED_LIST:
+        cmark_strbuf_puts(xml, " type=\"ordered\"");
+        sprintf(buffer, " start=\"%d\"", cmark_node_get_list_start(node));
+        cmark_strbuf_puts(xml, buffer);
+        delim = cmark_node_get_list_delim(node);
+        if (delim == CMARK_PAREN_DELIM) {
+          cmark_strbuf_puts(xml, " delim=\"paren\"");
+        } else if (delim == CMARK_PERIOD_DELIM) {
+          cmark_strbuf_puts(xml, " delim=\"period\"");
+        }
+        break;
+      case CMARK_BULLET_LIST:
+        cmark_strbuf_puts(xml, " type=\"bullet\"");
+        break;
+      default:
+        break;
+      }
+      sprintf(buffer, " tight=\"%s\"",
+              (cmark_node_get_list_tight(node) ? "true" : "false"));
+      cmark_strbuf_puts(xml, buffer);
+      break;
+    case CMARK_NODE_HEADER:
+      sprintf(buffer, " level=\"%d\"", node->as.header.level);
+      cmark_strbuf_puts(xml, buffer);
+      break;
+    case CMARK_NODE_CODE_BLOCK:
+      if (node->as.code.info.len > 0) {
+        cmark_strbuf_puts(xml, " info=\"");
+        escape_xml(xml, node->as.code.info.data, node->as.code.info.len);
+        cmark_strbuf_putc(xml, '"');
+      }
+      cmark_strbuf_puts(xml, ">");
+      escape_xml(xml, node->as.code.literal.data, node->as.code.literal.len);
+      cmark_strbuf_puts(xml, "</");
+      cmark_strbuf_puts(xml, cmark_node_get_type_string(node));
+      literal = true;
+      break;
+    case CMARK_NODE_LINK:
+    case CMARK_NODE_IMAGE:
+      cmark_strbuf_puts(xml, " destination=\"");
+      escape_xml(xml, node->as.link.url.data, node->as.link.url.len);
+      cmark_strbuf_putc(xml, '"');
+      cmark_strbuf_puts(xml, " title=\"");
+      escape_xml(xml, node->as.link.title.data, node->as.link.title.len);
+      cmark_strbuf_putc(xml, '"');
+      break;
+    default:
+      break;
+    }
+    if (node->first_child) {
+      state->indent += 2;
+    } else if (!literal) {
+      cmark_strbuf_puts(xml, " /");
+    }
+    cmark_strbuf_puts(xml, ">\n");
 
+  } else if (node->first_child) {
+    state->indent -= 2;
+    indent(state);
+    cmark_strbuf_puts(xml, "</");
+    cmark_strbuf_puts(xml, cmark_node_get_type_string(node));
+    cmark_strbuf_puts(xml, ">\n");
+  }
 
-	} else if (node->first_child) {
-		state->indent -= 2;
-		indent(state);
-		cmark_strbuf_puts(xml, "</");
-		cmark_strbuf_puts(xml, cmark_node_get_type_string(node));
-		cmark_strbuf_puts(xml, ">\n");
-	}
-
-	return 1;
+  return 1;
 }
 
-char *cmark_render_xml(cmark_node *root, int options)
-{
-	char *result;
-	cmark_strbuf xml = GH_BUF_INIT;
-	cmark_event_type ev_type;
-	cmark_node *cur;
-	struct render_state state = { &xml, 0 };
+char *cmark_render_xml(cmark_node *root, int options) {
+  char *result;
+  cmark_strbuf xml = GH_BUF_INIT;
+  cmark_event_type ev_type;
+  cmark_node *cur;
+  struct render_state state = {&xml, 0};
 
-	cmark_iter *iter = cmark_iter_new(root);
+  cmark_iter *iter = cmark_iter_new(root);
 
-	cmark_strbuf_puts(state.xml,
-	                  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
-	cmark_strbuf_puts(state.xml,
-	                  "<!DOCTYPE CommonMark SYSTEM \"CommonMark.dtd\">\n");
-	while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
-		cur = cmark_iter_get_node(iter);
-		S_render_node(cur, ev_type, &state, options);
-	}
-	result = (char *)cmark_strbuf_detach(&xml);
+  cmark_strbuf_puts(state.xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+  cmark_strbuf_puts(state.xml,
+                    "<!DOCTYPE CommonMark SYSTEM \"CommonMark.dtd\">\n");
+  while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
+    cur = cmark_iter_get_node(iter);
+    S_render_node(cur, ev_type, &state, options);
+  }
+  result = (char *)cmark_strbuf_detach(&xml);
 
-	cmark_iter_free(iter);
-	return result;
+  cmark_iter_free(iter);
+  return result;
 }
