[Swfdec] 20 commits - libswfdec/Makefile.am libswfdec/swfdec_as_interpret.c libswfdec/swfdec_html_parser.c libswfdec/swfdec_initialize.as libswfdec/swfdec_initialize.h libswfdec/swfdec_text_field.c libswfdec/swfdec_text_field.h libswfdec/swfdec_text_field_movie_as.c libswfdec/swfdec_text_field_movie.c libswfdec/swfdec_text_field_movie.h libswfdec/swfdec_text_field_movie_html.c libswfdec/swfdec_text_format.c test/dump.c test/trace

Pekka Lampila medar at kemper.freedesktop.org
Mon Oct 29 07:10:58 PDT 2007


 libswfdec/Makefile.am                        |    2 
 libswfdec/swfdec_as_interpret.c              |   19 
 libswfdec/swfdec_html_parser.c               |  474 -----------
 libswfdec/swfdec_initialize.as               |   11 
 libswfdec/swfdec_initialize.h                | 1118 +++++++++++++--------------
 libswfdec/swfdec_text_field.c                |   18 
 libswfdec/swfdec_text_field.h                |    2 
 libswfdec/swfdec_text_field_movie.c          |  585 +++-----------
 libswfdec/swfdec_text_field_movie.h          |   18 
 libswfdec/swfdec_text_field_movie_as.c       |    6 
 libswfdec/swfdec_text_field_movie_html.c     |  764 ++++++++++++++++++
 libswfdec/swfdec_text_format.c               |  154 +--
 test/dump.c                                  |    2 
 test/trace/Makefile.am                       |   23 
 test/trace/error-properties-5.swf            |binary
 test/trace/error-properties-5.swf.trace      |   23 
 test/trace/error-properties-6.swf            |binary
 test/trace/error-properties-6.swf.trace      |   23 
 test/trace/error-properties-7.swf            |binary
 test/trace/error-properties-7.swf.trace      |   21 
 test/trace/error-properties-8.swf            |binary
 test/trace/error-properties-8.swf.trace      |   21 
 test/trace/error-properties.as               |   12 
 test/trace/text-field-html-input-6.swf       |binary
 test/trace/text-field-html-input-6.swf.trace |   84 ++
 test/trace/text-field-html-input-7.swf       |binary
 test/trace/text-field-html-input-7.swf.trace |   76 +
 test/trace/text-field-html-input-8.swf       |binary
 test/trace/text-field-html-input-8.swf.trace |   76 +
 test/trace/text-field-html-input.as          |    5 
 test/trace/try-6.swf                         |binary
 test/trace/try-6.swf.trace                   |    6 
 test/trace/try-7.swf                         |binary
 test/trace/try-7.swf.trace                   |    6 
 test/trace/try-8.swf                         |binary
 test/trace/try-8.swf.trace                   |    6 
 test/trace/try-jump-6.swf                    |binary
 test/trace/try-jump-6.swf.trace              |    3 
 test/trace/try-jump-7.swf                    |binary
 test/trace/try-jump-7.swf.trace              |    3 
 test/trace/try-jump-8.swf                    |binary
 test/trace/try-jump-8.swf.trace              |    3 
 test/trace/try-jump.as                       |   43 +
 test/trace/try.as                            |   27 
 44 files changed, 2056 insertions(+), 1578 deletions(-)

New commits:
commit 3d0d44ea8afd4f1d5f5d2adf21d5d57c30eb1cd0
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 16:09:17 2007 +0200

    Jump in Try's end block functions, not in swfdec_as_frame_handle_exception

diff --git a/libswfdec/swfdec_as_frame.c b/libswfdec/swfdec_as_frame.c
index 5913eb1..c101b9c 100644
--- a/libswfdec/swfdec_as_frame.c
+++ b/libswfdec/swfdec_as_frame.c
@@ -805,7 +805,6 @@ swfdec_as_frame_handle_exception (SwfdecAsFrame *frame)
 
   /* pop blocks in the hope that we are inside a Try block */
   while (cx->exception && frame->blocks->len) {
-    frame->pc = frame->block_end;
     swfdec_as_frame_pop_block (frame);
   }
   /* no Try blocks caught it, exit frame */
diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index 57cf368..143f78b 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -2601,8 +2601,8 @@ swfdec_action_try_end_catch (SwfdecAsFrame *frame, gpointer data)
   if (swfdec_as_context_catch (cx, &val))
   {
     // we got an exception while in catch block:
-    // create new block for finally, passing the exception
-    // clear exception from the context
+    // create new block for finally to pass on the exception
+    // jump to that block
 
     exception_value = g_malloc (sizeof (SwfdecAsValue));
     *exception_value = val;
@@ -2611,6 +2611,7 @@ swfdec_action_try_end_catch (SwfdecAsFrame *frame, gpointer data)
     swfdec_as_frame_push_block (frame, try_data->finally_start,
 	try_data->finally_start + try_data->finally_size,
 	swfdec_action_try_end_finally, exception_value);
+    frame->pc = try_data->finally_start;
   }
 
   swfdec_action_try_data_free (try_data);
@@ -2639,8 +2640,8 @@ swfdec_action_try_end_try (SwfdecAsFrame *frame, gpointer data)
   {
     // we got an exception while in try block:
     // set the exception variable
-    // add new block for catch
-    // clear exception from context
+    // add new block for catch and jump to it
+
     if (try_data->use_register)
     {
       if (swfdec_action_has_register (cx, try_data->register_number)) {
@@ -2680,8 +2681,9 @@ swfdec_action_try_end_try (SwfdecAsFrame *frame, gpointer data)
     swfdec_as_frame_push_block (frame, try_data->catch_start,
 	try_data->catch_start + try_data->catch_size,
 	swfdec_action_try_end_catch, try_data);
-  } 
-  else 
+    frame->pc = try_data->catch_start;
+  }
+  else
   {
     swfdec_action_try_data_free (try_data);
   }
commit 30e92ccded4ad52b46d11192cee525b36f6bd37c
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 16:04:53 2007 +0200

    Some small fixes to TextField's size handling

diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c
index 881327c..f10f529 100644
--- a/libswfdec/swfdec_text_field_movie.c
+++ b/libswfdec/swfdec_text_field_movie.c
@@ -37,6 +37,8 @@
 
 G_DEFINE_TYPE (SwfdecTextFieldMovie, swfdec_text_field_movie, SWFDEC_TYPE_MOVIE)
 
+#define EXTRA_MARGIN 2
+
 static void
 swfdec_text_field_movie_update_extents (SwfdecMovie *movie,
     SwfdecRect *extents)
@@ -611,8 +613,8 @@ swfdec_text_field_movie_render (SwfdecMovie *movie, cairo_t *cr,
 
   first = TRUE;
   linenum = 0;
-  x = movie->original_extents.x0 + text_movie->hscroll;
-  y = movie->original_extents.y0 + 1;
+  x = movie->original_extents.x0 + EXTRA_MARGIN + text_movie->hscroll;
+  y = movie->original_extents.y0 + EXTRA_MARGIN;
   cairo_move_to (cr, x, y);
 
   for (i = 0; layouts[i].layout != NULL/* && y < limit.y1*/; i++)
@@ -755,7 +757,7 @@ swfdec_text_field_movie_update_scroll (SwfdecTextFieldMovie *text,
 }
 
 void
-swfdec_text_field_get_size (SwfdecTextFieldMovie *text, int *width,
+swfdec_text_field_movie_get_text_size (SwfdecTextFieldMovie *text, int *width,
     int *height)
 {
   SwfdecLayout *layouts;
@@ -764,7 +766,7 @@ swfdec_text_field_get_size (SwfdecTextFieldMovie *text, int *width,
   if (width != NULL)
     *width = 0;
   if (height != NULL)
-    *height = 3;
+    *height = 0;
 
   g_return_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text));
   g_return_if_fail (width != NULL || height != NULL);
@@ -797,7 +799,9 @@ swfdec_text_field_movie_auto_size (SwfdecTextFieldMovie *text)
   if (text->text->auto_size == SWFDEC_AUTO_SIZE_NONE)
     return FALSE;
 
-  swfdec_text_field_get_size (text, &width, &height);
+  swfdec_text_field_movie_get_text_size (text, &width, &height);
+  width += 2 * EXTRA_MARGIN;
+  height += 2 * EXTRA_MARGIN;
 
   if ((text->text->word_wrap ||
 	graphic->extents.x1 - graphic->extents.x0 == width) &&
diff --git a/libswfdec/swfdec_text_field_movie.h b/libswfdec/swfdec_text_field_movie.h
index 15af317..4a03fdd 100644
--- a/libswfdec/swfdec_text_field_movie.h
+++ b/libswfdec/swfdec_text_field_movie.h
@@ -120,7 +120,7 @@ GType		swfdec_text_field_movie_get_type		(void);
 void		swfdec_text_field_movie_set_text		(SwfdecTextFieldMovie *	movie,
 							 const char *		str,
 							 gboolean		html);
-void		swfdec_text_field_get_size		(SwfdecTextFieldMovie *	text,
+void		swfdec_text_field_movie_get_text_size	(SwfdecTextFieldMovie *	text,
 							 int *			width,
 							 int *			height);
 gboolean	swfdec_text_field_movie_auto_size	(SwfdecTextFieldMovie *	text);
diff --git a/libswfdec/swfdec_text_field_movie_as.c b/libswfdec/swfdec_text_field_movie_as.c
index 3436ffb..dd5203f 100644
--- a/libswfdec/swfdec_text_field_movie_as.c
+++ b/libswfdec/swfdec_text_field_movie_as.c
@@ -423,7 +423,7 @@ swfdec_text_field_movie_get_textHeight (SwfdecAsContext *cx,
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE, &text, "");
 
-  swfdec_text_field_get_size (text, NULL, &height);
+  swfdec_text_field_movie_get_text_size (text, NULL, &height);
   SWFDEC_AS_VALUE_SET_NUMBER (ret, height);
 }
 
@@ -437,7 +437,7 @@ swfdec_text_field_movie_get_textWidth (SwfdecAsContext *cx,
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE, &text, "");
 
-  swfdec_text_field_get_size (text, &width, NULL);
+  swfdec_text_field_movie_get_text_size (text, &width, NULL);
   SWFDEC_AS_VALUE_SET_NUMBER (ret, width);
 }
 
commit 47923239d370ec9bd96463bbdfcb075048dde80e
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 15:43:20 2007 +0200

    Add try-jump test

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index f1c9938..6762ef1 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -2100,6 +2100,13 @@ EXTRA_DIST = \
 	try-7.swf.trace \
 	try-8.swf \
 	try-8.swf.trace \
+	try-jump.as \
+	try-jump-6.swf \
+	try-jump-6.swf.trace \
+	try-jump-7.swf \
+	try-jump-7.swf.trace \
+	try-jump-8.swf \
+	try-jump-8.swf.trace \
 	try-throw-in-finally.as \
 	try-throw-in-finally-6.swf \
 	try-throw-in-finally-6.swf.trace \
diff --git a/test/trace/try-jump-6.swf b/test/trace/try-jump-6.swf
new file mode 100644
index 0000000..8463ef8
Binary files /dev/null and b/test/trace/try-jump-6.swf differ
diff --git a/test/trace/try-jump-6.swf.trace b/test/trace/try-jump-6.swf.trace
new file mode 100644
index 0000000..8350f2f
--- /dev/null
+++ b/test/trace/try-jump-6.swf.trace
@@ -0,0 +1,3 @@
+Test how Try action handles jumping out of the blocks
+outside: test
+outside: test2
diff --git a/test/trace/try-jump-7.swf b/test/trace/try-jump-7.swf
new file mode 100644
index 0000000..64c7733
Binary files /dev/null and b/test/trace/try-jump-7.swf differ
diff --git a/test/trace/try-jump-7.swf.trace b/test/trace/try-jump-7.swf.trace
new file mode 100644
index 0000000..8350f2f
--- /dev/null
+++ b/test/trace/try-jump-7.swf.trace
@@ -0,0 +1,3 @@
+Test how Try action handles jumping out of the blocks
+outside: test
+outside: test2
diff --git a/test/trace/try-jump-8.swf b/test/trace/try-jump-8.swf
new file mode 100644
index 0000000..271236b
Binary files /dev/null and b/test/trace/try-jump-8.swf differ
diff --git a/test/trace/try-jump-8.swf.trace b/test/trace/try-jump-8.swf.trace
new file mode 100644
index 0000000..8350f2f
--- /dev/null
+++ b/test/trace/try-jump-8.swf.trace
@@ -0,0 +1,3 @@
+Test how Try action handles jumping out of the blocks
+outside: test
+outside: test2
diff --git a/test/trace/try-jump.as b/test/trace/try-jump.as
new file mode 100644
index 0000000..0218750
--- /dev/null
+++ b/test/trace/try-jump.as
@@ -0,0 +1,43 @@
+// makeswf -v 7 -r 1 -o try-jump-7.swf try-jump.as
+
+trace ("Test how Try action handles jumping out of the blocks");
+
+function test() {
+  while (true) {
+    try {
+      break;
+    } catch (exception) {
+      trace ("inside: " + exception);
+    };
+  }
+  throw new Error ("test");
+}
+
+function test2() {
+  var i = 0;
+  while (true) {
+    if (i++ > 5)
+      throw new Error ("test2");
+    try {
+      throw new Error ("catch this");
+    } catch (exception) {
+      continue;
+    } finally {
+      trace ("finally");
+    };
+  }
+}
+
+try {
+  test ();
+} catch (exception) {
+  trace ("outside: " + exception);
+};
+
+try {
+  test2 ();
+} catch (exception) {
+  trace ("outside: " + exception);
+};
+
+loadMovie ("FSCommand:quit", "");
commit 00b8063d347d78784ec04ed05d37c920c858a8e9
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 15:32:09 2007 +0200

    Add a test for Try action

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 77f2bb0..f1c9938 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -2093,6 +2093,13 @@ EXTRA_DIST = \
 	transform2.swf \
 	transform2.swf.trace \
 	transform2.swf.trace.org \
+	try.as \
+	try-6.swf \
+	try-6.swf.trace \
+	try-7.swf \
+	try-7.swf.trace \
+	try-8.swf \
+	try-8.swf.trace \
 	try-throw-in-finally.as \
 	try-throw-in-finally-6.swf \
 	try-throw-in-finally-6.swf.trace \
diff --git a/test/trace/try-6.swf b/test/trace/try-6.swf
new file mode 100644
index 0000000..392a5a0
Binary files /dev/null and b/test/trace/try-6.swf differ
diff --git a/test/trace/try-6.swf.trace b/test/trace/try-6.swf.trace
new file mode 100644
index 0000000..25142a6
--- /dev/null
+++ b/test/trace/try-6.swf.trace
@@ -0,0 +1,6 @@
+Test Try action
+before
+try
+catch: try
+finally
+catch from test: catch
diff --git a/test/trace/try-7.swf b/test/trace/try-7.swf
new file mode 100644
index 0000000..b36faeb
Binary files /dev/null and b/test/trace/try-7.swf differ
diff --git a/test/trace/try-7.swf.trace b/test/trace/try-7.swf.trace
new file mode 100644
index 0000000..25142a6
--- /dev/null
+++ b/test/trace/try-7.swf.trace
@@ -0,0 +1,6 @@
+Test Try action
+before
+try
+catch: try
+finally
+catch from test: catch
diff --git a/test/trace/try-8.swf b/test/trace/try-8.swf
new file mode 100644
index 0000000..e4135ca
Binary files /dev/null and b/test/trace/try-8.swf differ
diff --git a/test/trace/try-8.swf.trace b/test/trace/try-8.swf.trace
new file mode 100644
index 0000000..25142a6
--- /dev/null
+++ b/test/trace/try-8.swf.trace
@@ -0,0 +1,6 @@
+Test Try action
+before
+try
+catch: try
+finally
+catch from test: catch
diff --git a/test/trace/try.as b/test/trace/try.as
new file mode 100644
index 0000000..4ef5572
--- /dev/null
+++ b/test/trace/try.as
@@ -0,0 +1,27 @@
+// makeswf -v 7 -r 1 -o try-throw-in-finally-7.swf try-throw-in-finally.as
+
+trace ("Test Try action");
+
+function test() {
+  trace ("before");
+  try {
+    trace ("try");
+    throw new Error ("try");
+    trace ("try after throw");
+  } catch (exception) {
+    trace ("catch: " + exception);
+    throw new Error ("catch");
+    trace ("catch after throw");
+  } finally {
+    trace ("finally");
+  };
+  trace ("after");
+}
+
+try {
+  test ();
+} catch (exception) {
+  trace ("catch from test: " + exception);
+};
+
+loadMovie ("FSCommand:quit", "");
commit 6c6d84700517faca875d6476b02ea4844c8942ba
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 15:30:35 2007 +0200

    Jump out of popped block when handling exceptions

diff --git a/libswfdec/swfdec_as_frame.c b/libswfdec/swfdec_as_frame.c
index c101b9c..5913eb1 100644
--- a/libswfdec/swfdec_as_frame.c
+++ b/libswfdec/swfdec_as_frame.c
@@ -805,6 +805,7 @@ swfdec_as_frame_handle_exception (SwfdecAsFrame *frame)
 
   /* pop blocks in the hope that we are inside a Try block */
   while (cx->exception && frame->blocks->len) {
+    frame->pc = frame->block_end;
     swfdec_as_frame_pop_block (frame);
   }
   /* no Try blocks caught it, exit frame */
commit 59bf5375f4f6e4491d1fa91eb8d49983fc0fdc51
Merge: 452d86f... 6bd8b72...
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 15:08:31 2007 +0200

    Merge branch 'master' of ssh://medar@git.freedesktop.org/git/swfdec/swfdec

commit 452d86fdc0036dfc773a7e51d6d726bb98f64f91
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 15:05:00 2007 +0200

    Add error-properties test

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 2086980..ce34916 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -494,6 +494,15 @@ EXTRA_DIST = \
 	duplicate-names-6.swf.trace \
 	duplicate-names-7.swf \
 	duplicate-names-7.swf.trace \
+	error-properties.as \
+	error-properties-5.swf \
+	error-properties-5.swf.trace \
+	error-properties-6.swf \
+	error-properties-6.swf.trace \
+	error-properties-7.swf \
+	error-properties-7.swf.trace \
+	error-properties-8.swf \
+	error-properties-8.swf.trace \
 	event-order.swf \
 	empty-function.as \
 	empty-function-5.swf \
diff --git a/test/trace/error-properties-5.swf b/test/trace/error-properties-5.swf
new file mode 100644
index 0000000..18da742
Binary files /dev/null and b/test/trace/error-properties-5.swf differ
diff --git a/test/trace/error-properties-5.swf.trace b/test/trace/error-properties-5.swf.trace
new file mode 100644
index 0000000..55981f3
--- /dev/null
+++ b/test/trace/error-properties-5.swf.trace
@@ -0,0 +1,23 @@
+_global.Error = function
+  __proto__ (hpn) = _global.Object.__proto__
+  constructor (hp) = _global.Object.constructor
+  prototype (hp) = object
+    __proto__ (hp) = _global.Object.prototype
+    constructor (hp) = _global.Error
+    message = string : "Error"
+    name = string : "Error"
+    toString = function
+      __proto__ (hpn) = _global.Object.__proto__
+      constructor (hp) = _global.Object.constructor
+      prototype (hp) = object
+        __proto__ (hp) = _global.Object.prototype
+        constructor (hp) = _global.Error.prototype.toString
+local.a = object
+  __constructor__ (hn) = _global.Error
+  __proto__ (hp) = _global.Error.prototype
+  constructor (h) = _global.Error
+local.b = object
+  __constructor__ (hn) = _global.Error
+  __proto__ (hp) = _global.Error.prototype
+  constructor (h) = _global.Error
+  message = string : "test"
diff --git a/test/trace/error-properties-6.swf b/test/trace/error-properties-6.swf
new file mode 100644
index 0000000..99a356f
Binary files /dev/null and b/test/trace/error-properties-6.swf differ
diff --git a/test/trace/error-properties-6.swf.trace b/test/trace/error-properties-6.swf.trace
new file mode 100644
index 0000000..b92653f
--- /dev/null
+++ b/test/trace/error-properties-6.swf.trace
@@ -0,0 +1,23 @@
+_global.Error = function
+  __proto__ (hp) = _global.Function.prototype
+  constructor (hp) = _global.Function
+  prototype (hp) = object
+    __proto__ (hp) = _global.Object.prototype
+    constructor (hp) = _global.Error
+    message = string : "Error"
+    name = string : "Error"
+    toString = function
+      __proto__ (hp) = _global.Function.prototype
+      constructor (hp) = _global.Function
+      prototype (hp) = object
+        __proto__ (hp) = _global.Object.prototype
+        constructor (hp) = _global.Error.prototype.toString
+local.a = object
+  __constructor__ (h) = _global.Error
+  __proto__ (hp) = _global.Error.prototype
+  constructor (h) = _global.Error
+local.b = object
+  __constructor__ (h) = _global.Error
+  __proto__ (hp) = _global.Error.prototype
+  constructor (h) = _global.Error
+  message = string : "test"
diff --git a/test/trace/error-properties-7.swf b/test/trace/error-properties-7.swf
new file mode 100644
index 0000000..fee0529
Binary files /dev/null and b/test/trace/error-properties-7.swf differ
diff --git a/test/trace/error-properties-7.swf.trace b/test/trace/error-properties-7.swf.trace
new file mode 100644
index 0000000..d6cac77
--- /dev/null
+++ b/test/trace/error-properties-7.swf.trace
@@ -0,0 +1,21 @@
+_global.Error = function
+  __proto__ (hp) = _global.Function.prototype
+  constructor (hp) = _global.Function
+  prototype (hp) = object
+    __proto__ (hp) = _global.Object.prototype
+    constructor (hp) = _global.Error
+    message = string : "Error"
+    name = string : "Error"
+    toString = function
+      __proto__ (hp) = _global.Function.prototype
+      constructor (hp) = _global.Function
+      prototype (hp) = object
+        __proto__ (hp) = _global.Object.prototype
+        constructor (hp) = _global.Error.prototype.toString
+local.a = object
+  __constructor__ (h) = _global.Error
+  __proto__ (hp) = _global.Error.prototype
+local.b = object
+  __constructor__ (h) = _global.Error
+  __proto__ (hp) = _global.Error.prototype
+  message = string : "test"
diff --git a/test/trace/error-properties-8.swf b/test/trace/error-properties-8.swf
new file mode 100644
index 0000000..bc4b7f5
Binary files /dev/null and b/test/trace/error-properties-8.swf differ
diff --git a/test/trace/error-properties-8.swf.trace b/test/trace/error-properties-8.swf.trace
new file mode 100644
index 0000000..d6cac77
--- /dev/null
+++ b/test/trace/error-properties-8.swf.trace
@@ -0,0 +1,21 @@
+_global.Error = function
+  __proto__ (hp) = _global.Function.prototype
+  constructor (hp) = _global.Function
+  prototype (hp) = object
+    __proto__ (hp) = _global.Object.prototype
+    constructor (hp) = _global.Error
+    message = string : "Error"
+    name = string : "Error"
+    toString = function
+      __proto__ (hp) = _global.Function.prototype
+      constructor (hp) = _global.Function
+      prototype (hp) = object
+        __proto__ (hp) = _global.Object.prototype
+        constructor (hp) = _global.Error.prototype.toString
+local.a = object
+  __constructor__ (h) = _global.Error
+  __proto__ (hp) = _global.Error.prototype
+local.b = object
+  __constructor__ (h) = _global.Error
+  __proto__ (hp) = _global.Error.prototype
+  message = string : "test"
diff --git a/test/trace/error-properties.as b/test/trace/error-properties.as
new file mode 100644
index 0000000..6908ff2
--- /dev/null
+++ b/test/trace/error-properties.as
@@ -0,0 +1,12 @@
+// makeswf -v 7 -r 1 -o error-properties-7.swf error-properties.as
+
+#include "trace_properties.as"
+
+var a = new Error ();
+var b = new Error ("test");
+
+trace_properties (_global.Error, "_global", "Error");
+trace_properties (a, "local", "a");
+trace_properties (b, "local", "b");
+
+loadMovie ("FSCommand:quit", "");
commit a26ff3c1c2c69ea12a11dc8fe0aeec1e3cfea923
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 15:04:02 2007 +0200

    Implement Error class

diff --git a/libswfdec/swfdec_initialize.as b/libswfdec/swfdec_initialize.as
index 578f2e7..a27b80f 100644
--- a/libswfdec/swfdec_initialize.as
+++ b/libswfdec/swfdec_initialize.as
@@ -28,6 +28,17 @@ ASSetNativeAccessor = ASnative (4, 1);
 Object.registerClass = ASnative(101, 8);
 ASSetPropFlags (Object, null, 7);
 
+/*** Error ***/
+
+function Error (msg) {
+  if (typeof (msg) != "undefined")
+    this.message = msg;
+}
+Error.prototype.name = Error.prototype.message = "Error";
+Error.prototype.toString = function () {
+      return this.message;
+};
+
 /*** ASBROADCASTER ***/
 
 function AsBroadcaster () { };
diff --git a/libswfdec/swfdec_initialize.h b/libswfdec/swfdec_initialize.h
index d71cb7a..e70f987 100644
--- a/libswfdec/swfdec_initialize.h
+++ b/libswfdec/swfdec_initialize.h
@@ -2,563 +2,573 @@
 
 /* compiled from swfdec_initialize.as */
 const unsigned char swfdec_initialize[] = {
-  0x88, 0xBA, 0x07, 0xBC,  0x00, 0x41, 0x53, 0x53,  0x65, 0x74, 0x4E, 0x61,  0x74, 0x69, 0x76, 0x65,
+  0x88, 0xCC, 0x07, 0xBF,  0x00, 0x41, 0x53, 0x53,  0x65, 0x74, 0x4E, 0x61,  0x74, 0x69, 0x76, 0x65,
   0x00, 0x41, 0x53, 0x6E,  0x61, 0x74, 0x69, 0x76,  0x65, 0x00, 0x41, 0x53,  0x53, 0x65, 0x74, 0x4E,
   0x61, 0x74, 0x69, 0x76,  0x65, 0x41, 0x63, 0x63,  0x65, 0x73, 0x73, 0x6F,  0x72, 0x00, 0x4F, 0x62,
   0x6A, 0x65, 0x63, 0x74,  0x00, 0x72, 0x65, 0x67,  0x69, 0x73, 0x74, 0x65,  0x72, 0x43, 0x6C, 0x61,
   0x73, 0x73, 0x00, 0x41,  0x53, 0x53, 0x65, 0x74,  0x50, 0x72, 0x6F, 0x70,  0x46, 0x6C, 0x61, 0x67,
-  0x73, 0x00, 0x41, 0x73,  0x42, 0x72, 0x6F, 0x61,  0x64, 0x63, 0x61, 0x73,  0x74, 0x65, 0x72, 0x00,
-  0x62, 0x72, 0x6F, 0x61,  0x64, 0x63, 0x61, 0x73,  0x74, 0x4D, 0x65, 0x73,  0x73, 0x61, 0x67, 0x65,
-  0x00, 0x61, 0x64, 0x64,  0x4C, 0x69, 0x73, 0x74,  0x65, 0x6E, 0x65, 0x72,  0x00, 0x74, 0x68, 0x69,
-  0x73, 0x00, 0x78, 0x00,  0x72, 0x65, 0x6D, 0x6F,  0x76, 0x65, 0x4C, 0x69,  0x73, 0x74, 0x65, 0x6E,
-  0x65, 0x72, 0x00, 0x5F,  0x6C, 0x69, 0x73, 0x74,  0x65, 0x6E, 0x65, 0x72,  0x73, 0x00, 0x70, 0x75,
-  0x73, 0x68, 0x00, 0x6C,  0x00, 0x69, 0x00, 0x6C,  0x65, 0x6E, 0x67, 0x74,  0x68, 0x00, 0x73, 0x70,
-  0x6C, 0x69, 0x63, 0x65,  0x00, 0x69, 0x6E, 0x69,  0x74, 0x69, 0x61, 0x6C,  0x69, 0x7A, 0x65, 0x00,
-  0x6F, 0x00, 0x62, 0x72,  0x6F, 0x61, 0x64, 0x63,  0x61, 0x73, 0x74, 0x4D,  0x65, 0x73, 0x73, 0x61,
-  0x67, 0x65, 0x2C, 0x61,  0x64, 0x64, 0x4C, 0x69,  0x73, 0x74, 0x65, 0x6E,  0x65, 0x72, 0x2C, 0x72,
-  0x65, 0x6D, 0x6F, 0x76,  0x65, 0x4C, 0x69, 0x73,  0x74, 0x65, 0x6E, 0x65,  0x72, 0x2C, 0x5F, 0x6C,
-  0x69, 0x73, 0x74, 0x65,  0x6E, 0x65, 0x72, 0x73,  0x00, 0x4B, 0x65, 0x79,  0x00, 0x41, 0x4C, 0x54,
-  0x00, 0x42, 0x41, 0x43,  0x4B, 0x53, 0x50, 0x41,  0x43, 0x45, 0x00, 0x43,  0x41, 0x50, 0x53, 0x4C,
-  0x4F, 0x43, 0x4B, 0x00,  0x43, 0x4F, 0x4E, 0x54,  0x52, 0x4F, 0x4C, 0x00,  0x44, 0x45, 0x4C, 0x45,
-  0x54, 0x45, 0x4B, 0x45,  0x59, 0x00, 0x44, 0x4F,  0x57, 0x4E, 0x00, 0x45,  0x4E, 0x44, 0x00, 0x45,
-  0x4E, 0x54, 0x45, 0x52,  0x00, 0x45, 0x53, 0x43,  0x41, 0x50, 0x45, 0x00,  0x48, 0x4F, 0x4D, 0x45,
-  0x00, 0x49, 0x4E, 0x53,  0x45, 0x52, 0x54, 0x00,  0x4C, 0x45, 0x46, 0x54,  0x00, 0x50, 0x47, 0x44,
-  0x4E, 0x00, 0x50, 0x47,  0x55, 0x50, 0x00, 0x52,  0x49, 0x47, 0x48, 0x54,  0x00, 0x53, 0x48, 0x49,
-  0x46, 0x54, 0x00, 0x53,  0x50, 0x41, 0x43, 0x45,  0x00, 0x54, 0x41, 0x42,  0x00, 0x55, 0x50, 0x00,
-  0x67, 0x65, 0x74, 0x41,  0x73, 0x63, 0x69, 0x69,  0x2C, 0x67, 0x65, 0x74,  0x43, 0x6F, 0x64, 0x65,
-  0x2C, 0x69, 0x73, 0x44,  0x6F, 0x77, 0x6E, 0x00,  0x4D, 0x6F, 0x75, 0x73,  0x65, 0x00, 0x73, 0x68,
-  0x6F, 0x77, 0x00, 0x68,  0x69, 0x64, 0x65, 0x00,  0x53, 0x74, 0x61, 0x67,  0x65, 0x00, 0x73, 0x63,
-  0x61, 0x6C, 0x65, 0x4D,  0x6F, 0x64, 0x65, 0x2C,  0x61, 0x6C, 0x69, 0x67,  0x6E, 0x2C, 0x77, 0x69,
-  0x64, 0x74, 0x68, 0x2C,  0x68, 0x65, 0x69, 0x67,  0x68, 0x74, 0x00, 0x4C,  0x6F, 0x61, 0x64, 0x56,
-  0x61, 0x72, 0x73, 0x00,  0x70, 0x72, 0x6F, 0x74,  0x6F, 0x74, 0x79, 0x70,  0x65, 0x00, 0x63, 0x6F,
-  0x6E, 0x74, 0x65, 0x6E,  0x74, 0x54, 0x79, 0x70,  0x65, 0x00, 0x61, 0x70,  0x70, 0x6C, 0x69, 0x63,
-  0x61, 0x74, 0x69, 0x6F,  0x6E, 0x2F, 0x78, 0x2D,  0x77, 0x77, 0x77, 0x2D,  0x66, 0x6F, 0x72, 0x6D,
-  0x2D, 0x75, 0x72, 0x6C,  0x65, 0x6E, 0x63, 0x6F,  0x64, 0x65, 0x64, 0x00,  0x6C, 0x6F, 0x61, 0x64,
-  0x00, 0x64, 0x65, 0x63,  0x6F, 0x64, 0x65, 0x00,  0x6F, 0x6E, 0x4C, 0x6F,  0x61, 0x64, 0x00, 0x6F,
-  0x6E, 0x44, 0x61, 0x74,  0x61, 0x00, 0x6C, 0x6F,  0x61, 0x64, 0x65, 0x64,  0x00, 0x73, 0x72, 0x63,
-  0x00, 0x74, 0x6F, 0x53,  0x74, 0x72, 0x69, 0x6E,  0x67, 0x00, 0x73, 0x74,  0x72, 0x00, 0x65, 0x73,
-  0x63, 0x61, 0x70, 0x65,  0x00, 0x3D, 0x00, 0x26,  0x00, 0x67, 0x65, 0x74,  0x42, 0x79, 0x74, 0x65,
-  0x73, 0x4C, 0x6F, 0x61,  0x64, 0x65, 0x64, 0x00,  0x5F, 0x62, 0x79, 0x74,  0x65, 0x73, 0x4C, 0x6F,
-  0x61, 0x64, 0x65, 0x64,  0x00, 0x67, 0x65, 0x74,  0x42, 0x79, 0x74, 0x65,  0x73, 0x54, 0x6F, 0x74,
-  0x61, 0x6C, 0x00, 0x5F,  0x62, 0x79, 0x74, 0x65,  0x73, 0x54, 0x6F, 0x74,  0x61, 0x6C, 0x00, 0x53,
-  0x6F, 0x75, 0x6E, 0x64,  0x00, 0x41, 0x53, 0x63,  0x6F, 0x6E, 0x73, 0x74,  0x72, 0x75, 0x63, 0x74,
-  0x6F, 0x72, 0x00, 0x73,  0x74, 0x6F, 0x70, 0x2C,  0x61, 0x74, 0x74, 0x61,  0x63, 0x68, 0x53, 0x6F,
-  0x75, 0x6E, 0x64, 0x2C,  0x73, 0x74, 0x61, 0x72,  0x74, 0x00, 0x58, 0x4D,  0x4C, 0x4E, 0x6F, 0x64,
-  0x65, 0x00, 0x63, 0x6C,  0x6F, 0x6E, 0x65, 0x4E,  0x6F, 0x64, 0x65, 0x00,  0x72, 0x65, 0x6D, 0x6F,
-  0x76, 0x65, 0x4E, 0x6F,  0x64, 0x65, 0x00, 0x69,  0x6E, 0x73, 0x65, 0x72,  0x74, 0x42, 0x65, 0x66,
-  0x6F, 0x72, 0x65, 0x00,  0x61, 0x70, 0x70, 0x65,  0x6E, 0x64, 0x43, 0x68,  0x69, 0x6C, 0x64, 0x00,
-  0x68, 0x61, 0x73, 0x43,  0x68, 0x69, 0x6C, 0x64,  0x4E, 0x6F, 0x64, 0x65,  0x73, 0x00, 0x67, 0x65,
-  0x74, 0x4E, 0x61, 0x6D,  0x65, 0x73, 0x70, 0x61,  0x63, 0x65, 0x46, 0x6F,  0x72, 0x50, 0x72, 0x65,
-  0x66, 0x69, 0x78, 0x00,  0x67, 0x65, 0x74, 0x50,  0x72, 0x65, 0x66, 0x69,  0x78, 0x46, 0x6F, 0x72,
-  0x4E, 0x61, 0x6D, 0x65,  0x73, 0x70, 0x61, 0x63,  0x65, 0x00, 0x58, 0x4D,  0x4C, 0x00, 0x00, 0x63,
-  0x72, 0x65, 0x61, 0x74,  0x65, 0x45, 0x6C, 0x65,  0x6D, 0x65, 0x6E, 0x74,  0x00, 0x63, 0x72, 0x65,
-  0x61, 0x74, 0x65, 0x54,  0x65, 0x78, 0x74, 0x4E,  0x6F, 0x64, 0x65, 0x00,  0x70, 0x61, 0x72, 0x73,
-  0x65, 0x58, 0x4D, 0x4C,  0x00, 0x53, 0x79, 0x73,  0x74, 0x65, 0x6D, 0x00,  0x63, 0x61, 0x70, 0x61,
-  0x62, 0x69, 0x6C, 0x69,  0x74, 0x69, 0x65, 0x73,  0x00, 0x51, 0x75, 0x65,  0x72, 0x79, 0x00, 0x43,
-  0x6F, 0x6C, 0x6F, 0x72,  0x00, 0x74, 0x61, 0x72,  0x67, 0x65, 0x74, 0x00,  0x73, 0x65, 0x74, 0x52,
-  0x47, 0x42, 0x2C, 0x73,  0x65, 0x74, 0x54, 0x72,  0x61, 0x6E, 0x73, 0x66,  0x6F, 0x72, 0x6D, 0x2C,
-  0x67, 0x65, 0x74, 0x52,  0x47, 0x42, 0x2C, 0x67,  0x65, 0x74, 0x54, 0x72,  0x61, 0x6E, 0x73, 0x66,
-  0x6F, 0x72, 0x6D, 0x00,  0x4D, 0x6F, 0x76, 0x69,  0x65, 0x43, 0x6C, 0x69,  0x70, 0x00, 0x6D, 0x65,
-  0x74, 0x68, 0x00, 0x6D,  0x65, 0x74, 0x68, 0x6F,  0x64, 0x00, 0x74, 0x6F,  0x4C, 0x6F, 0x77, 0x65,
-  0x72, 0x43, 0x61, 0x73,  0x65, 0x00, 0x6C, 0x6F,  0x77, 0x65, 0x72, 0x00,  0x70, 0x6F, 0x73, 0x74,
-  0x00, 0x67, 0x65, 0x74,  0x00, 0x67, 0x65, 0x74,  0x55, 0x52, 0x4C, 0x00,  0x75, 0x6E, 0x64, 0x65,
-  0x66, 0x69, 0x6E, 0x65,  0x64, 0x00, 0x74, 0x79,  0x70, 0x65, 0x00, 0x75,  0x72, 0x6C, 0x00, 0x6C,
-  0x6F, 0x61, 0x64, 0x56,  0x61, 0x72, 0x69, 0x61,  0x62, 0x6C, 0x65, 0x73,  0x00, 0x5F, 0x74, 0x61,
-  0x72, 0x67, 0x65, 0x74,  0x00, 0x6C, 0x6F, 0x61,  0x64, 0x4D, 0x6F, 0x76,  0x69, 0x65, 0x00, 0x61,
-  0x74, 0x74, 0x61, 0x63,  0x68, 0x4D, 0x6F, 0x76,  0x69, 0x65, 0x00, 0x73,  0x77, 0x61, 0x70, 0x44,
-  0x65, 0x70, 0x74, 0x68,  0x73, 0x00, 0x68, 0x69,  0x74, 0x54, 0x65, 0x73,  0x74, 0x00, 0x67, 0x65,
-  0x74, 0x42, 0x6F, 0x75,  0x6E, 0x64, 0x73, 0x00,  0x67, 0x65, 0x74, 0x44,  0x65, 0x70, 0x74, 0x68,
-  0x00, 0x70, 0x6C, 0x61,  0x79, 0x00, 0x73, 0x74,  0x6F, 0x70, 0x00, 0x6E,  0x65, 0x78, 0x74, 0x46,
-  0x72, 0x61, 0x6D, 0x65,  0x00, 0x70, 0x72, 0x65,  0x76, 0x46, 0x72, 0x61,  0x6D, 0x65, 0x00, 0x67,
-  0x6F, 0x74, 0x6F, 0x41,  0x6E, 0x64, 0x50, 0x6C,  0x61, 0x79, 0x00, 0x67,  0x6F, 0x74, 0x6F, 0x41,
-  0x6E, 0x64, 0x53, 0x74,  0x6F, 0x70, 0x00, 0x64,  0x75, 0x70, 0x6C, 0x69,  0x63, 0x61, 0x74, 0x65,
-  0x4D, 0x6F, 0x76, 0x69,  0x65, 0x43, 0x6C, 0x69,  0x70, 0x00, 0x72, 0x65,  0x6D, 0x6F, 0x76, 0x65,
-  0x4D, 0x6F, 0x76, 0x69,  0x65, 0x43, 0x6C, 0x69,  0x70, 0x00, 0x73, 0x74,  0x61, 0x72, 0x74, 0x44,
-  0x72, 0x61, 0x67, 0x00,  0x73, 0x74, 0x6F, 0x70,  0x44, 0x72, 0x61, 0x67,  0x00, 0x63, 0x72, 0x65,
-  0x61, 0x74, 0x65, 0x54,  0x65, 0x78, 0x74, 0x46,  0x69, 0x65, 0x6C, 0x64,  0x00, 0x36, 0x63, 0x72,
-  0x65, 0x61, 0x74, 0x65,  0x45, 0x6D, 0x70, 0x74,  0x79, 0x4D, 0x6F, 0x76,  0x69, 0x65, 0x43, 0x6C,
-  0x69, 0x70, 0x2C, 0x36,  0x62, 0x65, 0x67, 0x69,  0x6E, 0x46, 0x69, 0x6C,  0x6C, 0x2C, 0x36, 0x62,
-  0x65, 0x67, 0x69, 0x6E,  0x47, 0x72, 0x61, 0x64,  0x69, 0x65, 0x6E, 0x74,  0x46, 0x69, 0x6C, 0x6C,
-  0x2C, 0x36, 0x6D, 0x6F,  0x76, 0x65, 0x54, 0x6F,  0x2C, 0x36, 0x6C, 0x69,  0x6E, 0x65, 0x54, 0x6F,
-  0x2C, 0x36, 0x63, 0x75,  0x72, 0x76, 0x65, 0x54,  0x6F, 0x2C, 0x36, 0x6C,  0x69, 0x6E, 0x65, 0x53,
-  0x74, 0x79, 0x6C, 0x65,  0x2C, 0x36, 0x65, 0x6E,  0x64, 0x46, 0x69, 0x6C,  0x6C, 0x2C, 0x36, 0x63,
-  0x6C, 0x65, 0x61, 0x72,  0x00, 0x54, 0x65, 0x78,  0x74, 0x46, 0x69, 0x65,  0x6C, 0x64, 0x00, 0x67,
-  0x65, 0x74, 0x46, 0x6F,  0x6E, 0x74, 0x4C, 0x69,  0x73, 0x74, 0x00, 0x67,  0x65, 0x74, 0x54, 0x65,
-  0x78, 0x74, 0x46, 0x6F,  0x72, 0x6D, 0x61, 0x74,  0x00, 0x73, 0x65, 0x74,  0x54, 0x65, 0x78, 0x74,
-  0x46, 0x6F, 0x72, 0x6D,  0x61, 0x74, 0x00, 0x72,  0x65, 0x6D, 0x6F, 0x76,  0x65, 0x54, 0x65, 0x78,
-  0x74, 0x46, 0x69, 0x65,  0x6C, 0x64, 0x00, 0x67,  0x65, 0x74, 0x4E, 0x65,  0x77, 0x54, 0x65, 0x78,
-  0x74, 0x46, 0x6F, 0x72,  0x6D, 0x61, 0x74, 0x00,  0x73, 0x65, 0x74, 0x4E,  0x65, 0x77, 0x54, 0x65,
-  0x78, 0x74, 0x46, 0x6F,  0x72, 0x6D, 0x61, 0x74,  0x00, 0x72, 0x65, 0x70,  0x6C, 0x61, 0x63, 0x65,
-  0x54, 0x65, 0x78, 0x74,  0x00, 0x54, 0x65, 0x78,  0x74, 0x46, 0x6F, 0x72,  0x6D, 0x61, 0x74, 0x00,
-  0x53, 0x74, 0x79, 0x6C,  0x65, 0x53, 0x68, 0x65,  0x65, 0x74, 0x00, 0x5F,  0x63, 0x6F, 0x70, 0x79,
-  0x00, 0x6F, 0x62, 0x6A,  0x65, 0x63, 0x74, 0x00,  0x6F, 0x5F, 0x6E, 0x65,  0x77, 0x00, 0x70, 0x72,
-  0x6F, 0x70, 0x00, 0x63,  0x6C, 0x65, 0x61, 0x72,  0x00, 0x5F, 0x63, 0x73,  0x73, 0x00, 0x5F, 0x73,
-  0x74, 0x79, 0x6C, 0x65,  0x73, 0x00, 0x75, 0x70,  0x64, 0x61, 0x74, 0x65,  0x00, 0x67, 0x65, 0x74,
-  0x53, 0x74, 0x79, 0x6C,  0x65, 0x00, 0x6E, 0x61,  0x6D, 0x65, 0x00, 0x73,  0x65, 0x74, 0x53, 0x74,
-  0x79, 0x6C, 0x65, 0x00,  0x73, 0x74, 0x79, 0x6C,  0x65, 0x00, 0x64, 0x6F,  0x54, 0x72, 0x61, 0x6E,
-  0x73, 0x66, 0x6F, 0x72,  0x6D, 0x00, 0x67, 0x65,  0x74, 0x53, 0x74, 0x79,  0x6C, 0x65, 0x4E, 0x61,
-  0x6D, 0x65, 0x73, 0x00,  0x74, 0x6D, 0x70, 0x00,  0x6E, 0x61, 0x6D, 0x65,  0x73, 0x00, 0x74, 0x72,
-  0x61, 0x6E, 0x73, 0x66,  0x6F, 0x72, 0x6D, 0x00,  0x66, 0x6F, 0x72, 0x6D,  0x61, 0x74, 0x00, 0x74,
-  0x65, 0x78, 0x74, 0x41,  0x6C, 0x69, 0x67, 0x6E,  0x00, 0x61, 0x6C, 0x69,  0x67, 0x6E, 0x00, 0x66,
-  0x6F, 0x6E, 0x74, 0x57,  0x65, 0x69, 0x67, 0x68,  0x74, 0x00, 0x62, 0x6F,  0x6C, 0x64, 0x00, 0x6E,
-  0x6F, 0x72, 0x6D, 0x61,  0x6C, 0x00, 0x63, 0x6F,  0x6C, 0x6F, 0x72, 0x00,  0x70, 0x61, 0x72, 0x73,
-  0x65, 0x43, 0x6F, 0x6C,  0x6F, 0x72, 0x00, 0x64,  0x69, 0x73, 0x70, 0x6C,  0x61, 0x79, 0x00, 0x66,
-  0x6F, 0x6E, 0x74, 0x46,  0x61, 0x6D, 0x69, 0x6C,  0x79, 0x00, 0x66, 0x6F,  0x6E, 0x74, 0x00, 0x70,
-  0x61, 0x72, 0x73, 0x65,  0x43, 0x53, 0x53, 0x46,  0x6F, 0x6E, 0x74, 0x46,  0x61, 0x6D, 0x69, 0x6C,
-  0x79, 0x00, 0x74, 0x65,  0x78, 0x74, 0x49, 0x6E,  0x64, 0x65, 0x6E, 0x74,  0x00, 0x69, 0x6E, 0x64,
-  0x65, 0x6E, 0x74, 0x00,  0x70, 0x61, 0x72, 0x73,  0x65, 0x49, 0x6E, 0x74,  0x00, 0x66, 0x6F, 0x6E,
-  0x74, 0x53, 0x74, 0x79,  0x6C, 0x65, 0x00, 0x69,  0x74, 0x61, 0x6C, 0x69,  0x63, 0x00, 0x6B, 0x65,
-  0x72, 0x6E, 0x69, 0x6E,  0x67, 0x00, 0x74, 0x72,  0x75, 0x65, 0x00, 0x66,  0x61, 0x6C, 0x73, 0x65,
-  0x00, 0x6C, 0x65, 0x61,  0x64, 0x69, 0x6E, 0x67,  0x00, 0x6D, 0x61, 0x72,  0x67, 0x69, 0x6E, 0x4C,
-  0x65, 0x66, 0x74, 0x00,  0x6C, 0x65, 0x66, 0x74,  0x4D, 0x61, 0x72, 0x67,  0x69, 0x6E, 0x00, 0x6C,
-  0x65, 0x74, 0x74, 0x65,  0x72, 0x53, 0x70, 0x61,  0x63, 0x69, 0x6E, 0x67,  0x00, 0x6D, 0x61, 0x72,
-  0x67, 0x69, 0x6E, 0x52,  0x69, 0x67, 0x68, 0x74,  0x00, 0x72, 0x69, 0x67,  0x68, 0x74, 0x4D, 0x61,
-  0x72, 0x67, 0x69, 0x6E,  0x00, 0x66, 0x6F, 0x6E,  0x74, 0x53, 0x69, 0x7A,  0x65, 0x00, 0x73, 0x69,
-  0x7A, 0x65, 0x00, 0x74,  0x65, 0x78, 0x74, 0x44,  0x65, 0x63, 0x6F, 0x72,  0x61, 0x74, 0x69, 0x6F,
-  0x6E, 0x00, 0x75, 0x6E,  0x64, 0x65, 0x72, 0x6C,  0x69, 0x6E, 0x65, 0x00,  0x6E, 0x6F, 0x6E, 0x65,
-  0x00, 0x70, 0x61, 0x72,  0x73, 0x65, 0x43, 0x53,  0x53, 0x00, 0x63, 0x73,  0x73, 0x00, 0x70, 0x61,
-  0x72, 0x73, 0x65, 0x43,  0x53, 0x53, 0x49, 0x6E,  0x74, 0x65, 0x72, 0x6E,  0x61, 0x6C, 0x00, 0x72,
-  0x65, 0x73, 0x75, 0x6C,  0x74, 0x00, 0x6E, 0x75,  0x6C, 0x6C, 0x00, 0x70,  0x61, 0x72, 0x73, 0x65,
-  0x00, 0x37, 0x75, 0x70,  0x64, 0x61, 0x74, 0x65,  0x2C, 0x37, 0x70, 0x61,  0x72, 0x73, 0x65, 0x43,
-  0x53, 0x53, 0x49, 0x6E,  0x74, 0x65, 0x72, 0x6E,  0x61, 0x6C, 0x2C, 0x37,  0x70, 0x61, 0x72, 0x73,
-  0x65, 0x43, 0x53, 0x53,  0x46, 0x6F, 0x6E, 0x74,  0x46, 0x61, 0x6D, 0x69,  0x6C, 0x79, 0x2C, 0x37,
-  0x70, 0x61, 0x72, 0x73,  0x65, 0x43, 0x6F, 0x6C,  0x6F, 0x72, 0x00, 0x73,  0x65, 0x74, 0x49, 0x6E,
-  0x74, 0x65, 0x72, 0x76,  0x61, 0x6C, 0x00, 0x63,  0x6C, 0x65, 0x61, 0x72,  0x49, 0x6E, 0x74, 0x65,
-  0x72, 0x76, 0x61, 0x6C,  0x00, 0x73, 0x65, 0x74,  0x54, 0x69, 0x6D, 0x65,  0x6F, 0x75, 0x74, 0x00,
-  0x63, 0x6C, 0x65, 0x61,  0x72, 0x54, 0x69, 0x6D,  0x65, 0x6F, 0x75, 0x74,  0x00, 0x9B, 0x12, 0x00,
-  0x41, 0x73, 0x42, 0x72,  0x6F, 0x61, 0x64, 0x63,  0x61, 0x73, 0x74, 0x65,  0x72, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x9B, 0x0D,  0x00, 0x4C, 0x6F, 0x61,  0x64, 0x56, 0x61, 0x72,  0x73, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x96, 0x13,  0x00, 0x08, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x04, 0x00, 0x00,
-  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x1D, 0x96, 0x13,  0x00, 0x08, 0x02, 0x07,
-  0x01, 0x00, 0x00, 0x00,  0x07, 0x04, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,
-  0x3D, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x03, 0x1C,  0x96, 0x13, 0x00, 0x08,  0x04, 0x07, 0x08, 0x00,
-  0x00, 0x00, 0x07, 0x65,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
-  0x96, 0x08, 0x00, 0x07,  0x07, 0x00, 0x00, 0x00,  0x02, 0x08, 0x03, 0x1C,  0x96, 0x07, 0x00, 0x07,
-  0x03, 0x00, 0x00, 0x00,  0x08, 0x05, 0x3D, 0x17,  0x96, 0x02, 0x00, 0x08,  0x06, 0x1C, 0x96, 0x13,
-  0x00, 0x08, 0x07, 0x07,  0x0C, 0x00, 0x00, 0x00,  0x07, 0x65, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,
-  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x06, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x08, 0x9B, 0x07, 0x00,  0x00, 0x01, 0x00, 0x78,  0x00, 0x3C, 0x00, 0x96,  0x02, 0x00, 0x08, 0x0A,
-  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x09, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x0B, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
-  0x00, 0x08, 0x09, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0C, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x52,
-  0x17, 0x96, 0x02, 0x00,  0x05, 0x01, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x06, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x0B, 0x9B,  0x07, 0x00, 0x00, 0x01,  0x00, 0x78, 0x00, 0x8F,  0x00, 0x96, 0x04, 0x00,
-  0x08, 0x0E, 0x08, 0x09,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x4E, 0x3C,  0x96, 0x02, 0x00, 0x08,
-  0x0F, 0x41, 0x96, 0x07,  0x00, 0x08, 0x0F, 0x07,  0x00, 0x00, 0x00, 0x00,  0x3C, 0x99, 0x02, 0x00,
-  0x09, 0x00, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x4C,  0x1C, 0x50, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x0F,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x10,  0x4E, 0x48, 0x12, 0x9D,
-  0x02, 0x00, 0x42, 0x00,  0x96, 0x02, 0x00, 0x08,  0x0E, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x1C,
-  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x49,  0x12, 0x9D, 0x02, 0x00,  0x23, 0x00, 0x96, 0x07,
-  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x02, 0x00, 0x00,
-  0x00, 0x08, 0x0E, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x11, 0x52, 0x17, 0x96,  0x02, 0x00, 0x05, 0x01,
-  0x3E, 0x99, 0x02, 0x00,  0x9C, 0xFF, 0x96, 0x02,  0x00, 0x05, 0x00, 0x3E,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x06, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x12,  0x9B, 0x07, 0x00, 0x00,  0x01, 0x00, 0x6F, 0x00,
-  0x73, 0x00, 0x96, 0x02,  0x00, 0x08, 0x13, 0x1C,  0x96, 0x13, 0x00, 0x08,  0x07, 0x07, 0x0C, 0x00,
-  0x00, 0x00, 0x07, 0x65,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x13, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x08, 0x08,  0x06, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x08, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x13, 0x1C, 0x96,  0x04, 0x00, 0x08, 0x0B,
-  0x08, 0x06, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x13, 0x1C,
-  0x96, 0x07, 0x00, 0x08,  0x0C, 0x07, 0x00, 0x00,  0x00, 0x00, 0x42, 0x4F,  0x96, 0x09, 0x00, 0x07,
-  0x83, 0x00, 0x00, 0x00,  0x08, 0x14, 0x08, 0x13,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,
-  0x00, 0x08, 0x05, 0x3D,  0x17, 0x4F, 0x96, 0x08,  0x00, 0x07, 0x83, 0x00,  0x00, 0x00, 0x02, 0x08,
-  0x06, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x05,  0x3D, 0x17, 0x96, 0x8C,
-  0x00, 0x08, 0x15, 0x08,  0x16, 0x07, 0x12, 0x00,  0x00, 0x00, 0x08, 0x17,  0x07, 0x08, 0x00, 0x00,
-  0x00, 0x08, 0x18, 0x07,  0x14, 0x00, 0x00, 0x00,  0x08, 0x19, 0x07, 0x11,  0x00, 0x00, 0x00, 0x08,
-  0x1A, 0x07, 0x2E, 0x00,  0x00, 0x00, 0x08, 0x1B,  0x07, 0x28, 0x00, 0x00,  0x00, 0x08, 0x1C, 0x07,
-  0x23, 0x00, 0x00, 0x00,  0x08, 0x1D, 0x07, 0x0D,  0x00, 0x00, 0x00, 0x08,  0x1E, 0x07, 0x1B, 0x00,
-  0x00, 0x00, 0x08, 0x1F,  0x07, 0x24, 0x00, 0x00,  0x00, 0x08, 0x20, 0x07,  0x2D, 0x00, 0x00, 0x00,
-  0x08, 0x21, 0x07, 0x25,  0x00, 0x00, 0x00, 0x08,  0x22, 0x07, 0x22, 0x00,  0x00, 0x00, 0x08, 0x23,
-  0x07, 0x21, 0x00, 0x00,  0x00, 0x08, 0x24, 0x07,  0x27, 0x00, 0x00, 0x00,  0x08, 0x25, 0x07, 0x10,
-  0x00, 0x00, 0x00, 0x08,  0x26, 0x07, 0x20, 0x00,  0x00, 0x00, 0x08, 0x27,  0x07, 0x09, 0x00, 0x00,
-  0x00, 0x08, 0x28, 0x07,  0x26, 0x00, 0x00, 0x00,  0x07, 0x13, 0x00, 0x00,  0x00, 0x43, 0x1D, 0x96,
-  0x09, 0x00, 0x08, 0x29,  0x07, 0x20, 0x03, 0x00,  0x00, 0x08, 0x15, 0x1C,  0x96, 0x07, 0x00, 0x07,
-  0x03, 0x00, 0x00, 0x00,  0x08, 0x00, 0x3D, 0x17,  0x96, 0x02, 0x00, 0x08,  0x15, 0x1C, 0x96, 0x07,
-  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x06,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x12, 0x52, 0x17,
-  0x96, 0x08, 0x00, 0x07,  0x07, 0x00, 0x00, 0x00,  0x02, 0x08, 0x15, 0x1C,  0x96, 0x07, 0x00, 0x07,
-  0x03, 0x00, 0x00, 0x00,  0x08, 0x05, 0x3D, 0x17,  0x96, 0x07, 0x00, 0x08,  0x2A, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x43, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x2A, 0x1C, 0x96, 0x13,  0x00, 0x08, 0x2B, 0x07,
-  0x00, 0x00, 0x00, 0x00,  0x07, 0x05, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,
-  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x2A, 0x1C,  0x96, 0x13, 0x00, 0x08,  0x2C, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x07, 0x05,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x2A, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x06,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x12, 0x52, 0x17,  0x96, 0x08, 0x00, 0x07,  0x07, 0x00, 0x00, 0x00,
-  0x02, 0x08, 0x2A, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x05, 0x3D, 0x17,
-  0x96, 0x07, 0x00, 0x08,  0x2D, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x1D,  0x96, 0x02, 0x00, 0x08,
-  0x2D, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x06,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x12, 0x52, 0x17,  0x96, 0x0E, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x2E, 0x07, 0x9A,
-  0x02, 0x00, 0x00, 0x08,  0x2D, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x02,
-  0x3D, 0x17, 0x96, 0x02,  0x00, 0x08, 0x2F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x04,
-  0x00, 0x08, 0x31, 0x08,  0x32, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x2F, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x30, 0x4E, 0x96, 0x13,  0x00, 0x08, 0x33, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x2D, 0x01, 0x00,
-  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x2F, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x13,  0x00, 0x08, 0x34, 0x07,  0x03, 0x00, 0x00, 0x00,
-  0x07, 0x2D, 0x01, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x2F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x35, 0x9B,
-  0x05, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x2F, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x30, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x36, 0x9B, 0x09, 0x00,  0x00, 0x01, 0x00, 0x73,
-  0x72, 0x63, 0x00, 0x64,  0x00, 0x96, 0x02, 0x00,  0x08, 0x09, 0x1C, 0x96,  0x04, 0x00, 0x08, 0x37,
-  0x05, 0x01, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x38,  0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x12, 0x9D,
-  0x02, 0x00, 0x19, 0x00,  0x96, 0x09, 0x00, 0x05,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x09,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x35, 0x52, 0x17,  0x99, 0x02, 0x00, 0x2C,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x38, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x09, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x34, 0x52,  0x17, 0x96, 0x09, 0x00,  0x05, 0x01, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,
-  0x09, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x35, 0x52,  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x2F, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x39, 0x9B,  0x05, 0x00, 0x00, 0x00,
-  0x00, 0xB3, 0x00, 0x96,  0x03, 0x00, 0x08, 0x3A,  0x02, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x09, 0x46,
-  0x87, 0x01, 0x00, 0x00,  0x96, 0x01, 0x00, 0x02,  0x49, 0x9D, 0x02, 0x00,  0x91, 0x00, 0x96, 0x04,
-  0x00, 0x08, 0x0A, 0x04,  0x00, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x3A, 0x1C,  0x96, 0x01, 0x00, 0x02,
-  0x49, 0x9D, 0x02, 0x00,  0x41, 0x00, 0x96, 0x02,  0x00, 0x08, 0x3A, 0x4C,  0x1C, 0x96, 0x04, 0x00,
-  0x08, 0x3D, 0x08, 0x0A,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x3B, 0x3D,
-  0x47, 0x96, 0x02, 0x00,  0x08, 0x3C, 0x47, 0x96,  0x02, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x0A, 0x1C, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x3B, 0x3D, 0x47,
-  0x47, 0x1D, 0x99, 0x02,  0x00, 0x33, 0x00, 0x96,  0x04, 0x00, 0x08, 0x3A,  0x08, 0x0A, 0x1C, 0x96,
-  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x3B, 0x3D, 0x96, 0x02,  0x00, 0x08, 0x3C, 0x47,
-  0x96, 0x02, 0x00, 0x08,  0x09, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x4E, 0x96, 0x07, 0x00,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x3B, 0x3D,  0x47, 0x1D, 0x99, 0x02,  0x00, 0x61, 0xFF, 0x96,
-  0x02, 0x00, 0x08, 0x3A,  0x1C, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x2F,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x30, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x3E,  0x9B, 0x05, 0x00, 0x00,  0x00, 0x00, 0x0D, 0x00,
-  0x96, 0x02, 0x00, 0x08,  0x09, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x3F, 0x4E,  0x3E, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x2F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x40, 0x9B,
-  0x05, 0x00, 0x00, 0x00,  0x00, 0x0D, 0x00, 0x96,  0x02, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x41, 0x4E, 0x3E,  0x4F, 0x96, 0x08, 0x00,  0x07, 0x83, 0x00, 0x00,  0x00, 0x02, 0x08, 0x2F,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
-  0x05, 0x3D, 0x17, 0x96,  0x13, 0x00, 0x08, 0x42,  0x07, 0x10, 0x00, 0x00,  0x00, 0x07, 0xF4, 0x01,
-  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x43, 0x3D, 0x1D, 0x96,  0x0E, 0x00, 0x07, 0x06,
-  0x00, 0x00, 0x00, 0x08,  0x44, 0x07, 0xF4, 0x01,  0x00, 0x00, 0x08, 0x42,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x30, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,
-  0x13, 0x00, 0x08, 0x45,  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,
-  0x00, 0x00, 0x00, 0x08,  0x43, 0x3D, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x45,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x30, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x46,  0x07, 0x01, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,
-  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x45,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x47,  0x07, 0x02, 0x00, 0x00,
-  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x45,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x48,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
-  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x45,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,
-  0x13, 0x00, 0x08, 0x49,  0x07, 0x04, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,
-  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x45,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x30, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4A,  0x07, 0x05, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,
-  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x45,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x39,  0x07, 0x06, 0x00, 0x00,
-  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x45,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4B,
-  0x07, 0x07, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
-  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x45,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,
-  0x13, 0x00, 0x08, 0x4C,  0x07, 0x08, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,
-  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x13, 0x00, 0x08, 0x4D,  0x07, 0x09, 0x00, 0x00,
-  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x43, 0x3D, 0x1D, 0x96,
-  0x02, 0x00, 0x08, 0x4D,  0x1C, 0x96, 0x10, 0x00,  0x08, 0x30, 0x08, 0x4E,  0x07, 0x01, 0x00, 0x00,
-  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x45,  0x40, 0x4F, 0x96, 0x09,  0x00, 0x07, 0x03, 0x00,
-  0x00, 0x00, 0x08, 0x30,  0x08, 0x4D, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
-  0x05, 0x3D, 0x17, 0x96,  0x02, 0x00, 0x08, 0x4D,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,
-  0x13, 0x00, 0x08, 0x33,  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,  0x00, 0x00, 0x07, 0x02,
-  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x4D,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x30, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x4F,  0x07, 0x0A, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,
-  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x4D,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x50,  0x07, 0x0B, 0x00, 0x00,
-  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x4D,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x51,
-  0x07, 0x0C, 0x00, 0x00,  0x00, 0x07, 0xFD, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
-  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x4D,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x35,  0x9B, 0x05, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x4D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x30,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x36, 0x9B, 0x09,
-  0x00, 0x00, 0x01, 0x00,  0x73, 0x72, 0x63, 0x00,  0x72, 0x00, 0x96, 0x02,  0x00, 0x08, 0x38, 0x1C,
-  0x96, 0x01, 0x00, 0x02,  0x49, 0x12, 0x9D, 0x02,  0x00, 0x27, 0x00, 0x96,  0x02, 0x00, 0x08, 0x09,
-  0x1C, 0x96, 0x04, 0x00,  0x08, 0x37, 0x05, 0x00,  0x4F, 0x96, 0x09, 0x00,  0x05, 0x00, 0x07, 0x01,
-  0x00, 0x00, 0x00, 0x08,  0x09, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x35, 0x52,  0x17, 0x99, 0x02, 0x00,
-  0x3A, 0x00, 0x96, 0x02,  0x00, 0x08, 0x09, 0x1C,  0x96, 0x04, 0x00, 0x08,  0x37, 0x05, 0x01, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x38, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x09,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x51, 0x52, 0x17,  0x96, 0x09, 0x00, 0x05,  0x01, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x35, 0x52, 0x17,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x4D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x30,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x3E, 0x9B, 0x05,
-  0x00, 0x00, 0x00, 0x00,  0x0D, 0x00, 0x96, 0x02,  0x00, 0x08, 0x09, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x3F, 0x4E, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x4D, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x40, 0x9B, 0x05, 0x00,  0x00, 0x00, 0x00, 0x0D,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x09, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x41,  0x4E, 0x3E, 0x4F, 0x96,  0x07, 0x00, 0x08, 0x52,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x52,  0x1C, 0x96, 0x07, 0x00,
-  0x08, 0x53, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x52, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x53,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x54, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,
-  0x0B, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x07, 0x00,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x52, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x53, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x54, 0x52,  0x17, 0x96, 0x02, 0x00,  0x08, 0x52, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x53,
-  0x4E, 0x96, 0x02, 0x00,  0x08, 0x54, 0x3A, 0x17,  0x96, 0x02, 0x00, 0x08,  0x55, 0x9B, 0x0C, 0x00,
-  0x00, 0x01, 0x00, 0x74,  0x61, 0x72, 0x67, 0x65,  0x74, 0x00, 0x27, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x09, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x56, 0x08,  0x56, 0x1C, 0x4F, 0x96,  0x08, 0x00, 0x07, 0x07,
-  0x00, 0x00, 0x00, 0x02,  0x08, 0x09, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
-  0x05, 0x3D, 0x17, 0x1D,  0x96, 0x09, 0x00, 0x08,  0x57, 0x07, 0xBC, 0x02,  0x00, 0x00, 0x08, 0x55,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
-  0x00, 0x3D, 0x17, 0x96,  0x08, 0x00, 0x07, 0x07,  0x00, 0x00, 0x00, 0x02,  0x08, 0x55, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x30,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x05, 0x3D,
-  0x17, 0x96, 0x02, 0x00,  0x08, 0x58, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x30,  0x4E, 0x96, 0x02, 0x00,
-  0x08, 0x59, 0x9B, 0x0C,  0x00, 0x00, 0x01, 0x00,  0x6D, 0x65, 0x74, 0x68,  0x6F, 0x64, 0x00, 0x5B,
-  0x00, 0x96, 0x09, 0x00,  0x08, 0x5C, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,  0x5A, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x5B, 0x52,  0x3C, 0x96, 0x02, 0x00,  0x08, 0x5C, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x5D,
-  0x49, 0x9D, 0x02, 0x00,  0x2D, 0x00, 0x96, 0x02,  0x00, 0x08, 0x5C, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x5E, 0x49, 0x9D, 0x02,  0x00, 0x0E, 0x00, 0x96,  0x05, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x3E,
-  0x99, 0x02, 0x00, 0x09,  0x00, 0x96, 0x05, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x3E, 0x99, 0x02,
-  0x00, 0x09, 0x00, 0x96,  0x05, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x3E,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x58, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x30,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x5F, 0x9B, 0x17,
-  0x00, 0x00, 0x03, 0x00,  0x75, 0x72, 0x6C, 0x00,  0x74, 0x61, 0x72, 0x67,  0x65, 0x74, 0x00, 0x6D,
-  0x65, 0x74, 0x68, 0x6F,  0x64, 0x00, 0x97, 0x00,  0x96, 0x02, 0x00, 0x08,  0x56, 0x1C, 0x44, 0x96,
-  0x02, 0x00, 0x08, 0x60,  0x49, 0x12, 0x9D, 0x02,  0x00, 0x08, 0x00, 0x96,  0x04, 0x00, 0x08, 0x56,
-  0x08, 0x4E, 0x1D, 0x96,  0x04, 0x00, 0x08, 0x61,  0x08, 0x5A, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,
-  0x00, 0x00, 0x00, 0x08,  0x09, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x59, 0x52,  0x3C, 0x96, 0x02, 0x00,
-  0x08, 0x61, 0x1C, 0x96,  0x05, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x49,  0x9D, 0x02, 0x00, 0x3E,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0x61, 0x1C, 0x96,  0x05, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x49,
-  0x9D, 0x02, 0x00, 0x15,  0x00, 0x96, 0x02, 0x00,  0x08, 0x62, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x56,
-  0x1C, 0x9A, 0x01, 0x00,  0x02, 0x99, 0x02, 0x00,  0x10, 0x00, 0x96, 0x02,  0x00, 0x08, 0x62, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x56, 0x1C, 0x9A, 0x01,  0x00, 0x01, 0x99, 0x02,  0x00, 0x10, 0x00, 0x96,
-  0x02, 0x00, 0x08, 0x62,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x56, 0x1C, 0x9A,  0x01, 0x00, 0x00, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x63, 0x9B, 0x10, 0x00,  0x00, 0x02, 0x00, 0x75,  0x72, 0x6C, 0x00, 0x6D,  0x65, 0x74, 0x68, 0x6F,
-  0x64, 0x00, 0x99, 0x00,  0x96, 0x04, 0x00, 0x08,  0x61, 0x08, 0x5A, 0x1C,  0x96, 0x07, 0x00, 0x07,
-  0x01, 0x00, 0x00, 0x00,  0x08, 0x09, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x59,  0x52, 0x3C, 0x96, 0x02,
-  0x00, 0x08, 0x09, 0x1C,  0x20, 0x96, 0x02, 0x00,  0x08, 0x61, 0x1C, 0x96,  0x05, 0x00, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x49,  0x9D, 0x02, 0x00, 0x4A,  0x00, 0x96, 0x02, 0x00,  0x08, 0x61, 0x1C, 0x96,
-  0x05, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x49,  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x62, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x64, 0x4E, 0x9A,
-  0x01, 0x00, 0xC2, 0x99,  0x02, 0x00, 0x16, 0x00,  0x96, 0x02, 0x00, 0x08,  0x62, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x09, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x64, 0x4E, 0x9A, 0x01,  0x00, 0xC1, 0x99, 0x02,
-  0x00, 0x16, 0x00, 0x96,  0x02, 0x00, 0x08, 0x62,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x09, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x64,  0x4E, 0x9A, 0x01, 0x00,  0xC0, 0x8B, 0x01, 0x00,  0x00, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x58, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x65, 0x9B,
-  0x10, 0x00, 0x00, 0x02,  0x00, 0x75, 0x72, 0x6C,  0x00, 0x6D, 0x65, 0x74,  0x68, 0x6F, 0x64, 0x00,
-  0x99, 0x00, 0x96, 0x04,  0x00, 0x08, 0x61, 0x08,  0x5A, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x59, 0x52, 0x3C,  0x96, 0x02, 0x00, 0x08,
-  0x09, 0x1C, 0x20, 0x96,  0x02, 0x00, 0x08, 0x61,  0x1C, 0x96, 0x05, 0x00,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x49, 0x9D, 0x02,  0x00, 0x4A, 0x00, 0x96,  0x02, 0x00, 0x08, 0x61,  0x1C, 0x96, 0x05, 0x00,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x49, 0x9D, 0x02,  0x00, 0x1B, 0x00, 0x96,  0x02, 0x00, 0x08, 0x62,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x09, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x64,  0x4E, 0x9A, 0x01, 0x00,
-  0x42, 0x99, 0x02, 0x00,  0x16, 0x00, 0x96, 0x02,  0x00, 0x08, 0x62, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x09, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x64, 0x4E,  0x9A, 0x01, 0x00, 0x41,  0x99, 0x02, 0x00, 0x16,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0x62, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x64, 0x4E, 0x9A,  0x01, 0x00, 0x40, 0x8B,  0x01, 0x00, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x66, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,
-  0x67, 0x07, 0x01, 0x00,  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
-  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,
-  0x96, 0x13, 0x00, 0x08,  0x68, 0x07, 0x04, 0x00,  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,
-  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x69, 0x07, 0x05, 0x00,  0x00, 0x00, 0x07, 0x84,
-  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x40, 0x07, 0x06, 0x00,
-  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,
-  0x3E, 0x07, 0x07, 0x00,  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
-  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,
-  0x96, 0x13, 0x00, 0x08,  0x6A, 0x07, 0x0A, 0x00,  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,
-  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x6B, 0x07, 0x0C, 0x00,  0x00, 0x00, 0x07, 0x84,
-  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x6C, 0x07, 0x0D, 0x00,
-  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,
-  0x6D, 0x07, 0x0E, 0x00,  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
-  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,
-  0x96, 0x13, 0x00, 0x08,  0x6E, 0x07, 0x0F, 0x00,  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,
-  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x6F, 0x07, 0x10, 0x00,  0x00, 0x00, 0x07, 0x84,
-  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x70, 0x07, 0x11, 0x00,
-  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,
-  0x71, 0x07, 0x12, 0x00,  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
-  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,
-  0x96, 0x13, 0x00, 0x08,  0x72, 0x07, 0x13, 0x00,  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,
-  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x73, 0x07, 0x14, 0x00,  0x00, 0x00, 0x07, 0x84,
-  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x74, 0x07, 0x15, 0x00,
-  0x00, 0x00, 0x07, 0x84,  0x03, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x58, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,
-  0x75, 0x07, 0xC8, 0x00,  0x00, 0x00, 0x07, 0x68,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
-  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x09, 0x00, 0x07,  0x80, 0x00, 0x00, 0x00,  0x08, 0x6A, 0x08, 0x58,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
-  0x05, 0x3D, 0x17, 0x96,  0x09, 0x00, 0x08, 0x76,  0x07, 0x85, 0x03, 0x00,  0x00, 0x08, 0x58, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x00,
-  0x3D, 0x17, 0x96, 0x08,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x02, 0x08,  0x58, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x30, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x05, 0x3D, 0x17,
-  0x96, 0x13, 0x00, 0x08,  0x77, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x68,  0x00, 0x00, 0x00, 0x07,
-  0x02, 0x00, 0x00, 0x00,  0x08, 0x43, 0x3D, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x77, 0x1C, 0x96, 0x13,
-  0x00, 0x08, 0x78, 0x07,  0xC9, 0x00, 0x00, 0x00,  0x07, 0x68, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,
-  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x77, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x30, 0x4E, 0x96, 0x13,  0x00, 0x08, 0x79, 0x07,  0x65, 0x00, 0x00, 0x00,  0x07, 0x68, 0x00, 0x00,
-  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x77, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x13,  0x00, 0x08, 0x7A, 0x07,  0x66, 0x00, 0x00, 0x00,
-  0x07, 0x68, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x77, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x13,  0x00, 0x08, 0x7B, 0x07,
-  0x67, 0x00, 0x00, 0x00,  0x07, 0x68, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,
-  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x77, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x13,
-  0x00, 0x08, 0x7C, 0x07,  0x68, 0x00, 0x00, 0x00,  0x07, 0x68, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,
-  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x77, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x30, 0x4E, 0x96, 0x13,  0x00, 0x08, 0x7D, 0x07,  0x69, 0x00, 0x00, 0x00,  0x07, 0x68, 0x00, 0x00,
-  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x77, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x13,  0x00, 0x08, 0x6A, 0x07,  0x6A, 0x00, 0x00, 0x00,
-  0x07, 0x68, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x77, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x13,  0x00, 0x08, 0x7E, 0x07,
-  0x6B, 0x00, 0x00, 0x00,  0x07, 0x68, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,
-  0x3D, 0x4F, 0x96, 0x09,  0x00, 0x07, 0x00, 0x04,  0x00, 0x00, 0x08, 0x7E,  0x08, 0x77, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x30,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x05, 0x3D,
-  0x17, 0x96, 0x02, 0x00,  0x08, 0x77, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x30,  0x4E, 0x96, 0x07, 0x00,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x06, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x12, 0x52, 0x17, 0x96,
-  0x08, 0x00, 0x07, 0x83,  0x00, 0x00, 0x00, 0x02,  0x08, 0x77, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x30,
-  0x4E, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x05, 0x3D,  0x17, 0x96, 0x08, 0x00,
-  0x07, 0x83, 0x00, 0x00,  0x00, 0x02, 0x08, 0x77,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,
-  0x00, 0x08, 0x05, 0x3D,  0x17, 0x96, 0x13, 0x00,  0x08, 0x7F, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,
-  0x6E, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x43, 0x3D,  0x1D, 0x96, 0x02, 0x00,
-  0x08, 0x77, 0x1C, 0x96,  0x13, 0x00, 0x08, 0x80,  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0x71, 0x00,
-  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x43, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x77,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x80, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x30,  0x4E, 0x96, 0x02, 0x00,
-  0x08, 0x81, 0x9B, 0x07,  0x00, 0x00, 0x01, 0x00,  0x6F, 0x00, 0x67, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x13, 0x1C, 0x44, 0x96,  0x02, 0x00, 0x08, 0x82,  0x49, 0x12, 0x12, 0x9D,  0x02, 0x00, 0x05, 0x00,
-  0x96, 0x01, 0x00, 0x02,  0x3E, 0x96, 0x07, 0x00,  0x08, 0x83, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
-  0x3C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x46, 0x87,  0x01, 0x00, 0x00, 0x96,  0x01, 0x00, 0x02, 0x49,
-  0x9D, 0x02, 0x00, 0x27,  0x00, 0x96, 0x04, 0x00,  0x08, 0x84, 0x04, 0x00,  0x3C, 0x96, 0x02, 0x00,
-  0x08, 0x83, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x84,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x84,  0x1C, 0x4E, 0x4F, 0x99,  0x02, 0x00, 0xCB, 0xFF,  0x96, 0x02, 0x00, 0x08,
-  0x83, 0x1C, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x77, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x80, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x85, 0x9B,  0x05, 0x00, 0x00, 0x00,
-  0x00, 0x36, 0x00, 0x96,  0x02, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x86, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x09, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x87,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
-  0x09, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x88, 0x52,  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x77, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x80, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x30, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x89, 0x9B, 0x0A, 0x00,  0x00, 0x01, 0x00, 0x6E,  0x61, 0x6D, 0x65, 0x00,  0x25, 0x00, 0x96, 0x02,
-  0x00, 0x08, 0x09, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x86, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x8A, 0x1C,
-  0x4E, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x09, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x81, 0x52, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x77, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x80, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x8B, 0x9B,  0x10, 0x00, 0x00, 0x02,
-  0x00, 0x6E, 0x61, 0x6D,  0x65, 0x00, 0x73, 0x74,  0x79, 0x6C, 0x65, 0x00,  0x79, 0x00, 0x96, 0x02,
-  0x00, 0x08, 0x09, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x86, 0x4E, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x12,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0x09, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x86,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x86, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x8A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x8C, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,
-  0x00, 0x00, 0x00, 0x08,  0x09, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x81, 0x52,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x8A, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x09, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x8D, 0x52,  0x17, 0x96, 0x07, 0x00,  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x09, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x88, 0x52, 0x17, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x77, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x80, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x8E, 0x9B,
-  0x05, 0x00, 0x00, 0x00,  0x00, 0x5B, 0x00, 0x96,  0x04, 0x00, 0x08, 0x8F,  0x08, 0x09, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x86,  0x4E, 0x3C, 0x96, 0x07,  0x00, 0x08, 0x90, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x42, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x8F, 0x46,  0x87, 0x01, 0x00, 0x00,  0x96, 0x01, 0x00, 0x02,
-  0x49, 0x9D, 0x02, 0x00,  0x25, 0x00, 0x96, 0x04,  0x00, 0x08, 0x84, 0x04,  0x00, 0x3C, 0x96, 0x02,
-  0x00, 0x08, 0x84, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x90, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x0D,  0x52, 0x17, 0x99, 0x02,  0x00, 0xCD, 0xFF, 0x96,  0x02, 0x00, 0x08, 0x90,
-  0x1C, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x77,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x80, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x30,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x8D, 0x9B, 0x0A,  0x00, 0x00, 0x01, 0x00,
-  0x6E, 0x61, 0x6D, 0x65,  0x00, 0x5C, 0x00, 0x96,  0x02, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x87, 0x4E, 0x12,  0x12, 0x9D, 0x02, 0x00,  0x12, 0x00, 0x96, 0x02,  0x00, 0x08, 0x09, 0x1C,
-  0x96, 0x07, 0x00, 0x08,  0x87, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x09, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x87, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x8A, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x09, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x86, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x8A, 0x1C,
-  0x4E, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x09, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x91, 0x52, 0x4F, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x77, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x80, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x91, 0x9B,  0x0B, 0x00, 0x00, 0x01,
-  0x00, 0x73, 0x74, 0x79,  0x6C, 0x65, 0x00, 0x9D,  0x03, 0x96, 0x02, 0x00,  0x08, 0x8C, 0x1C, 0x96,
-  0x01, 0x00, 0x02, 0x49,  0x12, 0x9D, 0x02, 0x00,  0x05, 0x00, 0x96, 0x01,  0x00, 0x02, 0x3E, 0x96,
-  0x09, 0x00, 0x08, 0x92,  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x7F, 0x40,  0x3C, 0x96, 0x02, 0x00,
-  0x08, 0x8C, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x93,  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x15, 0x00, 0x96,
-  0x02, 0x00, 0x08, 0x92,  0x1C, 0x96, 0x04, 0x00,  0x08, 0x94, 0x08, 0x8C,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x93, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x8C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x95, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x96, 0x49, 0x9D, 0x02,  0x00, 0x2B, 0x00, 0x96,  0x02, 0x00, 0x08, 0x8C,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x95, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x97,  0x49, 0x12, 0x9D, 0x02,
-  0x00, 0x0E, 0x00, 0x96,  0x02, 0x00, 0x08, 0x92,  0x1C, 0x96, 0x04, 0x00,  0x08, 0x96, 0x05, 0x00,
-  0x4F, 0x99, 0x02, 0x00,  0x0E, 0x00, 0x96, 0x02,  0x00, 0x08, 0x92, 0x1C,  0x96, 0x04, 0x00, 0x08,
-  0x96, 0x05, 0x01, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x8C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x98, 0x4E,
-  0x12, 0x9D, 0x02, 0x00,  0x41, 0x00, 0x96, 0x04,  0x00, 0x08, 0x8F, 0x08,  0x8C, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x98, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x09, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x99,  0x52, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x8F, 0x1C,  0x96, 0x01, 0x00, 0x02,
-  0x49, 0x12, 0x12, 0x9D,  0x02, 0x00, 0x0F, 0x00,  0x96, 0x02, 0x00, 0x08,  0x92, 0x1C, 0x96, 0x04,
-  0x00, 0x08, 0x98, 0x08,  0x8F, 0x1C, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x92,  0x1C, 0x96, 0x04, 0x00,
-  0x08, 0x9A, 0x08, 0x8C,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x9A, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x8C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x9B, 0x4E,  0x12, 0x9D, 0x02, 0x00,  0x26, 0x00, 0x96, 0x02,
-  0x00, 0x08, 0x92, 0x1C,  0x96, 0x04, 0x00, 0x08,  0x9C, 0x08, 0x8C, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x9B, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x9D, 0x52, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x8C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x9E, 0x4E,
-  0x12, 0x9D, 0x02, 0x00,  0x20, 0x00, 0x96, 0x02,  0x00, 0x08, 0x92, 0x1C,  0x96, 0x04, 0x00, 0x08,
-  0x9F, 0x08, 0x8C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x9E, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
-  0x00, 0x00, 0x08, 0xA0,  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x8C, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0xA1, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xA2, 0x49,  0x9D, 0x02, 0x00, 0x2B,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x8C, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xA1,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x97, 0x49, 0x12,
-  0x9D, 0x02, 0x00, 0x0E,  0x00, 0x96, 0x02, 0x00,  0x08, 0x92, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xA2,
-  0x05, 0x00, 0x4F, 0x99,  0x02, 0x00, 0x0E, 0x00,  0x96, 0x02, 0x00, 0x08,  0x92, 0x1C, 0x96, 0x04,
-  0x00, 0x08, 0xA2, 0x05,  0x01, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x8C, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0xA3, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xA4, 0x49,  0x9D, 0x02, 0x00, 0x4F,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x8C, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xA3,  0x4E, 0x96, 0x02, 0x00,  0x08, 0xA5, 0x49, 0x9D,
-  0x02, 0x00, 0x25, 0x00,  0x96, 0x02, 0x00, 0x08,  0x92, 0x1C, 0x96, 0x04,  0x00, 0x08, 0xA3, 0x08,
-  0x8C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xA3, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
-  0x08, 0xA0, 0x3D, 0x4F,  0x99, 0x02, 0x00, 0x0E,  0x00, 0x96, 0x02, 0x00,  0x08, 0x92, 0x1C, 0x96,
-  0x04, 0x00, 0x08, 0xA3,  0x05, 0x00, 0x4F, 0x99,  0x02, 0x00, 0x0E, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x92, 0x1C, 0x96, 0x04,  0x00, 0x08, 0xA3, 0x05,  0x01, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x8C, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0xA6, 0x4E, 0x12, 0x9D,  0x02, 0x00, 0x20, 0x00,  0x96, 0x02, 0x00, 0x08,
-  0x92, 0x1C, 0x96, 0x04,  0x00, 0x08, 0xA6, 0x08,  0x8C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xA6, 0x4E,
-  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0xA0, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x8C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xA7, 0x4E,  0x12, 0x9D, 0x02, 0x00,  0x20, 0x00, 0x96, 0x02,
-  0x00, 0x08, 0x92, 0x1C,  0x96, 0x04, 0x00, 0x08,  0xA8, 0x08, 0x8C, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0xA7, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0xA0,  0x3D, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x8C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xA9, 0x4E, 0x12, 0x9D,  0x02, 0x00, 0x20, 0x00,
-  0x96, 0x02, 0x00, 0x08,  0x92, 0x1C, 0x96, 0x04,  0x00, 0x08, 0xA9, 0x08,  0x8C, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0xA9, 0x4E,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0xA0, 0x3D, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x8C, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xAA, 0x4E,  0x12, 0x9D, 0x02, 0x00,
-  0x20, 0x00, 0x96, 0x02,  0x00, 0x08, 0x92, 0x1C,  0x96, 0x04, 0x00, 0x08,  0xAB, 0x08, 0x8C, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0xAA, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0xA0,
-  0x3D, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x8C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0xAC, 0x4E, 0x12, 0x9D,
-  0x02, 0x00, 0x3B, 0x00,  0x96, 0x04, 0x00, 0x08,  0x8F, 0x08, 0x8C, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0xAC, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0xA0,  0x3D, 0x3C, 0x96, 0x07,
-  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x8F,  0x1C, 0x48, 0x12, 0x9D,  0x02, 0x00, 0x0F, 0x00,
-  0x96, 0x02, 0x00, 0x08,  0x92, 0x1C, 0x96, 0x04,  0x00, 0x08, 0xAD, 0x08,  0x8F, 0x1C, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x8C,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xAE, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xAF,
-  0x49, 0x9D, 0x02, 0x00,  0x2B, 0x00, 0x96, 0x02,  0x00, 0x08, 0x8C, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0xAE, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xB0, 0x49,  0x12, 0x9D, 0x02, 0x00,  0x0E, 0x00, 0x96, 0x02,
-  0x00, 0x08, 0x92, 0x1C,  0x96, 0x04, 0x00, 0x08,  0xAF, 0x05, 0x00, 0x4F,  0x99, 0x02, 0x00, 0x0E,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0x92, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xAF,  0x05, 0x01, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x92,  0x1C, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x77,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x80, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x30,  0x4E, 0x96, 0x02, 0x00,  0x08, 0xB1, 0x9B, 0x09,
-  0x00, 0x00, 0x01, 0x00,  0x63, 0x73, 0x73, 0x00,  0xDA, 0x00, 0x96, 0x04,  0x00, 0x08, 0xB4, 0x08,
-  0xB2, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0xB3, 0x52, 0x3C,  0x96, 0x02, 0x00, 0x08,  0xB4, 0x1C, 0x44, 0x96,  0x02, 0x00, 0x08, 0xB5,
-  0x49, 0x12, 0x9D, 0x02,  0x00, 0x06, 0x00, 0x96,  0x02, 0x00, 0x05, 0x00,  0x3E, 0x96, 0x02, 0x00,
-  0x08, 0x09, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x86,  0x4E, 0x12, 0x12, 0x9D,  0x02, 0x00, 0x12, 0x00,
-  0x96, 0x02, 0x00, 0x08,  0x09, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x86, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0xB4, 0x46,  0x87, 0x01, 0x00, 0x00,  0x96, 0x01, 0x00, 0x02,
-  0x49, 0x9D, 0x02, 0x00,  0x56, 0x00, 0x96, 0x04,  0x00, 0x08, 0x84, 0x04,  0x00, 0x3C, 0x96, 0x02,
-  0x00, 0x08, 0x09, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x86, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x84, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0xB4, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x84, 0x1C,  0x4E, 0x96, 0x07, 0x00,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x09, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x81, 0x52, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x84,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x09, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x8D, 0x52, 0x17, 0x99,  0x02, 0x00, 0x9C, 0xFF,  0x96, 0x07, 0x00, 0x07,
-  0x00, 0x00, 0x00, 0x00,  0x08, 0x09, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x88,  0x52, 0x17, 0x96, 0x02,
-  0x00, 0x05, 0x01, 0x3E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x77, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x80,
-  0x4E, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,  0x04, 0x00, 0x08, 0xB6,  0x08, 0x77, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x80,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x30, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xB1,
-  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x77, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x80, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x30, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x33, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x2D,
-  0x01, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x77, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x80, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x35, 0x9B,  0x05, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x77, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x80, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x36, 0x9B,  0x09, 0x00, 0x00, 0x01,  0x00, 0x73, 0x72, 0x63,  0x00, 0x6B, 0x00, 0x96,
-  0x02, 0x00, 0x08, 0x38,  0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x12, 0x9D,  0x02, 0x00, 0x19, 0x00,
-  0x96, 0x09, 0x00, 0x05,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x35, 0x52, 0x17,  0x99, 0x02, 0x00, 0x41,  0x00, 0x96, 0x04, 0x00,  0x08, 0xB4, 0x08, 0x38,
-  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x09, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0xB6, 0x52, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x09,  0x1C, 0x96, 0x04, 0x00,  0x08, 0x37, 0x08, 0xB4,
-  0x1C, 0x4F, 0x96, 0x02,  0x00, 0x08, 0xB4, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
-  0x08, 0x09, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x35,  0x52, 0x17, 0x4F, 0x96,  0x0E, 0x00, 0x07, 0x64,
-  0x00, 0x00, 0x00, 0x08,  0xB7, 0x07, 0x71, 0x00,  0x00, 0x00, 0x08, 0x77,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x80, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x30,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x04, 0x00, 0x00,
-  0x00, 0x08, 0x00, 0x3D,  0x17, 0x96, 0x08, 0x00,  0x07, 0x03, 0x04, 0x00,  0x00, 0x02, 0x08, 0x77,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x80, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x30,  0x4E, 0x96, 0x07, 0x00,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x05, 0x3D,  0x17, 0x96, 0x09, 0x00,  0x07, 0x03, 0x04, 0x00,
-  0x00, 0x08, 0x80, 0x08,  0x77, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x05,
-  0x3D, 0x17, 0x96, 0x13,  0x00, 0x08, 0xB8, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0xFA, 0x00, 0x00,
-  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x1D, 0x96, 0x13,  0x00, 0x08, 0xB9, 0x07,
-  0x01, 0x00, 0x00, 0x00,  0x07, 0xFA, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,
-  0x3D, 0x1D, 0x96, 0x13,  0x00, 0x08, 0xBA, 0x07,  0x02, 0x00, 0x00, 0x00,  0x07, 0xFA, 0x00, 0x00,
-  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x01,  0x3D, 0x1D, 0x96, 0x04,  0x00, 0x08, 0xBB, 0x08,
-  0xB9, 0x1C, 0x1D, 0x96,  0x03, 0x00, 0x08, 0x13,  0x02, 0x1D, 0x96, 0x0D,  0x00, 0x07, 0x06, 0x00,
-  0x00, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x02,  0x08, 0x09, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x04,
-  0x00, 0x00, 0x00, 0x08,  0x05, 0x3D, 0x17, 0x00
+  0x73, 0x00, 0x6D, 0x73,  0x67, 0x00, 0x75, 0x6E,  0x64, 0x65, 0x66, 0x69,  0x6E, 0x65, 0x64, 0x00,
+  0x74, 0x68, 0x69, 0x73,  0x00, 0x6D, 0x65, 0x73,  0x73, 0x61, 0x67, 0x65,  0x00, 0x45, 0x72, 0x72,
+  0x6F, 0x72, 0x00, 0x70,  0x72, 0x6F, 0x74, 0x6F,  0x74, 0x79, 0x70, 0x65,  0x00, 0x6E, 0x61, 0x6D,
+  0x65, 0x00, 0x74, 0x6F,  0x53, 0x74, 0x72, 0x69,  0x6E, 0x67, 0x00, 0x41,  0x73, 0x42, 0x72, 0x6F,
+  0x61, 0x64, 0x63, 0x61,  0x73, 0x74, 0x65, 0x72,  0x00, 0x62, 0x72, 0x6F,  0x61, 0x64, 0x63, 0x61,
+  0x73, 0x74, 0x4D, 0x65,  0x73, 0x73, 0x61, 0x67,  0x65, 0x00, 0x61, 0x64,  0x64, 0x4C, 0x69, 0x73,
+  0x74, 0x65, 0x6E, 0x65,  0x72, 0x00, 0x78, 0x00,  0x72, 0x65, 0x6D, 0x6F,  0x76, 0x65, 0x4C, 0x69,
+  0x73, 0x74, 0x65, 0x6E,  0x65, 0x72, 0x00, 0x5F,  0x6C, 0x69, 0x73, 0x74,  0x65, 0x6E, 0x65, 0x72,
+  0x73, 0x00, 0x70, 0x75,  0x73, 0x68, 0x00, 0x6C,  0x00, 0x69, 0x00, 0x6C,  0x65, 0x6E, 0x67, 0x74,
+  0x68, 0x00, 0x73, 0x70,  0x6C, 0x69, 0x63, 0x65,  0x00, 0x69, 0x6E, 0x69,  0x74, 0x69, 0x61, 0x6C,
+  0x69, 0x7A, 0x65, 0x00,  0x6F, 0x00, 0x62, 0x72,  0x6F, 0x61, 0x64, 0x63,  0x61, 0x73, 0x74, 0x4D,
+  0x65, 0x73, 0x73, 0x61,  0x67, 0x65, 0x2C, 0x61,  0x64, 0x64, 0x4C, 0x69,  0x73, 0x74, 0x65, 0x6E,
+  0x65, 0x72, 0x2C, 0x72,  0x65, 0x6D, 0x6F, 0x76,  0x65, 0x4C, 0x69, 0x73,  0x74, 0x65, 0x6E, 0x65,
+  0x72, 0x2C, 0x5F, 0x6C,  0x69, 0x73, 0x74, 0x65,  0x6E, 0x65, 0x72, 0x73,  0x00, 0x4B, 0x65, 0x79,
+  0x00, 0x41, 0x4C, 0x54,  0x00, 0x42, 0x41, 0x43,  0x4B, 0x53, 0x50, 0x41,  0x43, 0x45, 0x00, 0x43,
+  0x41, 0x50, 0x53, 0x4C,  0x4F, 0x43, 0x4B, 0x00,  0x43, 0x4F, 0x4E, 0x54,  0x52, 0x4F, 0x4C, 0x00,
+  0x44, 0x45, 0x4C, 0x45,  0x54, 0x45, 0x4B, 0x45,  0x59, 0x00, 0x44, 0x4F,  0x57, 0x4E, 0x00, 0x45,
+  0x4E, 0x44, 0x00, 0x45,  0x4E, 0x54, 0x45, 0x52,  0x00, 0x45, 0x53, 0x43,  0x41, 0x50, 0x45, 0x00,
+  0x48, 0x4F, 0x4D, 0x45,  0x00, 0x49, 0x4E, 0x53,  0x45, 0x52, 0x54, 0x00,  0x4C, 0x45, 0x46, 0x54,
+  0x00, 0x50, 0x47, 0x44,  0x4E, 0x00, 0x50, 0x47,  0x55, 0x50, 0x00, 0x52,  0x49, 0x47, 0x48, 0x54,
+  0x00, 0x53, 0x48, 0x49,  0x46, 0x54, 0x00, 0x53,  0x50, 0x41, 0x43, 0x45,  0x00, 0x54, 0x41, 0x42,
+  0x00, 0x55, 0x50, 0x00,  0x67, 0x65, 0x74, 0x41,  0x73, 0x63, 0x69, 0x69,  0x2C, 0x67, 0x65, 0x74,
+  0x43, 0x6F, 0x64, 0x65,  0x2C, 0x69, 0x73, 0x44,  0x6F, 0x77, 0x6E, 0x00,  0x4D, 0x6F, 0x75, 0x73,
+  0x65, 0x00, 0x73, 0x68,  0x6F, 0x77, 0x00, 0x68,  0x69, 0x64, 0x65, 0x00,  0x53, 0x74, 0x61, 0x67,
+  0x65, 0x00, 0x73, 0x63,  0x61, 0x6C, 0x65, 0x4D,  0x6F, 0x64, 0x65, 0x2C,  0x61, 0x6C, 0x69, 0x67,
+  0x6E, 0x2C, 0x77, 0x69,  0x64, 0x74, 0x68, 0x2C,  0x68, 0x65, 0x69, 0x67,  0x68, 0x74, 0x00, 0x4C,
+  0x6F, 0x61, 0x64, 0x56,  0x61, 0x72, 0x73, 0x00,  0x63, 0x6F, 0x6E, 0x74,  0x65, 0x6E, 0x74, 0x54,
+  0x79, 0x70, 0x65, 0x00,  0x61, 0x70, 0x70, 0x6C,  0x69, 0x63, 0x61, 0x74,  0x69, 0x6F, 0x6E, 0x2F,
+  0x78, 0x2D, 0x77, 0x77,  0x77, 0x2D, 0x66, 0x6F,  0x72, 0x6D, 0x2D, 0x75,  0x72, 0x6C, 0x65, 0x6E,
+  0x63, 0x6F, 0x64, 0x65,  0x64, 0x00, 0x6C, 0x6F,  0x61, 0x64, 0x00, 0x64,  0x65, 0x63, 0x6F, 0x64,
+  0x65, 0x00, 0x6F, 0x6E,  0x4C, 0x6F, 0x61, 0x64,  0x00, 0x6F, 0x6E, 0x44,  0x61, 0x74, 0x61, 0x00,
+  0x6C, 0x6F, 0x61, 0x64,  0x65, 0x64, 0x00, 0x73,  0x72, 0x63, 0x00, 0x73,  0x74, 0x72, 0x00, 0x65,
+  0x73, 0x63, 0x61, 0x70,  0x65, 0x00, 0x3D, 0x00,  0x26, 0x00, 0x67, 0x65,  0x74, 0x42, 0x79, 0x74,
+  0x65, 0x73, 0x4C, 0x6F,  0x61, 0x64, 0x65, 0x64,  0x00, 0x5F, 0x62, 0x79,  0x74, 0x65, 0x73, 0x4C,
+  0x6F, 0x61, 0x64, 0x65,  0x64, 0x00, 0x67, 0x65,  0x74, 0x42, 0x79, 0x74,  0x65, 0x73, 0x54, 0x6F,
+  0x74, 0x61, 0x6C, 0x00,  0x5F, 0x62, 0x79, 0x74,  0x65, 0x73, 0x54, 0x6F,  0x74, 0x61, 0x6C, 0x00,
+  0x53, 0x6F, 0x75, 0x6E,  0x64, 0x00, 0x41, 0x53,  0x63, 0x6F, 0x6E, 0x73,  0x74, 0x72, 0x75, 0x63,
+  0x74, 0x6F, 0x72, 0x00,  0x73, 0x74, 0x6F, 0x70,  0x2C, 0x61, 0x74, 0x74,  0x61, 0x63, 0x68, 0x53,
+  0x6F, 0x75, 0x6E, 0x64,  0x2C, 0x73, 0x74, 0x61,  0x72, 0x74, 0x00, 0x58,  0x4D, 0x4C, 0x4E, 0x6F,
+  0x64, 0x65, 0x00, 0x63,  0x6C, 0x6F, 0x6E, 0x65,  0x4E, 0x6F, 0x64, 0x65,  0x00, 0x72, 0x65, 0x6D,
+  0x6F, 0x76, 0x65, 0x4E,  0x6F, 0x64, 0x65, 0x00,  0x69, 0x6E, 0x73, 0x65,  0x72, 0x74, 0x42, 0x65,
+  0x66, 0x6F, 0x72, 0x65,  0x00, 0x61, 0x70, 0x70,  0x65, 0x6E, 0x64, 0x43,  0x68, 0x69, 0x6C, 0x64,
+  0x00, 0x68, 0x61, 0x73,  0x43, 0x68, 0x69, 0x6C,  0x64, 0x4E, 0x6F, 0x64,  0x65, 0x73, 0x00, 0x67,
+  0x65, 0x74, 0x4E, 0x61,  0x6D, 0x65, 0x73, 0x70,  0x61, 0x63, 0x65, 0x46,  0x6F, 0x72, 0x50, 0x72,
+  0x65, 0x66, 0x69, 0x78,  0x00, 0x67, 0x65, 0x74,  0x50, 0x72, 0x65, 0x66,  0x69, 0x78, 0x46, 0x6F,
+  0x72, 0x4E, 0x61, 0x6D,  0x65, 0x73, 0x70, 0x61,  0x63, 0x65, 0x00, 0x58,  0x4D, 0x4C, 0x00, 0x00,
+  0x63, 0x72, 0x65, 0x61,  0x74, 0x65, 0x45, 0x6C,  0x65, 0x6D, 0x65, 0x6E,  0x74, 0x00, 0x63, 0x72,
+  0x65, 0x61, 0x74, 0x65,  0x54, 0x65, 0x78, 0x74,  0x4E, 0x6F, 0x64, 0x65,  0x00, 0x70, 0x61, 0x72,
+  0x73, 0x65, 0x58, 0x4D,  0x4C, 0x00, 0x53, 0x79,  0x73, 0x74, 0x65, 0x6D,  0x00, 0x63, 0x61, 0x70,
+  0x61, 0x62, 0x69, 0x6C,  0x69, 0x74, 0x69, 0x65,  0x73, 0x00, 0x51, 0x75,  0x65, 0x72, 0x79, 0x00,
+  0x43, 0x6F, 0x6C, 0x6F,  0x72, 0x00, 0x74, 0x61,  0x72, 0x67, 0x65, 0x74,  0x00, 0x73, 0x65, 0x74,
+  0x52, 0x47, 0x42, 0x2C,  0x73, 0x65, 0x74, 0x54,  0x72, 0x61, 0x6E, 0x73,  0x66, 0x6F, 0x72, 0x6D,
+  0x2C, 0x67, 0x65, 0x74,  0x52, 0x47, 0x42, 0x2C,  0x67, 0x65, 0x74, 0x54,  0x72, 0x61, 0x6E, 0x73,
+  0x66, 0x6F, 0x72, 0x6D,  0x00, 0x4D, 0x6F, 0x76,  0x69, 0x65, 0x43, 0x6C,  0x69, 0x70, 0x00, 0x6D,
+  0x65, 0x74, 0x68, 0x00,  0x6D, 0x65, 0x74, 0x68,  0x6F, 0x64, 0x00, 0x74,  0x6F, 0x4C, 0x6F, 0x77,
+  0x65, 0x72, 0x43, 0x61,  0x73, 0x65, 0x00, 0x6C,  0x6F, 0x77, 0x65, 0x72,  0x00, 0x70, 0x6F, 0x73,
+  0x74, 0x00, 0x67, 0x65,  0x74, 0x00, 0x67, 0x65,  0x74, 0x55, 0x52, 0x4C,  0x00, 0x74, 0x79, 0x70,
+  0x65, 0x00, 0x75, 0x72,  0x6C, 0x00, 0x6C, 0x6F,  0x61, 0x64, 0x56, 0x61,  0x72, 0x69, 0x61, 0x62,
+  0x6C, 0x65, 0x73, 0x00,  0x5F, 0x74, 0x61, 0x72,  0x67, 0x65, 0x74, 0x00,  0x6C, 0x6F, 0x61, 0x64,
+  0x4D, 0x6F, 0x76, 0x69,  0x65, 0x00, 0x61, 0x74,  0x74, 0x61, 0x63, 0x68,  0x4D, 0x6F, 0x76, 0x69,
+  0x65, 0x00, 0x73, 0x77,  0x61, 0x70, 0x44, 0x65,  0x70, 0x74, 0x68, 0x73,  0x00, 0x68, 0x69, 0x74,
+  0x54, 0x65, 0x73, 0x74,  0x00, 0x67, 0x65, 0x74,  0x42, 0x6F, 0x75, 0x6E,  0x64, 0x73, 0x00, 0x67,
+  0x65, 0x74, 0x44, 0x65,  0x70, 0x74, 0x68, 0x00,  0x70, 0x6C, 0x61, 0x79,  0x00, 0x73, 0x74, 0x6F,
+  0x70, 0x00, 0x6E, 0x65,  0x78, 0x74, 0x46, 0x72,  0x61, 0x6D, 0x65, 0x00,  0x70, 0x72, 0x65, 0x76,
+  0x46, 0x72, 0x61, 0x6D,  0x65, 0x00, 0x67, 0x6F,  0x74, 0x6F, 0x41, 0x6E,  0x64, 0x50, 0x6C, 0x61,
+  0x79, 0x00, 0x67, 0x6F,  0x74, 0x6F, 0x41, 0x6E,  0x64, 0x53, 0x74, 0x6F,  0x70, 0x00, 0x64, 0x75,
+  0x70, 0x6C, 0x69, 0x63,  0x61, 0x74, 0x65, 0x4D,  0x6F, 0x76, 0x69, 0x65,  0x43, 0x6C, 0x69, 0x70,
+  0x00, 0x72, 0x65, 0x6D,  0x6F, 0x76, 0x65, 0x4D,  0x6F, 0x76, 0x69, 0x65,  0x43, 0x6C, 0x69, 0x70,
+  0x00, 0x73, 0x74, 0x61,  0x72, 0x74, 0x44, 0x72,  0x61, 0x67, 0x00, 0x73,  0x74, 0x6F, 0x70, 0x44,
+  0x72, 0x61, 0x67, 0x00,  0x63, 0x72, 0x65, 0x61,  0x74, 0x65, 0x54, 0x65,  0x78, 0x74, 0x46, 0x69,
+  0x65, 0x6C, 0x64, 0x00,  0x36, 0x63, 0x72, 0x65,  0x61, 0x74, 0x65, 0x45,  0x6D, 0x70, 0x74, 0x79,
+  0x4D, 0x6F, 0x76, 0x69,  0x65, 0x43, 0x6C, 0x69,  0x70, 0x2C, 0x36, 0x62,  0x65, 0x67, 0x69, 0x6E,
+  0x46, 0x69, 0x6C, 0x6C,  0x2C, 0x36, 0x62, 0x65,  0x67, 0x69, 0x6E, 0x47,  0x72, 0x61, 0x64, 0x69,
+  0x65, 0x6E, 0x74, 0x46,  0x69, 0x6C, 0x6C, 0x2C,  0x36, 0x6D, 0x6F, 0x76,  0x65, 0x54, 0x6F, 0x2C,
+  0x36, 0x6C, 0x69, 0x6E,  0x65, 0x54, 0x6F, 0x2C,  0x36, 0x63, 0x75, 0x72,  0x76, 0x65, 0x54, 0x6F,
+  0x2C, 0x36, 0x6C, 0x69,  0x6E, 0x65, 0x53, 0x74,  0x79, 0x6C, 0x65, 0x2C,  0x36, 0x65, 0x6E, 0x64,
+  0x46, 0x69, 0x6C, 0x6C,  0x2C, 0x36, 0x63, 0x6C,  0x65, 0x61, 0x72, 0x00,  0x54, 0x65, 0x78, 0x74,
+  0x46, 0x69, 0x65, 0x6C,  0x64, 0x00, 0x67, 0x65,  0x74, 0x46, 0x6F, 0x6E,  0x74, 0x4C, 0x69, 0x73,
+  0x74, 0x00, 0x67, 0x65,  0x74, 0x54, 0x65, 0x78,  0x74, 0x46, 0x6F, 0x72,  0x6D, 0x61, 0x74, 0x00,
+  0x73, 0x65, 0x74, 0x54,  0x65, 0x78, 0x74, 0x46,  0x6F, 0x72, 0x6D, 0x61,  0x74, 0x00, 0x72, 0x65,
+  0x6D, 0x6F, 0x76, 0x65,  0x54, 0x65, 0x78, 0x74,  0x46, 0x69, 0x65, 0x6C,  0x64, 0x00, 0x67, 0x65,
+  0x74, 0x4E, 0x65, 0x77,  0x54, 0x65, 0x78, 0x74,  0x46, 0x6F, 0x72, 0x6D,  0x61, 0x74, 0x00, 0x73,
+  0x65, 0x74, 0x4E, 0x65,  0x77, 0x54, 0x65, 0x78,  0x74, 0x46, 0x6F, 0x72,  0x6D, 0x61, 0x74, 0x00,
+  0x72, 0x65, 0x70, 0x6C,  0x61, 0x63, 0x65, 0x54,  0x65, 0x78, 0x74, 0x00,  0x54, 0x65, 0x78, 0x74,
+  0x46, 0x6F, 0x72, 0x6D,  0x61, 0x74, 0x00, 0x53,  0x74, 0x79, 0x6C, 0x65,  0x53, 0x68, 0x65, 0x65,
+  0x74, 0x00, 0x5F, 0x63,  0x6F, 0x70, 0x79, 0x00,  0x6F, 0x62, 0x6A, 0x65,  0x63, 0x74, 0x00, 0x6F,
+  0x5F, 0x6E, 0x65, 0x77,  0x00, 0x70, 0x72, 0x6F,  0x70, 0x00, 0x63, 0x6C,  0x65, 0x61, 0x72, 0x00,
+  0x5F, 0x63, 0x73, 0x73,  0x00, 0x5F, 0x73, 0x74,  0x79, 0x6C, 0x65, 0x73,  0x00, 0x75, 0x70, 0x64,
+  0x61, 0x74, 0x65, 0x00,  0x67, 0x65, 0x74, 0x53,  0x74, 0x79, 0x6C, 0x65,  0x00, 0x73, 0x65, 0x74,
+  0x53, 0x74, 0x79, 0x6C,  0x65, 0x00, 0x73, 0x74,  0x79, 0x6C, 0x65, 0x00,  0x64, 0x6F, 0x54, 0x72,
+  0x61, 0x6E, 0x73, 0x66,  0x6F, 0x72, 0x6D, 0x00,  0x67, 0x65, 0x74, 0x53,  0x74, 0x79, 0x6C, 0x65,
+  0x4E, 0x61, 0x6D, 0x65,  0x73, 0x00, 0x74, 0x6D,  0x70, 0x00, 0x6E, 0x61,  0x6D, 0x65, 0x73, 0x00,
+  0x74, 0x72, 0x61, 0x6E,  0x73, 0x66, 0x6F, 0x72,  0x6D, 0x00, 0x66, 0x6F,  0x72, 0x6D, 0x61, 0x74,
+  0x00, 0x74, 0x65, 0x78,  0x74, 0x41, 0x6C, 0x69,  0x67, 0x6E, 0x00, 0x61,  0x6C, 0x69, 0x67, 0x6E,
+  0x00, 0x66, 0x6F, 0x6E,  0x74, 0x57, 0x65, 0x69,  0x67, 0x68, 0x74, 0x00,  0x62, 0x6F, 0x6C, 0x64,
+  0x00, 0x6E, 0x6F, 0x72,  0x6D, 0x61, 0x6C, 0x00,  0x63, 0x6F, 0x6C, 0x6F,  0x72, 0x00, 0x70, 0x61,
+  0x72, 0x73, 0x65, 0x43,  0x6F, 0x6C, 0x6F, 0x72,  0x00, 0x64, 0x69, 0x73,  0x70, 0x6C, 0x61, 0x79,
+  0x00, 0x66, 0x6F, 0x6E,  0x74, 0x46, 0x61, 0x6D,  0x69, 0x6C, 0x79, 0x00,  0x66, 0x6F, 0x6E, 0x74,
+  0x00, 0x70, 0x61, 0x72,  0x73, 0x65, 0x43, 0x53,  0x53, 0x46, 0x6F, 0x6E,  0x74, 0x46, 0x61, 0x6D,
+  0x69, 0x6C, 0x79, 0x00,  0x74, 0x65, 0x78, 0x74,  0x49, 0x6E, 0x64, 0x65,  0x6E, 0x74, 0x00, 0x69,
+  0x6E, 0x64, 0x65, 0x6E,  0x74, 0x00, 0x70, 0x61,  0x72, 0x73, 0x65, 0x49,  0x6E, 0x74, 0x00, 0x66,
+  0x6F, 0x6E, 0x74, 0x53,  0x74, 0x79, 0x6C, 0x65,  0x00, 0x69, 0x74, 0x61,  0x6C, 0x69, 0x63, 0x00,
+  0x6B, 0x65, 0x72, 0x6E,  0x69, 0x6E, 0x67, 0x00,  0x74, 0x72, 0x75, 0x65,  0x00, 0x66, 0x61, 0x6C,
+  0x73, 0x65, 0x00, 0x6C,  0x65, 0x61, 0x64, 0x69,  0x6E, 0x67, 0x00, 0x6D,  0x61, 0x72, 0x67, 0x69,
+  0x6E, 0x4C, 0x65, 0x66,  0x74, 0x00, 0x6C, 0x65,  0x66, 0x74, 0x4D, 0x61,  0x72, 0x67, 0x69, 0x6E,
+  0x00, 0x6C, 0x65, 0x74,  0x74, 0x65, 0x72, 0x53,  0x70, 0x61, 0x63, 0x69,  0x6E, 0x67, 0x00, 0x6D,
+  0x61, 0x72, 0x67, 0x69,  0x6E, 0x52, 0x69, 0x67,  0x68, 0x74, 0x00, 0x72,  0x69, 0x67, 0x68, 0x74,
+  0x4D, 0x61, 0x72, 0x67,  0x69, 0x6E, 0x00, 0x66,  0x6F, 0x6E, 0x74, 0x53,  0x69, 0x7A, 0x65, 0x00,
+  0x73, 0x69, 0x7A, 0x65,  0x00, 0x74, 0x65, 0x78,  0x74, 0x44, 0x65, 0x63,  0x6F, 0x72, 0x61, 0x74,
+  0x69, 0x6F, 0x6E, 0x00,  0x75, 0x6E, 0x64, 0x65,  0x72, 0x6C, 0x69, 0x6E,  0x65, 0x00, 0x6E, 0x6F,
+  0x6E, 0x65, 0x00, 0x70,  0x61, 0x72, 0x73, 0x65,  0x43, 0x53, 0x53, 0x00,  0x63, 0x73, 0x73, 0x00,
+  0x70, 0x61, 0x72, 0x73,  0x65, 0x43, 0x53, 0x53,  0x49, 0x6E, 0x74, 0x65,  0x72, 0x6E, 0x61, 0x6C,
+  0x00, 0x72, 0x65, 0x73,  0x75, 0x6C, 0x74, 0x00,  0x6E, 0x75, 0x6C, 0x6C,  0x00, 0x70, 0x61, 0x72,
+  0x73, 0x65, 0x00, 0x37,  0x75, 0x70, 0x64, 0x61,  0x74, 0x65, 0x2C, 0x37,  0x70, 0x61, 0x72, 0x73,
+  0x65, 0x43, 0x53, 0x53,  0x49, 0x6E, 0x74, 0x65,  0x72, 0x6E, 0x61, 0x6C,  0x2C, 0x37, 0x70, 0x61,
+  0x72, 0x73, 0x65, 0x43,  0x53, 0x53, 0x46, 0x6F,  0x6E, 0x74, 0x46, 0x61,  0x6D, 0x69, 0x6C, 0x79,
+  0x2C, 0x37, 0x70, 0x61,  0x72, 0x73, 0x65, 0x43,  0x6F, 0x6C, 0x6F, 0x72,  0x00, 0x73, 0x65, 0x74,
+  0x49, 0x6E, 0x74, 0x65,  0x72, 0x76, 0x61, 0x6C,  0x00, 0x63, 0x6C, 0x65,  0x61, 0x72, 0x49, 0x6E,
+  0x74, 0x65, 0x72, 0x76,  0x61, 0x6C, 0x00, 0x73,  0x65, 0x74, 0x54, 0x69,  0x6D, 0x65, 0x6F, 0x75,
+  0x74, 0x00, 0x63, 0x6C,  0x65, 0x61, 0x72, 0x54,  0x69, 0x6D, 0x65, 0x6F,  0x75, 0x74, 0x00, 0x9B,
+  0x0E, 0x00, 0x45, 0x72,  0x72, 0x6F, 0x72, 0x00,  0x01, 0x00, 0x6D, 0x73,  0x67, 0x00, 0x23, 0x00,
+  0x96, 0x02, 0x00, 0x08,  0x06, 0x1C, 0x44, 0x96,  0x02, 0x00, 0x08, 0x07,  0x49, 0x12, 0x12, 0x9D,
+  0x02, 0x00, 0x0F, 0x00,  0x96, 0x02, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x09, 0x08,
+  0x06, 0x1C, 0x4F, 0x9B,  0x12, 0x00, 0x41, 0x73,  0x42, 0x72, 0x6F, 0x61,  0x64, 0x63, 0x61, 0x73,
+  0x74, 0x65, 0x72, 0x00,  0x00, 0x00, 0x00, 0x00,  0x9B, 0x0D, 0x00, 0x4C,  0x6F, 0x61, 0x64, 0x56,
+  0x61, 0x72, 0x73, 0x00,  0x00, 0x00, 0x00, 0x00,  0x96, 0x13, 0x00, 0x08,  0x00, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x1D,
+  0x96, 0x13, 0x00, 0x08,  0x02, 0x07, 0x01, 0x00,  0x00, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x07,
+  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x03, 0x1C, 0x96, 0x13,
+  0x00, 0x08, 0x04, 0x07,  0x08, 0x00, 0x00, 0x00,  0x07, 0x65, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,
+  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x08,  0x00, 0x07, 0x07, 0x00,  0x00, 0x00, 0x02, 0x08,
+  0x03, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x05,  0x3D, 0x17, 0x96, 0x02,
+  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0B, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x0C, 0x08,
+  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x09, 0x08, 0x0A, 0x87,
+  0x01, 0x00, 0x00, 0x4F,  0x96, 0x02, 0x00, 0x04,  0x00, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x0B, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0D, 0x9B,  0x05, 0x00, 0x00, 0x00,
+  0x00, 0x0D, 0x00, 0x96,  0x02, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x09, 0x4E, 0x3E,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0E, 0x1C, 0x96,  0x13, 0x00, 0x08, 0x0F,  0x07, 0x0C, 0x00, 0x00,
+  0x00, 0x07, 0x65, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x0E,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x10, 0x9B, 0x07,  0x00, 0x00, 0x01, 0x00,
+  0x78, 0x00, 0x3C, 0x00,  0x96, 0x02, 0x00, 0x08,  0x11, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x12, 0x52, 0x17,  0x96, 0x02, 0x00, 0x08,
+  0x11, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x13, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x14,  0x52, 0x17, 0x96, 0x02,  0x00, 0x05, 0x01, 0x3E,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x12,  0x9B, 0x07, 0x00, 0x00,
+  0x01, 0x00, 0x78, 0x00,  0x8F, 0x00, 0x96, 0x04,  0x00, 0x08, 0x15, 0x08,  0x08, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x13, 0x4E,  0x3C, 0x96, 0x02, 0x00,  0x08, 0x16, 0x41, 0x96,  0x07, 0x00, 0x08, 0x16,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x3C, 0x99, 0x02,  0x00, 0x09, 0x00, 0x96,  0x02, 0x00, 0x08, 0x16,
+  0x4C, 0x1C, 0x50, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x16, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x15, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x17, 0x4E, 0x48, 0x12,  0x9D, 0x02, 0x00, 0x42,  0x00, 0x96, 0x02, 0x00,
+  0x08, 0x15, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x16,  0x1C, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x1C,
+  0x49, 0x12, 0x9D, 0x02,  0x00, 0x23, 0x00, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,
+  0x16, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x02, 0x00,  0x00, 0x00, 0x08, 0x15,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x18, 0x52, 0x17,  0x96, 0x02, 0x00, 0x05,  0x01, 0x3E, 0x99, 0x02,  0x00, 0x9C, 0xFF, 0x96,
+  0x02, 0x00, 0x05, 0x00,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0E, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x19, 0x9B, 0x07, 0x00,  0x00, 0x01, 0x00, 0x6F,  0x00, 0x73, 0x00, 0x96,  0x02, 0x00, 0x08, 0x1A,
+  0x1C, 0x96, 0x13, 0x00,  0x08, 0x0F, 0x07, 0x0C,  0x00, 0x00, 0x00, 0x07,  0x65, 0x00, 0x00, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x1A, 0x1C, 0x96,
+  0x04, 0x00, 0x08, 0x10,  0x08, 0x0E, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x10,  0x4E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x1A, 0x1C,  0x96, 0x04, 0x00, 0x08,  0x12, 0x08, 0x0E, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x12, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x1A,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x13, 0x07, 0x00,
+  0x00, 0x00, 0x00, 0x42,  0x4F, 0x96, 0x09, 0x00,  0x07, 0x83, 0x00, 0x00,  0x00, 0x08, 0x1B, 0x08,
+  0x1A, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x05,  0x3D, 0x17, 0x4F, 0x96,
+  0x08, 0x00, 0x07, 0x83,  0x00, 0x00, 0x00, 0x02,  0x08, 0x0E, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x08,  0x05, 0x3D, 0x17, 0x96,  0x8C, 0x00, 0x08, 0x1C,  0x08, 0x1D, 0x07, 0x12,
+  0x00, 0x00, 0x00, 0x08,  0x1E, 0x07, 0x08, 0x00,  0x00, 0x00, 0x08, 0x1F,  0x07, 0x14, 0x00, 0x00,
+  0x00, 0x08, 0x20, 0x07,  0x11, 0x00, 0x00, 0x00,  0x08, 0x21, 0x07, 0x2E,  0x00, 0x00, 0x00, 0x08,
+  0x22, 0x07, 0x28, 0x00,  0x00, 0x00, 0x08, 0x23,  0x07, 0x23, 0x00, 0x00,  0x00, 0x08, 0x24, 0x07,
+  0x0D, 0x00, 0x00, 0x00,  0x08, 0x25, 0x07, 0x1B,  0x00, 0x00, 0x00, 0x08,  0x26, 0x07, 0x24, 0x00,
+  0x00, 0x00, 0x08, 0x27,  0x07, 0x2D, 0x00, 0x00,  0x00, 0x08, 0x28, 0x07,  0x25, 0x00, 0x00, 0x00,
+  0x08, 0x29, 0x07, 0x22,  0x00, 0x00, 0x00, 0x08,  0x2A, 0x07, 0x21, 0x00,  0x00, 0x00, 0x08, 0x2B,
+  0x07, 0x27, 0x00, 0x00,  0x00, 0x08, 0x2C, 0x07,  0x10, 0x00, 0x00, 0x00,  0x08, 0x2D, 0x07, 0x20,
+  0x00, 0x00, 0x00, 0x08,  0x2E, 0x07, 0x09, 0x00,  0x00, 0x00, 0x08, 0x2F,  0x07, 0x26, 0x00, 0x00,
+  0x00, 0x07, 0x13, 0x00,  0x00, 0x00, 0x43, 0x1D,  0x96, 0x09, 0x00, 0x08,  0x30, 0x07, 0x20, 0x03,
+  0x00, 0x00, 0x08, 0x1C,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x00, 0x3D,
+  0x17, 0x96, 0x02, 0x00,  0x08, 0x1C, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,
+  0x0E, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x52,  0x17, 0x96, 0x08, 0x00,  0x07, 0x07, 0x00, 0x00,
+  0x00, 0x02, 0x08, 0x1C,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x05, 0x3D,
+  0x17, 0x96, 0x07, 0x00,  0x08, 0x31, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x1D, 0x96, 0x02, 0x00,
+  0x08, 0x31, 0x1C, 0x96,  0x13, 0x00, 0x08, 0x32,  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0x05, 0x00,
+  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x31,
+  0x1C, 0x96, 0x13, 0x00,  0x08, 0x33, 0x07, 0x01,  0x00, 0x00, 0x00, 0x07,  0x05, 0x00, 0x00, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x31, 0x1C, 0x96,
+  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x0E, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x52,
+  0x17, 0x96, 0x08, 0x00,  0x07, 0x07, 0x00, 0x00,  0x00, 0x02, 0x08, 0x31,  0x1C, 0x96, 0x07, 0x00,
+  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x05, 0x3D,  0x17, 0x96, 0x07, 0x00,  0x08, 0x34, 0x07, 0x00,
+  0x00, 0x00, 0x00, 0x43,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x34, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0x0E, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x52,  0x17, 0x96, 0x0E, 0x00,
+  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x35, 0x07,  0x9A, 0x02, 0x00, 0x00,  0x08, 0x34, 0x1C, 0x96,
+  0x07, 0x00, 0x07, 0x04,  0x00, 0x00, 0x00, 0x08,  0x02, 0x3D, 0x17, 0x96,  0x02, 0x00, 0x08, 0x36,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x37,  0x08, 0x38, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x36,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x39,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
+  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x36,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,
+  0x13, 0x00, 0x08, 0x3A,  0x07, 0x03, 0x00, 0x00,  0x00, 0x07, 0x2D, 0x01,  0x00, 0x00, 0x07, 0x02,
+  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x36,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0B, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x3B,  0x9B, 0x05, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x36, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x02, 0x00,
+  0x08, 0x3C, 0x9B, 0x09,  0x00, 0x00, 0x01, 0x00,  0x73, 0x72, 0x63, 0x00,  0x64, 0x00, 0x96, 0x02,
+  0x00, 0x08, 0x08, 0x1C,  0x96, 0x04, 0x00, 0x08,  0x3D, 0x05, 0x01, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x3E, 0x1C, 0x96, 0x01,  0x00, 0x02, 0x49, 0x12,  0x9D, 0x02, 0x00, 0x19,  0x00, 0x96, 0x09, 0x00,
+  0x05, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x3B, 0x52,
+  0x17, 0x99, 0x02, 0x00,  0x2C, 0x00, 0x96, 0x02,  0x00, 0x08, 0x3E, 0x1C,  0x96, 0x07, 0x00, 0x07,
+  0x01, 0x00, 0x00, 0x00,  0x08, 0x08, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x3A,  0x52, 0x17, 0x96, 0x09,
+  0x00, 0x05, 0x01, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x08, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x3B,
+  0x52, 0x17, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x36,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x0D,  0x9B, 0x05, 0x00, 0x00,  0x00, 0x00, 0xB3, 0x00,  0x96, 0x03, 0x00, 0x08,
+  0x3F, 0x02, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x08,  0x46, 0x87, 0x01, 0x00,  0x00, 0x96, 0x01, 0x00,
+  0x02, 0x49, 0x9D, 0x02,  0x00, 0x91, 0x00, 0x96,  0x04, 0x00, 0x08, 0x11,  0x04, 0x00, 0x3C, 0x96,
+  0x02, 0x00, 0x08, 0x3F,  0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x9D, 0x02,  0x00, 0x41, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x3F,  0x4C, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x42, 0x08,  0x11, 0x1C, 0x96, 0x07,
+  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x40,  0x3D, 0x47, 0x96, 0x02,  0x00, 0x08, 0x41, 0x47,
+  0x96, 0x02, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x11, 0x1C,  0x4E, 0x96, 0x07, 0x00,
+  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x40, 0x3D,  0x47, 0x47, 0x1D, 0x99,  0x02, 0x00, 0x33, 0x00,
+  0x96, 0x04, 0x00, 0x08,  0x3F, 0x08, 0x11, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
+  0x08, 0x40, 0x3D, 0x96,  0x02, 0x00, 0x08, 0x41,  0x47, 0x96, 0x02, 0x00,  0x08, 0x08, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x11,  0x1C, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x40,
+  0x3D, 0x47, 0x1D, 0x99,  0x02, 0x00, 0x61, 0xFF,  0x96, 0x02, 0x00, 0x08,  0x3F, 0x1C, 0x3E, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x36, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x43, 0x9B, 0x05, 0x00,  0x00, 0x00, 0x00, 0x0D,  0x00, 0x96, 0x02, 0x00,  0x08, 0x08, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x44,  0x4E, 0x3E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x36,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0B, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x45,  0x9B, 0x05, 0x00, 0x00,  0x00, 0x00, 0x0D, 0x00,
+  0x96, 0x02, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x46, 0x4E,  0x3E, 0x4F, 0x96, 0x08,
+  0x00, 0x07, 0x83, 0x00,  0x00, 0x00, 0x02, 0x08,  0x36, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,
+  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x05, 0x3D, 0x17,  0x96, 0x13, 0x00, 0x08,
+  0x47, 0x07, 0x10, 0x00,  0x00, 0x00, 0x07, 0xF4,  0x01, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
+  0x08, 0x48, 0x3D, 0x1D,  0x96, 0x0E, 0x00, 0x07,  0x06, 0x00, 0x00, 0x00,  0x08, 0x49, 0x07, 0xF4,
+  0x01, 0x00, 0x00, 0x08,  0x47, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x07, 0x00, 0x07,
+  0x04, 0x00, 0x00, 0x00,  0x08, 0x00, 0x3D, 0x17,  0x96, 0x13, 0x00, 0x08,  0x4A, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x48, 0x3D, 0x1D,
+  0x96, 0x02, 0x00, 0x08,  0x4A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x13, 0x00, 0x08,
+  0x4B, 0x07, 0x01, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
+  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x4A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,
+  0x96, 0x13, 0x00, 0x08,  0x4C, 0x07, 0x02, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,
+  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x4A, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x4D, 0x07, 0x03, 0x00,  0x00, 0x00, 0x07, 0xFD,
+  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x4A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x4E, 0x07, 0x04, 0x00,
+  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x4A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x13, 0x00, 0x08,
+  0x4F, 0x07, 0x05, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
+  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x4A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,
+  0x96, 0x13, 0x00, 0x08,  0x0D, 0x07, 0x06, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,
+  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x4A, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x50, 0x07, 0x07, 0x00,  0x00, 0x00, 0x07, 0xFD,
+  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x4A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x51, 0x07, 0x08, 0x00,
+  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
+  0x96, 0x13, 0x00, 0x08,  0x52, 0x07, 0x09, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,
+  0x02, 0x00, 0x00, 0x00,  0x08, 0x48, 0x3D, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x52, 0x1C, 0x96, 0x10,
+  0x00, 0x08, 0x0B, 0x08,  0x53, 0x07, 0x01, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
+  0x4A, 0x40, 0x4F, 0x96,  0x09, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x0B, 0x08, 0x52, 0x1C,
+  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x05, 0x3D, 0x17,  0x96, 0x02, 0x00, 0x08,
+  0x52, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x39, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x07, 0x2D,  0x01, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x52, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x13, 0x00, 0x08,
+  0x54, 0x07, 0x0A, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
+  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x52, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,
+  0x96, 0x13, 0x00, 0x08,  0x55, 0x07, 0x0B, 0x00,  0x00, 0x00, 0x07, 0xFD,  0x00, 0x00, 0x00, 0x07,
+  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x52, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x13, 0x00, 0x08,  0x56, 0x07, 0x0C, 0x00,  0x00, 0x00, 0x07, 0xFD,
+  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,  0x08, 0x01, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x52, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x3B, 0x9B, 0x05, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x52, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0B, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x3C, 0x9B,  0x09, 0x00, 0x00, 0x01,  0x00, 0x73, 0x72, 0x63,
+  0x00, 0x72, 0x00, 0x96,  0x02, 0x00, 0x08, 0x3E,  0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x12, 0x9D,
+  0x02, 0x00, 0x27, 0x00,  0x96, 0x02, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x3D, 0x05,
+  0x00, 0x4F, 0x96, 0x09,  0x00, 0x05, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x08, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x3B,  0x52, 0x17, 0x99, 0x02,  0x00, 0x3A, 0x00, 0x96,  0x02, 0x00, 0x08, 0x08,
+  0x1C, 0x96, 0x04, 0x00,  0x08, 0x3D, 0x05, 0x01,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x3E, 0x1C, 0x96,
+  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x56, 0x52,
+  0x17, 0x96, 0x09, 0x00,  0x05, 0x01, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x3B, 0x52,  0x17, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x52, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0B, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x43, 0x9B,  0x05, 0x00, 0x00, 0x00,  0x00, 0x0D, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x44, 0x4E, 0x3E,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x52, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x45, 0x9B, 0x05,
+  0x00, 0x00, 0x00, 0x00,  0x0D, 0x00, 0x96, 0x02,  0x00, 0x08, 0x08, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x46, 0x4E, 0x3E, 0x4F,  0x96, 0x07, 0x00, 0x08,  0x57, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x1D,
+  0x96, 0x02, 0x00, 0x08,  0x57, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x58, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x57, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x58, 0x4E, 0x96, 0x13,
+  0x00, 0x08, 0x59, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x0B, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,
+  0x00, 0x00, 0x08, 0x01,  0x3D, 0x4F, 0x96, 0x07,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x57,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x58, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x59,  0x52, 0x17, 0x96, 0x02,
+  0x00, 0x08, 0x57, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x58, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x59, 0x3A,
+  0x17, 0x96, 0x02, 0x00,  0x08, 0x5A, 0x9B, 0x0C,  0x00, 0x00, 0x01, 0x00,  0x74, 0x61, 0x72, 0x67,
+  0x65, 0x74, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,  0x08, 0x08, 0x1C, 0x96,  0x04, 0x00, 0x08, 0x5B,
+  0x08, 0x5B, 0x1C, 0x4F,  0x96, 0x08, 0x00, 0x07,  0x07, 0x00, 0x00, 0x00,  0x02, 0x08, 0x08, 0x1C,
+  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x05, 0x3D, 0x17,  0x1D, 0x96, 0x09, 0x00,
+  0x08, 0x5C, 0x07, 0xBC,  0x02, 0x00, 0x00, 0x08,  0x5A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,
+  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x00, 0x3D, 0x17,  0x96, 0x08, 0x00, 0x07,
+  0x07, 0x00, 0x00, 0x00,  0x02, 0x08, 0x5A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0B, 0x4E, 0x96, 0x07,
+  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x05,  0x3D, 0x17, 0x96, 0x02,  0x00, 0x08, 0x5D, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x0B, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x5E, 0x9B,  0x0C, 0x00, 0x00, 0x01,
+  0x00, 0x6D, 0x65, 0x74,  0x68, 0x6F, 0x64, 0x00,  0x5B, 0x00, 0x96, 0x09,  0x00, 0x08, 0x61, 0x07,
+  0x00, 0x00, 0x00, 0x00,  0x08, 0x5F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x60,  0x52, 0x3C, 0x96, 0x02,
+  0x00, 0x08, 0x61, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x62, 0x49, 0x9D, 0x02,  0x00, 0x2D, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x61,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x63, 0x49, 0x9D,  0x02, 0x00, 0x0E, 0x00,
+  0x96, 0x05, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x3E, 0x99, 0x02, 0x00,  0x09, 0x00, 0x96, 0x05,
+  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x3E, 0x99,  0x02, 0x00, 0x09, 0x00,  0x96, 0x05, 0x00, 0x07,
+  0x02, 0x00, 0x00, 0x00,  0x3E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x5D, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0B, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x64, 0x9B,  0x17, 0x00, 0x00, 0x03,  0x00, 0x75, 0x72, 0x6C,
+  0x00, 0x74, 0x61, 0x72,  0x67, 0x65, 0x74, 0x00,  0x6D, 0x65, 0x74, 0x68,  0x6F, 0x64, 0x00, 0x97,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0x5B, 0x1C, 0x44,  0x96, 0x02, 0x00, 0x08,  0x07, 0x49, 0x12, 0x9D,
+  0x02, 0x00, 0x08, 0x00,  0x96, 0x04, 0x00, 0x08,  0x5B, 0x08, 0x53, 0x1D,  0x96, 0x04, 0x00, 0x08,
+  0x65, 0x08, 0x5F, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x08, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x5E,  0x52, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x65, 0x1C,  0x96, 0x05, 0x00, 0x07,
+  0x00, 0x00, 0x00, 0x00,  0x49, 0x9D, 0x02, 0x00,  0x3E, 0x00, 0x96, 0x02,  0x00, 0x08, 0x65, 0x1C,
+  0x96, 0x05, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x49, 0x9D, 0x02, 0x00,  0x15, 0x00, 0x96, 0x02,
+  0x00, 0x08, 0x66, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x5B, 0x1C, 0x9A, 0x01,  0x00, 0x02, 0x99, 0x02,
+  0x00, 0x10, 0x00, 0x96,  0x02, 0x00, 0x08, 0x66,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x5B, 0x1C, 0x9A,
+  0x01, 0x00, 0x01, 0x99,  0x02, 0x00, 0x10, 0x00,  0x96, 0x02, 0x00, 0x08,  0x66, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x5B, 0x1C,  0x9A, 0x01, 0x00, 0x00,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x67, 0x9B, 0x10,  0x00, 0x00, 0x02, 0x00,
+  0x75, 0x72, 0x6C, 0x00,  0x6D, 0x65, 0x74, 0x68,  0x6F, 0x64, 0x00, 0x99,  0x00, 0x96, 0x04, 0x00,
+  0x08, 0x65, 0x08, 0x5F,  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x08, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x5E, 0x52, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x08,  0x1C, 0x20, 0x96, 0x02,
+  0x00, 0x08, 0x65, 0x1C,  0x96, 0x05, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x49, 0x9D, 0x02, 0x00,
+  0x4A, 0x00, 0x96, 0x02,  0x00, 0x08, 0x65, 0x1C,  0x96, 0x05, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
+  0x49, 0x9D, 0x02, 0x00,  0x1B, 0x00, 0x96, 0x02,  0x00, 0x08, 0x66, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x08, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x68, 0x4E,  0x9A, 0x01, 0x00, 0xC2,  0x99, 0x02, 0x00, 0x16,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0x66, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x68, 0x4E, 0x9A,  0x01, 0x00, 0xC1, 0x99,  0x02, 0x00, 0x16, 0x00,  0x96, 0x02, 0x00, 0x08,
+  0x66, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x08, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x68, 0x4E, 0x9A, 0x01,
+  0x00, 0xC0, 0x8B, 0x01,  0x00, 0x00, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x5D,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0B, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x69,  0x9B, 0x10, 0x00, 0x00,  0x02, 0x00, 0x75, 0x72,
+  0x6C, 0x00, 0x6D, 0x65,  0x74, 0x68, 0x6F, 0x64,  0x00, 0x99, 0x00, 0x96,  0x04, 0x00, 0x08, 0x65,
+  0x08, 0x5F, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x5E, 0x52,  0x3C, 0x96, 0x02, 0x00,  0x08, 0x08, 0x1C, 0x20,  0x96, 0x02, 0x00, 0x08,
+  0x65, 0x1C, 0x96, 0x05,  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x49, 0x9D,  0x02, 0x00, 0x4A, 0x00,
+  0x96, 0x02, 0x00, 0x08,  0x65, 0x1C, 0x96, 0x05,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x49, 0x9D,
+  0x02, 0x00, 0x1B, 0x00,  0x96, 0x02, 0x00, 0x08,  0x66, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x08, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x68, 0x4E, 0x9A, 0x01,  0x00, 0x42, 0x99, 0x02,  0x00, 0x16, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x66,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x08, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x68,
+  0x4E, 0x9A, 0x01, 0x00,  0x41, 0x99, 0x02, 0x00,  0x16, 0x00, 0x96, 0x02,  0x00, 0x08, 0x66, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x68, 0x4E,  0x9A, 0x01, 0x00, 0x40,
+  0x8B, 0x01, 0x00, 0x00,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,
+  0x4E, 0x96, 0x13, 0x00,  0x08, 0x6A, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x6B, 0x07, 0x01,  0x00, 0x00, 0x00, 0x07,
+  0x84, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x6C, 0x07, 0x04,
+  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,
+  0x08, 0x6D, 0x07, 0x05,  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,
+  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,
+  0x4E, 0x96, 0x13, 0x00,  0x08, 0x45, 0x07, 0x06,  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x43, 0x07, 0x07,  0x00, 0x00, 0x00, 0x07,
+  0x84, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x6E, 0x07, 0x0A,
+  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,
+  0x08, 0x6F, 0x07, 0x0C,  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,
+  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,
+  0x4E, 0x96, 0x13, 0x00,  0x08, 0x70, 0x07, 0x0D,  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x71, 0x07, 0x0E,  0x00, 0x00, 0x00, 0x07,
+  0x84, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x72, 0x07, 0x0F,
+  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,
+  0x08, 0x73, 0x07, 0x10,  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,
+  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,
+  0x4E, 0x96, 0x13, 0x00,  0x08, 0x74, 0x07, 0x11,  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x75, 0x07, 0x12,  0x00, 0x00, 0x00, 0x07,
+  0x84, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x76, 0x07, 0x13,
+  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,
+  0x08, 0x77, 0x07, 0x14,  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,
+  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,
+  0x4E, 0x96, 0x13, 0x00,  0x08, 0x78, 0x07, 0x15,  0x00, 0x00, 0x00, 0x07,  0x84, 0x03, 0x00, 0x00,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x5D, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,  0x08, 0x79, 0x07, 0xC8,  0x00, 0x00, 0x00, 0x07,
+  0x68, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x09, 0x00,
+  0x07, 0x80, 0x00, 0x00,  0x00, 0x08, 0x6E, 0x08,  0x5D, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,
+  0x96, 0x07, 0x00, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x05, 0x3D, 0x17,  0x96, 0x09, 0x00, 0x08,
+  0x7A, 0x07, 0x85, 0x03,  0x00, 0x00, 0x08, 0x5D,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,
+  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x00, 0x3D, 0x17, 0x96,  0x08, 0x00, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x02,  0x08, 0x5D, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x07, 0x00,
+  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x05, 0x3D,  0x17, 0x96, 0x13, 0x00,  0x08, 0x7B, 0x07, 0x00,
+  0x00, 0x00, 0x00, 0x07,  0x68, 0x00, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,  0x00, 0x08, 0x48, 0x3D,
+  0x1D, 0x96, 0x02, 0x00,  0x08, 0x7B, 0x1C, 0x96,  0x13, 0x00, 0x08, 0x7C,  0x07, 0xC9, 0x00, 0x00,
+  0x00, 0x07, 0x68, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x7B,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x7D,
+  0x07, 0x65, 0x00, 0x00,  0x00, 0x07, 0x68, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
+  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x7B,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,
+  0x13, 0x00, 0x08, 0x7E,  0x07, 0x66, 0x00, 0x00,  0x00, 0x07, 0x68, 0x00,  0x00, 0x00, 0x07, 0x02,
+  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x7B,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0B, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x7F,  0x07, 0x67, 0x00, 0x00,  0x00, 0x07, 0x68, 0x00,
+  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x7B,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x80,  0x07, 0x68, 0x00, 0x00,
+  0x00, 0x07, 0x68, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x7B,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x81,
+  0x07, 0x69, 0x00, 0x00,  0x00, 0x07, 0x68, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
+  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x7B,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,
+  0x13, 0x00, 0x08, 0x6E,  0x07, 0x6A, 0x00, 0x00,  0x00, 0x07, 0x68, 0x00,  0x00, 0x00, 0x07, 0x02,
+  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x7B,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0B, 0x4E, 0x96,  0x13, 0x00, 0x08, 0x82,  0x07, 0x6B, 0x00, 0x00,  0x00, 0x07, 0x68, 0x00,
+  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x4F, 0x96,  0x09, 0x00, 0x07, 0x00,
+  0x04, 0x00, 0x00, 0x08,  0x82, 0x08, 0x7B, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0B, 0x4E, 0x96, 0x07,
+  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x05,  0x3D, 0x17, 0x96, 0x02,  0x00, 0x08, 0x7B, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x0B, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x0E,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x19, 0x52, 0x17,  0x96, 0x08, 0x00, 0x07,  0x83, 0x00, 0x00, 0x00,
+  0x02, 0x08, 0x7B, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0B, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,
+  0x00, 0x00, 0x08, 0x05,  0x3D, 0x17, 0x96, 0x08,  0x00, 0x07, 0x83, 0x00,  0x00, 0x00, 0x02, 0x08,
+  0x7B, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x05,  0x3D, 0x17, 0x96, 0x13,
+  0x00, 0x08, 0x83, 0x07,  0x00, 0x00, 0x00, 0x00,  0x07, 0x6E, 0x00, 0x00,  0x00, 0x07, 0x02, 0x00,
+  0x00, 0x00, 0x08, 0x48,  0x3D, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x7B, 0x1C,  0x96, 0x13, 0x00, 0x08,
+  0x84, 0x07, 0x00, 0x00,  0x00, 0x00, 0x07, 0x71,  0x00, 0x00, 0x00, 0x07,  0x02, 0x00, 0x00, 0x00,
+  0x08, 0x48, 0x3D, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x7B, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x84, 0x4E,
+  0x96, 0x02, 0x00, 0x08,  0x0B, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x85, 0x9B,  0x07, 0x00, 0x00, 0x01,
+  0x00, 0x6F, 0x00, 0x67,  0x00, 0x96, 0x02, 0x00,  0x08, 0x1A, 0x1C, 0x44,  0x96, 0x02, 0x00, 0x08,
+  0x86, 0x49, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x05,  0x00, 0x96, 0x01, 0x00,  0x02, 0x3E, 0x96, 0x07,
+  0x00, 0x08, 0x87, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x1A, 0x46,
+  0x87, 0x01, 0x00, 0x00,  0x96, 0x01, 0x00, 0x02,  0x49, 0x9D, 0x02, 0x00,  0x27, 0x00, 0x96, 0x04,
+  0x00, 0x08, 0x88, 0x04,  0x00, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x87, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x88, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x88, 0x1C, 0x4E, 0x4F,
+  0x99, 0x02, 0x00, 0xCB,  0xFF, 0x96, 0x02, 0x00,  0x08, 0x87, 0x1C, 0x3E,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x7B, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x84,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x89,  0x9B, 0x05, 0x00, 0x00,  0x00, 0x00, 0x36, 0x00,  0x96, 0x02, 0x00, 0x08,
+  0x08, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x8A, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x08, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x8B, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,
+  0x96, 0x07, 0x00, 0x07,  0x00, 0x00, 0x00, 0x00,  0x08, 0x08, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x8C,
+  0x52, 0x17, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x7B,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x84, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x8D, 0x9B, 0x0A,  0x00, 0x00, 0x01, 0x00,
+  0x6E, 0x61, 0x6D, 0x65,  0x00, 0x25, 0x00, 0x96,  0x02, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x8A, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x1C, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x85, 0x52, 0x3E,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x7B, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x84,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x8E,  0x9B, 0x10, 0x00, 0x00,  0x02, 0x00, 0x6E, 0x61,  0x6D, 0x65, 0x00, 0x73,
+  0x74, 0x79, 0x6C, 0x65,  0x00, 0x79, 0x00, 0x96,  0x02, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x8A, 0x4E, 0x12,  0x12, 0x9D, 0x02, 0x00,  0x12, 0x00, 0x96, 0x02,  0x00, 0x08, 0x08, 0x1C,
+  0x96, 0x07, 0x00, 0x08,  0x8A, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x08, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x8A, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0C, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x8F, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x08, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x85,  0x52, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0C, 0x1C,  0x96, 0x07, 0x00, 0x07,
+  0x01, 0x00, 0x00, 0x00,  0x08, 0x08, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x90,  0x52, 0x17, 0x96, 0x07,
+  0x00, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x8C, 0x52, 0x17,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x7B, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x84,  0x4E, 0x96, 0x02, 0x00,
+  0x08, 0x0B, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x91,  0x9B, 0x05, 0x00, 0x00,  0x00, 0x00, 0x5B, 0x00,
+  0x96, 0x04, 0x00, 0x08,  0x92, 0x08, 0x08, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x8A, 0x4E, 0x3C, 0x96,
+  0x07, 0x00, 0x08, 0x93,  0x07, 0x00, 0x00, 0x00,  0x00, 0x42, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x92,
+  0x46, 0x87, 0x01, 0x00,  0x00, 0x96, 0x01, 0x00,  0x02, 0x49, 0x9D, 0x02,  0x00, 0x25, 0x00, 0x96,
+  0x04, 0x00, 0x08, 0x88,  0x04, 0x00, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x88,  0x1C, 0x96, 0x07, 0x00,
+  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x93, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x14, 0x52, 0x17, 0x99,
+  0x02, 0x00, 0xCD, 0xFF,  0x96, 0x02, 0x00, 0x08,  0x93, 0x1C, 0x3E, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x7B, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x84, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0B, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x90, 0x9B,  0x0A, 0x00, 0x00, 0x01,  0x00, 0x6E, 0x61, 0x6D,  0x65, 0x00, 0x5C, 0x00,
+  0x96, 0x02, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x8B, 0x4E,  0x12, 0x12, 0x9D, 0x02,
+  0x00, 0x12, 0x00, 0x96,  0x02, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x8B, 0x07, 0x00,
+  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x08, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x8B,
+  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x8A, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x1C, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x94, 0x52, 0x4F,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x7B, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x84,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x94,  0x9B, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x73, 0x74,  0x79, 0x6C, 0x65, 0x00,
+  0x9D, 0x03, 0x96, 0x02,  0x00, 0x08, 0x8F, 0x1C,  0x96, 0x01, 0x00, 0x02,  0x49, 0x12, 0x9D, 0x02,
+  0x00, 0x05, 0x00, 0x96,  0x01, 0x00, 0x02, 0x3E,  0x96, 0x09, 0x00, 0x08,  0x95, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x08, 0x83,  0x40, 0x3C, 0x96, 0x02,  0x00, 0x08, 0x8F, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x96, 0x4E, 0x12, 0x9D,  0x02, 0x00, 0x15, 0x00,  0x96, 0x02, 0x00, 0x08,  0x95, 0x1C, 0x96, 0x04,
+  0x00, 0x08, 0x97, 0x08,  0x8F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x96, 0x4E,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x8F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x98,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x99, 0x49, 0x9D,
+  0x02, 0x00, 0x2B, 0x00,  0x96, 0x02, 0x00, 0x08,  0x8F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x98, 0x4E,
+  0x96, 0x02, 0x00, 0x08,  0x9A, 0x49, 0x12, 0x9D,  0x02, 0x00, 0x0E, 0x00,  0x96, 0x02, 0x00, 0x08,
+  0x95, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x99, 0x05,  0x00, 0x4F, 0x99, 0x02,  0x00, 0x0E, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x95,  0x1C, 0x96, 0x04, 0x00,  0x08, 0x99, 0x05, 0x01,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x8F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x9B,  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x41, 0x00, 0x96,
+  0x04, 0x00, 0x08, 0x92,  0x08, 0x8F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x9B,  0x4E, 0x96, 0x07, 0x00,
+  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x08, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x9C, 0x52, 0x3C, 0x96,
+  0x02, 0x00, 0x08, 0x92,  0x1C, 0x96, 0x01, 0x00,  0x02, 0x49, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x0F,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0x95, 0x1C, 0x96,  0x04, 0x00, 0x08, 0x9B,  0x08, 0x92, 0x1C, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x95, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x9D, 0x08,  0x8F, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x9D, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x8F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x9E,
+  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x26, 0x00, 0x96,  0x02, 0x00, 0x08, 0x95,  0x1C, 0x96, 0x04, 0x00,
+  0x08, 0x9F, 0x08, 0x8F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x9E, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xA0, 0x52,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x8F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xA1,  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x20, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x95,  0x1C, 0x96, 0x04, 0x00,  0x08, 0xA2, 0x08, 0x8F,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0xA1, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0xA3, 0x3D, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x8F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xA4, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xA5,
+  0x49, 0x9D, 0x02, 0x00,  0x2B, 0x00, 0x96, 0x02,  0x00, 0x08, 0x8F, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0xA4, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x9A, 0x49,  0x12, 0x9D, 0x02, 0x00,  0x0E, 0x00, 0x96, 0x02,
+  0x00, 0x08, 0x95, 0x1C,  0x96, 0x04, 0x00, 0x08,  0xA5, 0x05, 0x00, 0x4F,  0x99, 0x02, 0x00, 0x0E,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0x95, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xA5,  0x05, 0x01, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x8F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xA6, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xA7,
+  0x49, 0x9D, 0x02, 0x00,  0x4F, 0x00, 0x96, 0x02,  0x00, 0x08, 0x8F, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0xA6, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xA8, 0x49,  0x9D, 0x02, 0x00, 0x25,  0x00, 0x96, 0x02, 0x00,
+  0x08, 0x95, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xA6,  0x08, 0x8F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xA6,
+  0x4E, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0xA3, 0x3D,  0x4F, 0x99, 0x02, 0x00,
+  0x0E, 0x00, 0x96, 0x02,  0x00, 0x08, 0x95, 0x1C,  0x96, 0x04, 0x00, 0x08,  0xA6, 0x05, 0x00, 0x4F,
+  0x99, 0x02, 0x00, 0x0E,  0x00, 0x96, 0x02, 0x00,  0x08, 0x95, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xA6,
+  0x05, 0x01, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x8F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xA9, 0x4E, 0x12,
+  0x9D, 0x02, 0x00, 0x20,  0x00, 0x96, 0x02, 0x00,  0x08, 0x95, 0x1C, 0x96,  0x04, 0x00, 0x08, 0xA9,
+  0x08, 0x8F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xA9,  0x4E, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
+  0x00, 0x08, 0xA3, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x8F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xAA,
+  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x20, 0x00, 0x96,  0x02, 0x00, 0x08, 0x95,  0x1C, 0x96, 0x04, 0x00,
+  0x08, 0xAB, 0x08, 0x8F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xAA, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0xA3, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x8F,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0xAC, 0x4E, 0x12,  0x9D, 0x02, 0x00, 0x20,  0x00, 0x96, 0x02, 0x00,  0x08, 0x95, 0x1C, 0x96,
+  0x04, 0x00, 0x08, 0xAC,  0x08, 0x8F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0xAC,  0x4E, 0x96, 0x07, 0x00,
+  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0xA3, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x8F, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0xAD,  0x4E, 0x12, 0x9D, 0x02,  0x00, 0x20, 0x00, 0x96,  0x02, 0x00, 0x08, 0x95,
+  0x1C, 0x96, 0x04, 0x00,  0x08, 0xAE, 0x08, 0x8F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xAD, 0x4E, 0x96,
+  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0xA3, 0x3D, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x8F,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0xAF, 0x4E, 0x12,  0x9D, 0x02, 0x00, 0x3B,  0x00, 0x96, 0x04, 0x00,
+  0x08, 0x92, 0x08, 0x8F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xAF, 0x4E, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0xA3, 0x3D, 0x3C, 0x96,  0x07, 0x00, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
+  0x92, 0x1C, 0x48, 0x12,  0x9D, 0x02, 0x00, 0x0F,  0x00, 0x96, 0x02, 0x00,  0x08, 0x95, 0x1C, 0x96,
+  0x04, 0x00, 0x08, 0xB0,  0x08, 0x92, 0x1C, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x8F, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0xB1, 0x4E,  0x96, 0x02, 0x00, 0x08,  0xB2, 0x49, 0x9D, 0x02,  0x00, 0x2B, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x8F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB1, 0x4E, 0x96,  0x02, 0x00, 0x08, 0xB3,
+  0x49, 0x12, 0x9D, 0x02,  0x00, 0x0E, 0x00, 0x96,  0x02, 0x00, 0x08, 0x95,  0x1C, 0x96, 0x04, 0x00,
+  0x08, 0xB2, 0x05, 0x00,  0x4F, 0x99, 0x02, 0x00,  0x0E, 0x00, 0x96, 0x02,  0x00, 0x08, 0x95, 0x1C,
+  0x96, 0x04, 0x00, 0x08,  0xB2, 0x05, 0x01, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x95, 0x1C, 0x3E, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x7B, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x84, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0B, 0x4E, 0x96, 0x02,  0x00, 0x08, 0xB4, 0x9B,  0x09, 0x00, 0x00, 0x01,  0x00, 0x63, 0x73, 0x73,
+  0x00, 0xDA, 0x00, 0x96,  0x04, 0x00, 0x08, 0xB7,  0x08, 0xB5, 0x1C, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x02,  0x00, 0x08, 0xB6, 0x52,  0x3C, 0x96, 0x02, 0x00,
+  0x08, 0xB7, 0x1C, 0x44,  0x96, 0x02, 0x00, 0x08,  0xB8, 0x49, 0x12, 0x9D,  0x02, 0x00, 0x06, 0x00,
+  0x96, 0x02, 0x00, 0x05,  0x00, 0x3E, 0x96, 0x02,  0x00, 0x08, 0x08, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x8A, 0x4E, 0x12, 0x12,  0x9D, 0x02, 0x00, 0x12,  0x00, 0x96, 0x02, 0x00,  0x08, 0x08, 0x1C, 0x96,
+  0x07, 0x00, 0x08, 0x8A,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0xB7,
+  0x46, 0x87, 0x01, 0x00,  0x00, 0x96, 0x01, 0x00,  0x02, 0x49, 0x9D, 0x02,  0x00, 0x56, 0x00, 0x96,
+  0x04, 0x00, 0x08, 0x88,  0x04, 0x00, 0x3C, 0x96,  0x02, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x8A, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x88,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB7, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x88,  0x1C, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x08,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x85, 0x52, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x88, 0x1C, 0x96, 0x07,
+  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x90, 0x52, 0x17,
+  0x99, 0x02, 0x00, 0x9C,  0xFF, 0x96, 0x07, 0x00,  0x07, 0x00, 0x00, 0x00,  0x00, 0x08, 0x08, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x8C, 0x52, 0x17, 0x96,  0x02, 0x00, 0x05, 0x01,  0x3E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x7B, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x84, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,
+  0x96, 0x04, 0x00, 0x08,  0xB9, 0x08, 0x7B, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x84, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x0B, 0x4E,  0x96, 0x02, 0x00, 0x08,  0xB4, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x7B,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x84, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x96, 0x13, 0x00,
+  0x08, 0x39, 0x07, 0x00,  0x00, 0x00, 0x00, 0x07,  0x2D, 0x01, 0x00, 0x00,  0x07, 0x02, 0x00, 0x00,
+  0x00, 0x08, 0x01, 0x3D,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x7B, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x84,
+  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x3B,  0x9B, 0x05, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x7B, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x84,
+  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x3C,  0x9B, 0x09, 0x00, 0x00,
+  0x01, 0x00, 0x73, 0x72,  0x63, 0x00, 0x6B, 0x00,  0x96, 0x02, 0x00, 0x08,  0x3E, 0x1C, 0x96, 0x01,
+  0x00, 0x02, 0x49, 0x12,  0x9D, 0x02, 0x00, 0x19,  0x00, 0x96, 0x09, 0x00,  0x05, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0x08, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x3B, 0x52,  0x17, 0x99, 0x02, 0x00,
+  0x41, 0x00, 0x96, 0x04,  0x00, 0x08, 0xB7, 0x08,  0x3E, 0x1C, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,
+  0x00, 0x00, 0x08, 0x08,  0x1C, 0x96, 0x02, 0x00,  0x08, 0xB9, 0x52, 0x3C,  0x96, 0x02, 0x00, 0x08,
+  0x08, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x3D, 0x08,  0xB7, 0x1C, 0x4F, 0x96,  0x02, 0x00, 0x08, 0xB7,
+  0x1C, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x08, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x3B, 0x52, 0x17, 0x4F,  0x96, 0x0E, 0x00, 0x07,  0x64, 0x00, 0x00, 0x00,  0x08, 0xBA, 0x07, 0x71,
+  0x00, 0x00, 0x00, 0x08,  0x7B, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x84, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x0B, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x04, 0x00,  0x00, 0x00, 0x08, 0x00,  0x3D, 0x17, 0x96, 0x08,
+  0x00, 0x07, 0x03, 0x04,  0x00, 0x00, 0x02, 0x08,  0x7B, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x84, 0x4E,
+  0x96, 0x02, 0x00, 0x08,  0x0B, 0x4E, 0x96, 0x07,  0x00, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x05,
+  0x3D, 0x17, 0x96, 0x09,  0x00, 0x07, 0x03, 0x04,  0x00, 0x00, 0x08, 0x84,  0x08, 0x7B, 0x1C, 0x96,
+  0x07, 0x00, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x05, 0x3D, 0x17, 0x96,  0x13, 0x00, 0x08, 0xBB,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x07, 0xFA, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
+  0x01, 0x3D, 0x1D, 0x96,  0x13, 0x00, 0x08, 0xBC,  0x07, 0x01, 0x00, 0x00,  0x00, 0x07, 0xFA, 0x00,
+  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,  0x01, 0x3D, 0x1D, 0x96,  0x13, 0x00, 0x08, 0xBD,
+  0x07, 0x02, 0x00, 0x00,  0x00, 0x07, 0xFA, 0x00,  0x00, 0x00, 0x07, 0x02,  0x00, 0x00, 0x00, 0x08,
+  0x01, 0x3D, 0x1D, 0x96,  0x04, 0x00, 0x08, 0xBE,  0x08, 0xBC, 0x1C, 0x1D,  0x96, 0x03, 0x00, 0x08,
+  0x1A, 0x02, 0x1D, 0x96,  0x0D, 0x00, 0x07, 0x06,  0x00, 0x00, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
+  0x02, 0x08, 0x08, 0x1C,  0x96, 0x07, 0x00, 0x07,  0x04, 0x00, 0x00, 0x00,  0x08, 0x05, 0x3D, 0x17,
+  0x00
 };
 
commit e22fa8ee92bc8da3bdd7fe0dcf9e54b98e321dcf
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 14:21:28 2007 +0200

    Make TextField's SwfdecParagraph save index to the string, not pointer

diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c
index d50bdb9..881327c 100644
--- a/libswfdec/swfdec_text_field_movie.c
+++ b/libswfdec/swfdec_text_field_movie.c
@@ -102,7 +102,7 @@ swfdec_text_paragraph_add_block (SwfdecParagraph *paragraph, int index_,
 
 static void
 swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text,
-    SwfdecParagraph *paragraph, guint start_index, guint end_index)
+    SwfdecParagraph *paragraph, guint start_index, guint length)
 {
   SwfdecTextFormat *format, *format_prev;
   guint index_;
@@ -113,18 +113,14 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text,
 
   g_assert (SWFDEC_IS_TEXT_FIELD_MOVIE (text));
   g_assert (paragraph != NULL);
-  g_assert (start_index <= end_index);
-  g_assert (end_index <= text->input->len);
+  g_assert (start_index + length <= text->input->len);
 
-  paragraph->text = text->input->str + start_index;
-  paragraph->text_length = end_index - start_index;
+  paragraph->index_ = start_index;
+  paragraph->length = length;
 
   paragraph->blocks = NULL;
   paragraph->attrs = NULL;
 
-  if (paragraph->text_length == 0)
-    return;
-
   g_assert (text->formats != NULL);
   for (iter = text->formats; iter->next != NULL &&
       ((SwfdecFormatIndex *)(iter->next->data))->index_ <= start_index;
@@ -171,7 +167,8 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text,
   attr_underline->start_index = 0;
 
   for (iter = iter->next;
-      iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index_ < end_index;
+      iter != NULL &&
+      ((SwfdecFormatIndex *)(iter->data))->index_ < start_index + length;
       iter = iter->next)
   {
     format_prev = format;
@@ -258,31 +255,31 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text,
   }
 
   // Close attributes
-  attr_bold->end_index = end_index - start_index;
+  attr_bold->end_index = length;
   swfdec_text_paragraph_add_attribute (paragraph, attr_bold);
   attr_bold = NULL;
 
-  attr_color->end_index = end_index - start_index;
+  attr_color->end_index = length;
   swfdec_text_paragraph_add_attribute (paragraph, attr_color);
   attr_color = NULL;
 
-  attr_font->end_index = end_index - start_index;
+  attr_font->end_index = length;
   swfdec_text_paragraph_add_attribute (paragraph, attr_font);
   attr_font = NULL;
 
-  attr_italic->end_index = end_index - start_index;
+  attr_italic->end_index = length;
   swfdec_text_paragraph_add_attribute (paragraph, attr_italic);
   attr_italic = NULL;
 
-  attr_letter_spacing->end_index = end_index - start_index;
+  attr_letter_spacing->end_index = length;
   swfdec_text_paragraph_add_attribute (paragraph, attr_letter_spacing);
   attr_letter_spacing = NULL;
 
-  attr_size->end_index = end_index - start_index;
+  attr_size->end_index = length;
   swfdec_text_paragraph_add_attribute (paragraph, attr_size);
   attr_size = NULL;
 
-  attr_underline->end_index = end_index - start_index;
+  attr_underline->end_index = length;
   swfdec_text_paragraph_add_attribute (paragraph, attr_underline);
   attr_underline = NULL;
 
@@ -330,7 +327,7 @@ swfdec_text_field_movie_free_paragraphs (SwfdecParagraph *paragraphs)
 
   g_return_if_fail (paragraphs != NULL);
 
-  for (i = 0; paragraphs[i].text != NULL; i++)
+  for (i = 0; paragraphs[i].blocks != NULL; i++)
   {
     for (iter = paragraphs[i].blocks; iter != NULL; iter = iter->next) {
       pango_tab_array_free (((SwfdecBlock *)(iter->data))->tab_stops);
@@ -417,7 +414,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
 
   layouts = g_array_new (TRUE, TRUE, sizeof (SwfdecLayout));
 
-  for (i = 0; paragraphs[i].text != NULL; i++)
+  for (i = 0; paragraphs[i].blocks != NULL; i++)
   {
     GSList *iter;
     guint skip;
@@ -437,7 +434,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
 	length =
 	  ((SwfdecBlock *)(iter->next->data))->index_ - block->index_;
       } else {
-	length = paragraphs[i].text_length - block->index_;
+	length = paragraphs[i].length - block->index_;
       }
 
       if (skip > length) {
@@ -490,8 +487,8 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
       pango_attr_list_unref (attr_list);
 
       pango_layout_set_text (playout,
-	  paragraphs[i].text + block->index_ + skip,
-	  paragraphs[i].text_length - block->index_ - skip);
+	  text->input->str + paragraphs[i].index_ + block->index_ + skip,
+	  paragraphs[i].length - block->index_ - skip);
 
       if (iter->next != NULL && text->text->word_wrap)
       {
@@ -504,7 +501,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
 	line = pango_layout_get_line_readonly (playout, line_num);
 	skip_new = line->start_index + line->length - (length - skip);
 	pango_layout_set_text (playout,
-	    paragraphs[i].text + block->index_ + skip,
+	    text->input->str + paragraphs[i].index_ + block->index_ + skip,
 	    length - skip + skip_new);
 	skip = skip_new;
       }
diff --git a/libswfdec/swfdec_text_field_movie.h b/libswfdec/swfdec_text_field_movie.h
index 7a055b2..15af317 100644
--- a/libswfdec/swfdec_text_field_movie.h
+++ b/libswfdec/swfdec_text_field_movie.h
@@ -58,8 +58,8 @@ typedef struct {
 } SwfdecBlock;
 
 typedef struct {
-  const char		*text;
-  guint			text_length;
+  guint			index_;
+  guint			length;
 
   gboolean		bullet;
   int			indent;
commit 4723a6c17eeec403b01cce07af4925c0361b3aeb
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 13:57:30 2007 +0200

    Add a test for LI, P and BR tags to text-field-html-input

diff --git a/test/trace/text-field-html-input-6.swf b/test/trace/text-field-html-input-6.swf
index 918e2ba..c08f64c 100644
Binary files a/test/trace/text-field-html-input-6.swf and b/test/trace/text-field-html-input-6.swf differ
diff --git a/test/trace/text-field-html-input-6.swf.trace b/test/trace/text-field-html-input-6.swf.trace
index 7c0beaa..3093e99 100644
--- a/test/trace/text-field-html-input-6.swf.trace
+++ b/test/trace/text-field-html-input-6.swf.trace
@@ -182,3 +182,51 @@ a
 a
 <P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
 0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+8: multiline: false condenseWhite: false
+a
b
cd
e
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+1/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+3/
: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+6/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+8/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+8: multiline: true condenseWhite: false
+a
b
cd
e
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+1/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+3/
: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+6/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+8/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+8: multiline: false condenseWhite: true
+a
b
cd
e
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+1/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+3/
: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+6/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+8/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+8: multiline: true condenseWhite: true
+a
b
cd
e
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+1/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+3/
: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+6/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+8/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
diff --git a/test/trace/text-field-html-input-7.swf b/test/trace/text-field-html-input-7.swf
index 9d00d29..787d500 100644
Binary files a/test/trace/text-field-html-input-7.swf and b/test/trace/text-field-html-input-7.swf differ
diff --git a/test/trace/text-field-html-input-7.swf.trace b/test/trace/text-field-html-input-7.swf.trace
index 7b8cbf4..acd8f59 100644
--- a/test/trace/text-field-html-input-7.swf.trace
+++ b/test/trace/text-field-html-input-7.swf.trace
@@ -178,3 +178,43 @@ a
 a
 <P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
 0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+8: multiline: false condenseWhite: false
+abcde
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">abcde</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+1/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+2/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+3/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+4/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+8: multiline: true condenseWhite: false
+a
b
cd
e
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+1/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+3/
: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+6/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+8/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+8: multiline: false condenseWhite: true
+abcde
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">abcde</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+1/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+2/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+3/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+4/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+8: multiline: true condenseWhite: true
+a
b
cd
e
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+1/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+3/
: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+6/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+8/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
diff --git a/test/trace/text-field-html-input-8.swf b/test/trace/text-field-html-input-8.swf
index ad7541b..dc640a1 100644
Binary files a/test/trace/text-field-html-input-8.swf and b/test/trace/text-field-html-input-8.swf differ
diff --git a/test/trace/text-field-html-input-8.swf.trace b/test/trace/text-field-html-input-8.swf.trace
index 19ef364..4e97379 100644
--- a/test/trace/text-field-html-input-8.swf.trace
+++ b/test/trace/text-field-html-input-8.swf.trace
@@ -178,3 +178,43 @@ a
 a
 <P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
 0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+8: multiline: false condenseWhite: false
+abcde
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">abcde</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+1/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+2/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+3/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+4/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+8: multiline: true condenseWhite: false
+a
b
cd
e
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+1/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+3/
: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+6/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+8/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+8: multiline: false condenseWhite: true
+abcde
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">abcde</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+1/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+2/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+3/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+4/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+8: multiline: true condenseWhite: true
+a
b
cd
e
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P><LI><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">b</FONT></LI><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">cd</FONT></P><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">e</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+1/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+3/
: align=left blockIndent=0 bold=false bullet=true color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+4/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+5/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+6/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+7/e: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+8/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
diff --git a/test/trace/text-field-html-input.as b/test/trace/text-field-html-input.as
index fb0641a..fc0754c 100644
--- a/test/trace/text-field-html-input.as
+++ b/test/trace/text-field-html-input.as
@@ -40,7 +40,8 @@ var texts = [
   "a<p align='right'>b</p>c",
   "a<p align='right'>ä</p>c",
   "a<!-- b -->c",
-  "a<!--->b"
+  "a<!--->b",
+  "a<br><li>b</li>c<p>d</p>e<br>"
 ];
 
 t.html = true;
commit 14e539d812ba007cb9e2fa7784aa905e66087766
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 13:56:57 2007 +0200

    Fix some error in HTML input with multiline enabled and version > 6

diff --git a/libswfdec/swfdec_text_field_movie_html.c b/libswfdec/swfdec_text_field_movie_html.c
index b3976e7..3352bd6 100644
--- a/libswfdec/swfdec_text_field_movie_html.c
+++ b/libswfdec/swfdec_text_field_movie_html.c
@@ -318,19 +318,19 @@ swfdec_text_field_movie_html_parse_tag (ParserData *data, const char *p)
   }
   else
   {
-    if (data->cx->version < 7 &&
-	(name_length == 2 && !g_strncasecmp (name, "br", 2))) {
-      data->text = g_string_append_c (data->text, '\n');
-      tag = NULL;
-    } else {
-      SwfdecAsObject *object;
-      SwfdecAsValue val;
+    SwfdecAsObject *object;
+    SwfdecAsValue val;
 
-      if (data->cx->version < 7 &&
-	  ((name_length == 1 && !g_strncasecmp (name, "p", 1)) ||
-	   (name_length == 2 && !g_strncasecmp (name, "li", 2))))
+    if (data->multiline) {
+      if (name_length == 2 && !g_strncasecmp (name, "br", 2))
+      {
+	data->text = g_string_append_c (data->text, '\n');
+      }
+      else if ((name_length == 1 && !g_strncasecmp (name, "p", 1)) ||
+	  (name_length == 2 && !g_strncasecmp (name, "li", 2)) ||
+	  (name_length == 2 && !g_strncasecmp (name, "br", 2)))
       {
-	GSList *iter;
+	    GSList *iter;
 
 	for (iter = data->tags_open; iter != NULL; iter = iter->next) {
 	  ParserTag *f = iter->data;
@@ -341,41 +341,40 @@ swfdec_text_field_movie_html_parse_tag (ParserData *data, const char *p)
 	  }
 	}
       }
+    }
 
-      tag = g_new0 (ParserTag, 1);
-      tag->name = name;
-      tag->name_length = name_length;
-      tag->format = SWFDEC_TEXT_FORMAT (swfdec_text_format_new (data->cx));
-      tag->index = g_utf8_strlen (data->text->str, -1);
-
-      data->tags_open = g_slist_prepend (data->tags_open, tag);
-
-      // set format based on tag
-      object = SWFDEC_AS_OBJECT (tag->format);
-      SWFDEC_AS_VALUE_SET_BOOLEAN (&val, TRUE);
-
-      if (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) {
-	swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bullet, &val);
-      } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "b", 1)) {
-	swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bold, &val);
-      } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "i", 1)) {
-	swfdec_as_object_set_variable (object, SWFDEC_AS_STR_italic, &val);
-      } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "u", 1)) {
-	swfdec_as_object_set_variable (object, SWFDEC_AS_STR_underline, &val);
-      } else if (tag->name_length == 3 && !g_strncasecmp (tag->name, "img", 3))
-      {
-	SWFDEC_FIXME ("IMG tag support for TextField's HTML input missing");
-      }
+    tag = g_new0 (ParserTag, 1);
+    tag->name = name;
+    tag->name_length = name_length;
+    tag->format = SWFDEC_TEXT_FORMAT (swfdec_text_format_new (data->cx));
+    tag->index = g_utf8_strlen (data->text->str, -1);
+
+    data->tags_open = g_slist_prepend (data->tags_open, tag);
+
+    // set format based on tag
+    object = SWFDEC_AS_OBJECT (tag->format);
+    SWFDEC_AS_VALUE_SET_BOOLEAN (&val, TRUE);
+
+    if (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bullet, &val);
+    } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "b", 1)) {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bold, &val);
+    } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "i", 1)) {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_italic, &val);
+    } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "u", 1)) {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_underline, &val);
+    } else if (tag->name_length == 3 && !g_strncasecmp (tag->name, "img", 3)) {
+      SWFDEC_FIXME ("IMG tag support for TextField's HTML input missing");
+    }
 
-      if (data->style_sheet &&
-	  ((tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) ||
-	  (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)))) {
-	SwfdecTextFormat *format = swfdec_style_sheet_get_tag_format (
-	    data->style_sheet, swfdec_as_context_give_string (data->cx,
-		g_strndup (tag->name, tag->name_length)));
-	if (format != NULL)
-	  swfdec_text_format_add (tag->format, format);
-      }
+    if (data->style_sheet &&
+	((tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) ||
+	(tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)))) {
+      SwfdecTextFormat *format = swfdec_style_sheet_get_tag_format (
+	  data->style_sheet, swfdec_as_context_give_string (data->cx,
+	      g_strndup (tag->name, tag->name_length)));
+      if (format != NULL)
+	swfdec_text_format_add (tag->format, format);
     }
 
     // parse attributes
commit 1fe0cfbd5ca20e0e62ed212657265104bab81947
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 13:44:45 2007 +0200

    Add testing for comment parsing to text-field-html-input test

diff --git a/test/trace/text-field-html-input-6.swf b/test/trace/text-field-html-input-6.swf
index 9640b1f..918e2ba 100644
Binary files a/test/trace/text-field-html-input-6.swf and b/test/trace/text-field-html-input-6.swf differ
diff --git a/test/trace/text-field-html-input-6.swf.trace b/test/trace/text-field-html-input-6.swf.trace
index 43479bd..7c0beaa 100644
--- a/test/trace/text-field-html-input-6.swf.trace
+++ b/test/trace/text-field-html-input-6.swf.trace
@@ -146,3 +146,39 @@ aä
c
 1/ä: align=right blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
 2/
: align=right blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
 3/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+6: multiline: false condenseWhite: false
+ac
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+6: multiline: true condenseWhite: false
+ac
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+6: multiline: false condenseWhite: true
+ac
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+6: multiline: true condenseWhite: true
+ac
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+7: multiline: false condenseWhite: false
+a
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+7: multiline: true condenseWhite: false
+a
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+7: multiline: false condenseWhite: true
+a
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+7: multiline: true condenseWhite: true
+a
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
diff --git a/test/trace/text-field-html-input-7.swf b/test/trace/text-field-html-input-7.swf
index f7e2285..9d00d29 100644
Binary files a/test/trace/text-field-html-input-7.swf and b/test/trace/text-field-html-input-7.swf differ
diff --git a/test/trace/text-field-html-input-7.swf.trace b/test/trace/text-field-html-input-7.swf.trace
index 08c64de..7b8cbf4 100644
--- a/test/trace/text-field-html-input-7.swf.trace
+++ b/test/trace/text-field-html-input-7.swf.trace
@@ -142,3 +142,39 @@ aä
c
 1/ä: align=right blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
 2/
: align=right blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
 3/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+6: multiline: false condenseWhite: false
+ac
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+6: multiline: true condenseWhite: false
+ac
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+6: multiline: false condenseWhite: true
+ac
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+6: multiline: true condenseWhite: true
+ac
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+7: multiline: false condenseWhite: false
+a
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+7: multiline: true condenseWhite: false
+a
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+7: multiline: false condenseWhite: true
+a
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+7: multiline: true condenseWhite: true
+a
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
diff --git a/test/trace/text-field-html-input-8.swf b/test/trace/text-field-html-input-8.swf
index b84be18..ad7541b 100644
Binary files a/test/trace/text-field-html-input-8.swf and b/test/trace/text-field-html-input-8.swf differ
diff --git a/test/trace/text-field-html-input-8.swf.trace b/test/trace/text-field-html-input-8.swf.trace
index d5f60d6..19ef364 100644
--- a/test/trace/text-field-html-input-8.swf.trace
+++ b/test/trace/text-field-html-input-8.swf.trace
@@ -142,3 +142,39 @@ aä
c
 1/ä: align=right blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
 2/
: align=right blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
 3/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+6: multiline: false condenseWhite: false
+ac
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+6: multiline: true condenseWhite: false
+ac
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+6: multiline: false condenseWhite: true
+ac
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+6: multiline: true condenseWhite: true
+ac
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">ac</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+1/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+7: multiline: false condenseWhite: false
+a
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+7: multiline: true condenseWhite: false
+a
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+7: multiline: false condenseWhite: true
+a
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+7: multiline: true condenseWhite: true
+a
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
diff --git a/test/trace/text-field-html-input.as b/test/trace/text-field-html-input.as
index a6f0558..fb0641a 100644
--- a/test/trace/text-field-html-input.as
+++ b/test/trace/text-field-html-input.as
@@ -38,7 +38,9 @@ var texts = [
   "a\r\nb",
   "a\r\rb",
   "a<p align='right'>b</p>c",
-  "a<p align='right'>ä</p>c"
+  "a<p align='right'>ä</p>c",
+  "a<!-- b -->c",
+  "a<!--->b"
 ];
 
 t.html = true;
commit e880c38b84a0de3c47931bc12d12dbebdd9117b1
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 13:43:07 2007 +0200

    Fix an error in parsing of HTML comments. Added some asserts

diff --git a/libswfdec/swfdec_text_field_movie_html.c b/libswfdec/swfdec_text_field_movie_html.c
index 1a61972..b3976e7 100644
--- a/libswfdec/swfdec_text_field_movie_html.c
+++ b/libswfdec/swfdec_text_field_movie_html.c
@@ -54,6 +54,9 @@ typedef struct {
 static void
 swfdec_text_field_movie_html_parse_close_tag (ParserData *data, ParserTag *tag)
 {
+  g_return_if_fail (data != NULL);
+  g_return_if_fail (tag != NULL);
+
   if (data->multiline &&
       ((tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)) ||
        (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2))))
@@ -93,7 +96,7 @@ swfdec_text_field_movie_html_parse_comment (ParserData *data, const char *p)
   g_return_val_if_fail (p != NULL, NULL);
   g_return_val_if_fail (strncmp (p, "<!--", strlen ("<!--")) == 0, NULL);
 
-  end = strstr (p, "-->");
+  end = strstr (p + strlen ("<!--"), "-->");
   if (end != NULL)
     end += strlen("-->");
 
@@ -109,6 +112,13 @@ swfdec_text_field_movie_html_tag_set_attribute (ParserData *data,
   SwfdecAsValue val;
   SwfdecAsObject *object;
 
+  g_return_if_fail (data != NULL);
+  g_return_if_fail (tag != NULL);
+  g_return_if_fail (name != NULL);
+  g_return_if_fail (name_length >= 0);
+  g_return_if_fail (value != NULL);
+  g_return_if_fail (value_length >= 0);
+
   object = SWFDEC_AS_OBJECT (tag->format);
   SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string (
 	object->context, g_strndup (value, value_length)));
@@ -213,7 +223,9 @@ swfdec_text_field_movie_html_parse_attribute (ParserData *data, ParserTag *tag,
   const char *end, *name, *value;
   int name_length, value_length;
 
-  g_return_val_if_fail ((*p != '>' && *p != '\0'), p);
+  g_return_val_if_fail (data != NULL, NULL);
+  g_return_val_if_fail (tag != NULL, NULL);
+  g_return_val_if_fail ((*p != '>' && *p != '\0'), NULL);
 
   end = p + strcspn (p, "=> \r\n\t");
   if (end - p <= 0)
@@ -720,6 +732,7 @@ swfdec_text_field_movie_html_text_append_paragraph (SwfdecTextFieldMovie *text,
 
   return string;
 }
+
 const char *
 swfdec_text_field_movie_get_html_text (SwfdecTextFieldMovie *text)
 {
commit 1d982b25e49b32a094d95b68307449d77f9a21a4
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 13:36:38 2007 +0200

    Rename swfdec_html_parser.c to swfdec_text_field_movie_html.c, move some code
    
    The HTML generating code is now also part of swfdec_text_field_movie_html.c

diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index c67f132..0cf8b71 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -60,6 +60,7 @@ libswfdec_ at SWFDEC_MAJORMINOR@_la_SOURCES = \
 	swfdec_text_field.c \
 	swfdec_text_field_movie.c \
 	swfdec_text_field_movie_as.c \
+	swfdec_text_field_movie_html.c \
 	swfdec_enums.c \
 	swfdec_event.c \
 	swfdec_file_loader.c \
@@ -70,7 +71,6 @@ libswfdec_ at SWFDEC_MAJORMINOR@_la_SOURCES = \
 	swfdec_font.c \
 	swfdec_graphic.c \
 	swfdec_graphic_movie.c \
-	swfdec_html_parser.c \
 	swfdec_image.c \
 	swfdec_interval.c \
 	swfdec_key_as.c \
diff --git a/libswfdec/swfdec_html_parser.c b/libswfdec/swfdec_html_parser.c
deleted file mode 100644
index fbeb00e..0000000
--- a/libswfdec/swfdec_html_parser.c
+++ /dev/null
@@ -1,474 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Pekka Lampila <pekka.lampila at iki.fi>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
- * Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "swfdec_text_field_movie.h"
-#include "swfdec_as_strings.h"
-#include "swfdec_style_sheet.h"
-#include "swfdec_xml.h"
-#include "swfdec_debug.h"
-
-typedef struct {
-  const char *		name;
-  int			name_length;
-  guint			index;
-  guint			end_index;
-  SwfdecTextFormat	*format;
-} ParserTag;
-
-typedef struct {
-  SwfdecAsContext	*cx;
-  gboolean		multiline;
-  gboolean		condense_white;
-  SwfdecStyleSheet	*style_sheet;
-  GString *		text;
-  GSList *		tags_open;
-  GSList *		tags_closed;
-} ParserData;
-
-static void
-swfdec_text_field_movie_html_parse_close_tag (ParserData *data, ParserTag *tag)
-{
-  if (data->multiline &&
-      ((tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)) ||
-       (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2))))
-  {
-    GSList *iter;
-
-    for (iter = data->tags_closed; iter != NULL; iter = iter->next) {
-      ParserTag *f = iter->data;
-      if (f->end_index < tag->index)
-	break;
-      if (f->name_length == 4 && !g_strncasecmp (f->name, "font", 4)) {
-	ParserTag *n = g_new0 (ParserTag, 1);
-	n->name = f->name;
-	n->name_length = f->name_length;
-	n->index = g_utf8_strlen (data->text->str, -1);
-	n->end_index = n->index + 1;
-	n->format = swfdec_text_format_copy (f->format);
-	data->tags_closed = g_slist_prepend (data->tags_closed, n);
-	break;
-      }
-    }
-    data->text = g_string_append_c (data->text, '\n');
-  }
-
-  tag->end_index = g_utf8_strlen (data->text->str, -1);
-
-  data->tags_open = g_slist_remove (data->tags_open, tag);
-  data->tags_closed = g_slist_prepend (data->tags_closed, tag);
-}
-
-static const char *
-swfdec_text_field_movie_html_parse_comment (ParserData *data, const char *p)
-{
-  const char *end;
-
-  g_return_val_if_fail (data != NULL, NULL);
-  g_return_val_if_fail (p != NULL, NULL);
-  g_return_val_if_fail (strncmp (p, "<!--", strlen ("<!--")) == 0, NULL);
-
-  end = strstr (p, "-->");
-  if (end != NULL)
-    end += strlen("-->");
-
-  // return NULL if no end found
-  return end;
-}
-
-static void
-swfdec_text_field_movie_html_tag_set_attribute (ParserData *data,
-    ParserTag *tag, const char *name, int name_length, const char *value,
-    int value_length)
-{
-  SwfdecAsValue val;
-  SwfdecAsObject *object;
-
-  object = SWFDEC_AS_OBJECT (tag->format);
-  SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string (
-	object->context, g_strndup (value, value_length)));
-
-  if (tag->name_length == 10 && !g_strncasecmp (tag->name, "textformat", 10))
-  {
-    if (name_length == 10 && !g_strncasecmp (name, "leftmargin", 10))
-    {
-      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_leftMargin, &val);
-    }
-    else if (name_length == 11 && !g_strncasecmp (name, "rightmargin", 11))
-    {
-      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_rightMargin, &val);
-    }
-    else if (name_length == 6 && !g_strncasecmp (name, "indent", 6))
-    {
-      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_indent, &val);
-    }
-    else if (name_length == 11 && !g_strncasecmp (name, "blockindent", 11))
-    {
-      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_blockIndent, &val);
-    }
-    else if (name_length == 8 && !g_strncasecmp (name, "tabstops", 8))
-    {
-      // FIXME
-      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_tabStops, &val);
-    }
-  }
-  else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1))
-  {
-    if (name_length == 5 && !g_strncasecmp (name, "align", 5))
-    {
-      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_align, &val);
-    }
-  }
-  else if (tag->name_length == 4 && !g_strncasecmp (tag->name, "font", 4))
-  {
-    if (name_length == 4 && !g_strncasecmp (name, "face", 4))
-    {
-      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_font, &val);
-    }
-    else if (name_length == 4 && !g_strncasecmp (name, "size", 4))
-    {
-      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_size, &val);
-    }
-    else if (name_length == 5 && !g_strncasecmp (name, "color", 5))
-    {
-      SwfdecAsValue val_number;
-
-      if (value_length != 7 || *value != '#') {
-	SWFDEC_AS_VALUE_SET_NUMBER (&val_number, 0);
-      } else {
-	int number;
-	char *tail;
-
-	number = g_ascii_strtoll (value + 1, &tail, 16);
-	if (tail != value + 7)
-	  number = 0;
-	SWFDEC_AS_VALUE_SET_NUMBER (&val_number, number);
-      }
-
-      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_color, &val_number);
-    }
-    else if (name_length == 13 && !g_strncasecmp (name, "letterspacing", 13))
-    {
-      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_letterSpacing,
-	  &val);
-    }
-    // special case: Don't parse kerning
-  }
-  else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "a", 1))
-  {
-    if (name_length == 4 && !g_strncasecmp (name, "href", 4))
-    {
-      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_url, &val);
-    }
-    else if (name_length == 6 && !g_strncasecmp (name, "target", 6))
-    {
-      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_target, &val);
-    }
-  }
-
-  if (data->style_sheet &&
-      ((tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) ||
-      (tag->name_length == 4 && !g_strncasecmp (tag->name, "span", 4)) ||
-      (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1))))
-  {
-    if (name_length == 5 && !g_strncasecmp (name, "class", 5)) {
-      SwfdecTextFormat *format = swfdec_style_sheet_get_class_format (
-	  data->style_sheet, swfdec_as_context_give_string (data->cx,
-	      g_strndup (value, value_length)));
-      if (format != NULL)
-	swfdec_text_format_add (tag->format, format);
-    }
-  }
-}
-
-static const char *
-swfdec_text_field_movie_html_parse_attribute (ParserData *data, ParserTag *tag,
-    const char *p)
-{
-  const char *end, *name, *value;
-  int name_length, value_length;
-
-  g_return_val_if_fail ((*p != '>' && *p != '\0'), p);
-
-  end = p + strcspn (p, "=> \r\n\t");
-  if (end - p <= 0)
-    return NULL; // Correct?
-
-  name = p;
-  name_length = end - p;
-
-  p = end + strspn (end, " \r\n\t");
-  if (*p != '=')
-    return NULL; // FIXME: Correct?
-  p = p + 1;
-  p = p + strspn (p, " \r\n\t");
-
-  if (*p != '"' && *p != '\'')
-    return NULL; // FIXME: Correct?
-
-  end = p + 1;
-  do {
-    end = strchr (end, *p);
-  } while (end != NULL && *(end - 1) == '\\');
-
-  if (end == NULL)
-    return NULL; // FIXME: Correct?
-
-  value = p + 1;
-  value_length = end - (p + 1);
-
-  if (tag != NULL) {
-    swfdec_text_field_movie_html_tag_set_attribute (data, tag, name,
-	name_length, value, value_length);
-  }
-
-  g_return_val_if_fail (end + 1 > p, NULL);
-
-  return end + 1;
-}
-
-static const char *
-swfdec_text_field_movie_html_parse_tag (ParserData *data, const char *p)
-{
-  ParserTag *tag;
-  const char *name, *end;
-  int name_length;
-  gboolean close;
-
-  g_return_val_if_fail (data != NULL, NULL);
-  g_return_val_if_fail (p != NULL, NULL);
-  g_return_val_if_fail (*p == '<', NULL);
-
-  p++;
-
-  // closing tag or opening tag?
-  if (*p == '/') {
-    close = TRUE;
-    p++;
-  } else {
-    close = FALSE;
-  }
-
-  // find the end of the name
-  end = p + strcspn (p, "> \r\n\t");
-
-  if (*end == '\0')
-    return NULL;
-
-  // don't count trailing / as part of the name if it's followed by >
-  // we still act like it's a normal opening tag even if it has /
-  if (*end == '>' && *(end - 1) == '/')
-    end = end - 1;
-
-  if (end == p) // empty name
-    return NULL;
-
-  name = p;
-  name_length = end - p;
-
-  if (close)
-  {
-    if (data->tags_open != NULL) {
-      tag = data->tags_open->data;
-      if (name_length == tag->name_length &&
-	  !g_strncasecmp (name, tag->name, name_length))
-	swfdec_text_field_movie_html_parse_close_tag (data, tag);
-    }
-
-    end = strchr (end, '>');
-    if (end != NULL)
-      end += 1;
-  }
-  else
-  {
-    if (data->cx->version < 7 &&
-	(name_length == 2 && !g_strncasecmp (name, "br", 2))) {
-      data->text = g_string_append_c (data->text, '\n');
-      tag = NULL;
-    } else {
-      SwfdecAsObject *object;
-      SwfdecAsValue val;
-
-      if (data->cx->version < 7 &&
-	  ((name_length == 1 && !g_strncasecmp (name, "p", 1)) ||
-	   (name_length == 2 && !g_strncasecmp (name, "li", 2))))
-      {
-	GSList *iter;
-
-	for (iter = data->tags_open; iter != NULL; iter = iter->next) {
-	  ParserTag *f = iter->data;
-	  if ((f->name_length == 1 && !g_strncasecmp (f->name, "p", 1)) ||
-	      (f->name_length == 2 && !g_strncasecmp (f->name, "li", 2))) {
-	    data->text = g_string_append_c (data->text, '\n');
-	    break;
-	  }
-	}
-      }
-
-      tag = g_new0 (ParserTag, 1);
-      tag->name = name;
-      tag->name_length = name_length;
-      tag->format = SWFDEC_TEXT_FORMAT (swfdec_text_format_new (data->cx));
-      tag->index = g_utf8_strlen (data->text->str, -1);
-
-      data->tags_open = g_slist_prepend (data->tags_open, tag);
-
-      // set format based on tag
-      object = SWFDEC_AS_OBJECT (tag->format);
-      SWFDEC_AS_VALUE_SET_BOOLEAN (&val, TRUE);
-
-      if (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) {
-	swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bullet, &val);
-      } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "b", 1)) {
-	swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bold, &val);
-      } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "i", 1)) {
-	swfdec_as_object_set_variable (object, SWFDEC_AS_STR_italic, &val);
-      } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "u", 1)) {
-	swfdec_as_object_set_variable (object, SWFDEC_AS_STR_underline, &val);
-      } else if (tag->name_length == 3 && !g_strncasecmp (tag->name, "img", 3))
-      {
-	SWFDEC_FIXME ("IMG tag support for TextField's HTML input missing");
-      }
-
-      if (data->style_sheet &&
-	  ((tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) ||
-	  (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)))) {
-	SwfdecTextFormat *format = swfdec_style_sheet_get_tag_format (
-	    data->style_sheet, swfdec_as_context_give_string (data->cx,
-		g_strndup (tag->name, tag->name_length)));
-	if (format != NULL)
-	  swfdec_text_format_add (tag->format, format);
-      }
-    }
-
-    // parse attributes
-    end = end + strspn (end, " \r\n\t");
-    while (*end != '\0' && *end != '>' && (*end != '/' || *(end + 1) != '>')) {
-      end = swfdec_text_field_movie_html_parse_attribute (data, tag, end);
-      if (end == NULL)
-	break;
-      end = end + strspn (end, " \r\n\t");
-    }
-    if (end != NULL) {
-      if (*end == '/')
-	end += 1;
-      if (*end == '>')
-	end += 1;
-    }
-  }
-
-  return end;
-}
-
-static const char *
-swfdec_text_field_movie_html_parse_text (ParserData *data, const char *p)
-{
-  const char *end;
-  char *unescaped;
-
-  g_return_val_if_fail (data != NULL, NULL);
-  g_return_val_if_fail (p != NULL, NULL);
-  g_return_val_if_fail (*p != '\0' && *p != '<', NULL);
-
-  // get the text
-  // if condense_white: all whitespace blocks are converted to a single space
-  while (*p != '\0' && *p != '<') {
-    if (data->condense_white) {
-      end = p + strcspn (p, "< \n\r\t");
-    } else {
-      end = strchr (p, '<');
-      if (end == NULL)
-	end = strchr (p, '\0');
-    }
-
-    unescaped = swfdec_xml_unescape_len (data->cx, p, end - p);
-    data->text = g_string_append (data->text, unescaped);
-    g_free (unescaped);
-
-    if (data->condense_white && g_ascii_isspace (*end)) {
-      data->text = g_string_append_c (data->text, ' ');
-      p = end + strspn (end, " \n\r\t");
-    } else {
-      p = end;
-    }
-  }
-
-  return p;
-}
-
-void
-swfdec_text_field_movie_html_parse (SwfdecTextFieldMovie *text, const char *str)
-{
-  ParserData data;
-  const char *p;
-
-  g_return_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text));
-  g_return_if_fail (str != NULL);
-
-  text->input = g_string_assign (text->input, "");
-
-  data.cx = SWFDEC_AS_OBJECT (text)->context;
-  data.multiline = (data.cx->version < 7 || text->text->multiline);
-  data.condense_white = text->condense_white;
-  if (text->style_sheet != NULL && SWFDEC_IS_STYLESHEET (text->style_sheet)) {
-    data.style_sheet = SWFDEC_STYLESHEET (text->style_sheet);
-  } else {
-    data.style_sheet = NULL;
-  }
-  data.text = text->input;
-  data.tags_open = NULL;
-  data.tags_closed = NULL;
-
-  p = str;
-  while (p != NULL && *p != '\0') {
-    if (*p == '<') {
-      if (strncmp (p + 1, "!--", strlen ("!--")) == 0) {
-	p = swfdec_text_field_movie_html_parse_comment (&data, p);
-      } else {
-	p = swfdec_text_field_movie_html_parse_tag (&data, p);
-      }
-    } else {
-      p = swfdec_text_field_movie_html_parse_text (&data, p);
-    }
-  }
-
-  // close remaining tags
-  while (data.tags_open != NULL) {
-    swfdec_text_field_movie_html_parse_close_tag (&data,
-	(ParserTag *)data.tags_open->data);
-  }
-
-  // add parsed styles
-  while (data.tags_closed != NULL) {
-    ParserTag *tag = (ParserTag *)data.tags_closed->data;
-
-    if (tag->index != tag->end_index) {
-      swfdec_text_field_movie_set_text_format (text, tag->format, tag->index,
-	  tag->end_index);
-    }
-
-    data.tags_closed = g_slist_remove (data.tags_closed, tag);
-  }
-}
diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c
index 0305799..d50bdb9 100644
--- a/libswfdec/swfdec_text_field_movie.c
+++ b/libswfdec/swfdec_text_field_movie.c
@@ -1248,248 +1248,6 @@ swfdec_text_field_movie_set_listen_variable (SwfdecTextFieldMovie *text,
   }
 }
 
-static const char *
-align_to_string (SwfdecTextAlign align)
-{
-  switch (align) {
-    case SWFDEC_TEXT_ALIGN_LEFT:
-      return "LEFT";
-    case SWFDEC_TEXT_ALIGN_RIGHT:
-      return "RIGHT";
-    case SWFDEC_TEXT_ALIGN_CENTER:
-      return "CENTER";
-    case SWFDEC_TEXT_ALIGN_JUSTIFY:
-      return "JUSTIFY";
-    default:
-      g_assert_not_reached ();
-  }
-}
-
-/*
- * Order of tags:
- * TEXTFORMAT / P or LI / FONT / A / B / I / U
- *
- * Order of attributes:
- * TEXTFORMAT:
- * LEFTMARGIN / RIGHTMARGIN / INDENT / LEADING / BLOCKINDENT / TABSTOPS
- * P: ALIGN
- * LI: none
- * FONT: FACE / SIZE / COLOR / LETTERSPACING / KERNING
- * A: HREF / TARGET
- * B: none
- * I: none
- * U: none
- */
-static GString *
-swfdec_text_field_movie_html_text_append_paragraph (SwfdecTextFieldMovie *text,
-    GString *string, guint start_index, guint end_index)
-{
-  SwfdecTextFormat *format, *format_prev, *format_font;
-  GSList *iter, *fonts, *iter_font;
-  guint index_, index_prev;
-  gboolean textformat, bullet, font;
-  char *escaped;
-
-  g_return_val_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text), string);
-  g_return_val_if_fail (string != NULL, string);
-  g_return_val_if_fail (start_index <= end_index, string);
-
-  g_return_val_if_fail (text->formats != NULL, string);
-  for (iter = text->formats; iter->next != NULL &&
-      ((SwfdecFormatIndex *)(iter->next->data))->index_ <= start_index;
-      iter = iter->next);
-
-  index_ = start_index;
-  format = ((SwfdecFormatIndex *)(iter->data))->format;
-
-  if (format->left_margin != 0 || format->right_margin != 0 ||
-      format->indent != 0 || format->leading != 0 ||
-      format->block_indent != 0 ||
-      swfdec_as_array_get_length (format->tab_stops) > 0)
-  {
-    string = g_string_append (string, "<TEXTFORMAT");
-    if (format->left_margin) {
-      g_string_append_printf (string, " LEFTMARGIN=\"%i\"",
-	  format->left_margin);
-    }
-    if (format->right_margin) {
-      g_string_append_printf (string, " RIGHTMARGIN=\"%i\"",
-	  format->right_margin);
-    }
-    if (format->indent)
-      g_string_append_printf (string, " INDENT=\"%i\"", format->indent);
-    if (format->leading)
-      g_string_append_printf (string, " LEADING=\"%i\"", format->leading);
-    if (format->block_indent) {
-      g_string_append_printf (string, " BLOCKINDENT=\"%i\"",
-	  format->block_indent);
-    }
-    if (swfdec_as_array_get_length (format->tab_stops) > 0) {
-      SwfdecAsValue val;
-      SWFDEC_AS_VALUE_SET_OBJECT (&val, SWFDEC_AS_OBJECT  (format->tab_stops));
-      g_string_append_printf (string, " TABSTOPS=\"%s\"",
-	  swfdec_as_value_to_string (SWFDEC_AS_OBJECT
-	    (format->tab_stops)->context, &val));
-    }
-    string = g_string_append (string, ">");
-
-    textformat = TRUE;
-  }
-  else
-  {
-    textformat = FALSE;
-  }
-
-  if (format->bullet) {
-    string = g_string_append (string, "<LI>");
-    bullet = TRUE;
-  } else {
-    g_string_append_printf (string, "<P ALIGN=\"%s\">",
-	align_to_string (format->align));
-    bullet = FALSE;
-  }
-
-  // note we don't escape format->font, even thought it can have evil chars
-  g_string_append_printf (string, "<FONT FACE=\"%s\" SIZE=\"%i\" COLOR=\"#%06X\" LETTERSPACING=\"%i\" KERNING=\"%i\">",
-      format->font, format->size, format->color, (int)format->letter_spacing,
-      (format->kerning ? 1 : 0));
-  fonts = g_slist_prepend (NULL, format);
-
-  if (format->url != SWFDEC_AS_STR_EMPTY)
-    g_string_append_printf (string, "<A HREF=\"%s\" TARGET=\"%s\">",
-	format->url, format->target);
-  if (format->bold)
-    string = g_string_append (string, "<B>");
-  if (format->italic)
-    string = g_string_append (string, "<I>");
-  if (format->underline)
-    string = g_string_append (string, "<U>");
-
-  // special case: use <= instead of < to add some extra markup
-  for (iter = iter->next;
-      iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index_ <= end_index;
-      iter = iter->next)
-  {
-    index_prev = index_;
-    format_prev = format;
-    index_ = ((SwfdecFormatIndex *)(iter->data))->index_;
-    format = ((SwfdecFormatIndex *)(iter->data))->format;
-
-    escaped = swfdec_xml_escape_len (text->input->str + index_prev,
-	index_ - index_prev);
-    string = g_string_append (string, escaped);
-    g_free (escaped);
-    escaped = NULL;
-
-    // Figure out what tags need to be rewritten
-    if (format->font != format_prev->font ||
-	format->size != format_prev->size ||
-	format->color != format_prev->color ||
-	(int)format->letter_spacing != (int)format_prev->letter_spacing ||
-	format->kerning != format_prev->kerning) {
-      font = TRUE;
-    } else if (format->url == format_prev->url &&
-	format->target == format_prev->target &&
-	format->bold == format_prev->bold &&
-	format->italic == format_prev->italic &&
-	format->underline == format_prev->underline) {
-      continue;
-    }
-
-    // Close tags
-    for (iter_font = fonts; iter_font != NULL; iter_font = iter_font->next)
-    {
-      format_font = (SwfdecTextFormat *)iter_font->data;
-      if (format->font == format_font->font &&
-	format->size == format_font->size &&
-	format->color == format_font->color &&
-	(int)format->letter_spacing == (int)format_font->letter_spacing &&
-	format->kerning == format_font->kerning) {
-	break;
-      }
-    }
-    if (format_prev->underline)
-      string = g_string_append (string, "</U>");
-    if (format_prev->italic)
-      string = g_string_append (string, "</I>");
-    if (format_prev->bold)
-      string = g_string_append (string, "</B>");
-    if (format_prev->url != SWFDEC_AS_STR_EMPTY)
-      string = g_string_append (string, "</A>");
-    if (iter_font != NULL) {
-      while (fonts != iter_font) {
-	string = g_string_append (string, "</FONT>");
-	fonts = g_slist_remove (fonts, fonts->data);
-      }
-    }
-
-    // Open tags
-    format_font = (SwfdecTextFormat *)fonts->data;
-    if (font && (format->font != format_font->font ||
-	 format->size != format_font->size ||
-	 format->color != format_font->color ||
-	 (int)format->letter_spacing != (int)format_font->letter_spacing ||
-	 format->kerning != format_font->kerning))
-    {
-      fonts = g_slist_prepend (fonts, format);
-
-      string = g_string_append (string, "<FONT");
-      // note we don't escape format->font, even thought it can have evil chars
-      if (format->font != format_font->font)
-	g_string_append_printf (string, " FACE=\"%s\"", format->font);
-      if (format->size != format_font->size)
-	g_string_append_printf (string, " SIZE=\"%i\"", format->size);
-      if (format->color != format_font->color)
-	g_string_append_printf (string, " COLOR=\"#%06X\"", format->color);
-      if ((int)format->letter_spacing != (int)format_font->letter_spacing) {
-	g_string_append_printf (string, " LETTERSPACING=\"%i\"",
-	    (int)format->letter_spacing);
-      }
-      if (format->kerning != format_font->kerning) {
-	g_string_append_printf (string, " KERNING=\"%i\"",
-	    (format->kerning ? 1 : 0));
-      }
-      string = g_string_append (string, ">");
-    }
-    if (format->url != SWFDEC_AS_STR_EMPTY) {
-      g_string_append_printf (string, "<A HREF=\"%s\" TARGET=\"%s\">",
-	  format->url, format->target);
-    }
-    if (format->bold)
-      string = g_string_append (string, "<B>");
-    if (format->italic)
-      string = g_string_append (string, "<I>");
-    if (format->underline)
-      string = g_string_append (string, "<U>");
-  }
-
-  escaped = swfdec_xml_escape_len (text->input->str + index_,
-      end_index - index_);
-  string = g_string_append (string, escaped);
-  g_free (escaped);
-
-  if (format->underline)
-    string = g_string_append (string, "</U>");
-  if (format->italic)
-    string = g_string_append (string, "</I>");
-  if (format->bold)
-    string = g_string_append (string, "</B>");
-  if (format->url != SWFDEC_AS_STR_EMPTY)
-    string = g_string_append (string, "</A>");
-  for (iter = fonts; iter != NULL; iter = iter->next)
-    string = g_string_append (string, "</FONT>");
-  g_slist_free (fonts);
-  if (bullet) {
-    string = g_string_append (string, "</LI>");
-  } else {
-    string = g_string_append (string, "</P>");
-  }
-  if (textformat)
-    string = g_string_append (string, "</TEXTFORMAT>");
-
-  return string;
-}
-
 const char *
 swfdec_text_field_movie_get_text (SwfdecTextFieldMovie *text)
 {
@@ -1514,37 +1272,6 @@ swfdec_text_field_movie_get_text (SwfdecTextFieldMovie *text)
   return swfdec_as_context_give_string (SWFDEC_AS_OBJECT (text)->context, str);
 }
 
-const char *
-swfdec_text_field_movie_get_html_text (SwfdecTextFieldMovie *text)
-{
-  const char *p, *end;
-  GString *string;
-
-  g_return_val_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text),
-      SWFDEC_AS_STR_EMPTY);
-
-  if (text->input == NULL)
-    return SWFDEC_AS_STR_EMPTY;
-
-  string = g_string_new ("");
-
-  p = text->input->str;
-  while (*p != '\0') {
-    end = strpbrk (p, "\r\n");
-    if (end == NULL)
-      end = strchr (p, '\0');
-
-    string = swfdec_text_field_movie_html_text_append_paragraph (text, string,
-	p - text->input->str, end - text->input->str);
-
-    p = end;
-    if (*p != '\0') p++;
-  }
-
-  return swfdec_as_context_give_string (SWFDEC_AS_OBJECT (text)->context,
-      g_string_free (string, FALSE));
-}
-
 void
 swfdec_text_field_movie_replace_text (SwfdecTextFieldMovie *text,
     guint start_index, guint end_index, const char *str)
diff --git a/libswfdec/swfdec_text_field_movie.h b/libswfdec/swfdec_text_field_movie.h
index d72b419..7a055b2 100644
--- a/libswfdec/swfdec_text_field_movie.h
+++ b/libswfdec/swfdec_text_field_movie.h
@@ -134,7 +134,6 @@ SwfdecTextFormat *swfdec_text_field_movie_get_text_format (SwfdecTextFieldMovie
 							 guint			start_index,
 							 guint			end_index);
 const char *	swfdec_text_field_movie_get_text	(SwfdecTextFieldMovie *		text);
-const char *	swfdec_text_field_movie_get_html_text	(SwfdecTextFieldMovie *		text);
 void		swfdec_text_field_movie_set_listen_variable (SwfdecTextFieldMovie *	text,
 							 const char *			value);
 void		swfdec_text_field_movie_set_listen_variable_text (SwfdecTextFieldMovie		*text,
@@ -150,6 +149,7 @@ void		swfdec_text_field_movie_init_properties	(SwfdecAsContext *	cx);
 /* implemented in swfdec_html_parser.c */
 void		swfdec_text_field_movie_html_parse	(SwfdecTextFieldMovie *	text, 
 							 const char *		str);
+const char *	swfdec_text_field_movie_get_html_text	(SwfdecTextFieldMovie *		text);
 
 G_END_DECLS
 #endif
diff --git a/libswfdec/swfdec_text_field_movie_html.c b/libswfdec/swfdec_text_field_movie_html.c
new file mode 100644
index 0000000..1a61972
--- /dev/null
+++ b/libswfdec/swfdec_text_field_movie_html.c
@@ -0,0 +1,752 @@
+/* Swfdec
+ * Copyright (C) 2007 Pekka Lampila <pekka.lampila at iki.fi>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "swfdec_text_field_movie.h"
+#include "swfdec_as_strings.h"
+#include "swfdec_style_sheet.h"
+#include "swfdec_xml.h"
+#include "swfdec_debug.h"
+
+/*
+ * Parsing
+ */
+typedef struct {
+  const char *		name;
+  int			name_length;
+  guint			index;
+  guint			end_index;
+  SwfdecTextFormat	*format;
+} ParserTag;
+
+typedef struct {
+  SwfdecAsContext	*cx;
+  gboolean		multiline;
+  gboolean		condense_white;
+  SwfdecStyleSheet	*style_sheet;
+  GString *		text;
+  GSList *		tags_open;
+  GSList *		tags_closed;
+} ParserData;
+
+static void
+swfdec_text_field_movie_html_parse_close_tag (ParserData *data, ParserTag *tag)
+{
+  if (data->multiline &&
+      ((tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)) ||
+       (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2))))
+  {
+    GSList *iter;
+
+    for (iter = data->tags_closed; iter != NULL; iter = iter->next) {
+      ParserTag *f = iter->data;
+      if (f->end_index < tag->index)
+	break;
+      if (f->name_length == 4 && !g_strncasecmp (f->name, "font", 4)) {
+	ParserTag *n = g_new0 (ParserTag, 1);
+	n->name = f->name;
+	n->name_length = f->name_length;
+	n->index = g_utf8_strlen (data->text->str, -1);
+	n->end_index = n->index + 1;
+	n->format = swfdec_text_format_copy (f->format);
+	data->tags_closed = g_slist_prepend (data->tags_closed, n);
+	break;
+      }
+    }
+    data->text = g_string_append_c (data->text, '\n');
+  }
+
+  tag->end_index = g_utf8_strlen (data->text->str, -1);
+
+  data->tags_open = g_slist_remove (data->tags_open, tag);
+  data->tags_closed = g_slist_prepend (data->tags_closed, tag);
+}
+
+static const char *
+swfdec_text_field_movie_html_parse_comment (ParserData *data, const char *p)
+{
+  const char *end;
+
+  g_return_val_if_fail (data != NULL, NULL);
+  g_return_val_if_fail (p != NULL, NULL);
+  g_return_val_if_fail (strncmp (p, "<!--", strlen ("<!--")) == 0, NULL);
+
+  end = strstr (p, "-->");
+  if (end != NULL)
+    end += strlen("-->");
+
+  // return NULL if no end found
+  return end;
+}
+
+static void
+swfdec_text_field_movie_html_tag_set_attribute (ParserData *data,
+    ParserTag *tag, const char *name, int name_length, const char *value,
+    int value_length)
+{
+  SwfdecAsValue val;
+  SwfdecAsObject *object;
+
+  object = SWFDEC_AS_OBJECT (tag->format);
+  SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string (
+	object->context, g_strndup (value, value_length)));
+
+  if (tag->name_length == 10 && !g_strncasecmp (tag->name, "textformat", 10))
+  {
+    if (name_length == 10 && !g_strncasecmp (name, "leftmargin", 10))
+    {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_leftMargin, &val);
+    }
+    else if (name_length == 11 && !g_strncasecmp (name, "rightmargin", 11))
+    {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_rightMargin, &val);
+    }
+    else if (name_length == 6 && !g_strncasecmp (name, "indent", 6))
+    {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_indent, &val);
+    }
+    else if (name_length == 11 && !g_strncasecmp (name, "blockindent", 11))
+    {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_blockIndent, &val);
+    }
+    else if (name_length == 8 && !g_strncasecmp (name, "tabstops", 8))
+    {
+      // FIXME
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_tabStops, &val);
+    }
+  }
+  else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1))
+  {
+    if (name_length == 5 && !g_strncasecmp (name, "align", 5))
+    {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_align, &val);
+    }
+  }
+  else if (tag->name_length == 4 && !g_strncasecmp (tag->name, "font", 4))
+  {
+    if (name_length == 4 && !g_strncasecmp (name, "face", 4))
+    {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_font, &val);
+    }
+    else if (name_length == 4 && !g_strncasecmp (name, "size", 4))
+    {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_size, &val);
+    }
+    else if (name_length == 5 && !g_strncasecmp (name, "color", 5))
+    {
+      SwfdecAsValue val_number;
+
+      if (value_length != 7 || *value != '#') {
+	SWFDEC_AS_VALUE_SET_NUMBER (&val_number, 0);
+      } else {
+	int number;
+	char *tail;
+
+	number = g_ascii_strtoll (value + 1, &tail, 16);
+	if (tail != value + 7)
+	  number = 0;
+	SWFDEC_AS_VALUE_SET_NUMBER (&val_number, number);
+      }
+
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_color, &val_number);
+    }
+    else if (name_length == 13 && !g_strncasecmp (name, "letterspacing", 13))
+    {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_letterSpacing,
+	  &val);
+    }
+    // special case: Don't parse kerning
+  }
+  else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "a", 1))
+  {
+    if (name_length == 4 && !g_strncasecmp (name, "href", 4))
+    {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_url, &val);
+    }
+    else if (name_length == 6 && !g_strncasecmp (name, "target", 6))
+    {
+      swfdec_as_object_set_variable (object, SWFDEC_AS_STR_target, &val);
+    }
+  }
+
+  if (data->style_sheet &&
+      ((tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) ||
+      (tag->name_length == 4 && !g_strncasecmp (tag->name, "span", 4)) ||
+      (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1))))
+  {
+    if (name_length == 5 && !g_strncasecmp (name, "class", 5)) {
+      SwfdecTextFormat *format = swfdec_style_sheet_get_class_format (
+	  data->style_sheet, swfdec_as_context_give_string (data->cx,
+	      g_strndup (value, value_length)));
+      if (format != NULL)
+	swfdec_text_format_add (tag->format, format);
+    }
+  }
+}
+
+static const char *
+swfdec_text_field_movie_html_parse_attribute (ParserData *data, ParserTag *tag,
+    const char *p)
+{
+  const char *end, *name, *value;
+  int name_length, value_length;
+
+  g_return_val_if_fail ((*p != '>' && *p != '\0'), p);
+
+  end = p + strcspn (p, "=> \r\n\t");
+  if (end - p <= 0)
+    return NULL; // Correct?
+
+  name = p;
+  name_length = end - p;
+
+  p = end + strspn (end, " \r\n\t");
+  if (*p != '=')
+    return NULL; // FIXME: Correct?
+  p = p + 1;
+  p = p + strspn (p, " \r\n\t");
+
+  if (*p != '"' && *p != '\'')
+    return NULL; // FIXME: Correct?
+
+  end = p + 1;
+  do {
+    end = strchr (end, *p);
+  } while (end != NULL && *(end - 1) == '\\');
+
+  if (end == NULL)
+    return NULL; // FIXME: Correct?
+
+  value = p + 1;
+  value_length = end - (p + 1);
+
+  if (tag != NULL) {
+    swfdec_text_field_movie_html_tag_set_attribute (data, tag, name,
+	name_length, value, value_length);
+  }
+
+  g_return_val_if_fail (end + 1 > p, NULL);
+
+  return end + 1;
+}
+
+static const char *
+swfdec_text_field_movie_html_parse_tag (ParserData *data, const char *p)
+{
+  ParserTag *tag;
+  const char *name, *end;
+  int name_length;
+  gboolean close;
+
+  g_return_val_if_fail (data != NULL, NULL);
+  g_return_val_if_fail (p != NULL, NULL);
+  g_return_val_if_fail (*p == '<', NULL);
+
+  p++;
+
+  // closing tag or opening tag?
+  if (*p == '/') {
+    close = TRUE;
+    p++;
+  } else {
+    close = FALSE;
+  }
+
+  // find the end of the name
+  end = p + strcspn (p, "> \r\n\t");
+
+  if (*end == '\0')
+    return NULL;
+
+  // don't count trailing / as part of the name if it's followed by >
+  // we still act like it's a normal opening tag even if it has /
+  if (*end == '>' && *(end - 1) == '/')
+    end = end - 1;
+
+  if (end == p) // empty name
+    return NULL;
+
+  name = p;
+  name_length = end - p;
+
+  if (close)
+  {
+    if (data->tags_open != NULL) {
+      tag = data->tags_open->data;
+      if (name_length == tag->name_length &&
+	  !g_strncasecmp (name, tag->name, name_length))
+	swfdec_text_field_movie_html_parse_close_tag (data, tag);
+    }
+
+    end = strchr (end, '>');
+    if (end != NULL)
+      end += 1;
+  }
+  else
+  {
+    if (data->cx->version < 7 &&
+	(name_length == 2 && !g_strncasecmp (name, "br", 2))) {
+      data->text = g_string_append_c (data->text, '\n');
+      tag = NULL;
+    } else {
+      SwfdecAsObject *object;
+      SwfdecAsValue val;
+
+      if (data->cx->version < 7 &&
+	  ((name_length == 1 && !g_strncasecmp (name, "p", 1)) ||
+	   (name_length == 2 && !g_strncasecmp (name, "li", 2))))
+      {
+	GSList *iter;
+
+	for (iter = data->tags_open; iter != NULL; iter = iter->next) {
+	  ParserTag *f = iter->data;
+	  if ((f->name_length == 1 && !g_strncasecmp (f->name, "p", 1)) ||
+	      (f->name_length == 2 && !g_strncasecmp (f->name, "li", 2))) {
+	    data->text = g_string_append_c (data->text, '\n');
+	    break;
+	  }
+	}
+      }
+
+      tag = g_new0 (ParserTag, 1);
+      tag->name = name;
+      tag->name_length = name_length;
+      tag->format = SWFDEC_TEXT_FORMAT (swfdec_text_format_new (data->cx));
+      tag->index = g_utf8_strlen (data->text->str, -1);
+
+      data->tags_open = g_slist_prepend (data->tags_open, tag);
+
+      // set format based on tag
+      object = SWFDEC_AS_OBJECT (tag->format);
+      SWFDEC_AS_VALUE_SET_BOOLEAN (&val, TRUE);
+
+      if (tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) {
+	swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bullet, &val);
+      } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "b", 1)) {
+	swfdec_as_object_set_variable (object, SWFDEC_AS_STR_bold, &val);
+      } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "i", 1)) {
+	swfdec_as_object_set_variable (object, SWFDEC_AS_STR_italic, &val);
+      } else if (tag->name_length == 1 && !g_strncasecmp (tag->name, "u", 1)) {
+	swfdec_as_object_set_variable (object, SWFDEC_AS_STR_underline, &val);
+      } else if (tag->name_length == 3 && !g_strncasecmp (tag->name, "img", 3))
+      {
+	SWFDEC_FIXME ("IMG tag support for TextField's HTML input missing");
+      }
+
+      if (data->style_sheet &&
+	  ((tag->name_length == 2 && !g_strncasecmp (tag->name, "li", 2)) ||
+	  (tag->name_length == 1 && !g_strncasecmp (tag->name, "p", 1)))) {
+	SwfdecTextFormat *format = swfdec_style_sheet_get_tag_format (
+	    data->style_sheet, swfdec_as_context_give_string (data->cx,
+		g_strndup (tag->name, tag->name_length)));
+	if (format != NULL)
+	  swfdec_text_format_add (tag->format, format);
+      }
+    }
+
+    // parse attributes
+    end = end + strspn (end, " \r\n\t");
+    while (*end != '\0' && *end != '>' && (*end != '/' || *(end + 1) != '>')) {
+      end = swfdec_text_field_movie_html_parse_attribute (data, tag, end);
+      if (end == NULL)
+	break;
+      end = end + strspn (end, " \r\n\t");
+    }
+    if (end != NULL) {
+      if (*end == '/')
+	end += 1;
+      if (*end == '>')
+	end += 1;
+    }
+  }
+
+  return end;
+}
+
+static const char *
+swfdec_text_field_movie_html_parse_text (ParserData *data, const char *p)
+{
+  const char *end;
+  char *unescaped;
+
+  g_return_val_if_fail (data != NULL, NULL);
+  g_return_val_if_fail (p != NULL, NULL);
+  g_return_val_if_fail (*p != '\0' && *p != '<', NULL);
+
+  // get the text
+  // if condense_white: all whitespace blocks are converted to a single space
+  while (*p != '\0' && *p != '<') {
+    if (data->condense_white) {
+      end = p + strcspn (p, "< \n\r\t");
+    } else {
+      end = strchr (p, '<');
+      if (end == NULL)
+	end = strchr (p, '\0');
+    }
+
+    unescaped = swfdec_xml_unescape_len (data->cx, p, end - p);
+    data->text = g_string_append (data->text, unescaped);
+    g_free (unescaped);
+
+    if (data->condense_white && g_ascii_isspace (*end)) {
+      data->text = g_string_append_c (data->text, ' ');
+      p = end + strspn (end, " \n\r\t");
+    } else {
+      p = end;
+    }
+  }
+
+  return p;
+}
+
+void
+swfdec_text_field_movie_html_parse (SwfdecTextFieldMovie *text, const char *str)
+{
+  ParserData data;
+  const char *p;
+
+  g_return_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text));
+  g_return_if_fail (str != NULL);
+
+  text->input = g_string_assign (text->input, "");
+
+  data.cx = SWFDEC_AS_OBJECT (text)->context;
+  data.multiline = (data.cx->version < 7 || text->text->multiline);
+  data.condense_white = text->condense_white;
+  if (text->style_sheet != NULL && SWFDEC_IS_STYLESHEET (text->style_sheet)) {
+    data.style_sheet = SWFDEC_STYLESHEET (text->style_sheet);
+  } else {
+    data.style_sheet = NULL;
+  }
+  data.text = text->input;
+  data.tags_open = NULL;
+  data.tags_closed = NULL;
+
+  p = str;
+  while (p != NULL && *p != '\0') {
+    if (*p == '<') {
+      if (strncmp (p + 1, "!--", strlen ("!--")) == 0) {
+	p = swfdec_text_field_movie_html_parse_comment (&data, p);
+      } else {
+	p = swfdec_text_field_movie_html_parse_tag (&data, p);
+      }
+    } else {
+      p = swfdec_text_field_movie_html_parse_text (&data, p);
+    }
+  }
+
+  // close remaining tags
+  while (data.tags_open != NULL) {
+    swfdec_text_field_movie_html_parse_close_tag (&data,
+	(ParserTag *)data.tags_open->data);
+  }
+
+  // add parsed styles
+  while (data.tags_closed != NULL) {
+    ParserTag *tag = (ParserTag *)data.tags_closed->data;
+
+    if (tag->index != tag->end_index) {
+      swfdec_text_field_movie_set_text_format (text, tag->format, tag->index,
+	  tag->end_index);
+    }
+
+    data.tags_closed = g_slist_remove (data.tags_closed, tag);
+  }
+}
+
+/*
+ * Generating
+ */
+static const char *
+swfdec_text_field_movie_html_text_align_to_string (SwfdecTextAlign align)
+{
+  switch (align) {
+    case SWFDEC_TEXT_ALIGN_LEFT:
+      return "LEFT";
+    case SWFDEC_TEXT_ALIGN_RIGHT:
+      return "RIGHT";
+    case SWFDEC_TEXT_ALIGN_CENTER:
+      return "CENTER";
+    case SWFDEC_TEXT_ALIGN_JUSTIFY:
+      return "JUSTIFY";
+    default:
+      g_assert_not_reached ();
+  }
+}
+
+/*
+ * Order of tags:
+ * TEXTFORMAT / P or LI / FONT / A / B / I / U
+ *
+ * Order of attributes:
+ * TEXTFORMAT:
+ * LEFTMARGIN / RIGHTMARGIN / INDENT / LEADING / BLOCKINDENT / TABSTOPS
+ * P: ALIGN
+ * LI: none
+ * FONT: FACE / SIZE / COLOR / LETTERSPACING / KERNING
+ * A: HREF / TARGET
+ * B: none
+ * I: none
+ * U: none
+ */
+static GString *
+swfdec_text_field_movie_html_text_append_paragraph (SwfdecTextFieldMovie *text,
+    GString *string, guint start_index, guint end_index)
+{
+  SwfdecTextFormat *format, *format_prev, *format_font;
+  GSList *iter, *fonts, *iter_font;
+  guint index_, index_prev;
+  gboolean textformat, bullet, font;
+  char *escaped;
+
+  g_return_val_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text), string);
+  g_return_val_if_fail (string != NULL, string);
+  g_return_val_if_fail (start_index <= end_index, string);
+
+  g_return_val_if_fail (text->formats != NULL, string);
+  for (iter = text->formats; iter->next != NULL &&
+      ((SwfdecFormatIndex *)(iter->next->data))->index_ <= start_index;
+      iter = iter->next);
+
+  index_ = start_index;
+  format = ((SwfdecFormatIndex *)(iter->data))->format;
+
+  if (format->left_margin != 0 || format->right_margin != 0 ||
+      format->indent != 0 || format->leading != 0 ||
+      format->block_indent != 0 ||
+      swfdec_as_array_get_length (format->tab_stops) > 0)
+  {
+    string = g_string_append (string, "<TEXTFORMAT");
+    if (format->left_margin) {
+      g_string_append_printf (string, " LEFTMARGIN=\"%i\"",
+	  format->left_margin);
+    }
+    if (format->right_margin) {
+      g_string_append_printf (string, " RIGHTMARGIN=\"%i\"",
+	  format->right_margin);
+    }
+    if (format->indent)
+      g_string_append_printf (string, " INDENT=\"%i\"", format->indent);
+    if (format->leading)
+      g_string_append_printf (string, " LEADING=\"%i\"", format->leading);
+    if (format->block_indent) {
+      g_string_append_printf (string, " BLOCKINDENT=\"%i\"",
+	  format->block_indent);
+    }
+    if (swfdec_as_array_get_length (format->tab_stops) > 0) {
+      SwfdecAsValue val;
+      SWFDEC_AS_VALUE_SET_OBJECT (&val, SWFDEC_AS_OBJECT  (format->tab_stops));
+      g_string_append_printf (string, " TABSTOPS=\"%s\"",
+	  swfdec_as_value_to_string (SWFDEC_AS_OBJECT
+	    (format->tab_stops)->context, &val));
+    }
+    string = g_string_append (string, ">");
+
+    textformat = TRUE;
+  }
+  else
+  {
+    textformat = FALSE;
+  }
+
+  if (format->bullet) {
+    string = g_string_append (string, "<LI>");
+    bullet = TRUE;
+  } else {
+    g_string_append_printf (string, "<P ALIGN=\"%s\">",
+	swfdec_text_field_movie_html_text_align_to_string (format->align));
+    bullet = FALSE;
+  }
+
+  // note we don't escape format->font, even thought it can have evil chars
+  g_string_append_printf (string, "<FONT FACE=\"%s\" SIZE=\"%i\" COLOR=\"#%06X\" LETTERSPACING=\"%i\" KERNING=\"%i\">",
+      format->font, format->size, format->color, (int)format->letter_spacing,
+      (format->kerning ? 1 : 0));
+  fonts = g_slist_prepend (NULL, format);
+
+  if (format->url != SWFDEC_AS_STR_EMPTY)
+    g_string_append_printf (string, "<A HREF=\"%s\" TARGET=\"%s\">",
+	format->url, format->target);
+  if (format->bold)
+    string = g_string_append (string, "<B>");
+  if (format->italic)
+    string = g_string_append (string, "<I>");
+  if (format->underline)
+    string = g_string_append (string, "<U>");
+
+  // special case: use <= instead of < to add some extra markup
+  for (iter = iter->next;
+      iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index_ <= end_index;
+      iter = iter->next)
+  {
+    index_prev = index_;
+    format_prev = format;
+    index_ = ((SwfdecFormatIndex *)(iter->data))->index_;
+    format = ((SwfdecFormatIndex *)(iter->data))->format;
+
+    escaped = swfdec_xml_escape_len (text->input->str + index_prev,
+	index_ - index_prev);
+    string = g_string_append (string, escaped);
+    g_free (escaped);
+    escaped = NULL;
+
+    // Figure out what tags need to be rewritten
+    if (format->font != format_prev->font ||
+	format->size != format_prev->size ||
+	format->color != format_prev->color ||
+	(int)format->letter_spacing != (int)format_prev->letter_spacing ||
+	format->kerning != format_prev->kerning) {
+      font = TRUE;
+    } else if (format->url == format_prev->url &&
+	format->target == format_prev->target &&
+	format->bold == format_prev->bold &&
+	format->italic == format_prev->italic &&
+	format->underline == format_prev->underline) {
+      continue;
+    }
+
+    // Close tags
+    for (iter_font = fonts; iter_font != NULL; iter_font = iter_font->next)
+    {
+      format_font = (SwfdecTextFormat *)iter_font->data;
+      if (format->font == format_font->font &&
+	format->size == format_font->size &&
+	format->color == format_font->color &&
+	(int)format->letter_spacing == (int)format_font->letter_spacing &&
+	format->kerning == format_font->kerning) {
+	break;
+      }
+    }
+    if (format_prev->underline)
+      string = g_string_append (string, "</U>");
+    if (format_prev->italic)
+      string = g_string_append (string, "</I>");
+    if (format_prev->bold)
+      string = g_string_append (string, "</B>");
+    if (format_prev->url != SWFDEC_AS_STR_EMPTY)
+      string = g_string_append (string, "</A>");
+    if (iter_font != NULL) {
+      while (fonts != iter_font) {
+	string = g_string_append (string, "</FONT>");
+	fonts = g_slist_remove (fonts, fonts->data);
+      }
+    }
+
+    // Open tags
+    format_font = (SwfdecTextFormat *)fonts->data;
+    if (font && (format->font != format_font->font ||
+	 format->size != format_font->size ||
+	 format->color != format_font->color ||
+	 (int)format->letter_spacing != (int)format_font->letter_spacing ||
+	 format->kerning != format_font->kerning))
+    {
+      fonts = g_slist_prepend (fonts, format);
+
+      string = g_string_append (string, "<FONT");
+      // note we don't escape format->font, even thought it can have evil chars
+      if (format->font != format_font->font)
+	g_string_append_printf (string, " FACE=\"%s\"", format->font);
+      if (format->size != format_font->size)
+	g_string_append_printf (string, " SIZE=\"%i\"", format->size);
+      if (format->color != format_font->color)
+	g_string_append_printf (string, " COLOR=\"#%06X\"", format->color);
+      if ((int)format->letter_spacing != (int)format_font->letter_spacing) {
+	g_string_append_printf (string, " LETTERSPACING=\"%i\"",
+	    (int)format->letter_spacing);
+      }
+      if (format->kerning != format_font->kerning) {
+	g_string_append_printf (string, " KERNING=\"%i\"",
+	    (format->kerning ? 1 : 0));
+      }
+      string = g_string_append (string, ">");
+    }
+    if (format->url != SWFDEC_AS_STR_EMPTY) {
+      g_string_append_printf (string, "<A HREF=\"%s\" TARGET=\"%s\">",
+	  format->url, format->target);
+    }
+    if (format->bold)
+      string = g_string_append (string, "<B>");
+    if (format->italic)
+      string = g_string_append (string, "<I>");
+    if (format->underline)
+      string = g_string_append (string, "<U>");
+  }
+
+  escaped = swfdec_xml_escape_len (text->input->str + index_,
+      end_index - index_);
+  string = g_string_append (string, escaped);
+  g_free (escaped);
+
+  if (format->underline)
+    string = g_string_append (string, "</U>");
+  if (format->italic)
+    string = g_string_append (string, "</I>");
+  if (format->bold)
+    string = g_string_append (string, "</B>");
+  if (format->url != SWFDEC_AS_STR_EMPTY)
+    string = g_string_append (string, "</A>");
+  for (iter = fonts; iter != NULL; iter = iter->next)
+    string = g_string_append (string, "</FONT>");
+  g_slist_free (fonts);
+  if (bullet) {
+    string = g_string_append (string, "</LI>");
+  } else {
+    string = g_string_append (string, "</P>");
+  }
+  if (textformat)
+    string = g_string_append (string, "</TEXTFORMAT>");
+
+  return string;
+}
+const char *
+swfdec_text_field_movie_get_html_text (SwfdecTextFieldMovie *text)
+{
+  const char *p, *end;
+  GString *string;
+
+  g_return_val_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text),
+      SWFDEC_AS_STR_EMPTY);
+
+  if (text->input == NULL)
+    return SWFDEC_AS_STR_EMPTY;
+
+  string = g_string_new ("");
+
+  p = text->input->str;
+  while (*p != '\0') {
+    end = strpbrk (p, "\r\n");
+    if (end == NULL)
+      end = strchr (p, '\0');
+
+    string = swfdec_text_field_movie_html_text_append_paragraph (text, string,
+	p - text->input->str, end - text->input->str);
+
+    p = end;
+    if (*p != '\0') p++;
+  }
+
+  return swfdec_as_context_give_string (SWFDEC_AS_OBJECT (text)->context,
+      g_string_free (string, FALSE));
+}
commit 66b35c8602f7f634bf6df0b79c4fa54594c1aa95
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 12:32:27 2007 +0200

    Reorganize swfdec_text_field_movie_get_layouts code a little

diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c
index 0d3e9cd..0305799 100644
--- a/libswfdec/swfdec_text_field_movie.c
+++ b/libswfdec/swfdec_text_field_movie.c
@@ -349,6 +349,51 @@ swfdec_text_field_movie_free_paragraphs (SwfdecParagraph *paragraphs)
 /*
  * Rendering
  */
+static PangoAttrList *
+swfdec_text_field_movie_paragraph_get_attr_list (
+    const SwfdecParagraph *paragraph, guint index_,
+    const SwfdecColorTransform *trans)
+{
+  PangoAttrList *attr_list;
+  GSList *iter;
+
+  attr_list = pango_attr_list_new ();
+
+  for (iter = paragraph->attrs; iter != NULL; iter = iter->next)
+  {
+    PangoAttribute *attr;
+
+    if (((PangoAttribute *)iter->data)->end_index <= index_)
+      continue;
+
+    attr = pango_attribute_copy ((PangoAttribute *)iter->data);
+
+    if (attr->klass->type == PANGO_ATTR_FOREGROUND && trans != NULL &&
+	!swfdec_color_transform_is_identity (trans))
+    {
+      SwfdecColor color;
+      PangoColor color_p;
+
+      color_p = ((PangoAttrColor *)attr)->color;
+
+      color = SWFDEC_COLOR_COMBINE (color_p.red >> 8, color_p.green >> 8,
+	  color_p.blue >> 8, 255);
+      color = swfdec_color_apply_transform (color, trans);
+
+      color_p.red = SWFDEC_COLOR_R (color) << 8;
+      color_p.green = SWFDEC_COLOR_G (color) << 8;
+      color_p.blue = SWFDEC_COLOR_B (color) << 8;
+    }
+
+    attr->start_index =
+      (attr->start_index > index_ ? attr->start_index - index_ : 0);
+    attr->end_index = attr->end_index - index_;
+    pango_attr_list_insert (attr_list, attr);
+  }
+
+  return attr_list;
+}
+
 static SwfdecLayout *
 swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
     cairo_t *cr, const SwfdecParagraph *paragraphs,
@@ -383,7 +428,6 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
       SwfdecLayout layout;
       PangoLayout *playout;
       PangoAttrList *attr_list;
-      GSList *iter_attrs;
       SwfdecBlock *block;
       int width;
       guint length;
@@ -440,39 +484,8 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
       pango_layout_set_tabs (playout, block->tab_stops);
 
       // set text attributes
-      attr_list = pango_attr_list_new ();
-
-      for (iter_attrs = paragraphs[i].attrs; iter_attrs != NULL;
-	  iter_attrs = iter_attrs->next)
-      {
-	PangoAttribute *attr;
-
-	attr = (PangoAttribute *)iter_attrs->data;
-
-	if (attr->end_index <= block->index_ + skip)
-	  continue;
-
-	attr = pango_attribute_copy (attr);
-	if (attr->klass->type == PANGO_ATTR_FOREGROUND && trans != NULL &&
-	    !swfdec_color_transform_is_identity (trans))
-	{
-	  SwfdecColor color;
-	  PangoColor pcolor;
-
-	  pcolor = ((PangoAttrColor *)attr)->color;
-	  color = SWFDEC_COLOR_COMBINE (pcolor.red >> 8, pcolor.green >> 8,
-	      pcolor.blue >> 8, 255);
-	  color = swfdec_color_apply_transform (color, trans);
-	  pcolor.red = SWFDEC_COLOR_R (color) << 8;
-	  pcolor.green = SWFDEC_COLOR_G (color) << 8;
-	  pcolor.blue = SWFDEC_COLOR_B (color) << 8;
-	  ((PangoAttrColor *)attr)->color = pcolor;
-	}
-	attr->start_index = (attr->start_index > block->index_ + skip ?
-	    attr->start_index - (block->index_ + skip) : 0);
-	attr->end_index = attr->end_index - (block->index_ + skip);
-	pango_attr_list_insert (attr_list, attr);
-      }
+      attr_list = swfdec_text_field_movie_paragraph_get_attr_list (
+	  &paragraphs[i], block->index_ + skip, trans);
       pango_layout_set_attributes (playout, attr_list);
       pango_attr_list_unref (attr_list);
 
commit ca2169b64aa732c7698b192e30e46ffc875a3937
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 12:08:06 2007 +0200

    Some code formatting fixes in swfdec_text_format.c

diff --git a/libswfdec/swfdec_text_format.c b/libswfdec/swfdec_text_format.c
index 7006980..ea1c675 100644
--- a/libswfdec/swfdec_text_format.c
+++ b/libswfdec/swfdec_text_format.c
@@ -378,51 +378,48 @@ swfdec_text_format_do_set_align (SwfdecAsContext *cx, SwfdecAsObject *object,
 }
 
 static void
-swfdec_text_format_do_get_block_indent (SwfdecAsContext *cx, SwfdecAsObject *object,
-    guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
+swfdec_text_format_do_get_block_indent (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *ret)
 {
-  swfdec_text_format_get_integer (object,
-      PROP_BLOCK_INDENT, ret);
+  swfdec_text_format_get_integer (object, PROP_BLOCK_INDENT, ret);
 }
 
 static void
-swfdec_text_format_do_set_block_indent (SwfdecAsContext *cx, SwfdecAsObject *object,
-    guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
+swfdec_text_format_do_set_block_indent (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_integer (object,
-      PROP_BLOCK_INDENT, argc, argv, cx->version >= 8);
+  swfdec_text_format_set_integer (object, PROP_BLOCK_INDENT, argc, argv,
+      cx->version >= 8);
 }
 
 static void
 swfdec_text_format_do_get_bold (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_get_boolean (object, PROP_BOLD,
-      ret);
+  swfdec_text_format_get_boolean (object, PROP_BOLD, ret);
 }
 
 static void
 swfdec_text_format_do_set_bold (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_boolean (object, PROP_BOLD,
-      argc, argv);
+  swfdec_text_format_set_boolean (object, PROP_BOLD, argc, argv);
 }
 
 static void
 swfdec_text_format_do_get_bullet (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_get_boolean (object, PROP_BULLET,
-      ret);
+  swfdec_text_format_get_boolean (object, PROP_BULLET, ret);
 }
 
 static void
 swfdec_text_format_do_set_bullet (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_boolean (object, PROP_BULLET,
-      argc, argv);
+  swfdec_text_format_set_boolean (object, PROP_BULLET, argc, argv);
 }
 
 static void
@@ -456,7 +453,6 @@ swfdec_text_format_do_set_color (SwfdecAsContext *cx, SwfdecAsObject *object,
   if (argc < 1)
     return;
 
-
   if (SWFDEC_AS_VALUE_IS_UNDEFINED (&argv[0]) ||
       SWFDEC_AS_VALUE_IS_NULL (&argv[0])) {
     swfdec_text_format_mark_unset (format, PROP_COLOR);
@@ -540,32 +536,29 @@ static void
 swfdec_text_format_do_get_font (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_get_string (object, PROP_FONT,
-      ret);
+  swfdec_text_format_get_string (object, PROP_FONT, ret);
 }
 
 static void
 swfdec_text_format_do_set_font (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_string (object, PROP_FONT,
-      argc, argv);
+  swfdec_text_format_set_string (object, PROP_FONT, argc, argv);
 }
 
 static void
 swfdec_text_format_do_get_indent (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_get_integer (object, PROP_INDENT,
-      ret);
+  swfdec_text_format_get_integer (object, PROP_INDENT, ret);
 }
 
 static void
 swfdec_text_format_do_set_indent (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_integer (object, PROP_INDENT,
-      argc, argv, cx->version >= 8);
+  swfdec_text_format_set_integer (object, PROP_INDENT, argc, argv,
+      cx->version >= 8);
 }
 
 static void
@@ -579,56 +572,52 @@ static void
 swfdec_text_format_do_set_italic (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_boolean (object, PROP_ITALIC,
-      argc, argv);
+  swfdec_text_format_set_boolean (object, PROP_ITALIC, argc, argv);
 }
 
 static void
 swfdec_text_format_do_get_kerning (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_get_boolean (object, PROP_KERNING,
-      ret);
+  swfdec_text_format_get_boolean (object, PROP_KERNING, ret);
 }
 
 static void
 swfdec_text_format_do_set_kerning (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_boolean (object, PROP_KERNING,
-      argc, argv);
+  swfdec_text_format_set_boolean (object, PROP_KERNING, argc, argv);
 }
 
 static void
 swfdec_text_format_do_get_leading (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_get_integer (object, PROP_LEADING,
-      ret);
+  swfdec_text_format_get_integer (object, PROP_LEADING, ret);
 }
 
 static void
 swfdec_text_format_do_set_leading (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_integer (object, PROP_LEADING,
-      argc, argv, cx->version >= 8);
+  swfdec_text_format_set_integer (object, PROP_LEADING, argc, argv,
+      cx->version >= 8);
 }
 
 static void
-swfdec_text_format_do_get_left_margin (SwfdecAsContext *cx, SwfdecAsObject *object,
-    guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
+swfdec_text_format_do_get_left_margin (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *ret)
 {
-  swfdec_text_format_get_integer (object,
-      PROP_LEFT_MARGIN, ret);
+  swfdec_text_format_get_integer (object, PROP_LEFT_MARGIN, ret);
 }
 
 static void
-swfdec_text_format_do_set_left_margin (SwfdecAsContext *cx, SwfdecAsObject *object,
-    guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
+swfdec_text_format_do_set_left_margin (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_integer (object,
-      PROP_LEFT_MARGIN, argc, argv, FALSE);
+  swfdec_text_format_set_integer (object, PROP_LEFT_MARGIN, argc, argv, FALSE);
 }
 
 static void
@@ -642,9 +631,7 @@ swfdec_text_format_do_get_letter_spacing (SwfdecAsContext *cx,
     return;
   format = SWFDEC_TEXT_FORMAT (object);
 
-  if (!swfdec_text_format_is_set (format,
-	PROP_LETTER_SPACING))
-  {
+  if (!swfdec_text_format_is_set (format, PROP_LETTER_SPACING)) {
     SWFDEC_AS_VALUE_SET_NULL (ret);
     return;
   }
@@ -686,40 +673,40 @@ swfdec_text_format_do_set_letter_spacing (SwfdecAsContext *cx,
 }
 
 static void
-swfdec_text_format_do_get_right_margin (SwfdecAsContext *cx, SwfdecAsObject *object,
-    guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
+swfdec_text_format_do_get_right_margin (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *ret)
 {
-  swfdec_text_format_get_integer (object,
-      PROP_RIGHT_MARGIN, ret);
+  swfdec_text_format_get_integer (object, PROP_RIGHT_MARGIN, ret);
 }
 
 static void
-swfdec_text_format_do_set_right_margin (SwfdecAsContext *cx, SwfdecAsObject *object,
-    guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
+swfdec_text_format_do_set_right_margin (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_integer (object,
-      PROP_RIGHT_MARGIN, argc, argv, FALSE);
+  swfdec_text_format_set_integer (object, PROP_RIGHT_MARGIN, argc, argv,
+      FALSE);
 }
 
 static void
 swfdec_text_format_do_get_size (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_get_integer (object, PROP_SIZE,
-      ret);
+  swfdec_text_format_get_integer (object, PROP_SIZE, ret);
 }
 
 static void
 swfdec_text_format_do_set_size (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_integer (object, PROP_SIZE,
-      argc, argv, TRUE);
+  swfdec_text_format_set_integer (object, PROP_SIZE, argc, argv, TRUE);
 }
 
 static void
-swfdec_text_format_do_get_tab_stops (SwfdecAsContext *cx, SwfdecAsObject *object,
-    guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
+swfdec_text_format_do_get_tab_stops (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *ret)
 {
   SwfdecTextFormat *format;
 
@@ -727,9 +714,7 @@ swfdec_text_format_do_get_tab_stops (SwfdecAsContext *cx, SwfdecAsObject *object
     return;
   format = SWFDEC_TEXT_FORMAT (object);
 
-  if (!swfdec_text_format_is_set (format,
-	PROP_TAB_STOPS))
-  {
+  if (!swfdec_text_format_is_set (format, PROP_TAB_STOPS)) {
     SWFDEC_AS_VALUE_SET_NULL (ret);
     return;
   }
@@ -739,8 +724,9 @@ swfdec_text_format_do_get_tab_stops (SwfdecAsContext *cx, SwfdecAsObject *object
 }
 
 static void
-swfdec_text_format_do_set_tab_stops (SwfdecAsContext *cx, SwfdecAsObject *object,
-    guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
+swfdec_text_format_do_set_tab_stops (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *ret)
 {
   SwfdecTextFormat *format;
 
@@ -773,9 +759,7 @@ swfdec_text_format_do_set_tab_stops (SwfdecAsContext *cx, SwfdecAsObject *object
     array = SWFDEC_AS_ARRAY (SWFDEC_AS_VALUE_GET_OBJECT (&argv[0]));
     len = swfdec_as_array_get_length (array);
 
-    if (!swfdec_text_format_is_set (format,
-	  PROP_TAB_STOPS))
-    {
+    if (!swfdec_text_format_is_set (format, PROP_TAB_STOPS)) {
       // special case, if we have null and array is empty, keep it at null
       if (len == 0)
 	return;
@@ -818,8 +802,7 @@ swfdec_text_format_do_set_tab_stops (SwfdecAsContext *cx, SwfdecAsObject *object
       }
     }
   }
-  else if (swfdec_text_format_is_set (format,
-	PROP_TAB_STOPS))
+  else if (swfdec_text_format_is_set (format, PROP_TAB_STOPS))
   {
     swfdec_as_array_set_length (format->tab_stops, 0);
     swfdec_text_format_mark_set (format,
@@ -831,32 +814,30 @@ static void
 swfdec_text_format_do_get_target (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_get_string (object, PROP_TARGET,
-      ret);
+  swfdec_text_format_get_string (object, PROP_TARGET, ret);
 }
 
 static void
 swfdec_text_format_do_set_target (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_string (object, PROP_TARGET,
-      argc, argv);
+  swfdec_text_format_set_string (object, PROP_TARGET, argc, argv);
 }
 
 static void
-swfdec_text_format_do_get_underline (SwfdecAsContext *cx, SwfdecAsObject *object,
-    guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
+swfdec_text_format_do_get_underline (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *ret)
 {
-  swfdec_text_format_get_boolean (object,
-      PROP_UNDERLINE, ret);
+  swfdec_text_format_get_boolean (object, PROP_UNDERLINE, ret);
 }
 
 static void
-swfdec_text_format_do_set_underline (SwfdecAsContext *cx, SwfdecAsObject *object,
-    guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
+swfdec_text_format_do_set_underline (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_boolean (object,
-      PROP_UNDERLINE, argc, argv);
+  swfdec_text_format_set_boolean (object, PROP_UNDERLINE, argc, argv);
 }
 
 static void
@@ -870,8 +851,7 @@ static void
 swfdec_text_format_do_set_url (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
 {
-  swfdec_text_format_set_string (object, PROP_URL, argc,
-      argv);
+  swfdec_text_format_set_string (object, PROP_URL, argc, argv);
 }
 
 void
@@ -1155,11 +1135,13 @@ swfdec_text_format_init_properties (SwfdecAsContext *cx)
   swfdec_as_object_add_native_variable (proto, SWFDEC_AS_STR_size,
       swfdec_text_format_do_get_size, swfdec_text_format_do_set_size);
   swfdec_as_object_add_native_variable (proto, SWFDEC_AS_STR_tabStops,
-      swfdec_text_format_do_get_tab_stops, swfdec_text_format_do_set_tab_stops);
+      swfdec_text_format_do_get_tab_stops,
+      swfdec_text_format_do_set_tab_stops);
   swfdec_as_object_add_native_variable (proto, SWFDEC_AS_STR_target,
       swfdec_text_format_do_get_target, swfdec_text_format_do_set_target);
   swfdec_as_object_add_native_variable (proto, SWFDEC_AS_STR_underline,
-      swfdec_text_format_do_get_underline, swfdec_text_format_do_set_underline);
+      swfdec_text_format_do_get_underline,
+      swfdec_text_format_do_set_underline);
   swfdec_as_object_add_native_variable (proto, SWFDEC_AS_STR_url,
       swfdec_text_format_do_get_url, swfdec_text_format_do_set_url);
 }
commit 2b1fd2235f7b8b3fe1d9740e11a2052c8191c866
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 10:42:18 2007 +0200

    Some code cleanups to TextField

diff --git a/libswfdec/swfdec_text_field.c b/libswfdec/swfdec_text_field.c
index a11e2f1..77fa7ff 100644
--- a/libswfdec/swfdec_text_field.c
+++ b/libswfdec/swfdec_text_field.c
@@ -43,7 +43,8 @@ static SwfdecMovie *
 swfdec_text_field_create_movie (SwfdecGraphic *graphic, gsize *size)
 {
   SwfdecTextField *text = SWFDEC_TEXT_FIELD (graphic);
-  SwfdecTextFieldMovie *ret = g_object_new (SWFDEC_TYPE_TEXT_FIELD_MOVIE, NULL);
+  SwfdecTextFieldMovie *ret =
+    g_object_new (SWFDEC_TYPE_TEXT_FIELD_MOVIE, NULL);
 
   ret->text = text;
 
@@ -57,9 +58,9 @@ swfdec_text_field_dispose (GObject *object)
 {
   SwfdecTextField *text = SWFDEC_TEXT_FIELD (object);
 
-  if (text->text_input != NULL) {
-    g_free (text->text_input);
-    text->text_input = NULL;
+  if (text->input != NULL) {
+    g_free (text->input);
+    text->input = NULL;
   }
   if (text->variable != NULL) {
     g_free (text->variable);
@@ -109,6 +110,7 @@ tag_func_define_edit_text (SwfdecSwfDecoder * s, guint tag)
       SWFDEC_GRAPHIC (text)->extents.x0, SWFDEC_GRAPHIC (text)->extents.y0,
       SWFDEC_GRAPHIC (text)->extents.x1, SWFDEC_GRAPHIC (text)->extents.y1);
   swfdec_bits_syncbits (b);
+
   has_text = swfdec_bits_getbit (b);
   text->word_wrap = swfdec_bits_getbit (b);
   text->multiline = swfdec_bits_getbit (b);
@@ -128,6 +130,7 @@ tag_func_define_edit_text (SwfdecSwfDecoder * s, guint tag)
   text->embed_fonts = swfdec_bits_getbit (b);
   if (text->embed_fonts)
     SWFDEC_FIXME ("Using embed fonts in TextField is not supported");
+
   if (has_font) {
     SwfdecCharacter *font;
 
@@ -142,6 +145,7 @@ tag_func_define_edit_text (SwfdecSwfDecoder * s, guint tag)
     text->size = swfdec_bits_get_u16 (b);
     SWFDEC_LOG ("  size = %u", text->size);
   }
+
   if (has_color) {
     text->color = swfdec_bits_get_rgba (b);
     SWFDEC_LOG ("  color = %u", text->color);
@@ -149,11 +153,13 @@ tag_func_define_edit_text (SwfdecSwfDecoder * s, guint tag)
     SWFDEC_WARNING ("FIXME: figure out default color");
     text->color = SWFDEC_COLOR_COMBINE (255, 255, 255, 255);
   }
+
   if (has_max_length) {
     text->max_chars = swfdec_bits_get_u16 (b);
   } else {
     text->max_chars = 0;
   }
+
   if (has_layout) {
     guint align = swfdec_bits_get_u8 (b);
     switch (align) {
@@ -178,13 +184,15 @@ tag_func_define_edit_text (SwfdecSwfDecoder * s, guint tag)
     text->indent = swfdec_bits_get_u16 (b);
     text->leading = swfdec_bits_get_s16 (b);
   }
+
   text->variable = swfdec_bits_get_string (b);
   if (text->variable && *text->variable == 0) {
     g_free (text->variable);
     text->variable = NULL;
   }
+
   if (has_text)
-    text->text_input = swfdec_bits_get_string (b);
+    text->input = swfdec_bits_get_string (b);
 
   return SWFDEC_STATUS_OK;
 }
diff --git a/libswfdec/swfdec_text_field.h b/libswfdec/swfdec_text_field.h
index 0ecf9bf..1bde7bb 100644
--- a/libswfdec/swfdec_text_field.h
+++ b/libswfdec/swfdec_text_field.h
@@ -67,7 +67,7 @@ struct _SwfdecTextField
   gboolean		background;
 
   /* only to be passed to the movie object */
-  char *		text_input;
+  char *		input;
   char *		variable;
   char *		font;
   guint			size;
diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c
index 72b5e31..0d3e9cd 100644
--- a/libswfdec/swfdec_text_field_movie.c
+++ b/libswfdec/swfdec_text_field_movie.c
@@ -41,7 +41,7 @@ static void
 swfdec_text_field_movie_update_extents (SwfdecMovie *movie,
     SwfdecRect *extents)
 {
-  swfdec_rect_union (extents, extents, 
+  swfdec_rect_union (extents, extents,
       &SWFDEC_GRAPHIC (SWFDEC_TEXT_FIELD_MOVIE (movie)->text)->extents);
 }
 
@@ -49,14 +49,13 @@ static void
 swfdec_text_paragraph_add_attribute (SwfdecParagraph *paragraph,
     PangoAttribute *attr)
 {
-  paragraph->attrs = g_list_append (paragraph->attrs,
-      pango_attribute_copy (attr));
-  pango_attr_list_insert (paragraph->attrs_list, attr);
+  paragraph->attrs =
+    g_slist_prepend (paragraph->attrs, pango_attribute_copy (attr));
 }
 
 static void
-swfdec_text_paragraph_add_block_attributes (SwfdecParagraph *paragraph,
-    int index_, SwfdecTextFormat *format)
+swfdec_text_paragraph_add_block (SwfdecParagraph *paragraph, int index_,
+    SwfdecTextFormat *format)
 {
   gint32 length, i;
   SwfdecBlock *block;
@@ -98,7 +97,7 @@ swfdec_text_paragraph_add_block_attributes (SwfdecParagraph *paragraph,
 	SWFDEC_AS_VALUE_GET_NUMBER (&val) * 20);
   }
 
-  paragraph->blocks = g_list_append (paragraph->blocks, block);
+  paragraph->blocks = g_slist_prepend (paragraph->blocks, block);
 }
 
 static void
@@ -122,14 +121,13 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text,
 
   paragraph->blocks = NULL;
   paragraph->attrs = NULL;
-  paragraph->attrs_list = pango_attr_list_new ();
 
   if (paragraph->text_length == 0)
     return;
 
   g_assert (text->formats != NULL);
   for (iter = text->formats; iter->next != NULL &&
-      ((SwfdecFormatIndex *)(iter->next->data))->index <= start_index;
+      ((SwfdecFormatIndex *)(iter->next->data))->index_ <= start_index;
       iter = iter->next);
 
   index_ = start_index;
@@ -140,7 +138,7 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text,
   paragraph->indent = format->indent * 20 * PANGO_SCALE;
 
   // Add new block
-  swfdec_text_paragraph_add_block_attributes (paragraph, 0, format);
+  swfdec_text_paragraph_add_block (paragraph, 0, format);
 
   // Open attributes
   attr_bold = pango_attr_weight_new (
@@ -173,11 +171,11 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text,
   attr_underline->start_index = 0;
 
   for (iter = iter->next;
-      iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index < end_index;
+      iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index_ < end_index;
       iter = iter->next)
   {
     format_prev = format;
-    index_ = ((SwfdecFormatIndex *)(iter->data))->index;
+    index_ = ((SwfdecFormatIndex *)(iter->data))->index_;
     format = ((SwfdecFormatIndex *)(iter->data))->format;
 
     // Add new block if necessary
@@ -188,8 +186,8 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text,
        format_prev->block_indent != format->block_indent ||
        format_prev->left_margin != format->left_margin)
     {
-      swfdec_text_paragraph_add_block_attributes (paragraph,
-	  index_ - start_index, format);
+      swfdec_text_paragraph_add_block (paragraph, index_ - start_index,
+	  format);
     }
 
     // Change attributes if necessary
@@ -244,8 +242,8 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text,
       attr_size->end_index = index_ - start_index;
       swfdec_text_paragraph_add_attribute (paragraph, attr_size);
 
-      attr_size =
-	pango_attr_size_new_absolute (MAX (1, format->size) * 20 * PANGO_SCALE);
+      attr_size = pango_attr_size_new_absolute (
+	  MAX (1, format->size) * 20 * PANGO_SCALE);
       attr_size->start_index = index_ - start_index;
     }
 
@@ -287,54 +285,47 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text,
   attr_underline->end_index = end_index - start_index;
   swfdec_text_paragraph_add_attribute (paragraph, attr_underline);
   attr_underline = NULL;
+
+  // reverse blocks since we use prepend to add them
+  paragraph->blocks = g_slist_reverse (paragraph->blocks);
 }
 
 static SwfdecParagraph *
 swfdec_text_field_movie_get_paragraphs (SwfdecTextFieldMovie *text, int *num)
 {
-  SwfdecParagraph *paragraphs;
+  GArray *paragraphs;
+  SwfdecParagraph paragraph;
   const char *p, *end;
-  int count, i;
 
   g_assert (SWFDEC_IS_TEXT_FIELD_MOVIE (text));
 
-  count = 0;
-  p = text->input->str;
-  while (p != NULL && *p != '\0') {
-    count++;
-    p = strpbrk (p, "\r\n");
-    if (p != NULL) p++;
-  }
-
-  paragraphs = g_new0 (SwfdecParagraph, count + 1);
-  if (num != NULL)
-    *num = count;
+  paragraphs = g_array_new (TRUE, TRUE, sizeof (SwfdecParagraph));
 
-  i = 0;
   p = text->input->str;
-  while (*p != '\0') {
-    g_assert (i < count);
+  while (*p != '\0')
+  {
     end = strpbrk (p, "\r\n");
     if (end == NULL)
       end = strchr (p, '\0');
 
-    swfdec_text_field_movie_generate_paragraph (text, &paragraphs[i],
+    swfdec_text_field_movie_generate_paragraph (text, &paragraph,
 	p - text->input->str, end - text->input->str);
+    paragraphs = g_array_append_val (paragraphs, paragraph);
 
     p = end;
     if (*p != '\0') p++;
-
-    i++;
   }
-  g_assert (i == count);
 
-  return paragraphs;
+  if (num != NULL)
+    *num = paragraphs->len;
+
+  return (SwfdecParagraph *)g_array_free (paragraphs, FALSE);
 }
 
 static void
 swfdec_text_field_movie_free_paragraphs (SwfdecParagraph *paragraphs)
 {
-  GList *iter;
+  GSList *iter;
   int i;
 
   g_return_if_fail (paragraphs != NULL);
@@ -345,15 +336,12 @@ swfdec_text_field_movie_free_paragraphs (SwfdecParagraph *paragraphs)
       pango_tab_array_free (((SwfdecBlock *)(iter->data))->tab_stops);
       g_free (iter->data);
     }
-    g_list_free (paragraphs[i].blocks);
+    g_slist_free (paragraphs[i].blocks);
 
     for (iter = paragraphs[i].attrs; iter != NULL; iter = iter->next) {
       pango_attribute_destroy ((PangoAttribute *)(iter->data));
     }
-    g_list_free (paragraphs[i].attrs);
-
-    if (paragraphs[i].attrs_list != NULL)
-      pango_attr_list_unref (paragraphs[i].attrs_list);
+    g_slist_free (paragraphs[i].attrs);
   }
   g_free (paragraphs);
 }
@@ -386,7 +374,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
 
   for (i = 0; paragraphs[i].text != NULL; i++)
   {
-    GList *iter;
+    GSList *iter;
     guint skip;
 
     skip = 0;
@@ -394,9 +382,11 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
     {
       SwfdecLayout layout;
       PangoLayout *playout;
+      PangoAttrList *attr_list;
+      GSList *iter_attrs;
+      SwfdecBlock *block;
       int width;
       guint length;
-      SwfdecBlock *block;
 
       block = (SwfdecBlock *)iter->data;
       if (iter->next != NULL) {
@@ -415,7 +405,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
       playout = layout.layout = pango_cairo_create_layout (cr);
 
       // set rendering position
-      layout.render_offset_x = block->left_margin + block->block_indent;
+      layout.offset_x = block->left_margin + block->block_indent;
       width = SWFDEC_MOVIE (text)->original_extents.x1 -
 	SWFDEC_MOVIE (text)->original_extents.x0 - block->left_margin -
 	block->right_margin - block->block_indent;
@@ -424,7 +414,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
 	// limit negative indent to not go over leftMargin + blockIndent
 	int indent = MAX (paragraphs[i].indent / PANGO_SCALE,
 	    -(block->left_margin + block->block_indent));
-	layout.render_offset_x += indent;
+	layout.offset_x += indent;
 	width += -indent;
       }
 
@@ -450,50 +440,41 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
       pango_layout_set_tabs (playout, block->tab_stops);
 
       // set text attributes
-      if (block->index_ > 0 ||
-	  (trans != NULL && !swfdec_color_transform_is_identity (trans)))
+      attr_list = pango_attr_list_new ();
+
+      for (iter_attrs = paragraphs[i].attrs; iter_attrs != NULL;
+	  iter_attrs = iter_attrs->next)
       {
-	PangoAttrList *attr_list;
-	GList *iter_attrs;
+	PangoAttribute *attr;
+
+	attr = (PangoAttribute *)iter_attrs->data;
 
-	attr_list = pango_attr_list_new ();
+	if (attr->end_index <= block->index_ + skip)
+	  continue;
 
-	for (iter_attrs = paragraphs[i].attrs; iter_attrs != NULL;
-	    iter_attrs = iter_attrs->next)
+	attr = pango_attribute_copy (attr);
+	if (attr->klass->type == PANGO_ATTR_FOREGROUND && trans != NULL &&
+	    !swfdec_color_transform_is_identity (trans))
 	{
-	  PangoAttribute *attr;
-
-	  attr = (PangoAttribute *)iter_attrs->data;
-
-	  if (attr->end_index <= block->index_ + skip)
-	    continue;
-
-	  attr = pango_attribute_copy (attr);
-	  if (attr->klass->type == PANGO_ATTR_FOREGROUND && trans != NULL &&
-	      !swfdec_color_transform_is_identity (trans))
-	  {
-	    SwfdecColor color;
-	    PangoColor pcolor;
-
-	    pcolor = ((PangoAttrColor *)attr)->color;
-	    color = SWFDEC_COLOR_COMBINE (pcolor.red >> 8, pcolor.green >> 8,
-		pcolor.blue >> 8, 255);
-	    color = swfdec_color_apply_transform (color, trans);
-	    pcolor.red = SWFDEC_COLOR_R (color) << 8;
-	    pcolor.green = SWFDEC_COLOR_G (color) << 8;
-	    pcolor.blue = SWFDEC_COLOR_B (color) << 8;
-	    ((PangoAttrColor *)attr)->color = pcolor;
-	  }
-	  attr->start_index = (attr->start_index > block->index_ + skip ?
-	      attr->start_index - (block->index_ + skip) : 0);
-	  attr->end_index = attr->end_index - (block->index_ + skip);
-	  pango_attr_list_insert (attr_list, attr);
+	  SwfdecColor color;
+	  PangoColor pcolor;
+
+	  pcolor = ((PangoAttrColor *)attr)->color;
+	  color = SWFDEC_COLOR_COMBINE (pcolor.red >> 8, pcolor.green >> 8,
+	      pcolor.blue >> 8, 255);
+	  color = swfdec_color_apply_transform (color, trans);
+	  pcolor.red = SWFDEC_COLOR_R (color) << 8;
+	  pcolor.green = SWFDEC_COLOR_G (color) << 8;
+	  pcolor.blue = SWFDEC_COLOR_B (color) << 8;
+	  ((PangoAttrColor *)attr)->color = pcolor;
 	}
-	pango_layout_set_attributes (playout, attr_list);
-	pango_attr_list_unref (attr_list);
-      } else {
-	pango_layout_set_attributes (playout, paragraphs[i].attrs_list);
+	attr->start_index = (attr->start_index > block->index_ + skip ?
+	    attr->start_index - (block->index_ + skip) : 0);
+	attr->end_index = attr->end_index - (block->index_ + skip);
+	pango_attr_list_insert (attr_list, attr);
       }
+      pango_layout_set_attributes (playout, attr_list);
+      pango_attr_list_unref (attr_list);
 
       pango_layout_set_text (playout,
 	  paragraphs[i].text + block->index_ + skip,
@@ -521,9 +502,9 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
 	  pango_layout_get_pixel_size (playout, &line_width, 0);
 	  if (line_width < width) {
 	    if (block->align == PANGO_ALIGN_RIGHT) {
-	      layout.render_offset_x += width - line_width;
+	      layout.offset_x += width - line_width;
 	    } else if (block->align == PANGO_ALIGN_CENTER) {
-	      layout.render_offset_x += (width - line_width) / 2;
+	      layout.offset_x += (width - line_width) / 2;
 	    } else {
 	      g_assert_not_reached ();
 	    }
@@ -534,7 +515,7 @@ swfdec_text_field_movie_get_layouts (SwfdecTextFieldMovie *text, int *num,
       }
 
       pango_layout_get_pixel_size (playout, &layout.width, &layout.height);
-      layout.width += layout.render_offset_x + block->right_margin;
+      layout.width += layout.offset_x + block->right_margin;
       layout.height += block->leading / PANGO_SCALE;
 
       layouts = g_array_append_val (layouts, layout);
@@ -655,15 +636,15 @@ swfdec_text_field_movie_render (SwfdecMovie *movie, cairo_t *cr,
 	break;
 
       if (y + rect.y + rect.height < limit.y0 ||
-	  x + layout->render_offset_x + rect.x > limit.x1 ||
-	  x + layout->render_offset_x + rect.x + rect.width < limit.x0)
+	  x + layout->offset_x + rect.x > limit.x1 ||
+	  x + layout->offset_x + rect.x + rect.width < limit.x0)
 	continue;
 
-      cairo_rel_move_to (cr, layout->render_offset_x + rect.x,
+      cairo_rel_move_to (cr, layout->offset_x + rect.x,
 	  pango_layout_iter_get_baseline (iter_line) / PANGO_SCALE - skipped);
       line = pango_layout_iter_get_line_readonly (iter_line);
       pango_cairo_show_layout_line (cr, line);
-      cairo_rel_move_to (cr, -(layout->render_offset_x + rect.x),
+      cairo_rel_move_to (cr, -(layout->offset_x + rect.x),
 	  -(pango_layout_iter_get_baseline (iter_line) / PANGO_SCALE - skipped));
     } while (pango_layout_iter_next_line (iter_line));
 
@@ -951,9 +932,9 @@ swfdec_text_field_movie_init_movie (SwfdecMovie *movie)
   text->background_color = SWFDEC_COLOR_COMBINE (255, 255, 255, 255);
 
   // text
-  if (text->text->text_input != NULL) {
+  if (text->text->input != NULL) {
     swfdec_text_field_movie_set_text (text,
-	swfdec_as_context_get_string (cx, text->text->text_input),
+	swfdec_as_context_get_string (cx, text->text->input),
 	text->text->html);
   } else {
     swfdec_text_field_movie_set_text (text, SWFDEC_AS_STR_EMPTY,
@@ -1036,11 +1017,11 @@ swfdec_text_field_movie_set_text_format (SwfdecTextFieldMovie *text,
 
   g_assert (text->formats != NULL);
   g_assert (text->formats->data != NULL);
-  g_assert (((SwfdecFormatIndex *)text->formats->data)->index == 0);
+  g_assert (((SwfdecFormatIndex *)text->formats->data)->index_ == 0);
 
   findex = NULL;
   for (iter = text->formats; iter != NULL &&
-      ((SwfdecFormatIndex *)iter->data)->index < end_index;
+      ((SwfdecFormatIndex *)iter->data)->index_ < end_index;
       iter = next)
   {
     findex_prev = findex;
@@ -1048,7 +1029,7 @@ swfdec_text_field_movie_set_text_format (SwfdecTextFieldMovie *text,
     findex = iter->data;
     if (iter->next != NULL) {
       findex_end_index =
-	((SwfdecFormatIndex *)iter->next->data)->index;
+	((SwfdecFormatIndex *)iter->next->data)->index_;
     } else {
       findex_end_index = g_utf8_strlen (text->input->str, -1);
     }
@@ -1061,15 +1042,15 @@ swfdec_text_field_movie_set_text_format (SwfdecTextFieldMovie *text,
 
     if (findex_end_index > end_index) {
       findex_new = g_new (SwfdecFormatIndex, 1);
-      findex_new->index = end_index;
+      findex_new->index_ = end_index;
       findex_new->format = swfdec_text_format_copy (findex->format);
 
       iter = g_slist_insert (iter, findex_new, 1);
     }
 
-    if (findex->index < start_index) {
+    if (findex->index_ < start_index) {
       findex_new = g_new (SwfdecFormatIndex, 1);
-      findex_new->index = start_index;
+      findex_new->index_ = start_index;
       findex_new->format = swfdec_text_format_copy (findex->format);
       swfdec_text_format_add (findex_new->format, format);
 
@@ -1091,7 +1072,7 @@ swfdec_text_field_movie_set_text_format (SwfdecTextFieldMovie *text,
 	swfdec_text_format_equal (findex->format,
 	  ((SwfdecFormatIndex *)next->data)->format))
     {
-      ((SwfdecFormatIndex *)next->data)->index = findex->index;
+      ((SwfdecFormatIndex *)next->data)->index_ = findex->index_;
       text->formats = g_slist_remove (text->formats, findex);
       findex = findex_prev;
     }
@@ -1116,15 +1097,15 @@ swfdec_text_field_movie_get_text_format (SwfdecTextFieldMovie *text,
 
   g_assert (text->formats != NULL);
   g_assert (text->formats->data != NULL);
-  g_assert (((SwfdecFormatIndex *)text->formats->data)->index == 0);
+  g_assert (((SwfdecFormatIndex *)text->formats->data)->index_ == 0);
 
   format = NULL;
   for (iter = text->formats; iter != NULL &&
-      ((SwfdecFormatIndex *)iter->data)->index < end_index;
+      ((SwfdecFormatIndex *)iter->data)->index_ < end_index;
       iter = iter->next)
   {
     if (iter->next != NULL &&
-	((SwfdecFormatIndex *)iter->next->data)->index <= start_index)
+	((SwfdecFormatIndex *)iter->next->data)->index_ <= start_index)
       continue;
 
     if (format == NULL) {
@@ -1302,7 +1283,7 @@ swfdec_text_field_movie_html_text_append_paragraph (SwfdecTextFieldMovie *text,
 
   g_return_val_if_fail (text->formats != NULL, string);
   for (iter = text->formats; iter->next != NULL &&
-      ((SwfdecFormatIndex *)(iter->next->data))->index <= start_index;
+      ((SwfdecFormatIndex *)(iter->next->data))->index_ <= start_index;
       iter = iter->next);
 
   index_ = start_index;
@@ -1373,12 +1354,12 @@ swfdec_text_field_movie_html_text_append_paragraph (SwfdecTextFieldMovie *text,
 
   // special case: use <= instead of < to add some extra markup
   for (iter = iter->next;
-      iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index <= end_index;
+      iter != NULL && ((SwfdecFormatIndex *)(iter->data))->index_ <= end_index;
       iter = iter->next)
   {
     index_prev = index_;
     format_prev = format;
-    index_ = ((SwfdecFormatIndex *)(iter->data))->index;
+    index_ = ((SwfdecFormatIndex *)(iter->data))->index_;
     format = ((SwfdecFormatIndex *)(iter->data))->format;
 
     escaped = swfdec_xml_escape_len (text->input->str + index_prev,
@@ -1575,10 +1556,10 @@ swfdec_text_field_movie_replace_text (SwfdecTextFieldMovie *text,
   {
     findex = iter->data;
 
-    if (findex->index >= start_index) {
+    if (findex->index_ >= start_index) {
       if (end_index == (guint) g_utf8_strlen (text->input->str, -1) ||
 	  (iter->next != NULL &&
-	   ((SwfdecFormatIndex *)iter->next->data)->index <= end_index))
+	   ((SwfdecFormatIndex *)iter->next->data)->index_ <= end_index))
       {
 	g_free (iter->data);
 	text->formats = g_slist_remove (text->formats, iter->data);
@@ -1586,9 +1567,9 @@ swfdec_text_field_movie_replace_text (SwfdecTextFieldMovie *text,
       }
       else
       {
-	findex->index += strlen (str) - (end_index - start_index);
+	findex->index_ += strlen (str) - (end_index - start_index);
 	if (first) {
-	  findex->index -= strlen (str);
+	  findex->index_ -= strlen (str);
 	  first = FALSE;
 	}
       }
@@ -1601,7 +1582,7 @@ swfdec_text_field_movie_replace_text (SwfdecTextFieldMovie *text,
       SWFDEC_FIXME ("replaceText to the end of the TextField might use wrong text format on version 7");
     }
     findex = g_new0 (SwfdecFormatIndex, 1);
-    findex->index = start_index;
+    findex->index_ = start_index;
     findex->format = swfdec_text_format_copy (
 	((SwfdecFormatIndex *)text->formats->data)->format);
     text->formats = g_slist_append (text->formats, findex);
@@ -1644,7 +1625,7 @@ swfdec_text_field_movie_set_text (SwfdecTextFieldMovie *text, const char *str,
   if (html && SWFDEC_AS_OBJECT (text)->context->version < 8)
     swfdec_text_format_set_defaults (text->format_new);
   block = g_new (SwfdecFormatIndex, 1);
-  block->index = 0;
+  block->index_ = 0;
   g_assert (SWFDEC_IS_TEXT_FORMAT (text->format_new));
   block->format = swfdec_text_format_copy (text->format_new);
   text->formats = g_slist_prepend (text->formats, block);
diff --git a/libswfdec/swfdec_text_field_movie.h b/libswfdec/swfdec_text_field_movie.h
index 28439f2..d72b419 100644
--- a/libswfdec/swfdec_text_field_movie.h
+++ b/libswfdec/swfdec_text_field_movie.h
@@ -40,7 +40,7 @@ typedef struct _SwfdecTextFieldMovieClass SwfdecTextFieldMovieClass;
 
 typedef struct {
   PangoLayout *		layout;
-  int			render_offset_x;
+  int			offset_x;
   int			height;
   int			width;
 } SwfdecLayout;
@@ -64,14 +64,12 @@ typedef struct {
   gboolean		bullet;
   int			indent;
 
-  GList *		blocks;		// SwfdecBlock
-
-  GList *		attrs;	// PangoAttribute
-  PangoAttrList *	attrs_list;
+  GSList *		blocks;		// SwfdecBlock
+  GSList *		attrs;		// PangoAttribute
 } SwfdecParagraph;
 
 typedef struct {
-  guint			index;
+  guint			index_;
   SwfdecTextFormat *	format;
 } SwfdecFormatIndex;
 
diff --git a/libswfdec/swfdec_text_field_movie_as.c b/libswfdec/swfdec_text_field_movie_as.c
index 9f7cf46..3436ffb 100644
--- a/libswfdec/swfdec_text_field_movie_as.c
+++ b/libswfdec/swfdec_text_field_movie_as.c
@@ -1191,7 +1191,7 @@ swfdec_text_field_movie_createTextField (SwfdecAsContext *cx,
   edittext->border = FALSE;
   edittext->size = 240; // FIXME: Correct?
 
-  edittext->text_input = NULL;
+  edittext->input = NULL;
   edittext->variable = NULL;
   edittext->color = 0;
   edittext->align = SWFDEC_TEXT_ALIGN_LEFT;
diff --git a/test/dump.c b/test/dump.c
index b66f8fc..38aee7e 100644
--- a/test/dump.c
+++ b/test/dump.c
@@ -225,7 +225,7 @@ dump_shape (SwfdecShape *shape)
 static void
 dump_text_field (SwfdecTextField *text)
 {
-  g_print ("  %s\n", text->text_input ? text->text_input : "");
+  g_print ("  %s\n", text->input ? text->input : "");
   if (verbose) {
     if (text->variable)
       g_print ("  variable %s\n", text->variable);
commit accb524749ca584f57eaa842e2907ef2cdd481d5
Merge: fc335e7... 770b5f5...
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Mon Oct 29 10:06:28 2007 +0200

    Merge branch 'master' of ssh://medar@git.freedesktop.org/git/swfdec/swfdec
    
    Conflicts:
    
    	libswfdec/swfdec_as_interpret.c

diff --cc libswfdec/swfdec_as_interpret.c
index 3571ffb,c331413..798a03c
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@@ -2749,10 -2731,10 +2730,10 @@@ swfdec_action_try (SwfdecAsContext *cx
  
    if (try_data->catch_start || try_data->finally_start) {
      swfdec_as_frame_push_block (cx->frame, data + len, data + len + try_size,
- 	swfdec_action_try_end_try, try_data, swfdec_action_try_data_unref);
+ 	swfdec_action_try_end_try, try_data);
    } else {
 -    SWFDEC_ERROR ("Try without neither catch or finally block");
 +    SWFDEC_WARNING ("Try with neither catch nor finally block");
-     swfdec_action_try_data_unref (try_data);
+     swfdec_action_try_data_free (try_data);
    }
  }
  
commit fc335e7dd2984fff923c4fc345379c4db0b2d56e
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Sun Oct 28 19:43:42 2007 +0200

    Fix an error in Try action

diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index 3defeca..3571ffb 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -2712,10 +2712,9 @@ swfdec_action_try (SwfdecAsContext *cx, guint action, const guint8 *data, guint
   guint try_size;
   gboolean use_finally, use_catch;
 
-  if (len <= 8) {
+  if (len < 8) {
     SWFDEC_ERROR ("With action requires a length of at least 8, but got %u",
 	len);
-    swfdec_as_stack_pop (cx);
     return;
   }
 
@@ -2752,7 +2751,7 @@ swfdec_action_try (SwfdecAsContext *cx, guint action, const guint8 *data, guint
     swfdec_as_frame_push_block (cx->frame, data + len, data + len + try_size,
 	swfdec_action_try_end_try, try_data, swfdec_action_try_data_unref);
   } else {
-    SWFDEC_ERROR ("Try without neither catch or finally block");
+    SWFDEC_WARNING ("Try with neither catch nor finally block");
     swfdec_action_try_data_unref (try_data);
   }
 }
commit fab2e610d7a96cf007096edaff5809c29985feb5
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Sun Oct 28 17:11:48 2007 +0200

    Fixes to TextField's autoSize

diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c
index e9c3fed..72b5e31 100644
--- a/libswfdec/swfdec_text_field_movie.c
+++ b/libswfdec/swfdec_text_field_movie.c
@@ -796,51 +796,48 @@ swfdec_text_field_get_size (SwfdecTextFieldMovie *text, int *width,
 gboolean
 swfdec_text_field_movie_auto_size (SwfdecTextFieldMovie *text)
 {
+  SwfdecGraphic *graphic;
   int height, width, diff;
 
   g_return_val_if_fail (SWFDEC_IS_TEXT_FIELD_MOVIE (text), FALSE);
 
+  graphic = SWFDEC_GRAPHIC (text->text);
+
   if (text->text->auto_size == SWFDEC_AUTO_SIZE_NONE)
     return FALSE;
 
   swfdec_text_field_get_size (text, &width, &height);
 
-  if ((text->text->word_wrap || SWFDEC_MOVIE (text)->original_extents.x1 -
-      SWFDEC_MOVIE (text)->original_extents.x0 == width) &&
-      (SWFDEC_GRAPHIC (text->text)->extents.y1 -
-	SWFDEC_GRAPHIC (text->text)->extents.y0 == height))
+  if ((text->text->word_wrap ||
+	graphic->extents.x1 - graphic->extents.x0 == width) &&
+      graphic->extents.y1 - graphic->extents.y0 == height)
     return FALSE;
 
   swfdec_movie_invalidate (SWFDEC_MOVIE (text));
 
-  if (!text->text->word_wrap && SWFDEC_MOVIE (text)->original_extents.x1 -
-      SWFDEC_MOVIE (text)->original_extents.x0 != width)
+  if (!text->text->word_wrap && graphic->extents.x1 -
+      graphic->extents.x0 != width)
   {
     switch (text->text->auto_size) {
       case SWFDEC_AUTO_SIZE_LEFT:
-	SWFDEC_GRAPHIC (text->text)->extents.x1 =
-	  SWFDEC_GRAPHIC (text->text)->extents.x0 + width;
+	graphic->extents.x1 = graphic->extents.x0 + width;
 	break;
       case SWFDEC_AUTO_SIZE_RIGHT:
-	SWFDEC_GRAPHIC (text->text)->extents.x0 =
-	  SWFDEC_GRAPHIC (text->text)->extents.x1 - width;
+	graphic->extents.x0 = graphic->extents.x1 - width;
 	break;
       case SWFDEC_AUTO_SIZE_CENTER:
-	diff = width - (SWFDEC_GRAPHIC (text->text)->extents.x1 -
-	  SWFDEC_GRAPHIC (text->text)->extents.x0);
-	SWFDEC_GRAPHIC (text->text)->extents.x0 += floor (width / 2.0);
-	SWFDEC_GRAPHIC (text->text)->extents.x1 += ceil (width / 2.0);
+	diff = (graphic->extents.x1 - graphic->extents.x0) - width;
+	graphic->extents.x0 += floor (diff / 2.0);
+	graphic->extents.x1 = graphic->extents.x0 + width;
 	break;
       default:
 	g_assert_not_reached ();
     }
   }
 
-  if (SWFDEC_GRAPHIC (text->text)->extents.y1 -
-      SWFDEC_GRAPHIC (text->text)->extents.y0 != height)
+  if (graphic->extents.y1 - graphic->extents.y0 != height)
   {
-    SWFDEC_GRAPHIC (text->text)->extents.y1 =
-      SWFDEC_GRAPHIC (text->text)->extents.y0 + height;
+    graphic->extents.y1 = graphic->extents.y0 + height;
   }
 
   swfdec_movie_queue_update (SWFDEC_MOVIE (text),


More information about the Swfdec mailing list