Benjamin Otte
2007-Nov-07 11:12 UTC
[Swfdec] 36 commits - doc/swfdec-sections.txt libswfdec/Makefile.am libswfdec/swfdec_amf.c libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_as_strings.c libswfdec/swfdec_buffer.c libswfdec/swfdec_buffer.h libswfdec/swfdec_cached.c libswfdec/swfdec_codec_gst.c libswfdec/swfdec_decoder.c libswfdec/swfdec_decoder.h libswfdec/swfdec_flv_decoder.c libswfdec/swfdec_flv_decoder.h libswfdec/swfdec_image.c libswfdec/swfdec_initialize.as libswfdec/swfdec_initialize.h libswfdec/swfdec_movie_asprops.c libswfdec/swfdec_movie.c libswfdec/swfdec_movie_clip_loader.c libswfdec/swfdec_movie_clip_loader.h libswfdec/swfdec_movie.h libswfdec/swfdec_net_stream.c libswfdec/swfdec_player.c libswfdec/swfdec_resource.c libswfdec/swfdec_resource.h libswfdec/swfdec_resource_request.c libswfdec/swfdec_sprite_movie.c libswfdec/swfdec_sprite_movie.h libswfdec/swfdec_swf_decoder.c libswfdec/swfdec_text_field_movie.c libswfdec/swfdec_types.h player/swfplay.c test/trace
doc/swfdec-sections.txt | 1 libswfdec/Makefile.am | 2 libswfdec/swfdec_amf.c | 2 libswfdec/swfdec_as_interpret.c | 30 libswfdec/swfdec_as_object.c | 15 libswfdec/swfdec_as_object.h | 1 libswfdec/swfdec_as_strings.c | 5 libswfdec/swfdec_buffer.c | 25 libswfdec/swfdec_buffer.h | 1 libswfdec/swfdec_cached.c | 1 libswfdec/swfdec_codec_gst.c | 1 libswfdec/swfdec_decoder.c | 24 libswfdec/swfdec_decoder.h | 30 libswfdec/swfdec_flv_decoder.c | 66 - libswfdec/swfdec_flv_decoder.h | 1 libswfdec/swfdec_image.c | 2 libswfdec/swfdec_initialize.as | 7 libswfdec/swfdec_initialize.h | 976 ++++++++++----------- libswfdec/swfdec_movie.c | 17 libswfdec/swfdec_movie.h | 3 libswfdec/swfdec_movie_asprops.c | 8 libswfdec/swfdec_movie_clip_loader.c | 120 ++ libswfdec/swfdec_movie_clip_loader.h | 51 + libswfdec/swfdec_net_stream.c | 43 libswfdec/swfdec_player.c | 82 - libswfdec/swfdec_resource.c | 271 +++-- libswfdec/swfdec_resource.h | 11 libswfdec/swfdec_resource_request.c | 7 libswfdec/swfdec_sprite_movie.c | 35 libswfdec/swfdec_sprite_movie.h | 3 libswfdec/swfdec_swf_decoder.c | 118 +- libswfdec/swfdec_text_field_movie.c | 2 libswfdec/swfdec_types.h | 1 player/swfplay.c | 1 test/trace/Makefile.am | 18 test/trace/moviecliploader-getprogress-5.swf |binary test/trace/moviecliploader-getprogress-5.swf.trace | 19 test/trace/moviecliploader-getprogress-6.swf |binary test/trace/moviecliploader-getprogress-6.swf.trace | 19 test/trace/moviecliploader-getprogress-7.swf |binary test/trace/moviecliploader-getprogress-7.swf.trace | 19 test/trace/moviecliploader-getprogress-8.swf |binary test/trace/moviecliploader-getprogress-8.swf.trace | 19 test/trace/moviecliploader-getprogress.as | 24 test/trace/moviecliploader-properties-5.swf |binary test/trace/moviecliploader-properties-5.swf.trace | 33 test/trace/moviecliploader-properties-6.swf |binary test/trace/moviecliploader-properties-6.swf.trace | 33 test/trace/moviecliploader-properties-7.swf |binary test/trace/moviecliploader-properties-7.swf.trace | 32 test/trace/moviecliploader-properties-8.swf |binary test/trace/moviecliploader-properties-8.swf.trace | 32 test/trace/moviecliploader-properties.as | 8 53 files changed, 1442 insertions(+), 777 deletions(-) New commits: commit 61dc6a8df81f90b6240d656f37aad2006de48b56 Author: Benjamin Otte <otte at gnome.org> Date: Wed Nov 7 12:07:56 2007 +0100 reorganize decoder parsing code We don't keep the loader's queue in SwfdecDecoder anymore but instad pass the buffers to the decoder's aprse function manually. This way, we can control how much data we pass. And that in turn makes it possible to emit onLoadProgress events every 64kB. diff --git a/libswfdec/swfdec_decoder.c b/libswfdec/swfdec_decoder.c index 590c09a..6a98981 100644 --- a/libswfdec/swfdec_decoder.c +++ b/libswfdec/swfdec_decoder.c @@ -42,19 +42,17 @@ swfdec_decoder_init (SwfdecDecoder *decoder) } SwfdecDecoder * -swfdec_decoder_new (SwfdecPlayer *player, SwfdecBufferQueue *queue) +swfdec_decoder_new (SwfdecPlayer *player, const SwfdecBuffer *buffer) { guchar *data; - SwfdecBuffer *buffer; SwfdecDecoder *retval; g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL); - g_return_val_if_fail (queue != NULL, NULL); + g_return_val_if_fail (buffer != NULL, NULL); - if (!swfdec_decoder_can_detect (queue)) + if (buffer->length < SWFDEC_DECODER_DETECT_LENGTH) return NULL; - buffer = swfdec_buffer_queue_peek (queue, 3); data = buffer->data; if ((data[0] == 'C' || data[0] == 'F') && data[1] == 'W' && @@ -67,11 +65,23 @@ swfdec_decoder_new (SwfdecPlayer *player, SwfdecBufferQueue *queue) } else { retval = NULL; } - swfdec_buffer_unref (buffer); if (retval) { retval->player = player; - retval->queue = queue; } return retval; } +SwfdecStatus +swfdec_decoder_parse (SwfdecDecoder *decoder, SwfdecBuffer *buffer) +{ + SwfdecDecoderClass *klass; + + g_return_val_if_fail (SWFDEC_IS_DECODER (decoder), SWFDEC_STATUS_ERROR); + g_return_val_if_fail (buffer != NULL, SWFDEC_STATUS_ERROR); + + klass = SWFDEC_DECODER_GET_CLASS (decoder); + g_return_val_if_fail (klass->parse, SWFDEC_STATUS_ERROR); + return klass->parse (decoder, buffer); +} + + diff --git a/libswfdec/swfdec_decoder.h b/libswfdec/swfdec_decoder.h index 42e8b15..7483df1 100644 --- a/libswfdec/swfdec_decoder.h +++ b/libswfdec/swfdec_decoder.h @@ -29,18 +29,18 @@ G_BEGIN_DECLS typedef enum { - /* An error occured during parsing */ - SWFDEC_STATUS_ERROR = 0, /* processing continued as expected */ - SWFDEC_STATUS_OK, + SWFDEC_STATUS_OK = 0, + /* An error occured during parsing */ + SWFDEC_STATUS_ERROR = (1 << 0), /* more data needs to be made available for processing */ - SWFDEC_STATUS_NEEDBITS, - /* at least one new image is available for display */ - SWFDEC_STATUS_IMAGE, - /* header parsing is complete, framerate, image size etc are known */ - SWFDEC_STATUS_INIT, + SWFDEC_STATUS_NEEDBITS = (1 << 1), /* parsing is finished */ - SWFDEC_STATUS_EOF + SWFDEC_STATUS_EOF = (1 << 2), + /* header parsing is complete, framerate, image size etc are known */ + SWFDEC_STATUS_INIT = (1 << 3), + /* at least one new image is available for display */ + SWFDEC_STATUS_IMAGE = (1 << 4) } SwfdecStatus; //typedef struct _SwfdecDecoder SwfdecDecoder; @@ -65,21 +65,25 @@ struct _SwfdecDecoder guint bytes_total; /* total bytes in the file or 0 if not known */ guint frames_loaded; /* frames already loaded */ guint frames_total; /* total frames */ - SwfdecBufferQueue * queue; /* the queue containing the data to be parsed */ }; struct _SwfdecDecoderClass { GObjectClass object_class; - SwfdecStatus (* parse) (SwfdecDecoder * decoder); + SwfdecStatus (* parse) (SwfdecDecoder * decoder, + SwfdecBuffer * buffer); }; GType swfdec_decoder_get_type (void); -#define swfdec_decoder_can_detect(queue) (swfdec_buffer_queue_get_depth (queue) >= 3) +#define SWFDEC_DECODER_DETECT_LENGTH 4 SwfdecDecoder * swfdec_decoder_new (SwfdecPlayer * player, - SwfdecBufferQueue * queue); + const SwfdecBuffer * buffer); + +SwfdecStatus swfdec_decoder_parse (SwfdecDecoder * decoder, + SwfdecBuffer * buffer); + G_END_DECLS #endif diff --git a/libswfdec/swfdec_flv_decoder.c b/libswfdec/swfdec_flv_decoder.c index f35b8b3..4ba427e 100644 --- a/libswfdec/swfdec_flv_decoder.c +++ b/libswfdec/swfdec_flv_decoder.c @@ -88,7 +88,8 @@ swfdec_flv_decoder_dispose (GObject *object) g_array_free (flv->data, TRUE); flv->data = NULL; } - + swfdec_buffer_queue_unref (flv->queue); + flv->queue = NULL; G_OBJECT_CLASS (swfdec_flv_decoder_parent_class)->dispose (object); } @@ -96,14 +97,12 @@ swfdec_flv_decoder_dispose (GObject *object) static SwfdecStatus swfdec_flv_decoder_parse_header (SwfdecFlvDecoder *flv) { - SwfdecDecoder *dec = SWFDEC_DECODER (flv); SwfdecBuffer *buffer; SwfdecBits bits; guint version, header_length; gboolean has_audio, has_video; - /* NB: we're still reading from the original queue, since deflating is not initialized yet */ - buffer = swfdec_buffer_queue_peek (dec->queue, 9); + buffer = swfdec_buffer_queue_peek (flv->queue, 9); if (buffer == NULL) return SWFDEC_STATUS_NEEDBITS; @@ -128,7 +127,7 @@ swfdec_flv_decoder_parse_header (SwfdecFlvDecoder *flv) /* FIXME: treat as error or ignore? */ return SWFDEC_STATUS_ERROR; } - buffer = swfdec_buffer_queue_pull (dec->queue, header_length); + buffer = swfdec_buffer_queue_pull (flv->queue, header_length); if (buffer == NULL) return SWFDEC_STATUS_NEEDBITS; swfdec_buffer_unref (buffer); @@ -151,12 +150,11 @@ swfdec_flv_decoder_parse_header (SwfdecFlvDecoder *flv) static SwfdecStatus swfdec_flv_decoder_parse_last_tag (SwfdecFlvDecoder *flv) { - SwfdecDecoder *dec = SWFDEC_DECODER (flv); SwfdecBuffer *buffer; SwfdecBits bits; guint last_tag; - buffer = swfdec_buffer_queue_pull (dec->queue, 4); + buffer = swfdec_buffer_queue_pull (flv->queue, 4); if (buffer == NULL) return SWFDEC_STATUS_NEEDBITS; @@ -357,20 +355,19 @@ swfdec_flv_decoder_parse_data_tag (SwfdecFlvDecoder *flv, SwfdecBits *bits, guin static SwfdecStatus swfdec_flv_decoder_parse_tag (SwfdecFlvDecoder *flv) { - SwfdecDecoder *dec = SWFDEC_DECODER (flv); SwfdecBuffer *buffer; SwfdecBits bits; guint size, type, timestamp; SwfdecStatus ret = SWFDEC_STATUS_OK; - buffer = swfdec_buffer_queue_peek (dec->queue, 4); + buffer = swfdec_buffer_queue_peek (flv->queue, 4); if (buffer == NULL) return SWFDEC_STATUS_NEEDBITS; swfdec_bits_init (&bits, buffer); swfdec_bits_get_u8 (&bits); size = swfdec_bits_get_bu24 (&bits); swfdec_buffer_unref (buffer); - buffer = swfdec_buffer_queue_pull (dec->queue, 11 + size); + buffer = swfdec_buffer_queue_pull (flv->queue, 11 + size); if (buffer == NULL) return SWFDEC_STATUS_NEEDBITS; swfdec_bits_init (&bits, buffer); @@ -405,31 +402,35 @@ swfdec_flv_decoder_parse_tag (SwfdecFlvDecoder *flv) } static SwfdecStatus -swfdec_flv_decoder_parse (SwfdecDecoder *dec) +swfdec_flv_decoder_parse (SwfdecDecoder *dec, SwfdecBuffer *buffer) { SwfdecFlvDecoder *flv = SWFDEC_FLV_DECODER (dec); - SwfdecStatus ret; - - switch (flv->state) { - case SWFDEC_STATE_HEADER: - ret = swfdec_flv_decoder_parse_header (flv); - break; - case SWFDEC_STATE_LAST_TAG: - ret = swfdec_flv_decoder_parse_last_tag (flv); - break; - case SWFDEC_STATE_TAG: - ret = swfdec_flv_decoder_parse_tag (flv); - break; - case SWFDEC_STATE_EOF: - ret = SWFDEC_STATUS_EOF; - break; - default: - g_assert_not_reached (); - ret = SWFDEC_STATUS_ERROR; - break; - } + SwfdecStatus status = 0; + + swfdec_buffer_queue_push (flv->queue, buffer); + + do { + switch (flv->state) { + case SWFDEC_STATE_HEADER: + status |= swfdec_flv_decoder_parse_header (flv); + break; + case SWFDEC_STATE_LAST_TAG: + status |= swfdec_flv_decoder_parse_last_tag (flv); + break; + case SWFDEC_STATE_TAG: + status |= swfdec_flv_decoder_parse_tag (flv); + break; + case SWFDEC_STATE_EOF: + status |= SWFDEC_STATUS_EOF; + break; + default: + g_assert_not_reached (); + status |= SWFDEC_STATUS_ERROR; + break; + } + } while ((status & (SWFDEC_STATUS_EOF | SWFDEC_STATUS_NEEDBITS | SWFDEC_STATUS_ERROR)) == 0); - return ret; + return status; } static void @@ -447,6 +448,7 @@ static void swfdec_flv_decoder_init (SwfdecFlvDecoder *flv) { flv->state = SWFDEC_STATE_HEADER; + flv->queue = swfdec_buffer_queue_new (); } SwfdecBuffer * diff --git a/libswfdec/swfdec_flv_decoder.h b/libswfdec/swfdec_flv_decoder.h index 79fcb35..423050f 100644 --- a/libswfdec/swfdec_flv_decoder.h +++ b/libswfdec/swfdec_flv_decoder.h @@ -46,6 +46,7 @@ struct _SwfdecFlvDecoder GArray * audio; /* audio tags */ GArray * video; /* video tags */ GArray * data; /* data tags (if any) */ + SwfdecBufferQueue * queue; /* queue for parsing */ }; struct _SwfdecFlvDecoderClass { diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c index 2355536..91949ef 100644 --- a/libswfdec/swfdec_net_stream.c +++ b/libswfdec/swfdec_net_stream.c @@ -261,7 +261,7 @@ swfdec_net_stream_loader_target_parse (SwfdecLoaderTarget *target, { SwfdecNetStream *stream = SWFDEC_NET_STREAM (target); SwfdecDecoderClass *klass; - gboolean recheck = FALSE; + SwfdecStatus status; if (loader->state != SWFDEC_LOADER_STATE_EOF && swfdec_buffer_queue_get_depth (loader->queue) == 0) { SWFDEC_INFO ("nothing to do"); @@ -271,7 +271,6 @@ swfdec_net_stream_loader_target_parse (SwfdecLoaderTarget *target, /* FIXME: add mp3 support */ stream->flvdecoder = g_object_new (SWFDEC_TYPE_FLV_DECODER, NULL); SWFDEC_DECODER (stream->flvdecoder)->player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (stream)->context); - SWFDEC_DECODER (stream->flvdecoder)->queue = loader->queue; swfdec_net_stream_onstatus (stream, SWFDEC_AS_STR_NetStream_Play_Start, SWFDEC_AS_STR_status); swfdec_loader_set_data_type (loader, SWFDEC_LOADER_DATA_FLV); @@ -279,31 +278,19 @@ swfdec_net_stream_loader_target_parse (SwfdecLoaderTarget *target, klass = SWFDEC_DECODER_GET_CLASS (stream->flvdecoder); g_return_if_fail (klass->parse); - while (TRUE) { - SwfdecStatus status = klass->parse (SWFDEC_DECODER (stream->flvdecoder)); - switch (status) { - case SWFDEC_STATUS_OK: - break; - case SWFDEC_STATUS_INIT: - /* HACK for native flv playback */ - swfdec_player_initialize (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (stream)->context), 7, - SWFDEC_DECODER (stream->flvdecoder)->rate, - SWFDEC_DECODER (stream->flvdecoder)->width, - SWFDEC_DECODER (stream->flvdecoder)->height); - case SWFDEC_STATUS_IMAGE: - recheck = TRUE; - break; - case SWFDEC_STATUS_ERROR: - case SWFDEC_STATUS_NEEDBITS: - case SWFDEC_STATUS_EOF: - goto out; - default: - g_assert_not_reached (); - return; - } + do { + SwfdecBuffer *buffer = swfdec_buffer_queue_pull_buffer (loader->queue); + status |= klass->parse (SWFDEC_DECODER (stream->flvdecoder), buffer); + } while ((status & (SWFDEC_STATUS_ERROR | SWFDEC_STATUS_NEEDBITS | SWFDEC_STATUS_EOF)) == 0); + + if (status & SWFDEC_STATUS_INIT) { + /* HACK for native flv playback */ + swfdec_player_initialize (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (stream)->context), 7, + SWFDEC_DECODER (stream->flvdecoder)->rate, + SWFDEC_DECODER (stream->flvdecoder)->width, + SWFDEC_DECODER (stream->flvdecoder)->height); } -out: - if (recheck) + if (status & SWFDEC_STATUS_IMAGE) swfdec_net_stream_loader_target_recheck (stream); } diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c index cb5dbb7..260c57d 100644 --- a/libswfdec/swfdec_resource.c +++ b/libswfdec/swfdec_resource.c @@ -155,14 +155,19 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l { SwfdecResource *instance = SWFDEC_RESOURCE (target); SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (instance->movie)->context); + SwfdecBuffer *buffer; SwfdecAsValue vals[2]; SwfdecDecoder *dec = instance->decoder; SwfdecDecoderClass *klass; + SwfdecStatus status; + guint parsed; if (dec == NULL) { - if (!swfdec_decoder_can_detect (loader->queue)) + if (swfdec_buffer_queue_get_depth (loader->queue) < SWFDEC_DECODER_DETECT_LENGTH) return; - dec = swfdec_decoder_new (player, loader->queue); + buffer = swfdec_buffer_queue_peek (loader->queue, 4); + dec = swfdec_decoder_new (player, buffer); + swfdec_buffer_unref (buffer); if (dec == NULL) { SWFDEC_ERROR ("no decoder found"); swfdec_loader_set_target (loader, NULL); @@ -184,35 +189,41 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l } klass = SWFDEC_DECODER_GET_CLASS (dec); g_return_if_fail (klass->parse); - while (TRUE) { - SwfdecStatus status = klass->parse (dec); - switch (status) { - case SWFDEC_STATUS_ERROR: - SWFDEC_ERROR ("parsing error"); - swfdec_loader_set_target (loader, NULL); - return; - case SWFDEC_STATUS_OK: + while (swfdec_buffer_queue_get_depth (loader->queue)) { + parsed = 0; + status = 0; + do { + buffer = swfdec_buffer_queue_peek_buffer (loader->queue); + if (buffer == NULL) break; - case SWFDEC_STATUS_NEEDBITS: - return; - case SWFDEC_STATUS_IMAGE: - swfdec_resource_loader_target_image (instance); - break; - case SWFDEC_STATUS_INIT: - swfdec_player_initialize (player, - SWFDEC_IS_SWF_DECODER (dec) ? SWFDEC_SWF_DECODER (dec)->version : 7, /* <-- HACK */ - dec->rate, dec->width, dec->height); - break; - case SWFDEC_STATUS_EOF: - return; - default: - g_assert_not_reached (); - return; + if (parsed + buffer->length <= 65536) { + swfdec_buffer_unref (buffer); + buffer = swfdec_buffer_queue_pull_buffer (loader->queue); + } else { + swfdec_buffer_unref (buffer); + buffer = swfdec_buffer_queue_pull (loader->queue, 65536 - parsed); + } + parsed += buffer->length; + status = klass->parse (dec, buffer); + } while ((status & (SWFDEC_STATUS_ERROR | SWFDEC_STATUS_NEEDBITS | SWFDEC_STATUS_EOF)) == 0); + if (status & SWFDEC_STATUS_ERROR) { + SWFDEC_ERROR ("parsing error"); + swfdec_loader_set_target (loader, NULL); + return; + } + if (status & SWFDEC_STATUS_INIT) { + swfdec_player_initialize (player, + SWFDEC_IS_SWF_DECODER (dec) ? SWFDEC_SWF_DECODER (dec)->version : 7, /* <-- HACK */ + dec->rate, dec->width, dec->height); } + if (status & SWFDEC_STATUS_IMAGE) + swfdec_resource_loader_target_image (instance); + SWFDEC_AS_VALUE_SET_INT (&vals[0], dec->bytes_loaded); + SWFDEC_AS_VALUE_SET_INT (&vals[1], dec->bytes_total); + swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadProgress, vals, 2); + if (status & SWFDEC_STATUS_EOF) + return; } - SWFDEC_AS_VALUE_SET_INT (&vals[0], dec->bytes_loaded); - SWFDEC_AS_VALUE_SET_INT (&vals[1], dec->bytes_total); - swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadProgress, vals, 2); } static void @@ -220,10 +231,16 @@ swfdec_resource_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loa { SwfdecResource *instance = SWFDEC_RESOURCE (target); SwfdecAsValue vals[2]; - SwfdecDecoder *dec = instance->decoder; - SWFDEC_AS_VALUE_SET_INT (&vals[0], dec->bytes_loaded); - SWFDEC_AS_VALUE_SET_INT (&vals[1], dec->bytes_total); + + if (dec == NULL) { + SWFDEC_FIXME ("What do we signal if we have no decoder?"); + SWFDEC_AS_VALUE_SET_INT (&vals[0], 0); + SWFDEC_AS_VALUE_SET_INT (&vals[1], 0); + } else { + SWFDEC_AS_VALUE_SET_INT (&vals[0], dec->bytes_loaded); + SWFDEC_AS_VALUE_SET_INT (&vals[1], dec->bytes_total); + } swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadProgress, vals, 2); SWFDEC_AS_VALUE_SET_INT (&vals[0], 0); /* FIXME */ swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadComplete, vals, 1); diff --git a/libswfdec/swfdec_swf_decoder.c b/libswfdec/swfdec_swf_decoder.c index b186ed8..ee18f9a 100644 --- a/libswfdec/swfdec_swf_decoder.c +++ b/libswfdec/swfdec_swf_decoder.c @@ -87,35 +87,59 @@ zfree (void *opaque, void *addr) g_free (addr); } +static SwfdecBuffer * +swfdec_buffer_merge (const SwfdecBuffer *front, const SwfdecBuffer *end) +{ + SwfdecBuffer *new; + + g_return_val_if_fail (front != NULL, NULL); + g_return_val_if_fail (end != NULL, NULL); + + new = swfdec_buffer_new_and_alloc (front->length + end->length); + if (front->length) + memcpy (new->data, front->data, front->length); + if (end->length) + memcpy (new->data + front->length, end->data, end->length); + return new; +} + static gboolean -swfdec_swf_decoder_deflate_all (SwfdecSwfDecoder * s) +swfdec_swf_decoder_deflate (SwfdecSwfDecoder * s, SwfdecBuffer *buffer) { int ret; - SwfdecBuffer *buffer; SwfdecDecoder *dec = SWFDEC_DECODER (s); - while ((buffer = swfdec_buffer_queue_pull_buffer (SWFDEC_DECODER (s)->queue))) { - if (s->compressed) { - s->z.next_in = buffer->data; - s->z.avail_in = buffer->length; - ret = inflate (&s->z, Z_SYNC_FLUSH); - if (ret < Z_OK) { - SWFDEC_ERROR ("error uncompressing data: %s", s->z.msg); - return FALSE; - } + if (s->buffer == NULL) { + /* never written to */ + g_assert (s->state == SWFDEC_STATE_INIT1); + s->buffer = buffer; + } else if (s->state == SWFDEC_STATE_INIT1) { + /* not initialized yet */ + SwfdecBuffer *merge = swfdec_buffer_merge (s->buffer, buffer); + swfdec_buffer_unref (s->buffer); + swfdec_buffer_unref (buffer); + s->buffer = merge; + } else if (s->compressed) { + s->z.next_in = buffer->data; + s->z.avail_in = buffer->length; + ret = inflate (&s->z, Z_SYNC_FLUSH); + if (ret < Z_OK) { + SWFDEC_ERROR ("error uncompressing data: %s", s->z.msg); + return FALSE; + } - dec->bytes_loaded = s->z.total_out + 8; - } else { - guint max = buffer->length; + dec->bytes_loaded = s->z.total_out + 8; + swfdec_buffer_unref (buffer); + } else { + guint max = buffer->length; - if (dec->bytes_loaded + max > s->buffer->length) { - SWFDEC_WARNING ("%u bytes more than declared filesize", - dec->bytes_loaded + max - s->buffer->length); - max = s->buffer->length - dec->bytes_loaded; - } - memcpy (s->buffer->data + dec->bytes_loaded, buffer->data, max); - dec->bytes_loaded += max; + if (dec->bytes_loaded + max > s->buffer->length) { + SWFDEC_WARNING ("%u bytes more than declared filesize", + dec->bytes_loaded + max - s->buffer->length); + max = s->buffer->length - dec->bytes_loaded; } + memcpy (s->buffer->data + dec->bytes_loaded, buffer->data, max); + dec->bytes_loaded += max; swfdec_buffer_unref (buffer); } @@ -163,17 +187,16 @@ swf_parse_header1 (SwfdecSwfDecoder * s) { SwfdecDecoder *dec = SWFDEC_DECODER (s); int sig1, sig2, sig3; - SwfdecBuffer *buffer; + SwfdecBuffer *buffer, *rest; SwfdecBits bits; guint8 *data; - /* NB: we're still reading from the original queue, since deflating is not initialized yet */ - buffer = swfdec_buffer_queue_pull (dec->queue, 8); - if (buffer == NULL) { + g_assert (s->buffer != NULL); + if (s->buffer->length <= 8) { return SWFDEC_STATUS_NEEDBITS; } - swfdec_bits_init (&bits, buffer); + swfdec_bits_init (&bits, s->buffer); sig1 = swfdec_bits_get_u8 (&bits); sig2 = swfdec_bits_get_u8 (&bits); @@ -184,11 +207,21 @@ swf_parse_header1 (SwfdecSwfDecoder * s) s->version = swfdec_bits_get_u8 (&bits); dec->bytes_total = swfdec_bits_get_u32 (&bits); + if (dec->bytes_total <= 8) { + SWFDEC_ERROR ("Joke? Flash files need to be bigger than %u bytes", dec->bytes_total); + dec->bytes_total = 0; + return SWFDEC_STATUS_ERROR; + } + rest = swfdec_bits_get_buffer (&bits, -1); data = g_try_malloc (dec->bytes_total); if (data == NULL) return SWFDEC_STATUS_ERROR; - s->buffer = swfdec_buffer_new_for_data (data, dec->bytes_total); + buffer = swfdec_buffer_new_for_data (data, dec->bytes_total); + memcpy (buffer->data, s->buffer->data, 8); + swfdec_buffer_unref (s->buffer); + s->buffer = buffer; + s->compressed = (sig1 == 'C'); if (s->compressed) { SWFDEC_DEBUG ("compressed"); @@ -197,12 +230,10 @@ swf_parse_header1 (SwfdecSwfDecoder * s) } else { SWFDEC_DEBUG ("not compressed"); } - memcpy (s->buffer->data, buffer->data, 8); SWFDEC_DECODER (s)->bytes_loaded = 8; s->bytes_parsed = 8; - swfdec_buffer_unref (buffer); - s->state = SWFDEC_STATE_INIT2; + swfdec_swf_decoder_deflate (s, rest); return SWFDEC_STATUS_OK; } @@ -246,21 +277,17 @@ swf_parse_header2 (SwfdecSwfDecoder * s) } static SwfdecStatus -swfdec_swf_decoder_parse (SwfdecDecoder *dec) +swfdec_swf_decoder_parse_one (SwfdecSwfDecoder *s) { - SwfdecSwfDecoder *s = SWFDEC_SWF_DECODER (dec); int ret = SWFDEC_STATUS_OK; s->b = s->parse; - g_assert (dec->player); switch (s->state) { case SWFDEC_STATE_INIT1: ret = swf_parse_header1 (s); break; case SWFDEC_STATE_INIT2: - if (!swfdec_swf_decoder_deflate_all (s)) - return SWFDEC_STATUS_ERROR; ret = swf_parse_header2 (s); break; case SWFDEC_STATE_PARSE_FIRST_TAG: @@ -273,9 +300,6 @@ swfdec_swf_decoder_parse (SwfdecDecoder *dec) guint tag_len; SwfdecBits bits; - if (!swfdec_swf_decoder_deflate_all (s)) - return SWFDEC_STATUS_ERROR; - /* we're parsing tags */ swfdec_swf_decoder_init_bits (s, &bits); if (swfdec_bits_left (&bits) < 2 * 8) @@ -336,18 +360,31 @@ swfdec_swf_decoder_parse (SwfdecDecoder *dec) break; } case SWFDEC_STATE_EOF: - if (s->bytes_parsed < dec->bytes_loaded) { - SWFDEC_WARNING ("%u bytes after EOF", dec->bytes_loaded - s->bytes_parsed); + if (s->bytes_parsed < SWFDEC_DECODER (s)->bytes_loaded) { + SWFDEC_WARNING ("%u bytes after EOF", SWFDEC_DECODER (s)->bytes_loaded - s->bytes_parsed); } return SWFDEC_STATUS_EOF; } /* copy state */ - dec->frames_loaded = s->main_sprite->parse_frame; + SWFDEC_DECODER (s)->frames_loaded = s->main_sprite->parse_frame; return ret; } +static SwfdecStatus +swfdec_swf_decoder_parse (SwfdecDecoder *dec, SwfdecBuffer *buffer) +{ + SwfdecSwfDecoder *s = SWFDEC_SWF_DECODER (dec); + SwfdecStatus status = 0; + + swfdec_swf_decoder_deflate (s, buffer); + do { + status |= swfdec_swf_decoder_parse_one (s); + } while ((status & (SWFDEC_STATUS_EOF | SWFDEC_STATUS_NEEDBITS | SWFDEC_STATUS_ERROR)) == 0); + return status; +} + static void swfdec_swf_decoder_class_init (SwfdecSwfDecoderClass *class) { commit d48cec50d68f3909ae1be8fe39062e702e9d15c2 Author: Chris Wilson <chris at chris-wilson.co.uk> Date: Wed Nov 7 11:35:05 2007 +0100 fix memleak diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index 650c476..a223e97 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -886,6 +886,7 @@ swfdec_movie_render (SwfdecMovie *movie, cairo_t *cr, cairo_set_source (cr, pattern); cairo_set_operator (cr, swfdec_movie_get_operator_for_blend_mode (movie->blend_mode)); cairo_paint (cr); + cairo_pattern_destroy (pattern); } cairo_restore (cr); } commit 8f8d057f061892413cc84a43be781835c6ca909c Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 21:47:18 2007 +0100 return -1 for get_next_event_time() when the context aborted. An aborted context never changes diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index fb9a23c..37b6f56 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -2262,6 +2262,9 @@ swfdec_player_get_next_event (SwfdecPlayer *player) g_return_val_if_fail (SWFDEC_IS_PLAYER (player), 0); + if (swfdec_as_context_is_aborted (SWFDEC_AS_CONTEXT (player))) + return -1; + tick = swfdec_player_get_next_event_time (player); if (tick == G_MAXUINT64) return -1; commit eb2861fdd8eb6141cea45d3b5a9b0ad8162c962e Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 18:18:30 2007 +0100 add swfdec_buffer_queue_peek_buffer() diff --git a/doc/swfdec-sections.txt b/doc/swfdec-sections.txt index 2b3a774..1b61f67 100644 --- a/doc/swfdec-sections.txt +++ b/doc/swfdec-sections.txt @@ -151,6 +151,7 @@ swfdec_buffer_queue_push swfdec_buffer_queue_pull swfdec_buffer_queue_pull_buffer swfdec_buffer_queue_peek +swfdec_buffer_queue_peek_buffer <SUBSECTION Standard> SWFDEC_TYPE_BUFFER swfdec_buffer_get_type diff --git a/libswfdec/swfdec_buffer.c b/libswfdec/swfdec_buffer.c index 7c86316..3f15975 100644 --- a/libswfdec/swfdec_buffer.c +++ b/libswfdec/swfdec_buffer.c @@ -525,6 +525,31 @@ swfdec_buffer_queue_pull (SwfdecBufferQueue * queue, guint length) } /** + * swfdec_buffer_queue_peek_buffer: + * @queue: a #SwfdecBufferQueue + * + * Gets the first buffer out of @queue and returns it. This function is + * equivalent to calling swfdec_buffer_queue_peek() with the size of the + * first buffer in it. + * + * Returns: The first buffer in @queue or %NULL if @queue is empty. Use + * swfdec_buffer_unref() after use. + **/ +SwfdecBuffer * +swfdec_buffer_queue_peek_buffer (SwfdecBufferQueue * queue) +{ + SwfdecBuffer *buffer; + + g_return_val_if_fail (queue != NULL, NULL); + if (queue->buffers == NULL) + return NULL; + + buffer = queue->buffers->data; + + return swfdec_buffer_queue_peek (queue, buffer->length); +} + +/** * swfdec_buffer_queue_peek: * @queue: a #SwfdecBufferQueue to read from * @length: amount of bytes to peek diff --git a/libswfdec/swfdec_buffer.h b/libswfdec/swfdec_buffer.h index b0d3765..717a295 100644 --- a/libswfdec/swfdec_buffer.h +++ b/libswfdec/swfdec_buffer.h @@ -78,6 +78,7 @@ void swfdec_buffer_queue_push (SwfdecBufferQueue * queue, SwfdecBuffer *swfdec_buffer_queue_pull (SwfdecBufferQueue * queue, guint length); SwfdecBuffer *swfdec_buffer_queue_pull_buffer (SwfdecBufferQueue * queue); SwfdecBuffer *swfdec_buffer_queue_peek (SwfdecBufferQueue * queue, guint length); +SwfdecBuffer *swfdec_buffer_queue_peek_buffer (SwfdecBufferQueue * queue); SwfdecBufferQueue *swfdec_buffer_queue_ref (SwfdecBufferQueue * queue); void swfdec_buffer_queue_unref (SwfdecBufferQueue * queue); #endif commit c78a7290e2a221d3be35a1a8c7c7d4215252f646 Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 18:18:19 2007 +0100 add initial support for MovieClipLoader events diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c index a0984ca..cb5dbb7 100644 --- a/libswfdec/swfdec_resource.c +++ b/libswfdec/swfdec_resource.c @@ -28,6 +28,7 @@ #include "swfdec_as_frame_internal.h" #include "swfdec_as_internal.h" #include "swfdec_as_interpret.h" +#include "swfdec_as_strings.h" #include "swfdec_character.h" #include "swfdec_debug.h" #include "swfdec_decoder.h" @@ -104,6 +105,33 @@ swfdec_resource_loader_target_image (SwfdecResource *instance) } } +/* NB: name must be GC'ed */ +static void +swfdec_resource_emit_signal (SwfdecResource *resource, const char *name, SwfdecAsValue *args, guint n_args) +{ + SwfdecAsContext *cx; + SwfdecAsObject *movie; + SwfdecAsValue vals[n_args + 2]; + + if (resource->clip_loader == NULL) + return; + cx = SWFDEC_AS_OBJECT (resource->clip_loader)->context; + g_assert (resource->target); + movie = swfdec_action_lookup_object (cx, SWFDEC_PLAYER (cx)->roots->data, + resource->target, resource->target + strlen (resource->target)); + if (!SWFDEC_IS_SPRITE_MOVIE (movie)) { + SWFDEC_FIXME ("figure out if we emit nonetheless"); + return; + } + + SWFDEC_AS_VALUE_SET_STRING (&vals[0], name); + SWFDEC_AS_VALUE_SET_OBJECT (&vals[1], movie); + if (n_args) + memcpy (&vals[2], args, sizeof (SwfdecAsValue) * n_args); + swfdec_as_object_call (SWFDEC_AS_OBJECT (resource->clip_loader), SWFDEC_AS_STR_broadcastMessage, + n_args + 2, vals, NULL); +} + static void swfdec_resource_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *loader) { @@ -119,6 +147,7 @@ swfdec_resource_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *lo SWFDEC_INFO ("set manual movie variables: %s", instance->variables); swfdec_movie_set_variables (SWFDEC_MOVIE (instance->movie), instance->variables); } + swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadStart, NULL, 0); } static void @@ -126,6 +155,7 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l { SwfdecResource *instance = SWFDEC_RESOURCE (target); SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (instance->movie)->context); + SwfdecAsValue vals[2]; SwfdecDecoder *dec = instance->decoder; SwfdecDecoderClass *klass; @@ -180,6 +210,23 @@ swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *l return; } } + SWFDEC_AS_VALUE_SET_INT (&vals[0], dec->bytes_loaded); + SWFDEC_AS_VALUE_SET_INT (&vals[1], dec->bytes_total); + swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadProgress, vals, 2); +} + +static void +swfdec_resource_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loader) +{ + SwfdecResource *instance = SWFDEC_RESOURCE (target); + SwfdecAsValue vals[2]; + + SwfdecDecoder *dec = instance->decoder; + SWFDEC_AS_VALUE_SET_INT (&vals[0], dec->bytes_loaded); + SWFDEC_AS_VALUE_SET_INT (&vals[1], dec->bytes_total); + swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadProgress, vals, 2); + SWFDEC_AS_VALUE_SET_INT (&vals[0], 0); /* FIXME */ + swfdec_resource_emit_signal (instance, SWFDEC_AS_STR_onLoadComplete, vals, 1); } static void @@ -188,6 +235,7 @@ swfdec_resource_loader_target_init (SwfdecLoaderTargetInterface *iface) iface->get_player = swfdec_resource_loader_target_get_player; iface->open = swfdec_resource_loader_target_open; iface->parse = swfdec_resource_loader_target_parse; + iface->eof = swfdec_resource_loader_target_eof; } static void commit 7c41e278c85cc306b640a309cbe8e6e27f789420 Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 18:15:14 2007 +0100 fix debug message diff --git a/libswfdec/swfdec_swf_decoder.c b/libswfdec/swfdec_swf_decoder.c index 7269b68..b186ed8 100644 --- a/libswfdec/swfdec_swf_decoder.c +++ b/libswfdec/swfdec_swf_decoder.c @@ -109,8 +109,9 @@ swfdec_swf_decoder_deflate_all (SwfdecSwfDecoder * s) guint max = buffer->length; if (dec->bytes_loaded + max > s->buffer->length) { + SWFDEC_WARNING ("%u bytes more than declared filesize", + dec->bytes_loaded + max - s->buffer->length); max = s->buffer->length - dec->bytes_loaded; - SWFDEC_WARNING ("%u bytes more than declared filesize", max - dec->bytes_loaded); } memcpy (s->buffer->data + dec->bytes_loaded, buffer->data, max); dec->bytes_loaded += max; commit 5c1b8846d337f05d35b982ec5decc1195ddc0eac Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 18:05:16 2007 +0100 add test for MovieClipLoader properties diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index a8788c4..b7474f0 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -991,6 +991,15 @@ EXTRA_DIST = \ moviecliploader-getprogress-7.swf.trace \ moviecliploader-getprogress-8.swf \ moviecliploader-getprogress-8.swf.trace \ + moviecliploader-properties.as \ + moviecliploader-properties-5.swf \ + moviecliploader-properties-5.swf.trace \ + moviecliploader-properties-6.swf \ + moviecliploader-properties-6.swf.trace \ + moviecliploader-properties-7.swf \ + moviecliploader-properties-7.swf.trace \ + moviecliploader-properties-8.swf \ + moviecliploader-properties-8.swf.trace \ name.swf \ name.swf.trace \ name2.swf \ diff --git a/test/trace/moviecliploader-properties-5.swf b/test/trace/moviecliploader-properties-5.swf new file mode 100644 index 0000000..0cf5dc6 Binary files /dev/null and b/test/trace/moviecliploader-properties-5.swf differ diff --git a/test/trace/moviecliploader-properties-5.swf.trace b/test/trace/moviecliploader-properties-5.swf.trace new file mode 100644 index 0000000..fb21320 --- /dev/null +++ b/test/trace/moviecliploader-properties-5.swf.trace @@ -0,0 +1,33 @@ +_global.MovieClipLoader = function + __proto__ (hpn) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor + prototype (hp) = object + __proto__ (hpn) = _global.Object.prototype + _listeners (hpn) = object + __proto__ (hp) = _global.Array.prototype + constructor (hp) = _global.Array + length (hp) = number : 0 + addListener (hpn) = _global.AsBroadcaster.addListener + broadcastMessage (hpn) = function + __proto__ (hpn) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor + constructor (hp) = _global.Object + getProgress (hpn) = function + __proto__ (hpn) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor + loadClip (hpn) = function + __proto__ (hpn) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor + removeListener (hpn) = _global.AsBroadcaster.removeListener + unloadClip (hpn) = function + __proto__ (hpn) = _global.Object.__proto__ + constructor (hp) = _global.Object.constructor +MovieClipLoader.instance = object + __constructor__ (hn) = _global.MovieClipLoader + __proto__ (hp) = _global.MovieClipLoader.prototype + _listeners (hp) = object + 0 = undefined + __proto__ (hp) = _global.Array.prototype + constructor (hp) = _global.Array + length (hp) = number : 1 + constructor (h) = _global.MovieClipLoader diff --git a/test/trace/moviecliploader-properties-6.swf b/test/trace/moviecliploader-properties-6.swf new file mode 100644 index 0000000..9a64c5f Binary files /dev/null and b/test/trace/moviecliploader-properties-6.swf differ diff --git a/test/trace/moviecliploader-properties-6.swf.trace b/test/trace/moviecliploader-properties-6.swf.trace new file mode 100644 index 0000000..f4149cd --- /dev/null +++ b/test/trace/moviecliploader-properties-6.swf.trace @@ -0,0 +1,33 @@ +_global.MovieClipLoader = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + prototype (hp) = object + __proto__ (hpn) = _global.Object.prototype + _listeners (hpn) = object + __proto__ (hp) = _global.Array.prototype + constructor (hp) = _global.Array + length (hp) = number : 0 + addListener (hpn) = _global.AsBroadcaster.addListener + broadcastMessage (hpn) = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + constructor (hpC) = _global.Object + getProgress (hpn) = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + loadClip (hpn) = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + removeListener (hpn) = _global.AsBroadcaster.removeListener + unloadClip (hpn) = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function +MovieClipLoader.instance = object + __constructor__ (h) = _global.MovieClipLoader + __proto__ (hp) = _global.MovieClipLoader.prototype + _listeners (hp) = object + 0 = undefined + __proto__ (hp) = _global.Array.prototype + constructor (hp) = _global.Array + length (hp) = number : 1 + constructor (h) = _global.MovieClipLoader diff --git a/test/trace/moviecliploader-properties-7.swf b/test/trace/moviecliploader-properties-7.swf new file mode 100644 index 0000000..5558076 Binary files /dev/null and b/test/trace/moviecliploader-properties-7.swf differ diff --git a/test/trace/moviecliploader-properties-7.swf.trace b/test/trace/moviecliploader-properties-7.swf.trace new file mode 100644 index 0000000..5729f4a --- /dev/null +++ b/test/trace/moviecliploader-properties-7.swf.trace @@ -0,0 +1,32 @@ +_global.MovieClipLoader = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + prototype (hp) = object + __proto__ (hp) = _global.Object.prototype + _listeners (hp) = object + __proto__ (hp) = _global.Array.prototype + constructor (hp) = _global.Array + length (hp) = number : 0 + addListener (hp) = _global.AsBroadcaster.addListener + broadcastMessage (hp) = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + constructor (hp) = _global.MovieClipLoader + getProgress (hp) = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + loadClip (hp) = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + removeListener (hp) = _global.AsBroadcaster.removeListener + unloadClip (hp) = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function +MovieClipLoader.instance = object + __constructor__ (h) = _global.MovieClipLoader + __proto__ (hp) = _global.MovieClipLoader.prototype + _listeners (hp) = object + 0 = undefined + __proto__ (hp) = _global.Array.prototype + constructor (hp) = _global.Array + length (hp) = number : 1 diff --git a/test/trace/moviecliploader-properties-8.swf b/test/trace/moviecliploader-properties-8.swf new file mode 100644 index 0000000..d5efe47 Binary files /dev/null and b/test/trace/moviecliploader-properties-8.swf differ diff --git a/test/trace/moviecliploader-properties-8.swf.trace b/test/trace/moviecliploader-properties-8.swf.trace new file mode 100644 index 0000000..5729f4a --- /dev/null +++ b/test/trace/moviecliploader-properties-8.swf.trace @@ -0,0 +1,32 @@ +_global.MovieClipLoader = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + prototype (hp) = object + __proto__ (hp) = _global.Object.prototype + _listeners (hp) = object + __proto__ (hp) = _global.Array.prototype + constructor (hp) = _global.Array + length (hp) = number : 0 + addListener (hp) = _global.AsBroadcaster.addListener + broadcastMessage (hp) = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + constructor (hp) = _global.MovieClipLoader + getProgress (hp) = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + loadClip (hp) = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function + removeListener (hp) = _global.AsBroadcaster.removeListener + unloadClip (hp) = function + __proto__ (hp) = _global.Function.prototype + constructor (hp) = _global.Function +MovieClipLoader.instance = object + __constructor__ (h) = _global.MovieClipLoader + __proto__ (hp) = _global.MovieClipLoader.prototype + _listeners (hp) = object + 0 = undefined + __proto__ (hp) = _global.Array.prototype + constructor (hp) = _global.Array + length (hp) = number : 1 diff --git a/test/trace/moviecliploader-properties.as b/test/trace/moviecliploader-properties.as new file mode 100644 index 0000000..0230d55 --- /dev/null +++ b/test/trace/moviecliploader-properties.as @@ -0,0 +1,8 @@ +// makeswf -v 7 -s 200x150 -r 1 -o movie23.swf movie23.as + +#include "trace_properties.as" + +trace_properties (MovieClipLoader, "_global", "MovieClipLoader"); +trace_properties (new MovieClipLoader (), "MovieClipLoader", "instance"); + +loadMovie ("fscommand:QUIT", ""); commit 4b058119af441b3769d858f23f1ed195031efad6 Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 18:02:54 2007 +0100 add a _listeners property when constructing a MovieClipLoader and add the loader to the listeners. diff --git a/libswfdec/swfdec_movie_clip_loader.c b/libswfdec/swfdec_movie_clip_loader.c index 9c48544..33ff187 100644 --- a/libswfdec/swfdec_movie_clip_loader.c +++ b/libswfdec/swfdec_movie_clip_loader.c @@ -22,6 +22,7 @@ #endif #include "swfdec_movie_clip_loader.h" +#include "swfdec_as_array.h" #include "swfdec_as_internal.h" #include "swfdec_as_strings.h" #include "swfdec_debug.h" @@ -47,6 +48,20 @@ void swfdec_movie_clip_loader_construct (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) { + SwfdecAsValue val; + SwfdecAsObject *array; + + if (!swfdec_as_context_is_constructing (cx)) + return; + + array = swfdec_as_array_new (cx); + if (array == NULL) + return; + SWFDEC_AS_VALUE_SET_OBJECT (&val, object); + swfdec_as_array_push (SWFDEC_AS_ARRAY (array), &val); + SWFDEC_AS_VALUE_SET_OBJECT (&val, array); + swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR__listeners, + &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT); } SWFDEC_AS_NATIVE (112, 100, swfdec_movie_clip_loader_loadClip) commit a25d8c5188ab0791fcdd598b834beb2fd86c657f Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 17:52:34 2007 +0100 move list away when performing events This makes sure that events that get queued while iterating don't get executed. That gets around inifinite loops. I think this is not possible, because we don't execute events there, but better be careful. diff --git a/libswfdec/swfdec_resource_request.c b/libswfdec/swfdec_resource_request.c index 398335a..48ffcd3 100644 --- a/libswfdec/swfdec_resource_request.c +++ b/libswfdec/swfdec_resource_request.c @@ -72,11 +72,14 @@ swfdec_request_resource_perform_one (gpointer requestp, gpointer playerp) void swfdec_player_resource_request_perform (SwfdecPlayer *player) { + GSList *list; + g_return_if_fail (SWFDEC_IS_PLAYER (player)); - g_slist_foreach (player->resource_requests, swfdec_request_resource_perform_one, player); - g_slist_free (player->resource_requests); + list = player->resource_requests; player->resource_requests = NULL; + g_slist_foreach (list, swfdec_request_resource_perform_one, player); + g_slist_free (list); } void commit aabdf29f359477ab99db3cdaa74972e52148661e Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 17:50:41 2007 +0100 add MovieClipLoader event names diff --git a/libswfdec/swfdec_as_strings.c b/libswfdec/swfdec_as_strings.c index b0a9e28..4326235 100644 --- a/libswfdec/swfdec_as_strings.c +++ b/libswfdec/swfdec_as_strings.c @@ -424,5 +424,10 @@ const char swfdec_as_strings[] SWFDEC_AS_CONSTANT_STRING ("onScroller") SWFDEC_AS_CONSTANT_STRING ("styleSheet") SWFDEC_AS_CONSTANT_STRING ("_styles") + SWFDEC_AS_CONSTANT_STRING ("onLoadStart") + SWFDEC_AS_CONSTANT_STRING ("onLoadComplete") + SWFDEC_AS_CONSTANT_STRING ("onLoadError") + SWFDEC_AS_CONSTANT_STRING ("onLoadInit") + SWFDEC_AS_CONSTANT_STRING ("onLoadProgress") /* add more here */ ; commit 363777b0bb2cab3f64eb687c74e68c97e4ba0ce9 Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 12:49:08 2007 +0100 Create the SwfdcResource in the initial _load call and pass the MovieClipLoader with it. diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c index 68e2725..a0984ca 100644 --- a/libswfdec/swfdec_resource.c +++ b/libswfdec/swfdec_resource.c @@ -193,17 +193,25 @@ swfdec_resource_loader_target_init (SwfdecLoaderTargetInterface *iface) static void swfdec_resource_dispose (GObject *object) { - SwfdecResource *instance = SWFDEC_RESOURCE (object); + SwfdecResource *resource = SWFDEC_RESOURCE (object); - swfdec_loader_set_target (instance->loader, NULL); - g_object_unref (instance->loader); - if (instance->decoder) { - g_object_unref (instance->decoder); - instance->decoder = NULL; + swfdec_loader_set_target (resource->loader, NULL); + if (resource->loader) { + g_object_unref (resource->loader); + resource->loader = NULL; } - g_free (instance->variables); - g_hash_table_destroy (instance->exports); - g_hash_table_destroy (instance->export_names); + if (resource->decoder) { + g_object_unref (resource->decoder); + resource->decoder = NULL; + } + if (resource->clip_loader) { + g_object_unref (resource->clip_loader); + resource->clip_loader = NULL; + } + g_free (resource->target); + g_free (resource->variables); + g_hash_table_destroy (resource->exports); + g_hash_table_destroy (resource->export_names); G_OBJECT_CLASS (swfdec_resource_parent_class)->dispose (object); } @@ -268,6 +276,9 @@ void swfdec_resource_mark (SwfdecResource *resource) { g_return_if_fail (SWFDEC_IS_RESOURCE (resource)); + + if (resource->clip_loader) + swfdec_as_object_mark (SWFDEC_AS_OBJECT (resource->clip_loader)); } gpointer @@ -300,12 +311,11 @@ swfdec_resource_add_export (SwfdecResource *instance, SwfdecCharacter *character } static void -swfdec_resource_do_load (SwfdecPlayer *player, SwfdecLoader *loader, gpointer targetp) +swfdec_resource_do_load (SwfdecPlayer *player, SwfdecLoader *loader, gpointer resourcep) { + SwfdecResource *resource = SWFDEC_RESOURCE (resourcep); SwfdecSpriteMovie *movie; - SwfdecResource *resource; int level = -1; - char *target = targetp; if (loader == NULL) { /* *** Security Sandbox Violation *** */ @@ -313,12 +323,15 @@ swfdec_resource_do_load (SwfdecPlayer *player, SwfdecLoader *loader, gpointer ta } movie = (SwfdecSpriteMovie *) swfdec_action_lookup_object (SWFDEC_AS_CONTEXT (player), - player->roots->data, target, target + strlen (target)); - resource = swfdec_resource_new (loader, NULL); + player->roots->data, resource->target, resource->target + strlen (resource->target)); + swfdec_resource_set_loader (resource, loader); if (!SWFDEC_IS_SPRITE_MOVIE (movie)) { - level = swfdec_player_get_level (player, target); - if (level < 0) - goto fail; + level = swfdec_player_get_level (player, resource->target); + if (level < 0) { + SWFDEC_WARNING ("%s does not reference a movie, not loading %s", resource->target, + swfdec_url_get_url (swfdec_loader_get_url (loader))); + swfdec_loader_close (loader); + } movie = swfdec_player_get_movie_at_level (player, level); } if (movie == NULL) { @@ -340,14 +353,6 @@ swfdec_resource_do_load (SwfdecPlayer *player, SwfdecLoader *loader, gpointer ta swfdec_movie_remove (mov); movie = SWFDEC_SPRITE_MOVIE (copy); } - g_object_unref (resource); - g_object_unref (loader); - return; - -fail: - SWFDEC_WARNING ("%s does not reference a movie, not loading %s", target, - swfdec_url_get_url (swfdec_loader_get_url (loader))); - swfdec_loader_close (loader); g_object_unref (loader); return; } @@ -358,6 +363,7 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url, SwfdecLoaderRequest request, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader) { SwfdecSpriteMovie *movie; + SwfdecResource *resource; char *path; g_return_if_fail (SWFDEC_IS_PLAYER (player)); @@ -375,6 +381,10 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url, SWFDEC_WARNING ("%s does not reference a movie, not loading %s", target, url); return; } + resource = g_object_new (SWFDEC_TYPE_RESOURCE, NULL); + resource->target = path; + if (loader) + resource->clip_loader = g_object_ref (loader); swfdec_player_request_resource (player, SWFDEC_AS_CONTEXT (player)->frame->security, - url, request, buffer, swfdec_resource_do_load, path, g_free); + url, request, buffer, swfdec_resource_do_load, resource, g_object_unref); } diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h index 01b4aea..ea3192e 100644 --- a/libswfdec/swfdec_resource.h +++ b/libswfdec/swfdec_resource.h @@ -48,6 +48,10 @@ struct _SwfdecResource GHashTable * exports; /* string->SwfdecCharacter mapping of exported characters */ GHashTable * export_names; /* SwfdecCharacter->string mapping of exported characters */ + + /* only used while loading */ + char * target; /* target path we use for signalling */ + SwfdecMovieClipLoader *clip_loader; /* loader that gets notified about load events */ }; struct _SwfdecResourceClass commit 625d1fac70b93ef42aec8b0d49e9c618ea41da6a Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 12:20:37 2007 +0100 split out loader setting code from creation function diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c index 97617e4..68e2725 100644 --- a/libswfdec/swfdec_resource.c +++ b/libswfdec/swfdec_resource.c @@ -225,22 +225,32 @@ swfdec_resource_init (SwfdecResource *instance) g_object_unref, g_free); } +static void +swfdec_resource_set_loader (SwfdecResource *resource, SwfdecLoader *loader) +{ + g_return_if_fail (SWFDEC_IS_RESOURCE (resource)); + g_return_if_fail (SWFDEC_IS_LOADER (loader)); + g_return_if_fail (resource->loader == NULL); + + resource->loader = g_object_ref (loader); + swfdec_flash_security_set_url (SWFDEC_FLASH_SECURITY (resource), + swfdec_loader_get_url (loader)); +} + SwfdecResource * swfdec_resource_new (SwfdecLoader *loader, const char *variables) { - SwfdecResource *swf; + SwfdecResource *resource; g_return_val_if_fail (SWFDEC_IS_LOADER (loader), NULL); - swf = g_object_new (SWFDEC_TYPE_RESOURCE, NULL); + resource = g_object_new (SWFDEC_TYPE_RESOURCE, NULL); /* set important variables */ - swf->variables = g_strdup (variables); + resource->variables = g_strdup (variables); /* set loader (that depends on those vars) */ - swf->loader = g_object_ref (loader); - swfdec_flash_security_set_url (SWFDEC_FLASH_SECURITY (swf), - swfdec_loader_get_url (loader)); + swfdec_resource_set_loader (resource, loader); - return swf; + return resource; } void commit 7e9f9d1b24e17cc9d4c139cdca8a74b4f8529830 Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 11:59:53 2007 +0100 add test for MovieClipLoader.getProgress() diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index 6762ef1..a8788c4 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -982,6 +982,15 @@ EXTRA_DIST = \ movieclip-target-6.swf.trace \ movieclip-target-7.swf \ movieclip-target-7.swf.trace \ + moviecliploader-getprogress.as \ + moviecliploader-getprogress-5.swf \ + moviecliploader-getprogress-5.swf.trace \ + moviecliploader-getprogress-6.swf \ + moviecliploader-getprogress-6.swf.trace \ + moviecliploader-getprogress-7.swf \ + moviecliploader-getprogress-7.swf.trace \ + moviecliploader-getprogress-8.swf \ + moviecliploader-getprogress-8.swf.trace \ name.swf \ name.swf.trace \ name2.swf \ diff --git a/test/trace/moviecliploader-getprogress-5.swf b/test/trace/moviecliploader-getprogress-5.swf new file mode 100644 index 0000000..178452f Binary files /dev/null and b/test/trace/moviecliploader-getprogress-5.swf differ diff --git a/test/trace/moviecliploader-getprogress-5.swf.trace b/test/trace/moviecliploader-getprogress-5.swf.trace new file mode 100644 index 0000000..53b09ed --- /dev/null +++ b/test/trace/moviecliploader-getprogress-5.swf.trace @@ -0,0 +1,19 @@ +Checking: _level0 (movieclip) +undefined +undefined +undefined +Checking: (undefined) +undefined +undefined +undefined +Checking: (undefined) +undefined +undefined +undefined +Checking: /a (string) +undefined +undefined +undefined +undefined +undefined +undefined diff --git a/test/trace/moviecliploader-getprogress-6.swf b/test/trace/moviecliploader-getprogress-6.swf new file mode 100644 index 0000000..309dc74 Binary files /dev/null and b/test/trace/moviecliploader-getprogress-6.swf differ diff --git a/test/trace/moviecliploader-getprogress-6.swf.trace b/test/trace/moviecliploader-getprogress-6.swf.trace new file mode 100644 index 0000000..c4aaf71 --- /dev/null +++ b/test/trace/moviecliploader-getprogress-6.swf.trace @@ -0,0 +1,19 @@ +Checking: _level0 (movieclip) +undefined +undefined +undefined +Checking: (undefined) +undefined +undefined +undefined +Checking: _level0.a (movieclip) +undefined +undefined +undefined +Checking: /a (string) +undefined +undefined +undefined +undefined +undefined +undefined diff --git a/test/trace/moviecliploader-getprogress-7.swf b/test/trace/moviecliploader-getprogress-7.swf new file mode 100644 index 0000000..f1d02af Binary files /dev/null and b/test/trace/moviecliploader-getprogress-7.swf differ diff --git a/test/trace/moviecliploader-getprogress-7.swf.trace b/test/trace/moviecliploader-getprogress-7.swf.trace new file mode 100644 index 0000000..afc9b8c --- /dev/null +++ b/test/trace/moviecliploader-getprogress-7.swf.trace @@ -0,0 +1,19 @@ +Checking: _level0 (movieclip) +[type Object] +467 +467 +Checking: undefined (undefined) +undefined +undefined +undefined +Checking: _level0.a (movieclip) +[type Object] +0 +0 +Checking: /a (string) +[type Object] +0 +0 +undefined +undefined +undefined diff --git a/test/trace/moviecliploader-getprogress-8.swf b/test/trace/moviecliploader-getprogress-8.swf new file mode 100644 index 0000000..3bf7ace Binary files /dev/null and b/test/trace/moviecliploader-getprogress-8.swf differ diff --git a/test/trace/moviecliploader-getprogress-8.swf.trace b/test/trace/moviecliploader-getprogress-8.swf.trace new file mode 100644 index 0000000..afc9b8c --- /dev/null +++ b/test/trace/moviecliploader-getprogress-8.swf.trace @@ -0,0 +1,19 @@ +Checking: _level0 (movieclip) +[type Object] +467 +467 +Checking: undefined (undefined) +undefined +undefined +undefined +Checking: _level0.a (movieclip) +[type Object] +0 +0 +Checking: /a (string) +[type Object] +0 +0 +undefined +undefined +undefined diff --git a/test/trace/moviecliploader-getprogress.as b/test/trace/moviecliploader-getprogress.as new file mode 100644 index 0000000..0ba0a84 --- /dev/null +++ b/test/trace/moviecliploader-getprogress.as @@ -0,0 +1,24 @@ +// makeswf -v 7 -s 200x150 -r 1 -o moviecliploader-getprogress.swf moviecliploader-getprogress.as + +loader = new MovieClipLoader (); +function check (x) { + p = loader.getProgress (x); + trace ("Checking: " + x + " (" + typeof (x) + ")"); + trace (p); + trace (p.bytesLoaded); + trace (p.bytesTotal); +}; + +check (this); +check (); +createEmptyMovieClip ("a", 0); +check (a); +check ("/a"); + +p.getProgress = loader.getProgress; +p = p.getProgress (this); +trace (p); +trace (p.bytesLoaded); +trace (p.bytesTotal); + +loadMovie ("fscommand:QUIT", ""); commit c75cab36bac71522f53d0f4ef80646dc2ce0a917 Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 11:57:59 2007 +0100 add MovieClipLoader object diff --git a/libswfdec/swfdec_initialize.as b/libswfdec/swfdec_initialize.as index bfb2e78..51a8152 100644 --- a/libswfdec/swfdec_initialize.as +++ b/libswfdec/swfdec_initialize.as @@ -292,6 +292,13 @@ ASSetPropFlags (MovieClip.prototype, "getDepth", 128); ASSetNative (MovieClip.prototype, 901, "6createEmptyMovieClip,6beginFill,6beginGradientFill,6moveTo,6lineTo,6curveTo,6lineStyle,6endFill,6clear"); ASSetPropFlags (MovieClip.prototype, null, 3); +/* MovieClipLoader */ + +MovieClipLoader = ASconstructor (112, 0); +ASSetNative(MovieClipLoader.prototype, 112, "7loadClip,7getProgress,7unloadClip", 100); +AsBroadcaster.initialize(MovieClipLoader.prototype); +ASSetPropFlags(MovieClipLoader.prototype, null, 1027); + /* TextField */ TextField = ASconstructor (104, 0); diff --git a/libswfdec/swfdec_initialize.h b/libswfdec/swfdec_initialize.h index e70f987..49adcd2 100644 --- a/libswfdec/swfdec_initialize.h +++ b/libswfdec/swfdec_initialize.h @@ -2,7 +2,7 @@ /* compiled from swfdec_initialize.as */ const unsigned char swfdec_initialize[] = { - 0x88, 0xCC, 0x07, 0xBF, 0x00, 0x41, 0x53, 0x53, 0x65, 0x74, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x88, 0xFF, 0x07, 0xC1, 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, @@ -83,492 +83,502 @@ const unsigned char swfdec_initialize[] = { 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, + 0x46, 0x69, 0x6C, 0x6C, 0x2C, 0x36, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x00, 0x4D, 0x6F, 0x76, 0x69, + 0x65, 0x43, 0x6C, 0x69, 0x70, 0x4C, 0x6F, 0x61, 0x64, 0x65, 0x72, 0x00, 0x37, 0x6C, 0x6F, 0x61, + 0x64, 0x43, 0x6C, 0x69, 0x70, 0x2C, 0x37, 0x67, 0x65, 0x74, 0x50, 0x72, 0x6F, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x2C, 0x37, 0x75, 0x6E, 0x6C, 0x6F, 0x61, 0x64, 0x43, 0x6C, 0x69, 0x70, 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, 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, + 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, 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, + 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, - 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, + 0x7B, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x70, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, + 0x08, 0x48, 0x3D, 0x1D, 0x96, 0x0E, 0x00, 0x07, 0x64, 0x00, 0x00, 0x00, 0x08, 0x7C, 0x07, 0x70, + 0x00, 0x00, 0x00, 0x08, 0x7B, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x07, 0x00, 0x07, + 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 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, 0x03, 0x04, 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, 0x13, 0x00, 0x08, 0x7D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x68, + 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x48, 0x3D, 0x1D, 0x96, 0x02, 0x00, 0x08, + 0x7D, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x7E, 0x07, 0xC9, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, + 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x7F, 0x07, 0x65, 0x00, 0x00, 0x00, + 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, + 0x00, 0x08, 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x80, 0x07, + 0x66, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, + 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, + 0x00, 0x08, 0x81, 0x07, 0x67, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, + 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x82, 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x68, 0x00, 0x00, + 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, 0x00, 0x08, 0x83, 0x07, 0x69, 0x00, 0x00, 0x00, + 0x07, 0x68, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x4F, 0x96, 0x02, + 0x00, 0x08, 0x7D, 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, 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x13, + 0x00, 0x08, 0x84, 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, 0x84, + 0x08, 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, + 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x7D, 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, 0x7D, 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, 0x7D, 0x1C, 0x96, 0x07, 0x00, + 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0x85, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x6E, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x48, 0x3D, + 0x1D, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x1C, 0x96, 0x13, 0x00, 0x08, 0x86, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x71, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x48, 0x3D, 0x4F, 0x96, + 0x02, 0x00, 0x08, 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, + 0x4E, 0x96, 0x02, 0x00, 0x08, 0x87, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, 0x6F, 0x00, 0x67, 0x00, + 0x96, 0x02, 0x00, 0x08, 0x1A, 0x1C, 0x44, 0x96, 0x02, 0x00, 0x08, 0x88, 0x49, 0x12, 0x12, 0x9D, + 0x02, 0x00, 0x05, 0x00, 0x96, 0x01, 0x00, 0x02, 0x3E, 0x96, 0x07, 0x00, 0x08, 0x89, 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, 0x8A, 0x04, 0x00, + 0x3C, 0x96, 0x02, 0x00, 0x08, 0x89, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8A, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x1A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8A, 0x1C, 0x4E, 0x4F, 0x99, 0x02, 0x00, 0xCB, 0xFF, + 0x96, 0x02, 0x00, 0x08, 0x89, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x8B, 0x9B, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x07, 0x00, + 0x08, 0x8C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, + 0x07, 0x00, 0x08, 0x8D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x07, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8E, 0x52, 0x17, 0x4F, 0x96, 0x02, + 0x00, 0x08, 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, + 0x96, 0x02, 0x00, 0x08, 0x8F, 0x9B, 0x0A, 0x00, 0x00, 0x01, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x00, + 0x25, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x4E, 0x96, 0x02, + 0x00, 0x08, 0x0C, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x87, 0x52, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x90, 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, 0x8C, 0x4E, 0x12, 0x12, + 0x9D, 0x02, 0x00, 0x12, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x8C, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x8C, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, + 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x87, 0x52, + 0x4F, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, + 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x92, 0x52, 0x17, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8E, 0x52, 0x17, 0x4F, 0x96, 0x02, 0x00, 0x08, + 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, + 0x00, 0x08, 0x93, 0x9B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x96, 0x04, 0x00, 0x08, 0x94, + 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x4E, 0x3C, 0x96, 0x07, 0x00, 0x08, 0x95, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x42, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x94, 0x46, 0x87, 0x01, 0x00, 0x00, + 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x25, 0x00, 0x96, 0x04, 0x00, 0x08, 0x8A, 0x04, + 0x00, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x8A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x95, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x14, 0x52, 0x17, 0x99, 0x02, 0x00, 0xCD, 0xFF, 0x96, + 0x02, 0x00, 0x08, 0x95, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x1C, 0x96, 0x02, 0x00, + 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x92, 0x9B, 0x0A, + 0x00, 0x00, 0x01, 0x00, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x5C, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8D, 0x4E, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x12, 0x00, 0x96, 0x02, + 0x00, 0x08, 0x08, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x8D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, + 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8D, 0x4E, 0x96, 0x02, 0x00, 0x08, + 0x0C, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x4E, 0x96, 0x02, + 0x00, 0x08, 0x0C, 0x1C, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0x96, 0x52, 0x4F, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x96, 0x9B, + 0x0B, 0x00, 0x00, 0x01, 0x00, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x00, 0x9D, 0x03, 0x96, 0x02, 0x00, + 0x08, 0x91, 0x1C, 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x05, 0x00, 0x96, 0x01, + 0x00, 0x02, 0x3E, 0x96, 0x09, 0x00, 0x08, 0x97, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x85, 0x40, + 0x3C, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x98, 0x4E, 0x12, 0x9D, 0x02, + 0x00, 0x15, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x99, 0x08, 0x91, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0x98, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x9A, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x9B, 0x49, 0x9D, 0x02, 0x00, 0x2B, 0x00, 0x96, + 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9A, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x9C, + 0x49, 0x12, 0x9D, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, 0x04, 0x00, + 0x08, 0x9B, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, + 0x96, 0x04, 0x00, 0x08, 0x9B, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0x9D, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x41, 0x00, 0x96, 0x04, 0x00, 0x08, 0x94, 0x08, + 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9D, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9E, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x94, 0x1C, + 0x96, 0x01, 0x00, 0x02, 0x49, 0x12, 0x12, 0x9D, 0x02, 0x00, 0x0F, 0x00, 0x96, 0x02, 0x00, 0x08, + 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x9D, 0x08, 0x94, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x97, + 0x1C, 0x96, 0x04, 0x00, 0x08, 0x9F, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x9F, 0x4E, 0x4F, + 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA0, 0x4E, 0x12, 0x9D, 0x02, 0x00, + 0x26, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA1, 0x08, 0x91, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0xA0, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA2, 0x52, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0xA3, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, + 0x96, 0x04, 0x00, 0x08, 0xA4, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA3, 0x4E, 0x96, 0x07, + 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA5, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0xA6, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA7, 0x49, 0x9D, 0x02, 0x00, 0x2B, + 0x00, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA6, 0x4E, 0x96, 0x02, 0x00, + 0x08, 0x9C, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, + 0x04, 0x00, 0x08, 0xA7, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, + 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA7, 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0xA8, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xA9, 0x49, 0x9D, 0x02, 0x00, 0x4F, + 0x00, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA8, 0x4E, 0x96, 0x02, 0x00, + 0x08, 0xAA, 0x49, 0x9D, 0x02, 0x00, 0x25, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, 0x04, + 0x00, 0x08, 0xA8, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xA8, 0x4E, 0x96, 0x07, 0x00, 0x07, + 0x01, 0x00, 0x00, 0x00, 0x08, 0xA5, 0x3D, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, + 0x08, 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA8, 0x05, 0x00, 0x4F, 0x99, 0x02, 0x00, 0x0E, 0x00, + 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xA8, 0x05, 0x01, 0x4F, 0x96, 0x02, + 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAB, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, + 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xAB, 0x08, 0x91, 0x1C, 0x96, 0x02, + 0x00, 0x08, 0xAB, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA5, 0x3D, 0x4F, + 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAC, 0x4E, 0x12, 0x9D, 0x02, 0x00, + 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xAD, 0x08, 0x91, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0xAC, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA5, + 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAE, 0x4E, 0x12, 0x9D, + 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xAE, 0x08, + 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAE, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, + 0x08, 0xA5, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAF, 0x4E, + 0x12, 0x9D, 0x02, 0x00, 0x20, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, + 0xB0, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xAF, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, + 0x00, 0x00, 0x08, 0xA5, 0x3D, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0xB1, 0x4E, 0x12, 0x9D, 0x02, 0x00, 0x3B, 0x00, 0x96, 0x04, 0x00, 0x08, 0x94, 0x08, 0x91, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0xB1, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0xA5, + 0x3D, 0x3C, 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x94, 0x1C, 0x48, 0x12, 0x9D, + 0x02, 0x00, 0x0F, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xB2, 0x08, + 0x94, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB3, 0x4E, 0x96, + 0x02, 0x00, 0x08, 0xB4, 0x49, 0x9D, 0x02, 0x00, 0x2B, 0x00, 0x96, 0x02, 0x00, 0x08, 0x91, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0xB3, 0x4E, 0x96, 0x02, 0x00, 0x08, 0xB5, 0x49, 0x12, 0x9D, 0x02, 0x00, + 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xB4, 0x05, 0x00, 0x4F, + 0x99, 0x02, 0x00, 0x0E, 0x00, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x96, 0x04, 0x00, 0x08, 0xB4, + 0x05, 0x01, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x97, 0x1C, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7D, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x02, 0x00, + 0x08, 0xB6, 0x9B, 0x09, 0x00, 0x00, 0x01, 0x00, 0x63, 0x73, 0x73, 0x00, 0xDA, 0x00, 0x96, 0x04, + 0x00, 0x08, 0xB9, 0x08, 0xB7, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB8, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0xB9, 0x1C, 0x44, 0x96, + 0x02, 0x00, 0x08, 0xBA, 0x49, 0x12, 0x9D, 0x02, 0x00, 0x06, 0x00, 0x96, 0x02, 0x00, 0x05, 0x00, + 0x3E, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x4E, 0x12, 0x12, 0x9D, + 0x02, 0x00, 0x12, 0x00, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x8C, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB9, 0x46, 0x87, 0x01, 0x00, 0x00, + 0x96, 0x01, 0x00, 0x02, 0x49, 0x9D, 0x02, 0x00, 0x56, 0x00, 0x96, 0x04, 0x00, 0x08, 0x8A, 0x04, + 0x00, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8C, 0x4E, 0x96, 0x02, + 0x00, 0x08, 0x8A, 0x1C, 0x96, 0x02, 0x00, 0x08, 0xB9, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8A, 0x1C, + 0x4E, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x87, 0x52, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x8A, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, + 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x92, 0x52, 0x17, 0x99, 0x02, 0x00, 0x9C, 0xFF, + 0x96, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x8E, + 0x52, 0x17, 0x96, 0x02, 0x00, 0x05, 0x01, 0x3E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x1C, 0x96, + 0x02, 0x00, 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, 0x04, 0x00, 0x08, 0xBB, + 0x08, 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x0B, 0x4E, 0x96, + 0x02, 0x00, 0x08, 0xB6, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, + 0x86, 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, 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, + 0x96, 0x02, 0x00, 0x08, 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 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, 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 0x4E, 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 + 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, 0xB9, 0x08, 0x3E, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1C, + 0x96, 0x02, 0x00, 0x08, 0xBB, 0x52, 0x3C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x04, 0x00, + 0x08, 0x3D, 0x08, 0xB9, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0xB9, 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, 0xBC, 0x07, 0x71, 0x00, 0x00, 0x00, 0x08, 0x7D, + 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 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, 0x7D, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x86, 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, 0x86, 0x08, 0x7D, 0x1C, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, + 0x00, 0x00, 0x08, 0x05, 0x3D, 0x17, 0x96, 0x13, 0x00, 0x08, 0xBD, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xFA, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x13, + 0x00, 0x08, 0xBE, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0xFA, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, + 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0xBF, 0x07, 0x02, 0x00, 0x00, 0x00, + 0x07, 0xFA, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x04, + 0x00, 0x08, 0xC0, 0x08, 0xBE, 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 8dd254cbecda15f4f0a7d6ae0908bd08444aa5b4 Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 11:57:44 2007 +0100 implement MovieClipLoader.getProgress() also add stubs for unloadMovie() diff --git a/libswfdec/swfdec_movie_clip_loader.c b/libswfdec/swfdec_movie_clip_loader.c index df6cb51..9c48544 100644 --- a/libswfdec/swfdec_movie_clip_loader.c +++ b/libswfdec/swfdec_movie_clip_loader.c @@ -23,7 +23,10 @@ #include "swfdec_movie_clip_loader.h" #include "swfdec_as_internal.h" +#include "swfdec_as_strings.h" #include "swfdec_debug.h" +#include "swfdec_decoder.h" +#include "swfdec_player_internal.h" #include "swfdec_resource.h" @@ -59,3 +62,44 @@ swfdec_movie_clip_loader_loadClip (SwfdecAsContext *cx, SwfdecAsObject *object, swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader); } +SWFDEC_AS_NATIVE (112, 102, swfdec_movie_clip_loader_unloadClip) +void +swfdec_movie_clip_loader_unloadClip (SwfdecAsContext *cx, SwfdecAsObject *object, + guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) +{ + SWFDEC_FIXME ("implement"); +} + +SWFDEC_AS_NATIVE (112, 101, swfdec_movie_clip_loader_getProgress) +void +swfdec_movie_clip_loader_getProgress (SwfdecAsContext *cx, SwfdecAsObject *object, + guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) +{ + SwfdecMovieClipLoader *loader; + SwfdecMovie *movie; + SwfdecAsObject *ret; + const char *target; + SwfdecResource *resource; + SwfdecAsValue loaded, total; + + SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "s", &target); + + movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target); + if (movie == NULL) + return; + ret = swfdec_as_object_new_empty (cx); + if (ret == NULL) + return; + SWFDEC_AS_VALUE_SET_OBJECT (rval, ret); + resource = swfdec_movie_get_own_resource (movie); + if (resource == NULL || resource->decoder == NULL) { + SWFDEC_AS_VALUE_SET_INT (&loaded, 0); + SWFDEC_AS_VALUE_SET_INT (&total, 0); + } else { + SWFDEC_AS_VALUE_SET_INT (&loaded, resource->decoder->bytes_loaded); + SWFDEC_AS_VALUE_SET_INT (&total, resource->decoder->bytes_total); + } + swfdec_as_object_set_variable (ret, SWFDEC_AS_STR_bytesLoaded, &loaded); + swfdec_as_object_set_variable (ret, SWFDEC_AS_STR_bytesTotal, &total); +} + commit 602bdf22ae985d5120364b4772c8a1d411fa4854 Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 10:22:09 2007 +0100 add a function to GC-mark stuff inside a SwfdecResource diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index 6b46623..650c476 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -973,6 +973,7 @@ swfdec_movie_mark (SwfdecAsObject *object) swfdec_as_object_mark (listener->object); swfdec_as_string_mark (listener->name); } + swfdec_resource_mark (movie->resource); SWFDEC_AS_OBJECT_CLASS (swfdec_movie_parent_class)->mark (object); } diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c index 13d5562..97617e4 100644 --- a/libswfdec/swfdec_resource.c +++ b/libswfdec/swfdec_resource.c @@ -254,6 +254,12 @@ swfdec_resource_set_movie (SwfdecResource *resource, SwfdecSpriteMovie *movie) swfdec_loader_set_target (resource->loader, SWFDEC_LOADER_TARGET (resource)); } +void +swfdec_resource_mark (SwfdecResource *resource) +{ + g_return_if_fail (SWFDEC_IS_RESOURCE (resource)); +} + gpointer swfdec_resource_get_export (SwfdecResource *instance, const char *name) { diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h index 78b011e..01b4aea 100644 --- a/libswfdec/swfdec_resource.h +++ b/libswfdec/swfdec_resource.h @@ -61,6 +61,7 @@ SwfdecResource *swfdec_resource_new (SwfdecLoader * loader, const char * variables); void swfdec_resource_set_movie (SwfdecResource * resource, SwfdecSpriteMovie * movie); +void swfdec_resource_mark (SwfdecResource * resource); void swfdec_resource_add_export (SwfdecResource * instance, SwfdecCharacter * character, commit d9782fed10dde889cb4215a2aa37855aeaa33c67 Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 08:37:28 2007 +0100 add MovieClipLoader class also add stubs for adding it to SwfdecResource when loading diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am index 99a701b..69ad762 100644 --- a/libswfdec/Makefile.am +++ b/libswfdec/Makefile.am @@ -86,6 +86,7 @@ libswfdec_ at SWFDEC_MAJORMINOR@_la_SOURCES = \ swfdec_movie.c \ swfdec_movie_as_drawing.c \ swfdec_movie_asprops.c \ + swfdec_movie_clip_loader.c \ swfdec_net_connection.c \ swfdec_net_stream.c \ swfdec_net_stream_as.c \ @@ -213,6 +214,7 @@ noinst_HEADERS = \ swfdec_morph_movie.h \ swfdec_morphshape.h \ swfdec_movie.h \ + swfdec_movie_clip_loader.h \ swfdec_net_connection.h \ swfdec_net_stream.h \ swfdec_path.h \ diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c index 57043f3..c3e4bbc 100644 --- a/libswfdec/swfdec_as_interpret.c +++ b/libswfdec/swfdec_as_interpret.c @@ -1146,7 +1146,8 @@ swfdec_action_get_url (SwfdecAsContext *cx, guint action, const guint8 *data, gu } else if (swfdec_player_fscommand (SWFDEC_PLAYER (cx), url, target)) { /* nothing to do here */ } else if (swfdec_player_get_level (SWFDEC_PLAYER (cx), target) >= 0) { - swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL); + swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, + SWFDEC_LOADER_REQUEST_DEFAULT, NULL, NULL); } g_free (url); g_free (target); @@ -1189,7 +1190,7 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g swfdec_movie_load_variables (movie, url, method, NULL); } } else if (internal) { - swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL); + swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL, NULL); } else { /* load an external file */ swfdec_player_launch (SWFDEC_PLAYER (cx), method, url, target, NULL); diff --git a/libswfdec/swfdec_movie_clip_loader.c b/libswfdec/swfdec_movie_clip_loader.c new file mode 100644 index 0000000..df6cb51 --- /dev/null +++ b/libswfdec/swfdec_movie_clip_loader.c @@ -0,0 +1,61 @@ +/* Swfdec + * Copyright (C) 2007 Benjamin Otte <otte at gnome.org> + * + * 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 "swfdec_movie_clip_loader.h" +#include "swfdec_as_internal.h" +#include "swfdec_debug.h" +#include "swfdec_resource.h" + + +G_DEFINE_TYPE (SwfdecMovieClipLoader, swfdec_movie_clip_loader, SWFDEC_TYPE_AS_OBJECT) + +static void +swfdec_movie_clip_loader_class_init (SwfdecMovieClipLoaderClass *klass) +{ +} + +static void +swfdec_movie_clip_loader_init (SwfdecMovieClipLoader *movie_clip_loader) +{ +} + +SWFDEC_AS_CONSTRUCTOR (112, 0, swfdec_movie_clip_loader_construct, swfdec_movie_clip_loader_get_type) +void +swfdec_movie_clip_loader_construct (SwfdecAsContext *cx, SwfdecAsObject *object, + guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) +{ +} + +SWFDEC_AS_NATIVE (112, 100, swfdec_movie_clip_loader_loadClip) +void +swfdec_movie_clip_loader_loadClip (SwfdecAsContext *cx, SwfdecAsObject *object, + guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) +{ + SwfdecMovieClipLoader *loader; + const char *url, *target; + + SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "ss", &url, &target); + + swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader); +} + diff --git a/libswfdec/swfdec_movie_clip_loader.h b/libswfdec/swfdec_movie_clip_loader.h new file mode 100644 index 0000000..9ef0d1c --- /dev/null +++ b/libswfdec/swfdec_movie_clip_loader.h @@ -0,0 +1,51 @@ +/* Swfdec + * Copyright (C) 2007 Benjamin Otte <otte at gnome.org> + * + * 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 + */ + +#ifndef _SWFDEC_MOVIE_CLIP_LOADER_H_ +#define _SWFDEC_MOVIE_CLIP_LOADER_H_ + +#include <libswfdec/swfdec_as_object.h> + +G_BEGIN_DECLS + +//typedef struct _SwfdecMovieClipLoader SwfdecMovieClipLoader; +typedef struct _SwfdecMovieClipLoaderClass SwfdecMovieClipLoaderClass; + +#define SWFDEC_TYPE_MOVIE_CLIP_LOADER (swfdec_movie_clip_loader_get_type()) +#define SWFDEC_IS_MOVIE_CLIP_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_MOVIE_CLIP_LOADER)) +#define SWFDEC_IS_MOVIE_CLIP_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_MOVIE_CLIP_LOADER)) +#define SWFDEC_MOVIE_CLIP_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_MOVIE_CLIP_LOADER, SwfdecMovieClipLoader)) +#define SWFDEC_MOVIE_CLIP_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_MOVIE_CLIP_LOADER, SwfdecMovieClipLoaderClass)) +#define SWFDEC_MOVIE_CLIP_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_MOVIE_CLIP_LOADER, SwfdecMovieClipLoaderClass)) + +struct _SwfdecMovieClipLoader +{ + SwfdecAsObject object; +}; + +struct _SwfdecMovieClipLoaderClass +{ + SwfdecAsObjectClass object_class; +}; + +GType swfdec_movie_clip_loader_get_type (void); + + +G_END_DECLS +#endif diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c index 62ebc3c..13d5562 100644 --- a/libswfdec/swfdec_resource.c +++ b/libswfdec/swfdec_resource.c @@ -35,6 +35,7 @@ #include "swfdec_flv_decoder.h" #include "swfdec_loader_internal.h" #include "swfdec_loadertarget.h" +#include "swfdec_movie_clip_loader.h" #include "swfdec_player_internal.h" #include "swfdec_resource_request.h" #include "swfdec_script.h" @@ -338,7 +339,7 @@ fail: /* NB: must be called from a script */ void swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url, - SwfdecLoaderRequest request, SwfdecBuffer *buffer) + SwfdecLoaderRequest request, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader) { SwfdecSpriteMovie *movie; char *path; @@ -346,6 +347,7 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url, g_return_if_fail (SWFDEC_IS_PLAYER (player)); g_return_if_fail (target != NULL); g_return_if_fail (url != NULL); + g_return_if_fail (loader == NULL || SWFDEC_IS_MOVIE_CLIP_LOADER (loader)); g_assert (SWFDEC_AS_CONTEXT (player)->frame != NULL); movie = (SwfdecSpriteMovie *) swfdec_player_get_movie_from_string (player, target); diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h index 817dd2b..78b011e 100644 --- a/libswfdec/swfdec_resource.h +++ b/libswfdec/swfdec_resource.h @@ -74,6 +74,9 @@ void swfdec_resource_load (SwfdecPlayer * player, const char * target, const char * url, SwfdecLoaderRequest request, - SwfdecBuffer * buffer); + SwfdecBuffer * buffer, + SwfdecMovieClipLoader *loader); + + G_END_DECLS #endif diff --git a/libswfdec/swfdec_types.h b/libswfdec/swfdec_types.h index 60193a0..2a9149a 100644 --- a/libswfdec/swfdec_types.h +++ b/libswfdec/swfdec_types.h @@ -46,6 +46,7 @@ typedef struct _SwfdecGraphic SwfdecGraphic; typedef struct _SwfdecImage SwfdecImage; typedef struct _SwfdecListener SwfdecListener; typedef struct _SwfdecMovie SwfdecMovie; +typedef struct _SwfdecMovieClipLoader SwfdecMovieClipLoader; typedef struct _SwfdecShape SwfdecShape; typedef struct _SwfdecShapeVec SwfdecShapeVec; typedef struct _SwfdecRect SwfdecRect; commit 92a2422dec91d300599cbe2d6372f95f140f80b3 Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 08:14:22 2007 +0100 triggering external actions performs load requests diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index 4049096..fb9a23c 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -516,6 +516,8 @@ swfdec_player_trigger_external_actions (SwfdecTimeout *advance) player->external_timeout.callback = NULL; swfdec_player_perform_external_actions (player); + swfdec_player_resource_request_perform (player); + swfdec_player_perform_actions (player); } void commit 5332d8cbc88b0c26236cde53ed02de146b86d5a0 Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 08:07:06 2007 +0100 resource requests are only performed sometimes, not on every unlock. Also, they need to perform actions. diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index a789576..4049096 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -1193,6 +1193,8 @@ swfdec_player_iterate (SwfdecTimeout *timeout) if (!klass->iterate_end (cur)) swfdec_movie_destroy (cur); } + swfdec_player_resource_request_perform (player); + swfdec_player_perform_actions (player); /* add timeout again */ /* FIXME: rounding issues? */ player->iterate_timeout.timestamp += SWFDEC_TICKS_PER_SECOND * 256 / player->rate; @@ -1335,7 +1337,6 @@ swfdec_player_unlock (SwfdecPlayer *player) context = SWFDEC_AS_CONTEXT (player); g_return_if_fail (context->state != SWFDEC_AS_CONTEXT_INTERRUPTED); - swfdec_player_resource_request_perform (player); if (context->state == SWFDEC_AS_CONTEXT_RUNNING) swfdec_as_context_maybe_gc (SWFDEC_AS_CONTEXT (player)); swfdec_player_unlock_soft (player); commit 03d8a5be5c41c38b639e91fa2b763055fa3f2a5f Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 07:59:51 2007 +0100 loadMovie() creates a new MovieClip and removes the old one make sure this code does the same thing. diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c index abf35f9..62ebc3c 100644 --- a/libswfdec/swfdec_resource.c +++ b/libswfdec/swfdec_resource.c @@ -287,7 +287,6 @@ swfdec_resource_do_load (SwfdecPlayer *player, SwfdecLoader *loader, gpointer ta { SwfdecSpriteMovie *movie; SwfdecResource *resource; - SwfdecMovie *mov; int level = -1; char *target = targetp; @@ -307,15 +306,24 @@ swfdec_resource_do_load (SwfdecPlayer *player, SwfdecLoader *loader, gpointer ta } if (movie == NULL) { movie = swfdec_player_create_movie_at_level (player, resource, level); - mov = SWFDEC_MOVIE (movie); - g_object_unref (resource); } else { - mov = SWFDEC_MOVIE (movie); - swfdec_sprite_movie_unload (movie); - g_object_unref (mov->resource); - mov->resource = resource; - swfdec_resource_set_movie (mov->resource, movie); + /* can't use swfdec_movie_duplicate() here, we copy to same depth */ + SwfdecMovie *mov = SWFDEC_MOVIE (movie); + SwfdecMovie *copy; + + copy = swfdec_movie_new (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (movie)->context), + mov->depth, mov->parent, resource, NULL, mov->name); + if (copy == NULL) + return; + copy->original_name = mov->original_name; + /* FIXME: are events copied? If so, wouldn't that be a security issue? */ + swfdec_movie_set_static_properties (copy, &mov->original_transform, + &mov->original_ctrans, mov->original_ratio, mov->clip_depth, + mov->blend_mode, NULL); + swfdec_movie_remove (mov); + movie = SWFDEC_SPRITE_MOVIE (copy); } + g_object_unref (resource); g_object_unref (loader); return; commit 8d970ce1bad7b4678824dace4bac8ad89eb88446 Author: Benjamin Otte <otte at gnome.org> Date: Tue Nov 6 07:32:08 2007 +0100 revert MovieClip initialization stuff again MovieClips are intialized while parsed, the MovieClipLoader events are just confusing. diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index 8d7b509..a789576 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -2000,7 +2000,6 @@ swfdec_player_set_loader_with_variables (SwfdecPlayer *player, SwfdecLoader *loa g_return_if_fail (SWFDEC_IS_LOADER (loader)); player->resource = swfdec_resource_new (loader, variables); - player->resource->initial = TRUE; movie = swfdec_movie_new (player, -16384, NULL, player->resource, NULL, SWFDEC_AS_STR__level0); movie->name = SWFDEC_AS_STR_EMPTY; g_object_unref (loader); diff --git a/libswfdec/swfdec_resource.c b/libswfdec/swfdec_resource.c index fe52207..abf35f9 100644 --- a/libswfdec/swfdec_resource.c +++ b/libswfdec/swfdec_resource.c @@ -49,6 +49,17 @@ G_DEFINE_TYPE_WITH_CODE (SwfdecResource, swfdec_resource, SWFDEC_TYPE_FLASH_SECU /*** SWFDEC_LOADER_TARGET interface ***/ +static gboolean +swfdec_resource_is_root (SwfdecResource *resource) +{ + SwfdecPlayer *player; + + g_return_val_if_fail (SWFDEC_IS_RESOURCE (resource), FALSE); + + player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (resource->movie)->context); + return resource->movie == player->roots->data; +} + static SwfdecPlayer * swfdec_resource_loader_target_get_player (SwfdecLoaderTarget *target) { @@ -61,7 +72,7 @@ swfdec_resource_check_rights (SwfdecResource *resource) SwfdecFlashSecurity *sec = SWFDEC_FLASH_SECURITY (resource); SwfdecSwfDecoder *dec = SWFDEC_SWF_DECODER (resource->decoder); - if (resource->initial) { + if (swfdec_resource_is_root (resource)) { if (dec->use_network && sec->sandbox == SWFDEC_SANDBOX_LOCAL_FILE) sec->sandbox = SWFDEC_SANDBOX_LOCAL_NETWORK; SWFDEC_INFO ("enabling local-with-network sandbox for %s", @@ -93,8 +104,9 @@ swfdec_resource_loader_target_image (SwfdecResource *instance) } static void -swfdec_resource_open (SwfdecResource *instance, SwfdecLoader *loader) +swfdec_resource_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *loader) { + SwfdecResource *instance = SWFDEC_RESOURCE (target); const char *query; query = swfdec_url_get_query (swfdec_loader_get_url (loader)); @@ -109,19 +121,9 @@ swfdec_resource_open (SwfdecResource *instance, SwfdecLoader *loader) } static void -swfdec_resource_loader_target_open (SwfdecLoaderTarget *target, SwfdecLoader *loader) +swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *loader) { SwfdecResource *instance = SWFDEC_RESOURCE (target); - - if (!instance->initial) - return; - - swfdec_resource_open (instance, loader); -} - -static void -swfdec_resource_parse (SwfdecResource *instance, SwfdecLoader *loader) -{ SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (instance->movie)->context); SwfdecDecoder *dec = instance->decoder; SwfdecDecoderClass *klass; @@ -180,35 +182,11 @@ swfdec_resource_parse (SwfdecResource *instance, SwfdecLoader *loader) } static void -swfdec_resource_loader_target_parse (SwfdecLoaderTarget *target, SwfdecLoader *loader) -{ - SwfdecResource *instance = SWFDEC_RESOURCE (target); - - if (!instance->initial) - return; - - swfdec_resource_parse (instance, loader); -} - -static void -swfdec_resource_loader_target_eof (SwfdecLoaderTarget *target, SwfdecLoader *loader) -{ - SwfdecResource *resource = SWFDEC_RESOURCE (target); - - if (resource->initial) - return; - - swfdec_resource_open (resource, loader); - swfdec_resource_parse (resource, loader); -} - -static void swfdec_resource_loader_target_init (SwfdecLoaderTargetInterface *iface) { iface->get_player = swfdec_resource_loader_target_get_player; iface->open = swfdec_resource_loader_target_open; iface->parse = swfdec_resource_loader_target_parse; - iface->eof = swfdec_resource_loader_target_eof; } static void diff --git a/libswfdec/swfdec_resource.h b/libswfdec/swfdec_resource.h index 331a102..817dd2b 100644 --- a/libswfdec/swfdec_resource.h +++ b/libswfdec/swfdec_resource.h @@ -41,7 +41,6 @@ struct _SwfdecResource SwfdecSpriteMovie * movie; /* the movie responsible for creating this instance */ guint parse_frame; /* next frame to parse */ - gboolean initial; /* TRUE if this is the initial resource */ SwfdecLoader * loader; /* the loader providing data for the decoder */ SwfdecDecoder * decoder; /* decoder in use or NULL if not yet created (only happens after loadMovie()) */ commit 31898eb14c70535861edea33a6ebca1356da4b55 Author: Andreas Henriksson <andreas at fatal.se> Date: Sun Nov 4 03:58:01 2007 +0100 fix debug message to not use freed variables diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index bdf2c39..6b46623 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -477,11 +477,11 @@ swfdec_movie_set_variables (SwfdecMovie *movie, const char *variables) g_free (value); break; } + SWFDEC_LOG ("Set variable \"%s\" to \"%s\"", name, value); asname = swfdec_as_context_give_string (as->context, name); SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_get_string (as->context, value)); g_free (value); swfdec_as_object_set_variable (as, asname, &val); - SWFDEC_LOG ("Set variable \"%s\" to \"%s\"", name, value); } } commit 670658068d4ef6bdbf253a07c6e451976d4e839f Author: Benjamin Otte <otte at gnome.org> Date: Sat Nov 3 20:28:35 2007 +0100 remove debugging g_print diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index 0d16a0b..8d7b509 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -355,8 +355,6 @@ swfdec_player_compress_actions (SwfdecRingBuffer *buffer) } SWFDEC_INFO ("compresed action queue to %u elements", swfdec_ring_buffer_get_n_elements (buffer)); - g_print ("compresed action queue to %u elements\n", - swfdec_ring_buffer_get_n_elements (buffer)); for (i = 0; i < swfdec_ring_buffer_get_n_elements (buffer); i++) { action = swfdec_ring_buffer_peek_nth (buffer, i); g_assert (action->movie != NULL); @@ -371,13 +369,7 @@ swfdec_player_do_add_action (SwfdecPlayer *player, guint importance, SwfdecPlaye /* try to get rid of freed actions */ if (swfdec_ring_buffer_get_size (player->actions[importance]) >= 256) { swfdec_player_compress_actions (player->actions[importance]); - g_print ("%u/%u elements\n", - swfdec_ring_buffer_get_n_elements (player->actions[importance]), - swfdec_ring_buffer_get_size (player->actions[importance])); action = swfdec_ring_buffer_push (player->actions[importance]); - g_print ("%u/%u elements: action %p\n", - swfdec_ring_buffer_get_n_elements (player->actions[importance]), - swfdec_ring_buffer_get_size (player->actions[importance]), action); /* if it doesn't get smaller, bail */ if (action == NULL) { swfdec_as_context_abort (SWFDEC_AS_CONTEXT (player), commit 2cde4bb6c44cfb4e6f8acfdda254db804781751d Author: Benjamin Otte <otte at gnome.org> Date: Sat Nov 3 20:28:25 2007 +0100 comparison between signed and unsigned diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c index 08afd73..c7cf7da 100644 --- a/libswfdec/swfdec_text_field_movie.c +++ b/libswfdec/swfdec_text_field_movie.c @@ -330,7 +330,7 @@ swfdec_text_field_movie_get_paragraphs (SwfdecTextFieldMovie *text, int *num) end++; } - if (end - p > max_length) + if ((guint) (end - p) > max_length) max_length = end - p; swfdec_text_field_movie_generate_paragraph (text, ¶graph, commit 7c442f48ff6b7b16cbc3ad46494c3371bd283f45 Author: Benjamin Otte <otte at gnome.org> Date: Sat Nov 3 19:50:10 2007 +0100 memleak diff --git a/player/swfplay.c b/player/swfplay.c index 5dd5f61..7a0985b 100644 --- a/player/swfplay.c +++ b/player/swfplay.c @@ -85,6 +85,7 @@ sanitize_url (const char *s) url = swfdec_url_new (s); if (g_str_equal (swfdec_url_get_protocol (url), "error")) { char *dir, *full; + swfdec_url_free (url); if (g_path_is_absolute (s)) return g_strconcat ("file://", s, NULL); dir = g_get_current_dir (); commit c4ddf2017031b94207835ed657b4eede130a6aa0 Author: Benjamin Otte <otte at gnome.org> Date: Sat Nov 3 19:50:05 2007 +0100 memleak diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index b937850..bdf2c39 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -949,6 +949,10 @@ swfdec_movie_dispose (GObject *object) g_slist_free (movie->variable_listeners); movie->variable_listeners = NULL; + g_slist_foreach (movie->draws, (GFunc) g_object_unref, NULL); + g_slist_free (movie->draws); + movie->draws = NULL; + G_OBJECT_CLASS (swfdec_movie_parent_class)->dispose (G_OBJECT (movie)); } commit cd98ddb12992c0685f83c521aa1e5c76b9beb079 Author: Benjamin Otte <otte at gnome.org> Date: Sat Nov 3 19:49:50 2007 +0100 don't crash on 0-byte buffers No, I didn't encounter it, I just audited my own crappy code. diff --git a/libswfdec/swfdec_net_stream.c b/libswfdec/swfdec_net_stream.c index 91f0974..2355536 100644 --- a/libswfdec/swfdec_net_stream.c +++ b/libswfdec/swfdec_net_stream.c @@ -65,6 +65,10 @@ swfdec_net_stream_decode_video (SwfdecNetStream *stream, SwfdecBuffer *buffer) decoder->codec == SWFDEC_VIDEO_CODEC_VP6_ALPHA) { guint wsub, hsub; SwfdecBuffer *tmp; + if (buffer->length == 0) { + SWFDEC_ERROR ("0-byte VP6 video image buffer?"); + return NULL; + } wsub = *buffer->data; hsub = wsub & 0xF; wsub >>= 4; commit 35e5a342b9eef99b4e6a3ab5bb3dbf13f1d7398c Author: Benjamin Otte <otte at gnome.org> Date: Sat Nov 3 19:49:06 2007 +0100 memleak diff --git a/libswfdec/swfdec_amf.c b/libswfdec/swfdec_amf.c index 36b0959..a53e761 100644 --- a/libswfdec/swfdec_amf.c +++ b/libswfdec/swfdec_amf.c @@ -51,7 +51,7 @@ swfdec_amf_parse_string (SwfdecAsContext *context, SwfdecBits *bits, SwfdecAsVal s = swfdec_bits_get_string_length (bits, len); if (s == NULL) return FALSE; - SWFDEC_AS_VALUE_SET_STRING (val, swfdec_as_context_get_string (context, s)); + SWFDEC_AS_VALUE_SET_STRING (val, swfdec_as_context_give_string (context, s)); return TRUE; } commit f61f8102ce8cd6ce79bb943dd1df86339e317208 Author: Benjamin Otte <otte at gnome.org> Date: Sat Nov 3 19:48:55 2007 +0100 this function is supposed to take ownership, so it'd better unref the buffer diff --git a/libswfdec/swfdec_codec_gst.c b/libswfdec/swfdec_codec_gst.c index 2873e84..a16d700 100644 --- a/libswfdec/swfdec_codec_gst.c +++ b/libswfdec/swfdec_codec_gst.c @@ -62,6 +62,7 @@ swfdec_gst_buffer_new (SwfdecBuffer *buffer) ret = gst_buffer_new_and_alloc (buffer->length); memcpy (GST_BUFFER_DATA (ret), buffer->data, buffer->length); + swfdec_buffer_unref (buffer); return ret; } commit 41303e7a5d484749dead221e4dee528af0083881 Author: Benjamin Otte <otte at gnome.org> Date: Sat Nov 3 18:20:07 2007 +0100 assert the surface gets unloaded on dispose diff --git a/libswfdec/swfdec_image.c b/libswfdec/swfdec_image.c index 075f771..4932882 100644 --- a/libswfdec/swfdec_image.c +++ b/libswfdec/swfdec_image.c @@ -71,6 +71,8 @@ swfdec_image_dispose (GObject *object) } G_OBJECT_CLASS (swfdec_image_parent_class)->dispose (object); + + g_assert (image->surface == NULL); } static void commit 8f764b8ad026f39eb2cd871fc97e5351a91ae379 Author: Benjamin Otte <otte at gnome.org> Date: Sat Nov 3 18:19:40 2007 +0100 unload cache on dispose previously we just unset the cache, that was not entirely enough diff --git a/libswfdec/swfdec_cached.c b/libswfdec/swfdec_cached.c index 37b5737..e49d42a 100644 --- a/libswfdec/swfdec_cached.c +++ b/libswfdec/swfdec_cached.c @@ -32,6 +32,7 @@ swfdec_cached_dispose (GObject *object) { SwfdecCached * cached = SWFDEC_CACHED (object); + swfdec_cached_unload (cached); swfdec_cached_set_cache (cached, NULL); G_OBJECT_CLASS (swfdec_cached_parent_class)->dispose (object); commit bde4648b9aba1e99a7a64ce14ba32ebdfbb158d0 Author: Benjamin Otte <otte at gnome.org> Date: Sat Nov 3 14:31:00 2007 +0100 compress actions in all cases, not just sometimes diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index d03e6d2..0d16a0b 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -355,6 +355,43 @@ swfdec_player_compress_actions (SwfdecRingBuffer *buffer) } SWFDEC_INFO ("compresed action queue to %u elements", swfdec_ring_buffer_get_n_elements (buffer)); + g_print ("compresed action queue to %u elements\n", + swfdec_ring_buffer_get_n_elements (buffer)); + for (i = 0; i < swfdec_ring_buffer_get_n_elements (buffer); i++) { + action = swfdec_ring_buffer_peek_nth (buffer, i); + g_assert (action->movie != NULL); + } +} + +static void +swfdec_player_do_add_action (SwfdecPlayer *player, guint importance, SwfdecPlayerAction *act) +{ + SwfdecPlayerAction *action = swfdec_ring_buffer_push (player->actions[importance]); + if (action == NULL) { + /* try to get rid of freed actions */ + if (swfdec_ring_buffer_get_size (player->actions[importance]) >= 256) { + swfdec_player_compress_actions (player->actions[importance]); + g_print ("%u/%u elements\n", + swfdec_ring_buffer_get_n_elements (player->actions[importance]), + swfdec_ring_buffer_get_size (player->actions[importance])); + action = swfdec_ring_buffer_push (player->actions[importance]); + g_print ("%u/%u elements: action %p\n", + swfdec_ring_buffer_get_n_elements (player->actions[importance]), + swfdec_ring_buffer_get_size (player->actions[importance]), action); + /* if it doesn't get smaller, bail */ + if (action == NULL) { + swfdec_as_context_abort (SWFDEC_AS_CONTEXT (player), + "256 levels of recursion were exceeded in one action list."); + return; + } + } else { + swfdec_ring_buffer_set_size (player->actions[importance], + swfdec_ring_buffer_get_size (player->actions[importance]) + 16); + action = swfdec_ring_buffer_push (player->actions[importance]); + g_assert (action); + } + } + *action = *act; } /** @@ -373,42 +410,21 @@ void swfdec_player_add_action (SwfdecPlayer *player, SwfdecMovie *movie, SwfdecEventType type, guint importance) { - SwfdecPlayerAction *action; + SwfdecPlayerAction action = { movie, NULL, type }; g_return_if_fail (SWFDEC_IS_PLAYER (player)); g_return_if_fail (SWFDEC_IS_MOVIE (movie)); g_return_if_fail (importance < SWFDEC_PLAYER_N_ACTION_QUEUES); SWFDEC_LOG ("adding action %s %u", movie->name, type); - action = swfdec_ring_buffer_push (player->actions[importance]); - if (action == NULL) { - /* try to get rid of freed actions */ - if (swfdec_ring_buffer_get_size (player->actions[importance]) >= 256) { - swfdec_player_compress_actions (player->actions[importance]); - action = swfdec_ring_buffer_push (player->actions[importance]); - /* if it doesn't get smaller, bail */ - if (action == NULL) { - swfdec_as_context_abort (SWFDEC_AS_CONTEXT (player), - "256 levels of recursion were exceeded in one action list."); - return; - } - } else { - swfdec_ring_buffer_set_size (player->actions[importance], - swfdec_ring_buffer_get_size (player->actions[importance]) + 16); - action = swfdec_ring_buffer_push (player->actions[importance]); - g_assert (action); - } - } - action->movie = movie; - action->script = NULL; - action->event = type; + swfdec_player_do_add_action (player, importance, &action); } void swfdec_player_add_action_script (SwfdecPlayer *player, SwfdecMovie *movie, SwfdecScript *script, guint importance) { - SwfdecPlayerAction *action; + SwfdecPlayerAction action = { movie, script, 0 }; g_return_if_fail (SWFDEC_IS_PLAYER (player)); g_return_if_fail (SWFDEC_IS_MOVIE (movie)); @@ -416,22 +432,7 @@ swfdec_player_add_action_script (SwfdecPlayer *player, SwfdecMovie *movie, g_return_if_fail (importance < SWFDEC_PLAYER_N_ACTION_QUEUES); SWFDEC_LOG ("adding action script %s %s", movie->name, script->name); - action = swfdec_ring_buffer_push (player->actions[importance]); - if (action == NULL) { - /* FIXME: limit number of actions to not get inf loops due to scripts? */ - if (swfdec_ring_buffer_get_size (player->actions[importance]) >= 256) { - /* FIXME: try to remove empty entries first? */ - swfdec_as_context_abort (SWFDEC_AS_CONTEXT (player), - "256 levels of recursion were exceeded in one action list."); - return; - } - swfdec_ring_buffer_set_size (player->actions[importance], - swfdec_ring_buffer_get_size (player->actions[importance]) + 16); - action = swfdec_ring_buffer_push (player->actions[importance]); - g_assert (action); - } - action->movie = movie; - action->script = script; + swfdec_player_do_add_action (player, importance, &action); } /** commit d8a2705566538fb7e2c593444e0fe9ae59bc4bc6 Author: Benjamin Otte <otte at gnome.org> Date: Sat Nov 3 14:25:54 2007 +0100 yay, Flash can look up unnamed movies \o/ diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c index 1c9f0ee..57043f3 100644 --- a/libswfdec/swfdec_as_interpret.c +++ b/libswfdec/swfdec_as_interpret.c @@ -417,7 +417,7 @@ super_special_movie_lookup_magic (SwfdecAsContext *cx, SwfdecAsObject *o, const return NULL; } if (SWFDEC_IS_MOVIE (o)) { - SwfdecMovie *ret = swfdec_movie_get_by_name (SWFDEC_MOVIE (o), name); + SwfdecMovie *ret = swfdec_movie_get_by_name (SWFDEC_MOVIE (o), name, TRUE); if (ret) return SWFDEC_AS_OBJECT (ret); } diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index cc05c52..b937850 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -975,7 +975,7 @@ swfdec_movie_mark (SwfdecAsObject *object) /* FIXME: This function can definitely be implemented easier */ SwfdecMovie * -swfdec_movie_get_by_name (SwfdecMovie *movie, const char *name) +swfdec_movie_get_by_name (SwfdecMovie *movie, const char *name, gboolean unnamed) { GList *walk; int i; @@ -1003,10 +1003,9 @@ swfdec_movie_get_by_name (SwfdecMovie *movie, const char *name) for (walk = movie->list; walk; walk = walk->next) { SwfdecMovie *cur = walk->data; - if (cur->original_name == SWFDEC_AS_STR_EMPTY) + if (cur->original_name == SWFDEC_AS_STR_EMPTY && !unnamed) continue; - if ((version >= 7 && cur->name == name) || - (version < 7 && swfdec_str_case_equal (cur->name, name))) + if (swfdec_strcmp (version, cur->name, name) == 0) return cur; } return NULL; @@ -1053,7 +1052,7 @@ swfdec_movie_get_variable (SwfdecAsObject *object, SwfdecAsObject *orig, return TRUE; } - movie = swfdec_movie_get_by_name (movie, variable); + movie = swfdec_movie_get_by_name (movie, variable, FALSE); if (movie) { SWFDEC_AS_VALUE_SET_OBJECT (val, SWFDEC_AS_OBJECT (movie)); *flags = 0; diff --git a/libswfdec/swfdec_movie.h b/libswfdec/swfdec_movie.h index d33d53b..1bb161a 100644 --- a/libswfdec/swfdec_movie.h +++ b/libswfdec/swfdec_movie.h @@ -195,7 +195,8 @@ void swfdec_movie_initialize (SwfdecMovie * movie); SwfdecMovie * swfdec_movie_find (SwfdecMovie * movie, int depth); SwfdecMovie * swfdec_movie_get_by_name (SwfdecMovie * movie, - const char * name); + const char * name, + gboolean unnamed); SwfdecMovie * swfdec_movie_get_root (SwfdecMovie * movie); void swfdec_movie_remove (SwfdecMovie * movie); void swfdec_movie_destroy (SwfdecMovie * movie); commit 61e2b4745892de38c8cd5104ba53b991603a1958 Author: Benjamin Otte <otte at gnome.org> Date: Fri Nov 2 13:16:32 2007 +0100 "fix" _frameslaoded property. See gtk-doc documentation of swfdec_sprite_movie_get_frames_loaded() for what that means. diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c index f711e19..1c9f0ee 100644 --- a/libswfdec/swfdec_as_interpret.c +++ b/libswfdec/swfdec_as_interpret.c @@ -269,32 +269,25 @@ swfdec_action_wait_for_frame2 (SwfdecAsContext *cx, guint action, const guint8 * static void swfdec_action_wait_for_frame (SwfdecAsContext *cx, guint action, const guint8 *data, guint len) { - SwfdecMovie *movie; - SwfdecResource *resource; - guint frame, jump, loaded; + SwfdecSpriteMovie *movie; + guint jump; + int frame, loaded; if (len != 3) { SWFDEC_ERROR ("WaitForFrame action length invalid (is %u, should be 3", len); return; } - if (!SWFDEC_IS_MOVIE (cx->frame->target)) { + if (!SWFDEC_IS_SPRITE_MOVIE (cx->frame->target)) { SWFDEC_ERROR ("no movie for WaitForFrame"); return; } - movie = SWFDEC_MOVIE (cx->frame->target); + movie = SWFDEC_SPRITE_MOVIE (cx->frame->target); frame = data[0] || (data[1] << 8); jump = data[2]; - resource = swfdec_movie_get_own_resource (movie); - if (resource && resource->decoder) { - SwfdecDecoder *dec = resource->decoder; - loaded = dec->frames_loaded; - if (loaded == dec->frames_total) - loaded = G_MAXUINT; - } else { - loaded = G_MAXUINT; - } - if (loaded <= frame) + loaded = swfdec_sprite_movie_get_frames_loaded (movie); + if (loaded < (int) movie->n_frames && + loaded <= frame) swfdec_script_skip_actions (cx, jump); } diff --git a/libswfdec/swfdec_movie_asprops.c b/libswfdec/swfdec_movie_asprops.c index 990ccf3..f704f79 100644 --- a/libswfdec/swfdec_movie_asprops.c +++ b/libswfdec/swfdec_movie_asprops.c @@ -147,11 +147,9 @@ static void mc_framesloaded (SwfdecMovie *mov, SwfdecAsValue *rval) { SwfdecSpriteMovie *movie = SWFDEC_SPRITE_MOVIE (mov); - if (movie->sprite) { - SWFDEC_AS_VALUE_SET_NUMBER (rval, movie->sprite->parse_frame); - return; - } - SWFDEC_AS_VALUE_SET_INT (rval, movie->n_frames); + + SWFDEC_AS_VALUE_SET_INT (rval, + swfdec_sprite_movie_get_frames_loaded (movie)); } static void diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c index 3c0d169..4fa219a 100644 --- a/libswfdec/swfdec_sprite_movie.c +++ b/libswfdec/swfdec_sprite_movie.c @@ -755,3 +755,30 @@ swfdec_sprite_movie_unload (SwfdecSpriteMovie *movie) movie->sprite = NULL; } +/** + * swfdec_sprite_movie_get_frames_loaded: + * @movie: a #SwfdecSpriteMovie + * + * Computes the number of loaded frames as used by the _framesloaded property + * or the WaitForFrame actions. If the @movie is fully loaded, this is the + * amount of total frames of the sprite it displays, or 0 if it has no sprite. + * If the movie is not fully loaded, it is the amount of frames that are + * completely loaded minus one. Welcome to the world of Flash. + * + * Returns: The number of loaded frames as reported by ActionScript. + **/ +int +swfdec_sprite_movie_get_frames_loaded (SwfdecSpriteMovie *movie) +{ + SwfdecSprite *sprite; + + g_return_val_if_fail (SWFDEC_IS_SPRITE_MOVIE (movie), 0); + + sprite = movie->sprite; + if (sprite == 0) + return 0; + if (sprite->parse_frame == sprite->n_frames) + return sprite->n_frames; + + return sprite->parse_frame - 1; +} diff --git a/libswfdec/swfdec_sprite_movie.h b/libswfdec/swfdec_sprite_movie.h index 70c9f74..0b7158c 100644 --- a/libswfdec/swfdec_sprite_movie.h +++ b/libswfdec/swfdec_sprite_movie.h @@ -64,9 +64,10 @@ struct _SwfdecSpriteMovieClass GType swfdec_sprite_movie_get_type (void); +int swfdec_sprite_movie_get_frames_loaded (SwfdecSpriteMovie * movie); + void swfdec_sprite_movie_goto (SwfdecSpriteMovie * movie, guint goto_frame); - void swfdec_sprite_movie_unload (SwfdecSpriteMovie * movie); commit fac32d9ea49f4f64827343e4e5156cf8952f4a13 Author: Benjamin Otte <otte at gnome.org> Date: Fri Nov 2 10:03:00 2007 +0100 improve swfdec_sprite_movie_unload() a bit It clears variables and removes children movies now diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c index dcd01c6..3c0d169 100644 --- a/libswfdec/swfdec_sprite_movie.c +++ b/libswfdec/swfdec_sprite_movie.c @@ -735,14 +735,20 @@ swfdec_sprite_movie_clear (SwfdecAsContext *cx, SwfdecAsObject *object, void swfdec_sprite_movie_unload (SwfdecSpriteMovie *movie) { + SwfdecMovie *mov; SwfdecAsValue hack; g_return_if_fail (SWFDEC_IS_SPRITE_MOVIE (movie)); + mov = SWFDEC_MOVIE (movie); /* This function does enough invalidating */ swfdec_sprite_movie_clear (SWFDEC_AS_OBJECT (movie)->context, SWFDEC_AS_OBJECT (movie), 0, NULL, &hack); - movie->frame = 0; + /* FIXME: destroy or unload? */ + while (mov->list) + swfdec_movie_destroy (mov->list->data); + swfdec_as_object_clear_variables (SWFDEC_AS_OBJECT (movie)); + movie->frame = (guint) -1; movie->n_frames = 0; movie->next_action = 0; movie->max_action = 0; commit de7aa11fe0bb50bf2dc0493e88d97195008425b8 Author: Benjamin Otte <otte at gnome.org> Date: Fri Nov 2 10:02:12 2007 +0100 add swfdec_as_object_clear_variables() diff --git a/libswfdec/swfdec_as_object.c b/libswfdec/swfdec_as_object.c index b90e915..877f6e4 100644 --- a/libswfdec/swfdec_as_object.c +++ b/libswfdec/swfdec_as_object.c @@ -921,6 +921,21 @@ swfdec_as_object_delete_variable (SwfdecAsObject *object, const char *variable) } /** + * swfdec_as_object_clear_variables: + * @object: a #SwfdecAsObject + * + * Clears all user-set variables from the given object. + **/ +void +swfdec_as_object_clear_variables (SwfdecAsObject *object) +{ + g_return_if_fail (SWFDEC_IS_AS_OBJECT (object)); + + g_hash_table_foreach (object->properties, swfdec_as_object_free_property, object); + g_hash_table_remove_all (object->properties); +} + +/** * swfdec_as_object_set_variable_flags: * @object: a #SwfdecAsObject * @variable: the variable to modify diff --git a/libswfdec/swfdec_as_object.h b/libswfdec/swfdec_as_object.h index 8fec190..8952b72 100644 --- a/libswfdec/swfdec_as_object.h +++ b/libswfdec/swfdec_as_object.h @@ -146,6 +146,7 @@ gboolean swfdec_as_object_get_variable_and_flags SwfdecAsDeleteReturn swfdec_as_object_delete_variable(SwfdecAsObject * object, const char * variable); +void swfdec_as_object_clear_variables(SwfdecAsObject * object); void swfdec_as_object_set_variable_flags (SwfdecAsObject * object, const char * variable,
Possibly Parallel Threads
- 10 commits - libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_types.c libswfdec/swfdec_initialize.as libswfdec/swfdec_initialize.h libswfdec/swfdec_movie.c libswfdec/swfdec_movie_clip_loader.c libswfdec/swfdec_movie.h libswfdec/swfdec_resource.c
- 70 commits - configure.ac libswfdec-gtk/Makefile.am libswfdec-gtk/swfdec-gtk.h libswfdec-gtk/swfdec_gtk_loader.c libswfdec-gtk/swfdec_gtk_player.c libswfdec-gtk/swfdec_gtk_socket.c libswfdec-gtk/swfdec_gtk_socket.h libswfdec-gtk/swfdec_playback_alsa.c
- 36 commits - libswfdec/Makefile.am libswfdec/swfdec_as_context.c libswfdec/swfdec_as_date.c libswfdec/swfdec_as_initialize.as libswfdec/swfdec_as_initialize.h libswfdec/swfdec_as_strings.c libswfdec/swfdec_flash_security.c
- 9 commits - libswfdec/swfdec_as_function.c libswfdec/swfdec_as_initialize.as libswfdec/swfdec_as_initialize.h libswfdec/swfdec_as_object.c libswfdec/swfdec_as_strings.c libswfdec/swfdec_player_as.c test/trace
- 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