+
+HTTPD_CGI_CALL(file, "file-stats", file_stats);
+HTTPD_CGI_CALL(tcp, "tcp-connections", tcp_stats);
+HTTPD_CGI_CALL(net, "net-stats", net_stats);
+HTTPD_CGI_CALL(rtos, "rtos-stats", rtos_stats );
+HTTPD_CGI_CALL(io, "led-io", led_io );
+
+
+static const struct httpd_cgi_call *calls[] = { &file, &tcp, &net, &rtos, &io, NULL };
+
+/*---------------------------------------------------------------------------*/
+static
+PT_THREAD(nullfunction(struct httpd_state *s, char *ptr))
+{
+ PSOCK_BEGIN(&s->sout);
+ PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+httpd_cgifunction
+httpd_cgi(char *name)
+{
+ const struct httpd_cgi_call **f;
+
+ /* Find the matching name in the table, return the function. */
+ for(f = calls; *f != NULL; ++f) {
+ if(strncmp((*f)->name, name, strlen((*f)->name)) == 0) {
+ return (*f)->function;
+ }
+ }
+ return nullfunction;
+}
+/*---------------------------------------------------------------------------*/
+static unsigned short
+generate_file_stats(void *arg)
+{
+ char *f = (char *)arg;
+ return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE, "%5u", httpd_fs_count(f));
+}
+/*---------------------------------------------------------------------------*/
+static
+PT_THREAD(file_stats(struct httpd_state *s, char *ptr))
+{
+ PSOCK_BEGIN(&s->sout);
+
+ PSOCK_GENERATOR_SEND(&s->sout, generate_file_stats, strchr(ptr, ' ') + 1);
+
+ PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+static const char closed[] = /* "CLOSED",*/
+{0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0};
+static const char syn_rcvd[] = /* "SYN-RCVD",*/
+{0x53, 0x59, 0x4e, 0x2d, 0x52, 0x43, 0x56,
+ 0x44, 0};
+static const char syn_sent[] = /* "SYN-SENT",*/
+{0x53, 0x59, 0x4e, 0x2d, 0x53, 0x45, 0x4e,
+ 0x54, 0};
+static const char established[] = /* "ESTABLISHED",*/
+{0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48,
+ 0x45, 0x44, 0};
+static const char fin_wait_1[] = /* "FIN-WAIT-1",*/
+{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,
+ 0x54, 0x2d, 0x31, 0};
+static const char fin_wait_2[] = /* "FIN-WAIT-2",*/
+{0x46, 0x49, 0x4e, 0x2d, 0x57, 0x41, 0x49,
+ 0x54, 0x2d, 0x32, 0};
+static const char closing[] = /* "CLOSING",*/
+{0x43, 0x4c, 0x4f, 0x53, 0x49,
+ 0x4e, 0x47, 0};
+static const char time_wait[] = /* "TIME-WAIT,"*/
+{0x54, 0x49, 0x4d, 0x45, 0x2d, 0x57, 0x41,
+ 0x49, 0x54, 0};
+static const char last_ack[] = /* "LAST-ACK"*/
+{0x4c, 0x41, 0x53, 0x54, 0x2d, 0x41, 0x43,
+ 0x4b, 0};
+
+static const char *states[] = {
+ closed,
+ syn_rcvd,
+ syn_sent,
+ established,
+ fin_wait_1,
+ fin_wait_2,
+ closing,
+ time_wait,
+ last_ack};
+
+
+static unsigned short
+generate_tcp_stats(void *arg)
+{
+ struct uip_conn *conn;
+ struct httpd_state *s = (struct httpd_state *)arg;
+
+ conn = &uip_conns[s->count];
+ return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE,
+ "%d %u.%u.%u.%u:%u %s %u %u %c %c \r\n",
+ htons(conn->lport),
+ htons(conn->ripaddr[0]) >> 8,
+ htons(conn->ripaddr[0]) & 0xff,
+ htons(conn->ripaddr[1]) >> 8,
+ htons(conn->ripaddr[1]) & 0xff,
+ htons(conn->rport),
+ states[conn->tcpstateflags & UIP_TS_MASK],
+ conn->nrtx,
+ conn->timer,
+ (uip_outstanding(conn))? '*':' ',
+ (uip_stopped(conn))? '!':' ');
+}
+/*---------------------------------------------------------------------------*/
+static
+PT_THREAD(tcp_stats(struct httpd_state *s, char *ptr))
+{
+
+ PSOCK_BEGIN(&s->sout);
+
+ for(s->count = 0; s->count < UIP_CONNS; ++s->count) {
+ if((uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) {
+ PSOCK_GENERATOR_SEND(&s->sout, generate_tcp_stats, s);
+ }
+ }
+
+ PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+static unsigned short
+generate_net_stats(void *arg)
+{
+ struct httpd_state *s = (struct httpd_state *)arg;
+ return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE,
+ "%5u\n", ((uip_stats_t *)&uip_stat)[s->count]);
+}
+
+static
+PT_THREAD(net_stats(struct httpd_state *s, char *ptr))
+{
+ PSOCK_BEGIN(&s->sout);
+
+#if UIP_STATISTICS
+
+ for(s->count = 0; s->count < sizeof(uip_stat) / sizeof(uip_stats_t);
+ ++s->count) {
+ PSOCK_GENERATOR_SEND(&s->sout, generate_net_stats, s);
+ }
+
+#endif /* UIP_STATISTICS */
+
+ PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+
+extern void vTaskList( signed char *pcWriteBuffer );
+static char cCountBuf[ 32 ];
+long lRefreshCount = 0;
+extern basementGasReading;
+extern rtcHOURS;
+extern rtcMINUTES;
+extern rtcSECONDS;
+static unsigned short
+generate_rtos_stats(void *arg)
+{
+ lRefreshCount++;
+
+ sprintf( cCountBuf, " Refresh count = %d
Pulse Counter = %d at %02u:%02u:%02u", lRefreshCount, basementGasReading, rtcHOURS, rtcMINUTES, rtcSECONDS );
+ strcat( uip_appdata, cCountBuf );
+ vTaskList( uip_appdata );
+ strcat( uip_appdata, cCountBuf );
+
+ return strlen( uip_appdata );
+}
+/*---------------------------------------------------------------------------*/
+
+
+static
+PT_THREAD(rtos_stats(struct httpd_state *s, char *ptr))
+{
+ PSOCK_BEGIN(&s->sout);
+ PSOCK_GENERATOR_SEND(&s->sout, generate_rtos_stats, NULL);
+ PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+
+char *pcStatus[ 3 ];
+unsigned long ulString;
+extern unsigned long uxParTextGetLED( unsigned long uxLED );
+
+static unsigned short generate_io_state( void *arg )
+{
+ for( ulString = 0; ulString < 4; ulString++ )
+ {
+ if( uxParTextGetLED( ulString + 5 ) )
+ {
+ pcStatus[ ulString ] = "checked";
+ }
+ else
+ {
+ pcStatus[ ulString ] = "";
+ }
+ }
+
+ sprintf( uip_appdata,
+ " LED 2.5,"\
+ " LED 2.6,"\
+ " LED 2.7"\
+ "
"\
+ " ",
+ pcStatus[ 0 ],
+ pcStatus[ 1 ],
+ pcStatus[ 2 ] );
+
+ return strlen( uip_appdata );
+}
+
+static PT_THREAD(led_io(struct httpd_state *s, char *ptr))
+{
+ PSOCK_BEGIN(&s->sout);
+ PSOCK_GENERATOR_SEND(&s->sout, generate_io_state, NULL);
+ PSOCK_END(&s->sout);
+}
+
+/** @} */
+
+
+
+
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd-fsdata.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd-fsdata.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd-fsdata.c (revision 14)
@@ -0,0 +1,7113 @@
+static const unsigned char data_404_html[] = {
+ /* /404.html */
+ 0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0,
+ 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x3c,
+ 0x62, 0x6f, 0x64, 0x79, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c,
+ 0x6f, 0x72, 0x3d, 0x22, 0x77, 0x68, 0x69, 0x74, 0x65, 0x22,
+ 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 0x65, 0x6e,
+ 0x74, 0x65, 0x72, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x3c, 0x68, 0x31, 0x3e, 0x34, 0x30, 0x34, 0x20, 0x2d,
+ 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f, 0x68, 0x31, 0x3e,
+ 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x33,
+ 0x3e, 0x47, 0x6f, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, 0x68, 0x65, 0x72, 0x65,
+ 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65,
+ 0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0xa, 0x20,
+ 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, 0x65,
+ 0x72, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64,
+ 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e,
+0};
+
+static const unsigned char data_image_jpg[] = {
+ /* /image.jpg */
+ 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x6a, 0x70, 0x67, 0,
+ 0xff, 0xd8, 0xff, 0xe0, 00, 0x10, 0x4a, 0x46, 0x49, 0x46,
+ 00, 0x1, 0x1, 00, 00, 0x1, 00, 0x1, 00, 00,
+ 0xff, 0xdb, 00, 0x43, 00, 0x3, 0x2, 0x2, 0x3, 0x2,
+ 0x2, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, 0x4, 0x5,
+ 0x8, 0x5, 0x5, 0x4, 0x4, 0x5, 0xa, 0x7, 0x7, 0x6,
+ 0x8, 0xc, 0xa, 0xc, 0xc, 0xb, 0xa, 0xb, 0xb, 0xd,
+ 0xe, 0x12, 0x10, 0xd, 0xe, 0x11, 0xe, 0xb, 0xb, 0x10,
+ 0x16, 0x10, 0x11, 0x13, 0x14, 0x15, 0x15, 0x15, 0xc, 0xf,
+ 0x17, 0x18, 0x16, 0x14, 0x18, 0x12, 0x14, 0x15, 0x14, 0xff,
+ 0xdb, 00, 0x43, 0x1, 0x3, 0x4, 0x4, 0x5, 0x4, 0x5,
+ 0x9, 0x5, 0x5, 0x9, 0x14, 0xd, 0xb, 0xd, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xff, 0xc0,
+ 00, 0x11, 0x8, 0x2, 0x69, 0x4, 0x39, 0x3, 0x1, 0x22,
+ 00, 0x2, 0x11, 0x1, 0x3, 0x11, 0x1, 0xff, 0xc4, 00,
+ 0x1f, 00, 00, 0x1, 0x5, 0x1, 0x1, 0x1, 0x1, 0x1,
+ 0x1, 00, 00, 00, 00, 00, 00, 00, 00, 0x1,
+ 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb,
+ 0xff, 0xc4, 00, 0xb5, 0x10, 00, 0x2, 0x1, 0x3, 0x3,
+ 0x2, 0x4, 0x3, 0x5, 0x5, 0x4, 0x4, 00, 00, 0x1,
+ 0x7d, 0x1, 0x2, 0x3, 00, 0x4, 0x11, 0x5, 0x12, 0x21,
+ 0x31, 0x41, 0x6, 0x13, 0x51, 0x61, 0x7, 0x22, 0x71, 0x14,
+ 0x32, 0x81, 0x91, 0xa1, 0x8, 0x23, 0x42, 0xb1, 0xc1, 0x15,
+ 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x9, 0xa,
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29,
+ 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44,
+ 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56,
+ 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
+ 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a,
+ 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93,
+ 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4,
+ 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5,
+ 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6,
+ 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xff, 0xc4, 00, 0x1f, 0x1, 00, 0x3,
+ 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 00,
+ 00, 00, 00, 00, 00, 0x1, 0x2, 0x3, 0x4, 0x5,
+ 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xff, 0xc4, 00, 0xb5,
+ 0x11, 00, 0x2, 0x1, 0x2, 0x4, 0x4, 0x3, 0x4, 0x7,
+ 0x5, 0x4, 0x4, 00, 0x1, 0x2, 0x77, 00, 0x1, 0x2,
+ 0x3, 0x11, 0x4, 0x5, 0x21, 0x31, 0x6, 0x12, 0x41, 0x51,
+ 0x7, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x8, 0x14, 0x42,
+ 0x91, 0xa1, 0xb1, 0xc1, 0x9, 0x23, 0x33, 0x52, 0xf0, 0x15,
+ 0x62, 0x72, 0xd1, 0xa, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1,
+ 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35,
+ 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
+ 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73,
+ 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84,
+ 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95,
+ 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
+ 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
+ 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
+ 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
+ 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff,
+ 0xda, 00, 0xc, 0x3, 0x1, 00, 0x2, 0x11, 0x3, 0x11,
+ 00, 0x3f, 00, 0xfd, 0x53, 0xa2, 0x8a, 0x28, 00, 0xa2,
+ 0x8a, 0x28, 00, 0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a, 0x69,
+ 0x3c, 0xd0, 0x1, 0xba, 0x92, 0x8a, 0x28, 00, 0xe9, 0x4d,
+ 0x3c, 0xd0, 0x4e, 0x69, 0xa5, 0xb1, 0x40, 0x1, 0x61, 0x8a,
+ 0x6e, 0x69, 0x19, 0xb8, 0xa6, 0x16, 0xa0, 0x7, 0x31, 0xe7,
+ 0xe9, 0x4d, 0x2d, 0x4c, 0x67, 0xe2, 0xa3, 0x66, 0xa0, 0x7,
+ 0xb3, 0xd3, 0xc, 0x83, 0xd6, 0xa2, 0x79, 0x30, 0x9, 0x27,
+ 00, 0x56, 0x44, 0xba, 0xdb, 0xcb, 0x2b, 0x47, 0x65, 0x67,
+ 0x3d, 0xe1, 0x1d, 0x25, 0x45, 0xfd, 0xd1, 0xfa, 0x37, 0x43,
+ 0xe9, 0xc5, 0x67, 0x3a, 0x91, 0xa7, 0xf1, 0x18, 0xd4, 0xad,
+ 0xa, 0x4b, 0xde, 0x66, 0xcb, 0x3d, 0x56, 0xb9, 0xbe, 0x82,
+ 0xd0, 0x6e, 0x9a, 0x68, 0xe2, 0x7, 0xbc, 0x8c, 0x16, 0xb9,
+ 0x6b, 0x8d, 0x27, 0xc7, 0x7a, 0x8b, 0x3a, 0x8b, 0x8d, 0x3b,
+ 0x4f, 0x85, 0xb8, 0x6, 0x25, 0x6f, 0x33, 0x1e, 0xe4, 0xe7,
+ 0x9a, 0xe7, 0xef, 0x7e, 0x4, 0x6a, 0x1a, 0xdb, 0x97, 0xd5,
+ 0x3c, 0x47, 0xa8, 0xdc, 0x67, 0x1f, 0x27, 0xda, 0x9b, 0x60,
+ 0xfa, 0xc, 0x57, 0x8d, 0x5f, 0x1f, 0x89, 0x4a, 0xd8, 0x6c,
+ 0x3c, 0xa4, 0xfc, 0xda, 0x8a, 0xff, 00, 0x3f, 0xc0, 0xf0,
+ 0x71, 0x39, 0x9e, 0x31, 0x2b, 0x60, 0xf0, 0x92, 0x9b, 0xfe,
+ 0xf3, 0x51, 0x5f, 0xab, 0xfc, 0xe, 0xca, 0xf7, 0xc7, 0x1a,
+ 0xd, 0x8e, 0x7c, 0xfd, 0x62, 0xc6, 0x3c, 0xc, 0x9c, 0xce,
+ 0xbf, 0xe3, 0x58, 0xd2, 0xfc, 0x5e, 0xf0, 0x7c, 0x6d, 0x8f,
+ 0xf8, 0x48, 0x2c, 0x5b, 0xfd, 0xd9, 0x97, 0x8f, 0xd6, 0xb9,
+ 0xa1, 0xfb, 0x2b, 0xe8, 0x44, 0x7c, 0xf7, 0x37, 0x4, 0xf5,
+ 0xe6, 0x41, 0xfe, 0x15, 0x5e, 0x4f, 0xd9, 0x43, 0x44, 0x60,
+ 0x76, 0xdd, 0x4f, 0xf8, 0xb8, 0xff, 00, 0xe2, 0x6b, 0xc6,
+ 0x9e, 0x33, 0x88, 0x37, 0x86, 0x1a, 0xb, 0xfe, 0xde, 0x6f,
+ 0xf4, 0x47, 0xcf, 0xd4, 0xc7, 0xf1, 0x4b, 0xd6, 0x18, 0x3a,
+ 0x6b, 0xfe, 0xdf, 0x6f, 0xf4, 0x47, 0x55, 0x1f, 0xc6, 0xf,
+ 0x7, 0xbb, 0x63, 0xfb, 0x7e, 0xc1, 0x7d, 0xda, 0x75, 0xff,
+ 00, 0x1a, 0xb0, 0xbf, 0x14, 0xbc, 0x28, 0xdf, 0x77, 0xc4,
+ 0x3a, 0x71, 0x3f, 0xf5, 0xf0, 0xb5, 0xc0, 0xcb, 0xfb, 0x25,
+ 0xe9, 0xe7, 0xee, 0x5e, 0x4a, 0x3e, 0xb2, 0xf, 0xfe, 0x26,
+ 0xa9, 0x4b, 0xfb, 0x24, 0x45, 0xfc, 0x17, 0xa7, 0xf1, 0x71,
+ 0xff, 00, 0xc4, 0xd7, 0x33, 0xcc, 0x38, 0x8e, 0x3b, 0xe1,
+ 0x22, 0xff, 00, 0xed, 0xe3, 0x93, 0xfb, 0x53, 0x8b, 0x21,
+ 0xbe, 0xa, 0xf, 0xd2, 0x4c, 0xf5, 0x1, 0xf1, 0xf, 0xc3,
+ 0x92, 0xfd, 0xdd, 0x72, 0xc0, 0xfd, 0x2e, 0x17, 0xfc, 0x6a,
+ 0x68, 0xfc, 0x69, 0xa2, 0x49, 0xf7, 0x75, 0x7b, 0x26, 0xff,
+ 00, 0xb7, 0x85, 0xff, 00, 0x1a, 0xf2, 0x9, 0x7f, 0x64,
+ 0x89, 0xf9, 0xf2, 0xef, 0x87, 0xe3, 0x27, 0xff, 00, 0x63,
+ 0x54, 0xa4, 0xfd, 0x92, 0x35, 0x31, 0xfe, 0xae, 0xf6, 0x2f,
+ 0xc6, 0x4f, 0xfe, 0xc6, 0xa7, 0xfb, 0x5f, 0x88, 0x23, 0xbe,
+ 0x5, 0x3f, 0xfb, 0x7b, 0xfe, 0x1, 0x1f, 0xdb, 0xbc, 0x51,
+ 0xd, 0xf2, 0xd4, 0xfd, 0x25, 0xff, 00, 00, 0xf7, 0x45,
+ 0xf1, 0x46, 0x94, 0xdd, 0x35, 0x2b, 0x33, 0xff, 00, 0x6d,
+ 0xd7, 0xfc, 0x69, 0xdf, 0xf0, 0x90, 0x69, 0xc4, 0xf1, 0x7f,
+ 0x6a, 0x7f, 0xed, 0xb2, 0xff, 00, 0x8d, 0x7c, 0xfd, 0x27,
+ 0xec, 0x9b, 0xae, 0xa3, 0x65, 0x2e, 0xa0, 0xc8, 0x3d, 0x7c,
+ 0xc3, 0xff, 00, 0xc4, 0xd4, 0x2d, 0xfb, 0x2f, 0x78, 0xb2,
+ 0xc, 0x98, 0xef, 0x50, 0x7f, 0xbb, 0x33, 0xff, 00, 0x85,
+ 0x4f, 0xf6, 0xf6, 0x75, 0x1f, 0x8b, 0x2f, 0x7f, 0xf8, 0x17,
+ 0xfc, 0x2, 0x7f, 0xd6, 0x6e, 0x21, 0x8f, 0xc5, 0x95, 0x3f,
+ 0x94, 0xbf, 0xe0, 0x1f, 0x45, 0xae, 0xaf, 0x66, 0xe3, 0xe5,
+ 0xba, 0x81, 0xbe, 0x92, 0x3, 0xfd, 0x6a, 0x44, 0xbe, 0x85,
+ 0xfe, 0xec, 0xa8, 0xdf, 0x46, 0x15, 0xf3, 0x63, 0x7c, 0x1,
+ 0xf1, 0xf5, 0xa8, 0xc4, 0x5a, 0x9c, 0xe0, 0x7a, 0x25, 0xcc,
+ 0xa3, 0xfa, 0x53, 0x4f, 0xc2, 0xf, 0x89, 0x96, 0xdf, 0x73,
+ 0x56, 0xd4, 0x47, 0xfb, 0x97, 0x93, 0xa, 0xa5, 0xc4, 0x98,
+ 0xf8, 0xfc, 0x78, 0x9, 0xfc, 0x8a, 0xff, 00, 0x5b, 0xb3,
+ 0x38, 0xff, 00, 0x13, 0x2b, 0x9f, 0xc9, 0xdf, 0xf4, 0x3e,
+ 0x9a, 0x12, 0x83, 0x82, 0xf, 0x14, 0xbe, 0x76, 0x3b, 0xd7,
+ 0xcc, 0x3f, 0xf0, 0x82, 0x7c, 0x54, 0xb5, 0x1b, 0x46, 0xb1,
+ 0xab, 0x37, 0xd6, 0xee, 0x73, 0x4a, 0x74, 0xaf, 0x8a, 0xb6,
+ 0x60, 0xe6, 0xff, 00, 0x51, 0x7c, 0xfa, 0xcb, 0x31, 0xaa,
+ 0xff, 00, 0x5a, 0xe7, 0x1f, 0x8f, 0x5, 0x51, 0x16, 0xb8,
+ 0xda, 0xa4, 0x7f, 0x89, 0x97, 0xd5, 0x5f, 0x23, 0xe9, 0xef,
+ 0x3b, 0xde, 0x81, 0x2e, 0x4d, 0x7c, 0xc4, 0xba, 0xa7, 0xc5,
+ 0x3b, 0x30, 0x3e, 0x7b, 0xa9, 0x31, 0xfd, 0xf4, 0x95, 0xa9,
+ 0xe3, 0xc7, 0xdf, 0x14, 0x2d, 0x7a, 0xc0, 0xcd, 0x83, 0xd1,
+ 0xad, 0x1c, 0xff, 00, 0x4a, 0xa5, 0xc5, 0xf8, 0x75, 0xf1,
+ 0xd0, 0xa8, 0xbf, 0xed, 0xd2, 0xd7, 0x1d, 0xe1, 0x57, 0xf1,
+ 0x30, 0xd5, 0x63, 0xff, 00, 0x6e, 0xff, 00, 0xc1, 0x3e,
+ 0x9b, 0xf3, 0x3d, 0xe9, 0xc2, 0x5e, 0x3a, 0xd7, 0xcc, 0xf,
+ 0xf1, 0x7b, 0xe2, 0x64, 0x44, 0x6e, 0xb1, 0x8b, 0x8f, 0xfa,
+ 0x71, 0x7a, 0x61, 0xf8, 0xe3, 0xf1, 0x12, 0x13, 0xf3, 0xe9,
+ 0xb0, 0x37, 0xd6, 0xcd, 0xff, 00, 0xc6, 0x9f, 0xfa, 0xe5,
+ 0x97, 0x2f, 0x8a, 0x13, 0x5f, 0xf6, 0xef, 0xfc, 0x11, 0xff,
+ 00, 0xc4, 0x40, 0xca, 0x96, 0xf0, 0xa8, 0xbf, 0xed, 0xcf,
+ 0xf8, 0x27, 0xd4, 0x7e, 0x77, 0xbd, 0x1e, 0x6e, 0x7b, 0xd7,
+ 0xcb, 0x87, 0xf6, 0x83, 0xf1, 0xdc, 0x64, 0xee, 0xd2, 0xac,
+ 0xbf, 0x1b, 0x59, 0x7, 0xfe, 0xcd, 0x49, 0xff, 00, 0xd,
+ 0x25, 0xe3, 0x44, 0xfb, 0xda, 0x56, 0x9c, 0x47, 0xbc, 0x12,
+ 0xff, 00, 0xf1, 0x55, 0x4b, 0x8d, 0x32, 0xae, 0xae, 0x4b,
+ 0xfe, 0xdd, 0x63, 0x5e, 0x20, 0xe4, 0x97, 0xd5, 0xcd, 0x7f,
+ 0xdb, 0xac, 0xfa, 0x99, 0x65, 0xf7, 0xa7, 0xf9, 0x9e, 0xe2,
+ 0xbe, 0x5f, 0x87, 0xf6, 0x9c, 0xf1, 0xa, 0xf1, 0x36, 0x95,
+ 0x69, 0xff, 00, 00, 0x89, 0xff, 00, 0xf8, 0xba, 0xbf,
+ 0x6f, 0xfb, 0x51, 0xdd, 0xab, 0x9f, 0xb4, 0x69, 0x23, 0x18,
+ 0xff, 00, 0x96, 0x71, 0x9c, 0xfe, 0xaf, 0x5a, 0xc7, 0x8c,
+ 0x32, 0x89, 0x7f, 0xcb, 0xc6, 0xbe, 0x4c, 0xe8, 0x8f, 0x1e,
+ 0x64, 0x52, 0xde, 0xab, 0x5e, 0xa9, 0x9f, 0x48, 0xf9, 0x98,
+ 0xf4, 0xa5, 0x12, 0xe4, 0xd7, 0xcf, 0x91, 0x7e, 0xd4, 0xd6,
+ 0x63, 0x1e, 0x66, 0x91, 0x74, 0x7d, 0x76, 0xa2, 0xff, 00,
+ 0xf1, 0x75, 0x79, 0x3f, 0x6a, 0xad, 0xb, 0x1f, 0x36, 0x91,
+ 0xa8, 0xaf, 0xe0, 0x9f, 0xfc, 0x55, 0x75, 0x47, 0x8a, 0x72,
+ 0x89, 0x7f, 0xcb, 0xf4, 0xbe, 0xf3, 0xb2, 0x3c, 0x69, 0x90,
+ 0xcf, 0xfe, 0x62, 0x52, 0xfb, 0xcf, 0x78, 0xf3, 0x7, 0xf9,
+ 0x34, 0x79, 0x9e, 0xff, 00, 0xad, 0x78, 0x72, 0x7e, 0xd4,
+ 0xbe, 0x1c, 0x3f, 0x7b, 0x4f, 0xd4, 0x53, 0xfe, 00, 0xa7,
+ 0xff, 00, 0x66, 0xab, 0x9, 0xfb, 0x4f, 0xf8, 0x51, 0x86,
+ 0x5a, 0x1b, 0xf4, 0xfa, 0xc2, 0x3f, 0xc6, 0xb6, 0x5c, 0x49,
+ 0x94, 0x3f, 0xf9, 0x88, 0x8f, 0xde, 0x74, 0x2e, 0x2e, 0xc8,
+ 0xa5, 0xff, 00, 0x31, 0x70, 0xfb, 0xcf, 0x69, 0xf3, 0x7e,
+ 0xbf, 0x9d, 0x1e, 0x65, 0x78, 0xe2, 0xfe, 0xd3, 0x7e, 0xe,
+ 0x3f, 0x79, 0xef, 0x57, 0xeb, 0x6e, 0x7f, 0xc6, 0xad, 0xc5,
+ 0xfb, 0x48, 0xf8, 0x32, 0x5c, 0x7f, 0xa5, 0xdc, 0x2f, 0xfb,
+ 0xf0, 0xe3, 0xfa, 0xd6, 0xd1, 0xcf, 0xf2, 0xa9, 0x6d, 0x89,
+ 0x87, 0xfe, 0x4, 0x8d, 0xe3, 0xc4, 0xf9, 0x24, 0xb6, 0xc5,
+ 0xc3, 0xff, 00, 0x2, 0x47, 0xac, 0xf9, 0x9e, 0xf4, 0xbe,
+ 0x65, 0x79, 0x8c, 0x5f, 0x1f, 0xfc, 0x1b, 0x2e, 0xdf, 0xf8,
+ 0x99, 0x85, 0xcf, 0xf7, 0xb0, 0x31, 0xfa, 0xd5, 0xf8, 0x7e,
+ 0x34, 0x78, 0x42, 0x6f, 0xf9, 0x8e, 0x59, 0xa7, 0x19, 0xf9,
+ 0xe7, 0x41, 0xff, 00, 0xb3, 0x57, 0x44, 0x73, 0x7c, 0xbe,
+ 0x7f, 0xd, 0x78, 0xbf, 0xfb, 0x79, 0x1d, 0x70, 0xcf, 0x72,
+ 0xba, 0x9a, 0x47, 0x13, 0x7, 0xff, 00, 0x6f, 0x23, 0xd0,
+ 0x77, 0xe0, 0x50, 0x1e, 0xb8, 0xc8, 0x3e, 0x2a, 0xf8, 0x4a,
+ 0x60, 0xf, 0xfc, 0x24, 0xba, 0x52, 0x7b, 0x3d, 0xec, 0x40,
+ 0xff, 00, 0xe8, 0x55, 0x6d, 0x3e, 0x21, 0xf8, 0x6a, 0x4f,
+ 0xb9, 0xe2, 0x1d, 0x29, 0x8f, 0xb5, 0xec, 0x7f, 0xfc, 0x55,
+ 0x75, 0x47, 0x1b, 0x85, 0x96, 0xaa, 0xac, 0x7e, 0xf4, 0x76,
+ 0x47, 0x31, 0xc1, 0xcf, 0x58, 0xd6, 0x8f, 0xfe, 0x4, 0xbf,
+ 0xcc, 0xea, 0x77, 0xfb, 0x8a, 0x5f, 0x37, 0xde, 0xb9, 0xf8,
+ 0xbc, 0x5d, 0xa3, 0x4e, 0x71, 0x1e, 0xaf, 0x63, 0x21, 0xff,
+ 00, 0x66, 0xe5, 0xf, 0xf5, 0xab, 0x91, 0x6a, 0xd6, 0x93,
+ 0xe3, 0xcb, 0xbb, 0x81, 0xf3, 0xfd, 0xd9, 0x1, 0xad, 0xe3,
+ 0x5a, 0x94, 0xbe, 0x19, 0x27, 0xf3, 0x47, 0x4c, 0x6b, 0xd2,
+ 0x9f, 0xc3, 0x34, 0xfe, 0x68, 0xd4, 0xf3, 0x7d, 0xe8, 0xf3,
+ 0x33, 0x55, 0x16, 0x65, 0x70, 0xa, 0xb0, 0x61, 0xea, 0x29,
+ 0xc2, 0x60, 0x3b, 0xd6, 0xd7, 0x46, 0xd7, 0x45, 0xc5, 0x7c,
+ 0xa, 0x5f, 0x32, 0xa9, 0x89, 0x81, 0xe8, 0x69, 0x44, 0x99,
+ 0xef, 0x4a, 0xe8, 0x2e, 0x8b, 0x7e, 0x65, 0x1e, 0x66, 0x6a,
+ 0xb2, 0xc8, 0x3d, 0x73, 0x4e, 0xf3, 0x68, 0xb8, 0xc9, 0xf7,
+ 0x51, 0xba, 0xa1, 0xf3, 0x30, 0x29, 0x77, 0xd3, 0x2, 0x75,
+ 0x6a, 0x5d, 0xd5, 0x58, 0x3e, 0x29, 0x7c, 0xd3, 0x40, 0x16,
+ 0x37, 0x52, 0xef, 0xf7, 0xaa, 0xde, 0x65, 0x28, 0x93, 0x34,
+ 0x1, 0x63, 0x7f, 0xbd, 0x1b, 0xea, 0x10, 0xe2, 0x97, 0x78,
+ 0xf5, 0xa0, 0x9, 0xb3, 0xef, 0x4b, 0xba, 0xa0, 0xdf, 0xef,
+ 0x49, 0xbc, 0xd0, 0x4, 0xfb, 0xe9, 0x77, 0x54, 0x1b, 0xa9,
+ 0x43, 0xe4, 0xd0, 0x4, 0xf9, 0xa3, 0x35, 0x16, 0xfa, 0x5d,
+ 0xf4, 0x1, 0x26, 0x68, 0xcd, 0x47, 0xba, 0x8d, 0xd4, 0x1,
+ 0x28, 0xa7, 0x6e, 0xa8, 0x37, 0xfd, 0x28, 0xde, 0x7d, 0x68,
+ 0x2, 0x7d, 0xdf, 0x5a, 0x37, 0x7d, 0x6a, 0x2d, 0xde, 0xf4,
+ 0x6e, 0xf7, 0xa0, 0x9, 0x77, 0x7b, 0xd2, 0x86, 0xa8, 0x77,
+ 0x7b, 0xd2, 0x86, 0xa0, 0x9, 0x77, 0x51, 0xba, 0xa3, 0xdd,
+ 0xf5, 0xa3, 0x7d, 00, 0x49, 0xba, 0x8d, 0xd4, 0xcd, 0xd4,
+ 0x6f, 0xa0, 0x7, 0xee, 0xa3, 0x75, 0x33, 0x77, 0xbd, 0x1b,
+ 0xa8, 0x2, 0x4d, 0xd4, 0x64, 0x53, 0x37, 0x51, 0xba, 0x80,
+ 0x1f, 0x91, 0x46, 0x45, 0x33, 0x75, 0x1b, 0xa8, 0x1, 0xf9,
+ 0x14, 0xb9, 0x15, 0x1e, 0xea, 0x51, 0xcd, 00, 0x3e, 0x8a,
+ 0x4c, 0xd1, 0xba, 0x80, 0x16, 0x8a, 0x4d, 0xd4, 0x6e, 0xa0,
+ 0x7, 0x64, 0xd1, 0xf8, 0xd2, 0x66, 0x8c, 0xd0, 0x2, 0xfe,
+ 0x34, 0x67, 0xde, 0x93, 0x34, 0x66, 0x80, 0x17, 0x75, 0x1b,
+ 0xa9, 0x28, 0xa0, 0x5, 0xdd, 0x46, 0xea, 0x4a, 0x28, 0x1,
+ 0x77, 0x51, 0xba, 0x92, 0x8a, 00, 0x5d, 0xd4, 0xa3, 0x9a,
+ 0x6d, 0x28, 0x38, 0xa0, 0x7, 0x51, 0x4d, 0xc9, 0xa3, 0x75,
+ 00, 0x3a, 0x8a, 0x6e, 0xea, 0x37, 0x50, 0x3, 0xa8, 0xa6,
+ 0xee, 0xa5, 0xdd, 0x40, 0xb, 0x45, 0x26, 0xea, 0x37, 0x50,
+ 0x2, 0xd1, 0x49, 0xba, 0x8c, 0xd0, 0x2, 0xd1, 0x45, 0x14,
+ 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51,
+ 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14,
+ 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51,
+ 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14,
+ 00, 0x51, 0x45, 0x26, 0x68, 0x1, 0xa7, 0xad, 0x14, 0x51,
+ 0x9a, 00, 0x29, 0xa4, 0xd0, 0x69, 0xac, 0x68, 00, 0x27,
+ 0x6, 0xa3, 0x66, 0xa1, 0x8f, 0xbd, 0x46, 0x4f, 0x34, 00,
+ 0x33, 0x1a, 0x8c, 0xb5, 0x23, 0xb7, 0x53, 0x50, 0xbb, 0xd0,
+ 0x3, 0xd9, 0xe9, 0x23, 0x57, 0x9d, 0xb0, 0xa3, 0x3e, 0xf4,
+ 0xfb, 0x6b, 0x66, 0xb8, 0x39, 0x3c, 0x27, 0xad, 0x69, 0x47,
+ 0x1a, 0xc6, 0xb8, 0x51, 0x81, 0x40, 0x14, 0x13, 0x4a, 0x53,
+ 0x22, 0xbc, 0xad, 0xbf, 0x6f, 0x44, 0xfe, 0x1f, 0xc4, 0x77,
+ 0xab, 0xa9, 0x12, 0x46, 0xa1, 0x55, 0x2, 0x8f, 0x40, 0x30,
+ 0x2a, 0x5a, 0x2a, 0x54, 0x56, 0xe4, 0xf2, 0xa4, 0xee, 0x27,
+ 0x4a, 0x4e, 0xbd, 0x29, 0xd4, 0x53, 0x28, 0x69, 0x14, 0x7e,
+ 0x54, 0xea, 0x29, 0x80, 0xde, 0x94, 0x62, 0x9d, 0x45, 00,
+ 0x37, 0x22, 0x94, 0xd2, 0xd1, 0x48, 0x6, 0xfe, 0x34, 0x62,
+ 0x9d, 0x45, 0x30, 0x1b, 0x8a, 0x38, 0xa7, 0x51, 0x40, 0xc,
+ 0xda, 0x3f, 0xba, 0x29, 0xa6, 0x24, 0x3f, 0xc0, 0xa7, 0xf0,
+ 0xa9, 0x68, 0xa5, 0x61, 0x59, 0x10, 0x9b, 0x68, 0x8f, 0x58,
+ 0x90, 0xfd, 0x54, 0x53, 0x5a, 0xc2, 0xdd, 0xbe, 0xf4, 0x11,
+ 0x1f, 0xf8, 00, 0xab, 0x14, 0x52, 0xe5, 0x5d, 0x89, 0xe4,
+ 0x8b, 0xdd, 0x14, 0xbf, 0xb2, 0x6c, 0x8e, 0x73, 0x69, 0x9,
+ 0xff, 00, 0x80, 0xa, 0x8d, 0xb4, 0x1d, 0x39, 0xfa, 0xd8,
+ 0xdb, 0x9f, 0xfb, 0x66, 0x3f, 0xc2, 0xb4, 0x68, 0xa9, 0x74,
+ 0xe0, 0xf7, 0x48, 0x87, 0x46, 0x9b, 0xde, 0x2b, 0xee, 0x32,
+ 0x5b, 0xc3, 0x1a, 0x4b, 0xfd, 0xed, 0x3a, 0xd4, 0xfd, 0x62,
+ 0x5f, 0xf0, 0xa8, 0x5f, 0xc1, 0x7a, 0x1b, 0xfd, 0xed, 0x2e,
+ 0xd4, 0xff, 00, 0xdb, 0x15, 0xff, 00, 0xa, 0xdc, 0xa2,
+ 0xb3, 0x78, 0x7a, 0x2f, 0x78, 0x2f, 0xb9, 0x19, 0xbc, 0x2d,
+ 0x7, 0xbc, 0x17, 0xdc, 0x8e, 0x6d, 0xfe, 0x1e, 0xf8, 0x76,
+ 0x4e, 0xba, 0x55, 0xaf, 0xfd, 0xf9, 0x5f, 0xf0, 0xaa, 0x92,
+ 0xfc, 0x2a, 0xf0, 0xd4, 0xdf, 0x7b, 0x4a, 0xb6, 0xff, 00,
+ 0xbf, 0x2b, 0xfe, 0x15, 0xd7, 0xd1, 0x58, 0xbc, 0xe, 0x16,
+ 0x5b, 0xd3, 0x5f, 0x72, 0x30, 0x96, 0x5d, 0x83, 0x9f, 0xc5,
+ 0x4a, 0x3f, 0x72, 0x38, 0x49, 0x3e, 0xc, 0x78, 0x5a, 0x5e,
+ 0xba, 0x6c, 0x1f, 0x84, 0x49, 0xfe, 0x15, 0x4e, 0x6f, 0x81,
+ 0x3e, 0x16, 0x97, 0xfe, 0x5c, 0x22, 0x1f, 0xf6, 0xc9, 0x3f,
+ 0xc2, 0xbd, 0x1e, 0x8a, 0xe7, 0x96, 0x55, 0x81, 0x96, 0xf4,
+ 0x63, 0xf7, 0x1c, 0xb2, 0xc9, 0x32, 0xd9, 0xfc, 0x54, 0x23,
+ 0xf7, 0x23, 0xca, 0xe6, 0xfd, 0x9e, 0x7c, 0x31, 0x20, 0xe2,
+ 0xd9, 0x17, 0xfe, 0xd9, 0x27, 0xf8, 0x55, 0x19, 0x7f, 0x66,
+ 0xaf, 0xe, 0x49, 0x9c, 0x28, 0x5f, 0xa4, 0x6b, 0xfe, 0x15,
+ 0xec, 0x54, 0x57, 0x3c, 0xb2, 0x2c, 0xb6, 0x5b, 0xd0, 0x8f,
+ 0xdc, 0x72, 0x4b, 0x86, 0xb2, 0x89, 0xef, 0x87, 0x8f, 0xdc,
+ 0x78, 0x84, 0xdf, 0xb2, 0xee, 0x87, 0x21, 0xca, 0xcd, 0xb7,
+ 0xfe, 00, 0x2a, 0x84, 0xdf, 0xb2, 0x8e, 0x97, 0x21, 0x3b,
+ 0x2f, 0xa, 0xfd, 0x54, 0x57, 0xbf, 0x51, 0x5c, 0xb2, 0xe1,
+ 0x9c, 0xa6, 0x5b, 0xd0, 0x47, 0x1c, 0xf8, 0x43, 0x24, 0x9e,
+ 0xf8, 0x74, 0x7c, 0xe9, 0x37, 0xec, 0x95, 0x6c, 0xd9, 0xd9,
+ 0xa8, 0x1, 0xff, 00, 00, 0xaa, 0x52, 0x7e, 0xc8, 0xa7,
+ 0xf8, 0x35, 0x38, 0x87, 0xd5, 0xd, 0x7d, 0x31, 0x45, 0x73,
+ 0xcb, 0x84, 0xb2, 0x89, 0x7f, 0xcb, 0xaf, 0xc5, 0x9c, 0x92,
+ 0xe0, 0x6c, 0x86, 0x5f, 0xf2, 0xe3, 0xf1, 0x67, 0xcb, 0x92,
+ 0xfe, 0xc8, 0xb7, 0x63, 0xee, 0xea, 0x90, 0x1f, 0xac, 0x66,
+ 0xab, 0x3f, 0xec, 0x99, 0xac, 0x47, 0xf7, 0x35, 0x58, 0xf,
+ 0xfc, 0x5, 0xab, 0xea, 0xca, 0x2b, 0x9d, 0xf0, 0x6e, 0x50,
+ 0xf6, 0xa6, 0xd7, 0xcd, 0x9c, 0xcf, 0x80, 0x32, 0x27, 0xb5,
+ 0x26, 0xbf, 0xed, 0xe6, 0x7c, 0x96, 0xff, 00, 0xb2, 0xf7,
+ 0x8a, 0x61, 0xff, 00, 0x53, 0xaa, 0xa0, 0xfa, 0x33, 0x8a,
+ 0x81, 0xff, 00, 0x67, 0x6f, 0x1c, 0x41, 0xfe, 0xaf, 0x53,
+ 0x6e, 0x3d, 0x26, 0x90, 0x57, 0xd7, 0x74, 0x56, 0x6f, 0x83,
+ 0x32, 0xdf, 0xb2, 0xe4, 0xbf, 0xed, 0xe6, 0x62, 0xfc, 0x3f,
+ 0xca, 0x3e, 0xcb, 0x9a, 0xff, 00, 0xb7, 0x99, 0xf1, 0xe4,
+ 0x9f, 0x3, 0x3e, 0x20, 0xc3, 0xf7, 0x75, 0x29, 0xb8, 0xf4,
+ 0xb9, 0x90, 0x55, 0x67, 0xf8, 0x47, 0xf1, 0x1e, 0xd7, 0x38,
+ 0xd4, 0xee, 0x87, 0xd2, 0xea, 0x4a, 0xfb, 0x2f, 0x14, 0x60,
+ 0x7a, 0x56, 0x72, 0xe0, 0xcc, 0x27, 0xd9, 0xab, 0x35, 0xff,
+ 00, 0x6f, 0x19, 0x3f, 0xf, 0xf0, 0x3f, 0x66, 0xbd, 0x45,
+ 0xff, 00, 0x6f, 0x1f, 0x16, 0x3f, 0xc3, 0xff, 00, 0x89,
+ 0x76, 0xdf, 0x77, 0x55, 0xbf, 0x1f, 0xee, 0xde, 0x49, 0x55,
+ 0x9f, 0xc3, 0xff, 00, 0x13, 0x20, 0xff, 00, 0x98, 0xbe,
+ 0xa9, 0xf5, 0x5b, 0xd7, 0xff, 00, 0x1a, 0xfb, 0x73, 0x68,
+ 0x3d, 0x85, 0x35, 0xa3, 0x53, 0xfc, 0x23, 0xf2, 0xac, 0x9f,
+ 0x6, 0xc1, 0x7c, 0x18, 0xa9, 0xaf, 0x99, 0x8b, 0xe0, 0xa,
+ 0x6b, 0xe0, 0xc6, 0x55, 0x5f, 0x33, 0xe2, 0x1d, 0xff, 00,
+ 0x12, 0xec, 0x4f, 0x3a, 0xae, 0xa6, 0xfc, 0xe7, 0xe7, 0xbb,
+ 0x73, 0xff, 00, 0xb3, 0x54, 0xa9, 0xe2, 0xff, 00, 0x88,
+ 0xf6, 0x58, 0xcd, 0xe5, 0xcb, 0x91, 0xff, 00, 0x3d, 0x27,
+ 0x73, 0xff, 00, 0xb3, 0xd7, 0xda, 0xe6, 0x4, 0x3d, 0x63,
+ 0x5f, 0xca, 0x98, 0x6c, 0xe0, 0x6e, 0xb1, 0x21, 0xff, 00,
+ 0x80, 0xd4, 0xff, 00, 0xaa, 0x55, 0xe3, 0xf0, 0x63, 0x66,
+ 0xbf, 0xaf, 0x52, 0x3f, 0xd4, 0x7c, 0x4c, 0x7f, 0x87, 0x98,
+ 0xd4, 0x5f, 0xd7, 0xa9, 0xf1, 0x94, 0x7f, 0x16, 0xbe, 0x21,
+ 0xd9, 0x72, 0xd2, 0x29, 0xc7, 0xf7, 0xcb, 0x9f, 0xfd, 0x9e,
+ 0xac, 0x27, 0xc7, 0xff, 00, 0x1f, 0xdb, 0xff, 00, 0xd,
+ 0x8b, 0x60, 0x63, 0xe7, 0x89, 0x8f, 0xfe, 0xcd, 0x5f, 0x60,
+ 0xb6, 0x97, 0x6a, 0xdf, 0x7a, 0xde, 0x23, 0xf5, 0x51, 0x51,
+ 0xb6, 0x87, 0xa7, 0xb7, 0xde, 0xb3, 0x84, 0xff, 00, 0xc0,
+ 0x5, 0x35, 0xc3, 0x79, 0x9c, 0x3e, 0xc, 0x7c, 0xbe, 0xe2,
+ 0x97, 0x8, 0xe7, 0x14, 0xff, 00, 0x87, 0x99, 0xcf, 0xee,
+ 0xff, 00, 0x82, 0x7c, 0x93, 0x1f, 0xed, 0x2d, 0xe3, 0x38,
+ 0x98, 0x79, 0xb6, 0xb6, 0xd, 0xeb, 0x88, 0xc8, 0xcf, 0xeb,
+ 0x56, 0x97, 0xf6, 0xa4, 0xf1, 0xc, 0x6d, 0xfb, 0xcd, 0x32,
+ 0xd5, 0x87, 0xa0, 0x62, 0x2b, 0xea, 0x57, 0xf0, 0xb6, 0x92,
+ 0xff, 00, 0x7a, 0xc2, 0x3, 0xff, 00, 00, 0x15, 0x5e,
+ 0x4f, 0x3, 0xe8, 0x92, 0xfd, 0xed, 0x3a, 0x3, 0xff, 00,
+ 00, 0x15, 0x7f, 0xd8, 0x99, 0xe4, 0x7e, 0x1c, 0x7d, 0xfe,
+ 0x46, 0x9f, 0xea, 0xef, 0x11, 0x43, 0xe1, 0xcc, 0xdb, 0xf5,
+ 0x89, 0xf3, 0x74, 0x5f, 0xb5, 0x7e, 0xa2, 0xbf, 0xeb, 0x34,
+ 0x18, 0x9f, 0xe9, 0x71, 0x8f, 0xfd, 0x96, 0xae, 0x47, 0xfb,
+ 0x5b, 0xba, 0xf1, 0x27, 0x86, 0x49, 0xf7, 0x5b, 0xcf, 0xfe,
+ 0xc2, 0xbd, 0xea, 0x5f, 0x86, 0xbe, 0x1d, 0x94, 0x9d, 0xda,
+ 0x64, 0x1f, 0xf7, 0xcd, 0x54, 0x97, 0xe1, 0x27, 0x86, 0x65,
+ 0x1c, 0xe9, 0xb0, 0xfe, 0x55, 0x4b, 0x2e, 0xe2, 0x28, 0x7c,
+ 0x38, 0xb4, 0xfd, 0x62, 0x57, 0xf6, 0x57, 0x15, 0xd3, 0xf8,
+ 0x71, 0xd1, 0x7e, 0xb1, 0x3c, 0x62, 0x2f, 0xda, 0xe6, 0xdb,
+ 0xfe, 0x5a, 0x78, 0x6e, 0x75, 0xff, 00, 0x76, 0xe4, 0x1f,
+ 0xfd, 0x96, 0xac, 0xa7, 0xed, 0x71, 0xa4, 0xf1, 0xe6, 0x68,
+ 0x37, 0xcb, 0xfe, 0xec, 0x88, 0x7f, 0xa8, 0xaf, 0x52, 0x97,
+ 0xe0, 0x97, 0x86, 0x25, 0x7, 0xfe, 0x25, 0xf1, 0x2f, 0xd0,
+ 0x7f, 0xf5, 0xea, 0x9c, 0xdf, 00, 0x3c, 0x31, 0x2f, 0x4b,
+ 0x44, 0x5f, 0xcf, 0xfc, 0x6a, 0x5e, 0x1b, 0x89, 0xe3, 0xb5,
+ 0x78, 0x3f, 0x91, 0xf, 0x7, 0xc6, 0x51, 0xf8, 0x71, 0x30,
+ 0x7f, 0xf6, 0xea, 0x38, 0x28, 0xff, 00, 0x6b, 0x7f, 0xe,
+ 0x7f, 0x1e, 0x8f, 0xaa, 0x83, 0xfe, 0xca, 0xc4, 0x7f, 0xf6,
+ 0x71, 0x56, 0x22, 0xfd, 0xac, 0xbc, 0x29, 0x26, 0x73, 0xa7,
+ 0xea, 0xd1, 0xff, 00, 0xbd, 0x14, 0x5f, 0xfc, 0x72, 0xba,
+ 0x69, 0x7f, 0x67, 0xf, 0xd, 0x48, 0x4e, 0x22, 0xb, 0x9f,
+ 0xf7, 0xbf, 0xc6, 0xa9, 0x4f, 0xfb, 0x31, 0x78, 0x7e, 0x5e,
+ 0x87, 0x67, 0xfd, 0xf5, 0xff, 00, 0xc5, 0x56, 0x7c, 0xbc,
+ 0x59, 0x1f, 0xb5, 0x7, 0xf2, 0x46, 0x5c, 0xbc, 0x6f, 0xd,
+ 0xa7, 0x4d, 0xfc, 0x91, 0x56, 0xf, 0xda, 0x7f, 0xc2, 0x13,
+ 0x75, 0x5b, 0xd8, 0xff, 00, 0xdf, 0x48, 0xff, 00, 0xf8,
+ 0xba, 0xd3, 0x87, 0xf6, 0x88, 0xf0, 0x64, 0x9b, 0x4f, 0xf6,
+ 0x83, 0x26, 0x7b, 0x38, 0x51, 0x8f, 0xfc, 0x7a, 0xb2, 0x26,
+ 0xfd, 0x95, 0x34, 0x67, 0x3f, 0x2d, 0xc6, 0xdf, 0xc1, 0xbf,
+ 0xf8, 0xaa, 0xa7, 0x27, 0xec, 0x99, 0xa7, 0x36, 0x76, 0xdf,
+ 0xed, 0xff, 00, 0x80, 0x37, 0xff, 00, 0x15, 0x42, 0xaf,
+ 0xc5, 0x51, 0xde, 0x94, 0x1f, 0xf5, 0xea, 0x35, 0x8a, 0xe3,
+ 0x58, 0x6f, 0x46, 0x9c, 0xbf, 0xaf, 0x53, 0xb0, 0x87, 0xe3,
+ 0xc7, 0x82, 0x65, 0xc6, 0x75, 0xc8, 0x23, 0xe7, 0xf8, 0xcd,
+ 0x5f, 0x8b, 0xe3, 0xf, 0x83, 0xa7, 0x20, 0x26, 0xbf, 0x6a,
+ 0xd9, 0xe4, 0x61, 0x8f, 0xf8, 0x57, 0x9b, 0x49, 0xfb, 0x23,
+ 0xdb, 0x9f, 0xbb, 0xaa, 0x2f, 0xfd, 0xfb, 0x3f, 0xfc, 0x55,
+ 0x52, 0x97, 0xf6, 0x43, 0x6c, 0x9d, 0xba, 0xa8, 0x3f, 0xf6,
+ 0xcb, 0xff, 00, 0xb2, 0xad, 0x3f, 0xb4, 0x38, 0x9a, 0x3f,
+ 0x16, 0x16, 0x2f, 0xe7, 0xff, 00, 0x4, 0xd1, 0x66, 0xbc,
+ 0x61, 0xf, 0x8b, 0x5, 0x7, 0xf3, 0xff, 00, 0x82, 0x7b,
+ 0x1c, 0x3f, 0x12, 0x3c, 0x37, 0x71, 0xb7, 0xcb, 0xd5, 0xe0,
+ 0x7d, 0xdd, 0x31, 0x9e, 0x7f, 0x4a, 0xd0, 0x87, 0xc5, 0x1a,
+ 0x5d, 0xc2, 0xee, 0x8e, 0xf6, 0x36, 0x1e, 0xa3, 0x35, 0xe0,
+ 0x13, 0x7e, 0xc8, 0xd7, 0x63, 0x3b, 0x35, 0x24, 0x3f, 0xf6,
+ 0xc8, 0x7f, 0xf1, 0x55, 0x4a, 0x7f, 0xd9, 0x2f, 0x55, 0x4f,
+ 0xf5, 0x77, 0x8a, 0xc3, 0xfd, 0xc1, 0xff, 00, 0xc5, 0x53,
+ 0x59, 0xce, 0x7f, 0xf, 0x8b, 0x3, 0x7f, 0x49, 0x7f, 0xc3,
+ 0x8f, 0xfb, 0x7f, 0x89, 0xe1, 0xfc, 0x4c, 0xb1, 0x3f, 0x49,
+ 0x7f, 0xc3, 0x9f, 0x4d, 0xc5, 0x7b, 0xc, 0xcb, 0xb9, 0x25,
+ 0x56, 0x1e, 0xb9, 0xa9, 0x5, 0xc2, 0x7f, 0x7d, 0x7f, 0x3a,
+ 0xf9, 0x52, 0x4f, 0xd9, 0x5f, 0x5d, 0x8b, 0x94, 0x9c, 0x12,
+ 0x3d, 00, 0x1f, 0xfb, 0x35, 0x56, 0x7f, 0xd9, 0xbf, 0xc5,
+ 0x36, 0xe0, 0xf9, 0x73, 0x49, 0xff, 00, 0x1, 0x6c, 0x7f,
+ 0xec, 0xd4, 0xdf, 0x10, 0xe6, 0xb1, 0xf8, 0xb2, 0xe9, 0x7f,
+ 0xe0, 0x5f, 0xf0, 0x6, 0xf8, 0xab, 0x3a, 0x87, 0xc7, 0x95,
+ 0x4b, 0xff, 00, 0x2, 0xff, 00, 0xed, 0x4f, 0xad, 0x7e,
+ 0xd2, 0x9f, 0xde, 0x1f, 0x9d, 0x28, 0x9d, 0x4f, 0xf1, 0xf,
+ 0xce, 0xbe, 0x43, 0x3f, 0x3, 0x7c, 0x71, 0x6d, 0xcc, 0x77,
+ 0x17, 0xab, 0xfe, 0xe4, 0xd8, 0xff, 00, 0xd9, 0xea, 0xbc,
+ 0x9f, 0xa, 0xfe, 0x20, 0xdb, 0xfd, 0xdb, 0x9d, 0x4f, 0x8f,
+ 0x4b, 0x92, 0x3f, 0xf6, 0x7a, 0xcf, 0xfd, 0x69, 0xc6, 0x47,
+ 0xe3, 0xc0, 0x4f, 0xef, 0xff, 00, 0x80, 0x66, 0xf8, 0xd3,
+ 0x1f, 0xf, 0x8f, 0x2c, 0xa8, 0xbe, 0x7f, 0xf0, 0xf, 0xb1,
+ 0xbc, 0xc5, 0xf5, 0x1f, 0x9d, 0x2, 0x41, 0xd8, 0xd7, 0xc6,
+ 0x47, 0xc1, 0x3f, 0x12, 0x6d, 0x18, 0x15, 0xba, 0xd5, 0xce,
+ 0x3f, 0xe9, 0xe9, 0x88, 0xff, 00, 0xd0, 0xe9, 0x7e, 0xc7,
+ 0xf1, 0x42, 0xcd, 0x76, 0x8b, 0x9d, 0x4f, 0xfe, 0x4, 0xfb,
+ 0xbf, 0xad, 0x4f, 0xfa, 0xe1, 0x35, 0xf1, 0xe0, 0xe6, 0x89,
+ 0xff, 00, 0x5f, 0x27, 0x1f, 0xe2, 0x60, 0x2a, 0x2f, 0x91,
+ 0xf6, 0x76, 0xea, 0x37, 0x7d, 0x6b, 0xe3, 0x58, 0xfc, 0x43,
+ 0xf1, 0x56, 0xc8, 0x60, 0x5c, 0xdf, 00, 0x3f, 0xbd, 0x1a,
+ 0xb5, 0x48, 0xbf, 0x11, 0x7e, 0x2b, 0x5a, 0x1c, 0x8b, 0xdb,
+ 0xaf, 0xf8, 0x15, 0xac, 0x67, 0xff, 00, 0x65, 0xad, 0x17,
+ 0x19, 0xe1, 0xd7, 0xc7, 0x42, 0x6b, 0xe4, 0x69, 0x1f, 0x10,
+ 0x30, 0xbf, 0x6f, 0xd, 0x51, 0x7f, 0xdb, 0xa7, 0xd8, 0xdb,
+ 0xe8, 0xf3, 0x31, 0x5f, 0x1f, 0x2f, 0xc6, 0x4f, 0x89, 0xf0,
+ 0x5, 0x12, 0xcf, 0x33, 0xe3, 0xa9, 0xfb, 0x24, 0x63, 0x3f,
+ 0xf8, 0xed, 0x5a, 0x8b, 0xe3, 0xf7, 0x8f, 0x6d, 0xb1, 0xe7,
+ 0x43, 0x24, 0xbe, 0xb9, 0x89, 0x57, 0xff, 00, 0x64, 0xad,
+ 0x57, 0x1a, 0x65, 0xf7, 0xd6, 0x13, 0x5f, 0xf6, 0xe9, 0xba,
+ 0xf1, 0x7, 0x2b, 0xfb, 0x50, 0xa8, 0xbf, 0xed, 0xd3, 0xeb,
+ 0x7f, 0x32, 0x8f, 0x32, 0xbe, 0x55, 0x83, 0xf6, 0x97, 0xf1,
+ 0x54, 00, 0x79, 0xba, 0x57, 0x9b, 0x8e, 0xbb, 0x88, 0x5f,
+ 0xfd, 0x92, 0xaf, 0x47, 0xfb, 0x57, 0xeb, 0x31, 0x7f, 0xac,
+ 0xf0, 0xdc, 0x4f, 0xff, 00, 0x6f, 0x4, 0x7f, 0xec, 0xb5,
+ 0xd1, 0x1e, 0x30, 0xca, 0x9e, 0xf2, 0x6b, 0xfe, 0xdd, 0x67,
+ 0x54, 0x38, 0xf3, 0x24, 0x97, 0xc5, 0x39, 0x2f, 0x58, 0xcb,
+ 0xfc, 0x8f, 0xa7, 0x81, 0xf7, 0xa7, 0x6e, 0xaf, 0x99, 0xd3,
+ 0xf6, 0xb9, 0xbc, 0x1f, 0x7f, 0xc3, 0x2b, 0xf8, 0x5c, 0x9f,
+ 0xfe, 0x26, 0xa6, 0x4f, 0xda, 0xf3, 0x7, 0xf7, 0x9e, 0x1b,
+ 0x70, 0x3f, 0xd9, 0xb8, 0x1f, 0xe1, 0x5b, 0x2e, 0x2d, 0xc9,
+ 0xdf, 0xfc, 0xbe, 0xfc, 0x1f, 0xf9, 0x1d, 0xb, 0x8e, 0x72,
+ 0x1f, 0xf9, 0xff, 00, 0xff, 00, 0x92, 0xcb, 0xfc, 0x8f,
+ 0xa4, 0xb7, 0x51, 0xba, 0xbe, 0x74, 0x4f, 0xda, 0xf6, 0xcb,
+ 0xf8, 0xfc, 0x3b, 0x72, 0x3d, 0x71, 0x32, 0xff, 00, 0x85,
+ 0x58, 0x8f, 0xf6, 0xbc, 0xd2, 0x58, 0xfc, 0xda, 0x5, 0xea,
+ 0x7b, 0xf9, 0x8a, 0x45, 0x68, 0xb8, 0xab, 0x26, 0x7f, 0xf2,
+ 0xfd, 0x7d, 0xcf, 0xfc, 0x8d, 0x23, 0xc6, 0xd9, 0x4, 0xbf,
+ 0xe6, 0x25, 0x2f, 0x93, 0xff, 00, 0x23, 0xe8, 0x3d, 0xd4,
+ 0xbb, 0xab, 0xc1, 0x60, 0xfd, 0xad, 0x3c, 0x3f, 0x20, 0xfd,
+ 0xe6, 0x9b, 0x75, 0xf, 0xb3, 0x1c, 0xff, 00, 0x21, 0x5a,
+ 0x10, 0xfe, 0xd4, 0xfe, 0x11, 0x7f, 0xbe, 0xd3, 0x44, 0x7d,
+ 0xe3, 0x73, 0xfc, 0x92, 0xba, 0x23, 0xc4, 0x99, 0x44, 0xf6,
+ 0xc4, 0x44, 0xea, 0x87, 0x17, 0x64, 0x53, 0xdb, 0x15, 0x1f,
+ 0xcb, 0xf3, 0x3d, 0xab, 0x77, 0xd6, 0x8d, 0xd5, 0xe4, 0x90,
+ 0x7e, 0xd3, 0x5e, 0x5, 0x7f, 0xbf, 0xa9, 0x49, 0x1f, 0xfd,
+ 0xbb, 0x4c, 0x7f, 0x92, 0x55, 0xf8, 0xff, 00, 0x68, 0xcf,
+ 0x87, 0xf3, 0xc, 0xae, 0xbb, 0xc7, 0x4e, 0x6d, 0x27, 0x1f,
+ 0xfb, 0x25, 0x75, 0x47, 0x3b, 0xcb, 0x27, 0xb6, 0x22, 0x1f,
+ 0xf8, 0x12, 0xff, 00, 0x33, 0xb6, 0x1c, 0x45, 0x93, 0xcf,
+ 0xe1, 0xc5, 0xd3, 0xff, 00, 0xc0, 0xa3, 0xfe, 0x67, 0xa6,
+ 0x6e, 0xf7, 0xa7, 0x6, 0xe2, 0xb8, 0x8, 0x7e, 0x38, 0x78,
+ 0x2e, 0x70, 0xa, 0x6b, 0x48, 0x41, 0xf5, 0x86, 0x41, 0xff,
+ 00, 0xb2, 0xd6, 0x95, 0xbf, 0xc5, 0xf, 0xb, 0xdc, 0x1,
+ 0xb3, 0x59, 0xb7, 0x39, 0xf5, 0xc8, 0xfe, 0x62, 0xba, 0xa3,
+ 0x98, 0x60, 0xe7, 0xf0, 0xd6, 0x8b, 0xf9, 0xa3, 0xb6, 0x19,
+ 0xae, 0x2, 0xa6, 0x90, 0xaf, 0x7, 0xff, 00, 0x6f, 0x2f,
+ 0xf3, 0x3a, 0xdd, 0xd4, 0x6e, 0xac, 0x38, 0x3c, 0x63, 0xa1,
+ 0xce, 0x37, 0x26, 0xad, 0x67, 0x8f, 0x79, 0x94, 0x7f, 0x33,
+ 0x53, 0x8f, 0x13, 0x69, 0x2d, 0xd3, 0x53, 0xb3, 0x3f, 0xf6,
+ 0xdd, 0x7f, 0xc6, 0xba, 0x95, 0x6a, 0x4f, 0x55, 0x25, 0xf7,
+ 0xa3, 0xb5, 0x62, 0x28, 0xb5, 0x75, 0x35, 0xf7, 0x9a, 0xd9,
+ 0x14, 0x64, 0x56, 0x72, 0xeb, 0xba, 0x7b, 0xfd, 0xdb, 0xeb,
+ 0x66, 0xfa, 0x4a, 0xbf, 0xe3, 0x52, 0x2e, 0xa9, 0x68, 0xdd,
+ 0x2e, 0x61, 0x3f, 0x47, 0x14, 0xfd, 0xad, 0x3f, 0xe6, 0x45,
+ 0x2a, 0xd4, 0x9f, 0xda, 0x5f, 0x79, 0x77, 0x22, 0x8c, 0xe6,
+ 0xab, 0xb, 0xd8, 0x4f, 0x49, 0x50, 0xff, 00, 0xc0, 0x85,
+ 0x38, 0x5c, 0x46, 0x47, 0xe, 0xa7, 0xf1, 0xaa, 0xe7, 0x8f,
+ 0x72, 0xb9, 0xe2, 0xfa, 0x93, 0xd2, 0xe7, 0x15, 0x10, 0x91,
+ 0x4f, 0x46, 0x1f, 0x9d, 0x2e, 0xe1, 0xeb, 0x54, 0x9a, 0x65,
+ 0x5d, 0x12, 0x64, 0xd1, 0x93, 0x51, 0xe6, 0x8c, 0xd3, 0x19,
+ 0x26, 0x4d, 0x28, 0x39, 0xa8, 0xc1, 0xc5, 0x2e, 0xe3, 0x40,
+ 0x12, 0x51, 0x4c, 0xdd, 0xef, 0x4a, 0x1a, 0x80, 0x1d, 0x45,
+ 0x37, 0x26, 0x8c, 0x9a, 00, 0x75, 0x14, 0xdc, 0x9a, 0x37,
+ 0x50, 0x3, 0xb3, 0x46, 0x69, 0xbb, 0xa8, 0xdd, 0x40, 0xe,
+ 0xcd, 0x3, 0x83, 0x4d, 0xdd, 0xed, 0x4e, 0x7, 0x34, 00,
+ 0xec, 0x8a, 0x32, 0x29, 0xb4, 0x50, 0x3, 0xb2, 0x29, 0x69,
+ 0x94, 0xe0, 0x45, 00, 0x2d, 0x14, 0x99, 0x14, 0x66, 0x80,
+ 0x16, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a,
+ 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0,
+ 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a,
+ 0x28, 0xa0, 0x2, 0x98, 0x79, 0xa7, 0x1a, 0x6d, 00, 0x14,
+ 0xd3, 0xd6, 0x82, 0x69, 0x9, 0xc5, 00, 0x23, 0x54, 0x6c,
+ 0x69, 0xc5, 0xaa, 0x36, 0x39, 0x14, 00, 0xd6, 0x3c, 0x54,
+ 0x4c, 0xd8, 0xef, 0x4a, 0xed, 0x8a, 0x82, 0x47, 0xa0, 0x1,
+ 0xde, 0xab, 0xdb, 0xcc, 0x97, 0x57, 0xa6, 0xdc, 0x1c, 0x95,
+ 0x19, 0x7e, 0x3a, 0xa, 0xe6, 0x3c, 0x71, 0xe3, 0x78, 0x7c,
+ 0x32, 0x2d, 0x2c, 0xe3, 0xd, 0x2e, 0xa9, 0xa8, 0xb1, 0x8a,
+ 0xd2, 0x24, 00, 0xe1, 0xb0, 0x49, 0x66, 0xc9, 0xfb, 0xa3,
+ 0x1d, 0x70, 0x6b, 0xa0, 0xf0, 0x65, 0x84, 0xd6, 0xb6, 0x11,
+ 0x9b, 0xa9, 0x3c, 0xeb, 0xb7, 0x1b, 0xe6, 0x94, 0x9c, 0xee,
+ 0x63, 0xd6, 0xb9, 0xd5, 0x55, 0x3a, 0x8e, 0x9c, 0x7a, 0x6e,
+ 0x72, 0xaa, 0xca, 0x75, 0x5d, 0x28, 0x74, 0xdf, 0xfc, 0x8e,
+ 0x9d, 00, 0x55, 0xa, 0x6, 00, 0xa7, 0x51, 0x45, 0x74,
+ 0x1d, 0x41, 0x45, 0x14, 0x50, 0x1, 0x45, 0x14, 0x84, 0xed,
+ 0x19, 0x34, 00, 0xb4, 0xdd, 0xe0, 0xe, 0x4e, 0x3e, 0xb5,
+ 0xe6, 0xdf, 0x12, 0xbf, 0x68, 0x2f, 0x8, 0xfc, 0x2b, 0xc,
+ 0x35, 0xab, 0xb7, 0xe, 0x17, 0x21, 0x61, 0xd8, 0x4f, 0xea,
+ 0xc3, 0xd2, 0xbe, 0x29, 0xf8, 0xb9, 0xff, 00, 0x5, 0x24,
+ 0xd0, 0xc5, 0xe5, 0xcc, 0x7a, 0x1d, 0xfd, 0xf2, 0xaa, 0xb1,
+ 0xb, 0x85, 0x8c, 0x7f, 0x27, 0x34, 0x1, 0xfa, 0x3a, 0x67,
+ 0x8d, 0x7a, 0xba, 0x8f, 0xc6, 0xa3, 0xfb, 0x7d, 0xbe, 0xec,
+ 0x79, 0xaa, 0x4f, 0xb5, 0x7e, 0x2b, 0x78, 0xab, 0xfe, 0xa,
+ 0x39, 0xe2, 0x47, 0x93, 0x16, 0xba, 0x9e, 0xa1, 0xb7, 0x9e,
+ 0x9b, 0x3f, 0xc6, 0xb4, 0x7e, 0x15, 0x7e, 0xdc, 0xde, 0x34,
+ 0xf1, 0x5e, 0xbf, 0x6d, 0x6d, 0xf6, 0xeb, 0xd7, 0x12, 0xc8,
+ 0x10, 0x67, 0x6f, 0x72, 0x7, 0x6a, 00, 0xfd, 0x9e, 0x57,
+ 0xc, 0x1, 0x1c, 0x83, 0xdc, 0x53, 0xab, 0x82, 0xf8, 0x47,
+ 0xaa, 0xde, 0xdd, 0xf8, 0xa, 0xc2, 0xff, 00, 0x55, 0x97,
+ 0xf7, 0xb2, 0xa0, 0x62, 0xce, 0xde, 0xc2, 0xaf, 0x5e, 0x7c,
+ 0x57, 0xf0, 0xcd, 0x85, 0xcb, 0x41, 0x36, 0xa5, 0x1a, 0xc8,
+ 0xa7, 0x4, 0x64, 0x7f, 0x8d, 00, 0x75, 0xf4, 0x57, 0x33,
+ 0xa7, 0xfc, 0x45, 0xd0, 0x35, 0x59, 0x44, 0x56, 0xda, 0x84,
+ 0x72, 0x39, 0xe8, 0x33, 0x5d, 0x22, 0x38, 0x75, 0xc, 0xa7,
+ 0x20, 0xd0, 0x3, 0xa9, 0x1, 0xa0, 0xd5, 0x3b, 0xed, 0x46,
+ 0x2b, 0x8, 0xcb, 0xc8, 0x7d, 0xea, 0x65, 0x25, 0x15, 0x77,
+ 0xb1, 0x12, 0x9c, 0x60, 0xb9, 0xa4, 0xec, 0x8b, 0x99, 0xa0,
+ 0x9a, 0xe5, 0x4f, 0x8f, 0x6c, 0xf7, 0x11, 0x86, 0xfd, 0x3f,
+ 0xc6, 0xa4, 0x1e, 0x39, 0xb2, 0xfe, 0xeb, 0x7e, 0x9f, 0xe3,
+ 0x5c, 0x5f, 0x5f, 0xc3, 0x7f, 0x3a, 0x3c, 0xf5, 0x99, 0xe1,
+ 0x1f, 0xfc, 0xbc, 0x47, 0x4d, 0x93, 0xe9, 0x46, 0x4f, 0xa5,
+ 0x73, 0x83, 0xc6, 0xf6, 0x27, 0xa8, 0x6f, 0xc8, 0x53, 0xc7,
+ 0x8d, 0x2c, 0x4f, 0xf7, 0xbf, 0x4a, 0xaf, 0xae, 0xe1, 0xdf,
+ 0xdb, 0x45, 0xac, 0xc3, 0xa, 0xf6, 0xa8, 0x8e, 0x83, 0x27,
+ 0xd2, 0x8c, 0xfb, 0x56, 0x12, 0xf8, 0xba, 0xc4, 0xf7, 0x6f,
+ 0xd2, 0x9e, 0x3c, 0x57, 0x62, 0x7f, 0x89, 0xbf, 0x4a, 0xaf,
+ 0xad, 0x50, 0x7f, 0x6d, 0x16, 0xb1, 0xb8, 0x77, 0xf6, 0xd1,
+ 0xb5, 0x9a, 0x33, 0x58, 0xeb, 0xe2, 0x7b, 0x33, 0xd1, 0x8d,
+ 0x3f, 0xfe, 0x12, 0x3b, 0x43, 0xfc, 0x66, 0xab, 0xeb, 0x14,
+ 0xbf, 0x99, 0x14, 0xb1, 0x54, 0x1f, 0xdb, 0x46, 0xae, 0x45,
+ 0x19, 0xac, 0xc1, 0xaf, 0xda, 0x1f, 0xe3, 0xa7, 0x8d, 0x6a,
+ 0xd8, 0xff, 00, 0x1f, 0xeb, 0x55, 0xed, 0xa9, 0xbf, 0xb4,
+ 0x8b, 0x58, 0x8a, 0x4f, 0xed, 0x23, 0x42, 0x8c, 0xd5, 0x11,
+ 0xab, 0x5b, 0x9e, 0x92, 0xa, 0x94, 0x6a, 0x10, 0xb7, 0xfc,
+ 0xb4, 0x1f, 0x9d, 0x5a, 0xa9, 0x7, 0xb3, 0x2d, 0x55, 0xa6,
+ 0xf6, 0x92, 0x2c, 0xd2, 0xd4, 0x31, 0xce, 0x8e, 0x7e, 0x56,
+ 0x7, 0xf1, 0xa9, 0x7a, 0xd5, 0xa7, 0x7d, 0x8d, 0x13, 0x4f,
+ 0x61, 0x68, 0xa2, 0x8a, 0x63, 0xa, 0x28, 0xa2, 0x80, 0xa,
+ 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2,
+ 0x80, 0xa, 0x28, 0xa2, 0x80, 0x13, 0x9f, 0x5a, 0x31, 0x4b,
+ 0x45, 00, 0x26, 0x28, 0xc5, 0x2d, 0x14, 00, 0x98, 0xa3,
+ 0x1e, 0xf4, 0xb4, 0x50, 0x2, 0x51, 0x4b, 0x45, 0x2b, 00,
+ 0x52, 0x52, 0xd1, 0x4c, 0x4, 0xc5, 0x18, 0x34, 0xb4, 0x50,
+ 0x2, 0x62, 0x80, 0x29, 0x68, 0xa0, 0x4, 0xc5, 0x2d, 0x14,
+ 0x50, 0x2, 0x62, 0x8c, 0x52, 0xd1, 0x40, 0xd, 0xdb, 0x46,
+ 0xda, 0x75, 0x14, 00, 0x98, 0xa4, 0x2a, 0xd, 0x3a, 0x8a,
+ 00, 0x69, 0x40, 0x69, 0x3c, 0xa5, 0xee, 0xa0, 0xfe, 0x14,
+ 0xfa, 0x28, 0x15, 0x91, 0x19, 0xb7, 0x8c, 0xff, 00, 0x2,
+ 0xfe, 0x54, 0xc3, 0x65, 0x3, 0x7f, 0xcb, 0x25, 0xfc, 0xaa,
+ 0x7a, 0x4a, 0x9e, 0x48, 0xbe, 0x84, 0xb8, 0x45, 0xee, 0x8a,
+ 0xad, 0xa5, 0x5a, 0x3f, 0x58, 0x10, 0xfe, 0x15, 0xb, 0xf8,
+ 0x7f, 0x4f, 0x7e, 0xb6, 0xc9, 0xf9, 0x56, 0x8d, 0x15, 0xe,
+ 0x95, 0x37, 0xbc, 0x57, 0xdc, 0x66, 0xe8, 0x52, 0x96, 0xf1,
+ 0x5f, 0x71, 0x8f, 0x27, 0x84, 0xb4, 0xa9, 0x47, 0xcd, 0x68,
+ 0x86, 0xaa, 0x49, 0xf0, 0xff, 00, 0x44, 0x97, 0xad, 0x9a,
+ 0xfe, 0x66, 0xba, 0x3a, 0x2b, 0x27, 0x84, 0xc3, 0xcb, 0x78,
+ 0x2f, 0xb8, 0xc2, 0x58, 0x1c, 0x2c, 0xfe, 0x2a, 0x51, 0x7f,
+ 0x24, 0x72, 0x52, 0xfc, 0x2f, 0xd0, 0x25, 0xeb, 0x66, 0x3f,
+ 0x33, 0x54, 0xe6, 0xf8, 0x37, 0xe1, 0xb9, 0xba, 0xda, 0x11,
+ 0xff, 00, 0x2, 0x35, 0xdc, 0xd1, 0x5c, 0xf2, 0xcb, 0x70,
+ 0x52, 0xde, 0x94, 0x7e, 0xe4, 0x73, 0x4b, 0x28, 0xcb, 0xe7,
+ 0xf1, 0x50, 0x8f, 0xdc, 0x8f, 0x38, 0x97, 0xe0, 0x37, 0x86,
+ 0x26, 0xeb, 0x6e, 0xc3, 0xe8, 0xd5, 0x4a, 0x6f, 0xd9, 0xd7,
+ 0xc2, 0xf2, 0x9f, 0xf5, 0x72, 0xf, 0xf8, 0x15, 0x7a, 0xa5,
+ 0x15, 0xcf, 0x2c, 0x97, 0x2e, 0x96, 0xf4, 0x23, 0xf7, 0x1c,
+ 0xb2, 0xe1, 0xec, 0xaa, 0x7b, 0xe1, 0xe3, 0xf7, 0x1e, 0x3b,
+ 0x3f, 0xec, 0xc7, 0xe1, 0x99, 0x7a, 0x34, 0xab, 0x54, 0xe5,
+ 0xfd, 0x95, 0xfc, 0x3e, 0xe7, 0x8b, 0xa9, 0x97, 0xf0, 0x15,
+ 0xed, 0xd4, 0x84, 0x66, 0xb9, 0xa5, 0xc3, 0xb9, 0x54, 0xb7,
+ 0xa0, 0x8e, 0x49, 0xf0, 0xae, 0x4b, 0x3f, 0x8b, 0xd, 0x1f,
+ 0xc4, 0xf0, 0x69, 0x7f, 0x64, 0xed, 0x15, 0x8f, 0xcb, 0xa8,
+ 0xce, 0x3f, 0xe0, 0x22, 0xa9, 0x4b, 0xfb, 0x24, 0x69, 0xcd,
+ 0x9d, 0xba, 0xac, 0xff, 00, 0xf7, 0xca, 0xd7, 0xd0, 0xbc,
+ 0x51, 0x8a, 0xe7, 0x97, 0xb, 0xe5, 0x12, 0xde, 0x82, 0xfb,
+ 0xdf, 0xf9, 0x9c, 0xb2, 0xe0, 0xbc, 0x86, 0x7b, 0xe1, 0x97,
+ 0xde, 0xff, 00, 0xcc, 0xf9, 0xbe, 0x6f, 0xd9, 0x16, 0x6,
+ 0xfb, 0x9a, 0xb4, 0x83, 0xea, 0x8b, 0x54, 0xe5, 0xfd, 0x91,
+ 0x25, 0x1f, 0x73, 0x56, 0x6c, 0xfb, 0xa0, 0xff, 00, 0x1a,
+ 0xfa, 0x73, 0x6, 0x8c, 0x1a, 0xe7, 0x7c, 0x21, 0x93, 0xcb,
+ 0xfe, 0x5d, 0x7e, 0x2c, 0xe5, 0x97, 0x2, 0x64, 0x32, 0xff,
+ 00, 0x97, 0x1f, 0x8b, 0xff, 00, 0x33, 0xe5, 0x89, 0xbf,
+ 0x64, 0x7d, 0x47, 0x9d, 0x9a, 0x92, 0x1f, 0xaa, 0x8f, 0xf1,
+ 0xaa, 0x72, 0x7e, 0xc9, 0x7a, 0xd8, 0xce, 0xdb, 0xe8, 0xdb,
+ 0xea, 0x3f, 0xfb, 0x2a, 0xfa, 0xcf, 0x6, 0x97, 0x15, 0x83,
+ 0xe0, 0xcc, 0xa1, 0xed, 0x6, 0xbe, 0x6c, 0xe6, 0x97, 0x87,
+ 0xd9, 0x13, 0xda, 0x9b, 0x5f, 0xf6, 0xf3, 0x3e, 0x41, 0x93,
+ 0xf6, 0x53, 0xf1, 0x22, 0x67, 0x6d, 0xd2, 0x1f, 0xc7, 0x1f,
+ 0xd6, 0xaa, 0xcb, 0xfb, 0x2e, 0xf8, 0xb2, 0x3f, 0xba, 0xe8,
+ 0xc3, 0xda, 0x40, 0x3f, 0xad, 0x7d, 0x8f, 0xc5, 0x18, 0x15,
+ 0x9b, 0xe0, 0xbc, 0xb3, 0xec, 0xb9, 0x2f, 0xfb, 0x78, 0xc5,
+ 0xf8, 0x7b, 0x94, 0x7d, 0x97, 0x35, 0xff, 00, 0x6f, 0x1f,
+ 0x17, 0xbf, 0xec, 0xdf, 0xe3, 0x3b, 0x66, 0xc, 0x80, 0x12,
+ 0x39, 0x4, 0x4a, 0x3f, 0xc6, 0x88, 0xbe, 0x9, 0xfc, 0x40,
+ 0xb0, 0x25, 0xa2, 0xca, 0xb7, 0xb4, 0x88, 0x7f, 0x9d, 0x7d,
+ 0xa0, 00, 0xa3, 0x68, 0xf4, 0xa8, 0xff, 00, 0x53, 0x30,
+ 0x6b, 0xe1, 0xab, 0x35, 0xff, 00, 0x6f, 0x19, 0xff, 00,
+ 0xc4, 0x3e, 0xc0, 0x47, 0xe0, 0xad, 0x51, 0x7f, 0xdb, 0xc7,
+ 0xc6, 0x91, 0xf8, 0x2b, 0xe2, 0x95, 0x82, 0xe2, 0x39, 0xa5,
+ 0x45, 0xf4, 0x6, 0x3f, 0xf0, 0xa9, 0x52, 0xf, 0x8b, 0x96,
+ 0x3f, 0x72, 0xf6, 0xe1, 0x78, 0xc7, 0x1e, 0x57, 0xf8, 0x57,
+ 0xd8, 0xa5, 0x17, 0xb8, 0x14, 0xd3, 0x14, 0x67, 0xaa, 0x3,
+ 0xf8, 0x51, 0xfe, 0xa9, 0x28, 0xff, 00, 0xf, 0x15, 0x51,
+ 0x7c, 0xc6, 0xb8, 0x1a, 0x30, 0xfe, 0x1e, 0x36, 0xaa, 0xff,
+ 00, 0xb7, 0x8f, 0x90, 0x7, 0x88, 0x7e, 0x2f, 0xdb, 0xc,
+ 0x35, 0xf5, 0xc3, 0xe3, 0xfb, 0xc2, 0x2a, 0x90, 0x7c, 0x44,
+ 0xf8, 0xaf, 0x69, 0xf7, 0xdc, 0xbf, 0xfb, 0xca, 0xbf, 0xd0,
+ 0xd7, 0xd7, 0x26, 0xce, 0x16, 0xeb, 0x12, 0x1f, 0xc2, 0xa3,
+ 0x3a, 0x6d, 0xa3, 0xe7, 0x75, 0xbc, 0x67, 0xfe, 0x2, 0x29,
+ 0xff, 00, 0xab, 0x58, 0xb8, 0xfc, 0x18, 0xe9, 0xfd, 0xe3,
+ 0xff, 00, 0x53, 0xf1, 0xb1, 0xfe, 0x1e, 0x63, 0x53, 0xe6,
+ 0xdb, 0x3e, 0x4f, 0x5f, 0x8d, 0x1f, 0x13, 0x6d, 0x7e, 0xfd,
+ 0xad, 0xbb, 0xf7, 0xf9, 0x93, 0x3f, 0xc9, 0xaa, 0x55, 0xfd,
+ 0xa2, 0xbe, 0x21, 0xdb, 0xc, 0x3e, 0x97, 0x60, 0xff, 00,
+ 0xef, 0xc4, 0xff, 00, 0xd1, 0xeb, 0xea, 0x67, 0xd0, 0xb4,
+ 0xf6, 0xfb, 0xd6, 0x90, 0x9f, 0xf8, 00, 0xa8, 0x24, 0xf0,
+ 0xae, 0x95, 0x27, 0xde, 0xb0, 0x80, 0xff, 00, 0xc0, 0x5,
+ 0x3f, 0xec, 0x2c, 0xd6, 0x1f, 0x6, 0x3a, 0x5f, 0x31, 0xff,
+ 00, 0xab, 0x59, 0xd5, 0x3f, 0xe1, 0xe6, 0x52, 0xf9, 0xa3,
+ 0xe6, 0x31, 0xfb, 0x50, 0x78, 0xd9, 0x8, 0xdf, 0xa1, 0xd8,
+ 0x37, 0xae, 0x12, 0x41, 0xff, 00, 0xb3, 0x54, 0xb1, 0xfe,
+ 0xd5, 0xbe, 0x27, 0x8d, 0xbf, 0x7b, 0xe1, 0xcb, 0x46, 0xf5,
+ 0xda, 0xec, 0xbf, 0xe3, 0x5f, 0x48, 0x3f, 0x82, 0x34, 0x29,
+ 0x3e, 0xf6, 0x99, 0x6e, 0x7f, 0xe0, 0x2, 0xab, 0xc9, 0xf0,
+ 0xe3, 0xc3, 0x72, 0x7d, 0xed, 0x22, 0xd8, 0xff, 00, 0xc0,
+ 0x29, 0x3c, 0xa7, 0x3f, 0x5f, 0xe, 0x3b, 0xf0, 0x5f, 0xe4,
+ 0x4b, 0xc8, 0xb8, 0x9e, 0x3f, 0x6, 0x65, 0xf7, 0xc5, 0x7f,
+ 0x91, 0xe0, 0x3, 0xf6, 0xb9, 0xd6, 0x14, 0x9f, 0x33, 0xc2,
+ 0x90, 0x9f, 0xa5, 0xd1, 0x1f, 0xfb, 0x25, 0x4c, 0xbf, 0xb6,
+ 0x15, 0xe2, 0xfd, 0xff, 00, 0x8, 0x2e, 0x3d, 0xb5, 0xf,
+ 0xfe, 0xd7, 0x5e, 0xe1, 0x27, 0xc2, 0x8f, 0xa, 0xcb, 0xf7,
+ 0xb4, 0x5b, 0x63, 0xff, 00, 0x1, 0xaa, 0x33, 0xfc, 0x16,
+ 0xf0, 0x84, 0xe3, 0x7, 0x45, 0xb7, 0xff, 00, 0xbe, 0x6b,
+ 0x37, 0x96, 0xf1, 0x34, 0x7e, 0x1c, 0x64, 0x5f, 0xaa, 0x5f,
+ 0xfc, 0x89, 0x93, 0xca, 0x78, 0xc2, 0x3f, 0x6, 0x61, 0x17,
+ 0xeb, 0x15, 0xff, 00, 0xc8, 0x9e, 0x57, 0x63, 0xfb, 0x60,
+ 0xd9, 0xc9, 0x26, 0x2f, 0x34, 0x7, 0xb5, 0x4f, 0xef, 0x25,
+ 0xc9, 0x7f, 0xd3, 0x60, 0xae, 0x9a, 0xcb, 0xf6, 0xad, 0xf0,
+ 0x2c, 0xe1, 0x7e, 0xd1, 0x75, 0x73, 0x68, 0xc7, 0xae, 0xfb,
+ 0x77, 0x60, 0x3f, 0x10, 0x2b, 0x57, 0x50, 0xfd, 0x9c, 0xfc,
+ 0x23, 0x78, 0xa7, 0x6d, 0x84, 0x71, 0xe7, 0xfb, 0xb9, 0x1f,
+ 0xd6, 0xbc, 0xff, 00, 0x5f, 0xfd, 0x92, 0xac, 0xe6, 0x2e,
+ 0x6c, 0xa5, 0x8e, 0x20, 0x7e, 0xee, 0xf9, 0x1b, 0xfc, 0xd,
+ 0x45, 0xf8, 0xa7, 0xb, 0xbb, 0x85, 0x4f, 0x97, 0xf9, 0x58,
+ 0x94, 0xf8, 0xd3, 0x7, 0xf1, 0x3a, 0x75, 0x7e, 0x56, 0x7f,
+ 0x85, 0x8f, 0x65, 0xf0, 0xaf, 0xc4, 0xff, 00, 0xd, 0x78,
+ 0xca, 0x2f, 0x33, 0x4a, 0xd5, 0x23, 0xb8, 0x5f, 0xf6, 0xd5,
+ 0xa3, 0xff, 00, 0xd0, 0x80, 0xae, 0xa5, 0x64, 0xe, 0xa0,
+ 0x82, 0x8, 0x3d, 0xc1, 0xaf, 0x8c, 0x35, 0x6f, 0xd9, 0x47,
+ 0xc4, 0x56, 0x13, 0x79, 0xba, 0x7d, 0xf5, 0x90, 0x75, 0x39,
+ 0x56, 0x13, 0x3a, 0x90, 0x7d, 0xbe, 0x4a, 0x65, 0xb4, 0xbf,
+ 0x1a, 0xbe, 0x1c, 0xb6, 0xe8, 0x75, 0x99, 0x75, 0xb, 0x54,
+ 0xeb, 0xc, 0x8d, 0xe7, 0x82, 0x7, 0x60, 0x5d, 0x9, 0x1f,
+ 0x85, 0x7a, 0x14, 0x33, 0xcc, 0x75, 0x25, 0x6c, 0x76, 0x16,
+ 0x4b, 0xce, 0x3a, 0xa3, 0xd4, 0xc3, 0x71, 0x1e, 0x63, 0x45,
+ 0x5b, 0x32, 0xc1, 0x49, 0x79, 0xc7, 0x55, 0xf7, 0x1f, 0x69,
+ 0x86, 0xa7, 0x3, 0x8a, 0xf9, 0x87, 0x44, 0xfd, 0xb4, 0x2c,
+ 0xb4, 0x9b, 0x6f, 0x27, 0xc5, 0xfe, 0x1e, 0xd4, 0xed, 0x2f,
+ 0x81, 0xc1, 0x6b, 0x18, 0x55, 0xe3, 0xc7, 0xa9, 0x2c, 0xea,
+ 0x7f, 0x21, 0x5e, 0xdb, 0xe0, 0xf, 0x8a, 0xde, 0x1a, 0xf8,
+ 0x99, 0x63, 0xf6, 0x9d, 0x3, 0x53, 0x8a, 0xeb, 0x3, 0xe7,
+ 0x80, 0xb0, 0x59, 0x93, 0xfd, 0xe4, 0xea, 0x2b, 0xe8, 0xf0,
+ 0xb9, 0x9e, 0x13, 0x16, 0xf9, 0x69, 0x4f, 0x5e, 0xdb, 0x3f,
+ 0xb8, 0xfa, 0xcc, 0x1e, 0x6f, 0x82, 0xc7, 0xbe, 0x5a, 0x15,
+ 0x13, 0x97, 0x67, 0xa3, 0xfb, 0x99, 0xd9, 0x6e, 0xa3, 0x75,
+ 0x47, 0xbe, 0x80, 0xd5, 0xea, 0x1e, 0xc9, 0x26, 0x79, 0xa5,
+ 0xa6, 0xe7, 0x14, 0x64, 0xd0, 0x3, 0xa8, 0x1c, 0x1a, 0x40,
+ 0x73, 0x4b, 0x40, 0xe, 0xdd, 0x40, 0x39, 0xa6, 0xe6, 0x8c,
+ 0xe2, 0x80, 0x1f, 0x45, 0x37, 0x26, 0x9d, 0x40, 0x5, 0x14,
+ 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40,
+ 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x21,
+ 0xa5, 0xa6, 0x50, 0x1, 0x45, 0x14, 0xd2, 0x68, 0x1, 0xac,
+ 0x69, 0x28, 0x63, 0x4c, 0x26, 0x80, 0x1a, 0xe7, 0x2, 0xa2,
+ 0x62, 0x69, 0xce, 0x6a, 0x17, 0x6e, 0xb4, 00, 0xc7, 0x7a,
+ 0xab, 0x3c, 0xdb, 0x15, 0x98, 0xf4, 0x3, 0x9a, 0x91, 0xdb,
+ 0xad, 0x78, 0x47, 0xed, 0x61, 0xf1, 0x36, 0x2f, 0x5, 0xf8,
+ 0xe, 0x4d, 0x26, 0x19, 0x88, 0xd4, 0xf5, 0x85, 0x68, 0x22,
+ 0x11, 0xb8, 0xc, 0x89, 0xc6, 0xe6, 0xf5, 0x1d, 0x7a, 0x8a,
+ 0xe4, 0xc5, 0xe2, 0x23, 0x85, 0xa3, 0x2a, 0xd3, 0xd9, 0x2b,
+ 0x9c, 0x58, 0xdc, 0x54, 0x30, 0x58, 0x79, 0xd7, 0x9e, 0xd1,
+ 0x46, 0x47, 0xc3, 0x6f, 0x11, 0xbf, 0xc5, 0xdf, 0x89, 0xba,
+ 0x9f, 0x89, 0x58, 0xee, 0xd2, 0xec, 0xcf, 0x91, 0xa7, 0xa3,
+ 0x64, 0xed, 0x5e, 0x85, 0xb1, 0x92, 0x1, 0x38, 0xec, 0x6b,
+ 0xe9, 0x9d, 0x2b, 0x9, 0x1a, 0x8e, 0xb5, 0xe0, 0x1f, 0xb3,
+ 0x67, 0x86, 0x1b, 0x43, 0xf0, 0x45, 0x80, 0x74, 0xda, 0xf2,
+ 0x2e, 0xf3, 0xc7, 0x3d, 0x4d, 0x7d, 0x9, 0xa7, 0x47, 0x85,
+ 0x15, 0xc7, 0x95, 0xc2, 0x4b, 0xc, 0xa7, 0x53, 0xe2, 0x96,
+ 0xaf, 0xe6, 0x79, 0xf9, 0x2d, 0x39, 0xc7, 0x8, 0xaa, 0x55,
+ 0xf8, 0xa7, 0xef, 0x3f, 0x56, 0x5f, 0xa2, 0x8a, 0x2b, 0xd7,
+ 0x3d, 0xd0, 0xa2, 0x8a, 0x28, 0x1, 0x9, 0xc0, 0x24, 0xf4,
+ 0x15, 0xe0, 0xbf, 0xb4, 0xe7, 0xed, 0x9, 0x63, 0xf0, 0x97,
+ 0xc2, 0x17, 0x73, 0xc5, 0x31, 0x37, 0x4a, 0x8c, 0x7f, 0x76,
+ 0xc0, 0x11, 0xc1, 0xff, 00, 0x68, 0x7a, 0x57, 0xa3, 0xfc,
+ 0x59, 0xf1, 0xd5, 0xaf, 0x80, 0xbc, 0x11, 0xa9, 0x6a, 0x77,
+ 0x2e, 0xa9, 0xe5, 0xc4, 0x76, 0xe5, 0xc2, 0xf3, 0x8f, 0x5a,
+ 0xfc, 0x27, 0xfd, 0xa8, 0x7f, 0x68, 0xab, 0xdf, 0x88, 0x5a,
+ 0xd6, 0xa1, 0x1c, 0x57, 0x72, 0x49, 0xb, 0x4a, 0xca, 0x7,
+ 0x9a, 0x4a, 0xe3, 0x26, 0x80, 0x13, 0xf6, 0x85, 0xfd, 0xab,
+ 0xb5, 0x6f, 0x89, 0x5a, 0xcc, 0xa7, 0xed, 0x37, 0x4a, 0x87,
+ 0x70, 0x1b, 0xe4, 0x3e, 0xa7, 0xfd, 0xa3, 0x5f, 0x36, 0xdc,
+ 0x6a, 0x57, 0x37, 0x32, 0xb3, 0xbc, 0xf2, 0x12, 0xc7, 0x27,
+ 0x2e, 0x69, 0x16, 0x39, 0x6f, 0xa6, 0x3, 0x25, 0x9d, 0x8f,
+ 0x15, 0xd1, 0xc1, 0xf0, 0xdb, 0x57, 0x9e, 0xdc, 0x4c, 0xb0,
+ 0xbe, 0xc2, 0x33, 0x9d, 0x94, 0x1, 0xcb, 0x99, 0x64, 0x73,
+ 0xcb, 0xb1, 0xfa, 0x9a, 0xfa, 0x9f, 0xf6, 0x2f, 0xf0, 0x43,
+ 0x78, 0x87, 0xc7, 0xda, 0x34, 0x64, 0x67, 0xf7, 0xea, 0xc4,
+ 0x63, 0xaf, 0xcc, 0x3d, 0xab, 0xe6, 0x27, 0xd3, 0x65, 0xb6,
+ 0xbf, 0x5b, 0x67, 0x1f, 0x3e, 0xec, 0x60, 0x8a, 0xfd, 0x2c,
+ 0xff, 00, 0x82, 0x69, 0xfc, 0x3e, 0x7b, 0xff, 00, 0x18,
+ 0x5a, 0xde, 0x34, 0x79, 0x8e, 0x2, 0x18, 0x9f, 0x2f, 0x3d,
+ 0x30, 0x7a, 0xd0, 0x7, 0xe8, 0xb7, 0xc4, 0x3b, 0xc1, 0xe0,
+ 0x3f, 0x85, 0x1, 0x91, 0x8c, 0x9, 0x6b, 0x69, 0xd2, 0x33,
+ 0xb7, 0x90, 0x9f, 0x85, 0x7e, 0x42, 0xf8, 0xf3, 0xf6, 0xb3,
+ 0xd4, 0x1b, 0xc6, 0x3a, 0x97, 0x97, 0xa8, 0xdc, 0x4, 0x8e,
+ 0x67, 0x40, 0x4, 0xa7, 0xb1, 0x3f, 0xed, 0xd7, 0xeb, 0x1f,
+ 0xed, 0x6b, 0x30, 0x8b, 0xe1, 0x35, 0xf4, 0xa, 0x76, 0xb4,
+ 0x88, 0xcb, 0x80, 0x39, 0x23, 0x69, 0xaf, 0xc0, 0x2f, 0x8b,
+ 0xda, 0x7a, 0x69, 0x7e, 0x28, 0xb8, 0x8d, 0x7e, 0xf3, 0xbb,
+ 0x31, 0x20, 0x63, 0xb9, 0xcd, 00, 0x7e, 0x80, 0xfe, 0xc9,
+ 0xdf, 0x1e, 0x35, 0xf, 0x17, 0xf8, 0xa0, 0x99, 0x6f, 0xe7,
+ 0x9a, 0x35, 0x60, 0x36, 0xb4, 0xa4, 0x8e, 0x87, 0xde, 0xbf,
+ 0x55, 0x7c, 0x2d, 0x70, 0xd7, 0x7a, 0x25, 0xbc, 0xcd, 0x9c,
+ 0xb8, 0xcf, 0x35, 0xf8, 0x7d, 0xfb, 0x9, 0xdb, 0xb2, 0xeb,
+ 0xf6, 0xb0, 0xaf, 0x2d, 0x24, 0x80, 0x9f, 0x41, 0xd7, 0xad,
+ 0x7e, 0xe3, 0xf8, 0x7e, 0xd4, 0xd9, 0x68, 0xd6, 0x90, 0x9c,
+ 0xe5, 0x50, 0x3, 0x91, 0x8a, 00, 0xd0, 0x6e, 0x95, 0xe7,
+ 0x7f, 0x11, 0x75, 0x77, 0xb6, 0xb7, 0x70, 0xad, 0x83, 0x5e,
+ 0x81, 0x3b, 0x6c, 0x8d, 0x9b, 0xd0, 0x57, 0x8b, 0xfc, 0x49,
+ 0xbf, 0xf3, 0x64, 0xf2, 0xc1, 0xce, 0x5b, 0xfc, 0x6b, 0xe7,
+ 0x33, 0xda, 0xee, 0x86, 0x15, 0xd9, 0xee, 0x7c, 0x9f, 0x12,
+ 0xe2, 0x5e, 0x1f, 0x5, 0x2b, 0x3d, 0x59, 0xc6, 0x2e, 0xab,
+ 0x73, 0x92, 0x77, 0x75, 0xfa, 0xff, 00, 0x8d, 0x48, 0x35,
+ 0x9b, 0x91, 0xdf, 0xf5, 0x35, 0x54, 0xc, 0xa, 0x2b, 0xf2,
+ 0x25, 0x52, 0xa7, 0xf3, 0x33, 0xf0, 0x95, 0x56, 0xaf, 0xf3,
+ 0x32, 0xe2, 0xeb, 0x97, 00, 0x75, 0x3f, 0x99, 0xa7, 0xaf,
+ 0x88, 0x2e, 0x7, 0x73, 0xf9, 0x9a, 0xa1, 0x46, 0x2a, 0xbd,
+ 0xb5, 0x55, 0xb4, 0x8b, 0x58, 0x8a, 0xcb, 0xed, 0x33, 0x4c,
+ 0x78, 0x96, 0xe0, 0x7f, 0x7b, 0xf3, 0x34, 0xe5, 0xf1, 0x44,
+ 0xe3, 0xfb, 0xdf, 0x99, 0xac, 0xac, 0x51, 0x8a, 0xb5, 0x89,
+ 0xae, 0xbe, 0xd1, 0x6b, 0x17, 0x88, 0x5b, 0x4c, 0xd8, 0x5f,
+ 0x15, 0xcc, 0x3f, 0xbd, 0xf9, 0xff, 00, 0xf5, 0xea, 0x41,
+ 0xe2, 0xd9, 0x47, 0x76, 0xfc, 0xff, 00, 0xfa, 0xf5, 0x84,
+ 0x54, 0x1a, 0x36, 0x8f, 0x4a, 0xa5, 0x8b, 0xae, 0xbe, 0xd1,
+ 0x6b, 0x1d, 0x89, 0x5f, 0x6c, 0xe8, 0x47, 0x8c, 0x64, 0x1f,
+ 0xc4, 0xdf, 0x9f, 0xff, 00, 0x5e, 0xa5, 0x4f, 0x19, 0x38,
+ 0x3f, 0x78, 0xfe, 0x7f, 0xfd, 0x7a, 0xe6, 0x76, 0x8f, 0x4a,
+ 0x36, 0x8a, 0xb5, 0x8e, 0xc4, 0xaf, 0xb4, 0x6a, 0xb3, 0x1c,
+ 0x5a, 0xfb, 0x47, 0x56, 0x9e, 0x34, 0x60, 0x7e, 0xf3, 0x7e,
+ 0x7f, 0xfd, 0x7a, 0xb5, 0x17, 0x8e, 0x88, 0xc7, 0xcc, 0x7f,
+ 0x3f, 0xfe, 0xbd, 0x71, 0x3b, 0x5, 0x1e, 0x58, 0xad, 0x56,
+ 0x65, 0x89, 0x8f, 0x53, 0x68, 0xe6, 0xf8, 0xc8, 0xed, 0x23,
+ 0xd3, 0xf4, 0xef, 0x88, 0x8, 0xae, 0x32, 0x49, 0xfc, 0x7f,
+ 0xfa, 0xf5, 0xd6, 0xe9, 0xfe, 0x38, 0xb7, 0xb8, 00, 0x30,
+ 0x3f, 0x86, 0x3f, 0xc6, 0xbc, 0x11, 0x54, 0x29, 0xcf, 0x15,
+ 0x7a, 0xd7, 0x56, 0x6b, 0x43, 0xc6, 0x78, 0xf4, 0x35, 0xec,
+ 0x61, 0x78, 0x82, 0xbd, 0x2d, 0x27, 0xb1, 0xef, 0x60, 0xf8,
+ 0xa3, 0x13, 0x45, 0xda, 0xa6, 0xc7, 0xd1, 0x96, 0x5a, 0x94,
+ 0x57, 0xbf, 0x72, 0xad, 0xe6, 0xbc, 0x5b, 0xc3, 0x9e, 0x39,
+ 0x78, 0x1d, 0x54, 0x96, 0x1d, 0xba, 0xd7, 0xaa, 0x68, 0x5a,
+ 0xba, 0x6a, 0x76, 0xaa, 0xfb, 0x86, 0x48, 0xaf, 0xbe, 0xcb,
+ 0xf3, 0x3a, 0x58, 0xd8, 0xe8, 0xf5, 0x3f, 0x4e, 0xca, 0xf3,
+ 0x8a, 0x39, 0x84, 0x6c, 0x9f, 0xbc, 0x6b, 0xd1, 0x48, 0xd,
+ 0x2d, 0x7b, 0x67, 0xd1, 0x5, 0x21, 0x1d, 0xe9, 0x69, 0xd,
+ 00, 0x41, 0x75, 0x38, 0xb5, 0xb7, 0x79, 0x5b, 0xa2, 0x8c,
+ 0xd7, 0x1b, 0x37, 0x8e, 0x76, 0xcc, 0x40, 0x3c, 0x3, 0x8e,
+ 0xbf, 0xfd, 0x7a, 0xd6, 0xf1, 0xcd, 0xe1, 0xb3, 0xd0, 0x6e,
+ 0x58, 0x1c, 0x1d, 0x87, 0x1c, 0xe2, 0xbc, 0x5, 0xef, 0xae,
+ 0x19, 0xf3, 0xbc, 0xfe, 0x75, 0xf1, 0xb9, 0xde, 0x6b, 0x2c,
+ 0xd, 0x48, 0xd3, 0xa6, 0x7e, 0x7f, 0xc4, 0x59, 0xdc, 0xf2,
+ 0xea, 0xd0, 0xa5, 0x4f, 0xaa, 0xb9, 0xed, 0x2b, 0xe3, 0xa0,
+ 0x7f, 0xfd, 0x7f, 0xfd, 0x7a, 0x95, 0x7c, 0x72, 0xa7, 0xaf,
+ 0xf3, 0xff, 00, 0xeb, 0xd7, 0x89, 0xb, 0xfb, 0x81, 0xfc,
+ 0x44, 0xfe, 0x34, 0xf1, 0xa9, 0xdc, 0xe, 0xe7, 0xf3, 0xaf,
+ 0x9d, 0x5c, 0x47, 0x58, 0xf9, 0x58, 0xf1, 0x66, 0x21, 0x6e,
+ 0x7b, 0x7a, 0xf8, 0xe2, 0x3c, 0x74, 0xff, 00, 0x3f, 0x9d,
+ 0x48, 0xbe, 0x35, 0x88, 0xf5, 0x5c, 0xff, 00, 0x9f, 0xad,
+ 0x78, 0x77, 0xf6, 0xc5, 0xc0, 0xee, 0x7f, 0x3a, 0x72, 0xeb,
+ 0x77, 0x3, 0xb9, 0x3f, 0x8d, 0x6c, 0xb8, 0x96, 0xa2, 0xdc,
+ 0xe8, 0x8f, 0x17, 0x55, 0x5b, 0x9e, 0xe8, 0xbe, 0x33, 0x83,
+ 0xfb, 0x9f, 0xe7, 0xf3, 0xa9, 0x57, 0xc5, 0xd6, 0xe7, 0xf8,
+ 0x4f, 0xe7, 0x5e, 0x12, 0x3c, 0x41, 0x38, 0xf5, 0xfc, 0xe9,
+ 0xe3, 0xc4, 0x57, 0xb, 0xd8, 0xfe, 0x75, 0xb2, 0xe2, 0x69,
+ 0x75, 0xfc, 0x8d, 0xe3, 0xc6, 0x13, 0x5b, 0xfe, 0x47, 0xbb,
+ 0x8f, 0x15, 0xdb, 0x9e, 0xc7, 0xf3, 0xa7, 0xf, 0x13, 0xdb,
+ 0x13, 0xd0, 0xfe, 0x75, 0xe1, 0x23, 0xc4, 0xd3, 0xe, 0xc7,
+ 0xf3, 0xa7, 0x8f, 0x14, 0xcc, 0x3f, 0xbd, 0xff, 00, 0x7d,
+ 0x56, 0xab, 0x89, 0xbb, 0x9b, 0xae, 0x30, 0xef, 0xf9, 0x1e,
+ 0xee, 0xbe, 0x22, 0xb6, 0x6f, 0xff, 00, 0x58, 0xa9, 0x6,
+ 0xbb, 0x6c, 0x7b, 0xfe, 0xb5, 0xe1, 0xb, 0xe2, 0xb9, 0x3d,
+ 0x5b, 0xf3, 0xa9, 0x17, 0xc5, 0xce, 0xbd, 0xdb, 0xf3, 0xad,
+ 0x97, 0x13, 0x47, 0xaa, 0x37, 0x8f, 0x17, 0xc3, 0xaa, 0x3d,
+ 0xd9, 0x75, 0xab, 0x73, 0xfc, 0x42, 0x9e, 0x35, 0x5b, 0x7f,
+ 0xef, 0xd7, 0x85, 0x2f, 0x8c, 0x1b, 0xfb, 0xcc, 0x3f, 0xe0,
+ 0x55, 0x2a, 0xf8, 0xcc, 0xff, 00, 0x7c, 0xfe, 0x75, 0xb2,
+ 0xe2, 0x4a, 0x6f, 0xa1, 0xd1, 0x1e, 0x2e, 0xa5, 0xd5, 0x1e,
+ 0xe4, 0x35, 0x28, 0xf, 0xf1, 0x8a, 0x78, 0xbe, 0x84, 0xff,
+ 00, 0x18, 0xfc, 0xeb, 0xc3, 0x97, 0xc6, 0xb8, 0xff, 00,
+ 0x96, 0x84, 0x7f, 0xc0, 0xaa, 0x55, 0xf1, 0xbf, 0xfd, 0x35,
+ 0x3f, 0xf7, 0xd5, 0x6c, 0xb8, 0x8e, 0x8f, 0x53, 0x78, 0xf1,
+ 0x66, 0x1d, 0xee, 0x7b, 0x70, 0xbb, 0x88, 0xff, 00, 0x10,
+ 0xa7, 0x79, 0xe8, 0x7f, 0x8c, 0x57, 0x8a, 0x47, 0xe3, 0x8f,
+ 0xfa, 0x6a, 0x7f, 0xef, 0xaa, 0x98, 0x78, 0xeb, 0x8e, 0x24,
+ 0x3f, 0xf7, 0xd5, 0x6a, 0xb8, 0x87, 0xe, 0xf7, 0x37, 0x5c,
+ 0x53, 0x85, 0x67, 0xb3, 0xab, 0x6, 0xe8, 0x41, 0xfa, 0x53,
+ 0xab, 0x85, 0xf0, 0x7e, 0xb8, 0xda, 0x88, 0xdd, 0xb8, 0x90,
+ 0x7d, 0xeb, 0xb9, 0x1d, 0x2b, 0xe8, 0x30, 0xb8, 0x98, 0xe2,
+ 0xa9, 0xaa, 0x91, 0x3e, 0xa7, 0x7, 0x8b, 0x86, 0x32, 0x92,
+ 0xab, 0xd, 0x85, 0xa2, 0x8a, 0x2b, 0xb0, 0xee, 0xa, 0x28,
+ 0xa2, 0x80, 0xa, 0x28, 0xa4, 0xcd, 00, 0x2d, 0x15, 0x1b,
+ 0x4e, 0x89, 0xf7, 0x98, 0x2f, 0xd4, 0xd6, 0x7d, 0xee, 0xbf,
+ 0x6d, 0x68, 0xa4, 0xf9, 0x8a, 0x7f, 0xe0, 0x55, 0x9c, 0xea,
+ 0x42, 0xa, 0xf2, 0x66, 0x55, 0x2a, 0xc2, 0x92, 0xbc, 0xdd,
+ 0x8d, 0x3c, 0xd2, 0x71, 0x5c, 0x7c, 0xfe, 0x3e, 0xb6, 0x84,
+ 0xfa, 0xe3, 0xde, 0xb3, 0x6e, 0xbe, 0x29, 0x5b, 0xc7, 0xc0,
+ 0x1c, 0xfb, 0x1f, 0xfe, 0xb5, 0x79, 0xb3, 0xcd, 0x30, 0x94,
+ 0xfe, 0x29, 0x9e, 0x45, 0x4c, 0xeb, 0x3, 0x4b, 0xe2, 0xa8,
+ 0x8f, 0x42, 0xc8, 0xa3, 0x2b, 0x5e, 0x5c, 0xff, 00, 0x14,
+ 0xa1, 0x63, 0xd7, 0x1f, 0x56, 0xa5, 0x4f, 0x89, 0xb0, 0x13,
+ 0xcb, 0x7f, 0xe3, 0xd5, 0xca, 0xf3, 0xbc, 0x25, 0xed, 0xcc,
+ 0x71, 0x7f, 0xac, 0x79, 0x7d, 0xfe, 0x33, 0xd4, 0x73, 0x46,
+ 0x6b, 0xcc, 0xd3, 0xe2, 0x5d, 0xb1, 0xfe, 0x3f, 0xfc, 0x7a,
+ 0xaf, 0x5a, 0xfc, 0x48, 0xb4, 0x63, 0x82, 0xe3, 0xfe, 0xfa,
+ 0xad, 0xa3, 0x9b, 0xe1, 0x24, 0xed, 0xce, 0x6f, 0xc, 0xfb,
+ 0x3, 0x37, 0x65, 0x34, 0x77, 0xf4, 0x57, 0x37, 0x6d, 0xe3,
+ 0x9b, 0xb, 0x8c, 0x7c, 0xe0, 0x7e, 0x35, 0xa7, 0x6, 0xbb,
+ 0x69, 0x3f, 0xdd, 0x90, 0x67, 0xeb, 0x5e, 0x84, 0x31, 0x54,
+ 0x6a, 0x7c, 0x12, 0x4c, 0xf5, 0xa9, 0xe3, 0x30, 0xf5, 0x7e,
+ 0x9, 0xa6, 0x68, 0xd1, 0x4c, 0x49, 0x4, 0x8a, 0xa, 0xf2,
+ 0x29, 0xd9, 0xae, 0x9b, 0x9d, 0x82, 0xd1, 0x48, 0xd, 0x2d,
+ 0x30, 0xa, 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2, 0x80, 0xa,
+ 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2,
+ 0x80, 0xa, 0x29, 0x28, 0xa0, 0x5, 0xa2, 0x92, 0x82, 0x71,
+ 0x40, 0xb, 0x45, 0x34, 0xb6, 0x29, 0x72, 0x3d, 0x68, 0xb,
+ 0x8b, 0x45, 0x26, 0xe1, 0x46, 0xea, 00, 0x5a, 0x29, 0x37,
+ 0x52, 0x6e, 0xa0, 0x7, 0x51, 0x4d, 0xdd, 0x4b, 0x9a, 00,
+ 0x5a, 0x64, 0x8b, 0xb9, 0x69, 0xf4, 0x8d, 0xf7, 0x4d, 00,
+ 0x62, 0x5e, 0xc4, 0xa4, 0x1c, 0x81, 0x5c, 0xae, 0xaf, 0x65,
+ 0x1c, 0x81, 0x83, 0x28, 0x61, 0xe8, 0x45, 0x75, 0xd7, 0xfd,
+ 0xe, 0x2b, 0x9c, 0xd4, 0x30, 0x43, 0x52, 0xb2, 0x64, 0xb8,
+ 0xa7, 0xb9, 0xe4, 0x7e, 0x30, 0xf8, 0x77, 0xa3, 0x6b, 0x91,
+ 0xc8, 0x27, 0xb2, 0x83, 0x79, 0xfe, 0x31, 0x1a, 0xe7, 0xf9,
+ 0x57, 0x89, 0x6a, 0xbf, 0xa, 0xf5, 0xbf, 0x4, 0x5f, 0xb6,
+ 0xa9, 0xe1, 0x1d, 0x72, 0xe7, 0x4a, 0x9d, 0x48, 0x72, 0x90,
+ 0xc8, 0xc8, 0xaf, 0x8e, 0x81, 0x82, 0x81, 0xb8, 0x75, 0xe0,
+ 0xfa, 0xd7, 0xd3, 0x9a, 0xb4, 0x63, 0xe6, 0xae, 0x23, 0x59,
+ 0x88, 0x10, 0xdc, 0x57, 0x95, 0x88, 0xcb, 0x30, 0xd8, 0x87,
+ 0xcc, 0xe3, 0x69, 0x77, 0x5a, 0x33, 0xc5, 0xc5, 0x64, 0xf8,
+ 0x4c, 0x53, 0xe7, 0x70, 0xb4, 0xbb, 0xad, 0x1a, 0xf9, 0xa3,
+ 0x53, 0xe0, 0x57, 0xed, 0x27, 0xff, 00, 0x9, 0x6d, 0xfd,
+ 0xaf, 0x84, 0x7c, 0x4b, 0x69, 0x2d, 0xa7, 0x8a, 0x15, 0x8,
+ 0x13, 0xa8, 0x2, 0x1b, 0x8d, 0xa3, 0x92, 0x37, 0x36, 0xec,
+ 0xfe, 0x1e, 0xb5, 0xef, 0xe1, 0xab, 0xe1, 0x8f, 0x1a, 0xe9,
+ 0xb, 0x75, 0x19, 0x96, 0xde, 0x46, 0xb2, 0xbe, 0x89, 0x83,
+ 0xc1, 0x77, 0x9, 0x2b, 0x2c, 0x4c, 0xf, 0xc, 0xac, 0x30,
+ 0x41, 0xfa, 0x1a, 0xf6, 0x1f, 0x82, 0x3f, 0xb4, 0x62, 0xea,
+ 0x4f, 0x67, 0xe1, 0x8f, 0x16, 0x3a, 0xdb, 0xea, 0xaa, 0x8b,
+ 0x14, 0x3a, 0x94, 0xb3, 0xd, 0x97, 0x67, 0x80, 0x1, 0xc8,
+ 0xe1, 0xcf, 0xb9, 0x39, 0xf5, 0xad, 0xa8, 0x3a, 0x94, 0x7f,
+ 0x77, 0x59, 0xdd, 0x74, 0x7f, 0xe7, 0xe6, 0x74, 0x61, 0xdd,
+ 0x6c, 0x3a, 0xf6, 0x55, 0xdf, 0x37, 0x67, 0xfe, 0x7e, 0x67,
+ 0xd1, 0x1, 0xb3, 0x4b, 0x9a, 0x84, 0x3e, 0x71, 0x8a, 0x7e,
+ 0xea, 0xf4, 0xf, 0x50, 0x95, 0x4d, 0x2e, 0x7d, 0xea, 0x30,
+ 0x78, 0xa7, 0x29, 0x19, 0xa0, 0x9, 0x16, 0x96, 0x99, 0x9a,
+ 0x51, 0xd6, 0x80, 0x1d, 0x4b, 0x9f, 0x7a, 0x4c, 0xd1, 0x40,
+ 0xe, 0x1d, 0x29, 0x69, 0x99, 0xa7, 0x2d, 00, 0x2d, 0x14,
+ 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40,
+ 0x5, 0x14, 0x52, 0x1e, 0x94, 00, 0x99, 0xe2, 0x92, 0x8a,
+ 0x28, 00, 0x35, 0x1b, 0x74, 0xa7, 0xb5, 0x46, 0xc6, 0x80,
+ 0x10, 0xb0, 0xc5, 0x46, 0xcd, 0x4a, 0xd5, 0x13, 0x9c, 0x66,
+ 0x80, 0x1b, 0x23, 0x75, 0xaa, 0xf2, 0x36, 0x33, 0x4f, 0x76,
+ 0xe2, 0xab, 0xc8, 0xdd, 0x68, 0x2, 0x29, 0x5f, 00, 0xf3,
+ 0x5f, 0x5, 0xfe, 0xd1, 0x5a, 0xd5, 0xcf, 0x8f, 0x7f, 0x68,
+ 0x57, 0xd1, 0x5b, 0x1e, 0x46, 0x95, 0xb2, 0xd5, 0x14, 0xc,
+ 0x75, 0x1, 0xc9, 0xfa, 0xfc, 0xc3, 0xf2, 0xaf, 0xbb, 0x66,
+ 0x94, 0x20, 0x66, 0x62, 0x15, 0x40, 0xc9, 0x24, 0xf0, 0x2b,
+ 0xe1, 0xbf, 0x1, 0x45, 0xff, 00, 0xb, 0x7, 0xf6, 0x8c,
+ 0xf1, 0x6, 0xb0, 0x47, 0x9f, 0x1a, 0xde, 0x38, 0x2e, 0x40,
+ 0x1f, 0x74, 0x6c, 0xed, 0xfe, 0xe5, 0x7c, 0xa7, 0x10, 0x5e,
+ 0xac, 0x29, 0x61, 0xd7, 0xdb, 0x92, 0x5f, 0x23, 0xe2, 0x78,
+ 0xa1, 0x3a, 0xd4, 0xe8, 0x61, 0x62, 0xff, 00, 0x89, 0x34,
+ 0xbe, 0x47, 0xd8, 0xde, 0x4, 0xd2, 0x57, 0x4e, 0xd3, 0x2d,
+ 0xa0, 0x51, 0x80, 0x88, 0x5, 0x7a, 0x15, 0xaa, 0x6d, 0x5a,
+ 0xe6, 0xf4, 0xb, 0x7d, 0xb1, 0x20, 0xc5, 0x75, 0x31, 0x2e,
+ 0xd4, 0x2, 0xbe, 0xa2, 0x11, 0xe5, 0x8a, 0x8a, 0xe8, 0x7d,
+ 0x95, 0x38, 0xa8, 0x41, 0x45, 0x74, 0x1f, 0x45, 0x14, 0x55,
+ 0x9a, 0x5, 0x47, 0x34, 0xa2, 0x18, 0xd9, 0xdb, 0x85, 0x51,
+ 0x92, 0x6a, 0x4a, 0xe6, 0x3e, 0x22, 0xeb, 0x23, 0x42, 0xf0,
+ 0x96, 0xa1, 0x73, 0xbb, 0x61, 0x11, 0xf0, 0xde, 0x94, 0x1,
+ 0xf0, 0x77, 0xfc, 0x14, 0x3f, 0xf6, 0x80, 0x7d, 0x3b, 0xc1,
+ 0xd7, 0x9a, 0x4c, 0x13, 0x84, 0x32, 0x12, 0xa0, 0x1, 0xec,
+ 0x7f, 0xd9, 0xf7, 0xaf, 0xc7, 0xc9, 0x5a, 0x5d, 0x4e, 0xe4,
+ 0xb7, 0x2f, 0x23, 0xb1, 0x3d, 0x7b, 0x93, 0x5f, 0x52, 0xfe,
+ 0xdb, 0xfe, 0x3c, 0x9b, 0x5d, 0xf1, 0x2c, 0xb6, 0xc6, 0x66,
+ 0x60, 0x5c, 0x9c, 0x10, 0x3f, 0xc2, 0xbc, 0x8f, 0xe0, 0x5f,
+ 0x81, 0x8f, 0x8b, 0xbc, 0x4f, 0xa6, 0xdb, 0xf9, 0x3e, 0x68,
+ 0x96, 0xe1, 0x17, 0x6f, 0xaf, 0xcc, 0x28, 0x3, 0xe8, 0x4f,
+ 0xd9, 0x6b, 0xf6, 0x2a, 0x9f, 0xe2, 0x85, 0xb5, 0xae, 0xa1,
+ 0x71, 0x6b, 0x23, 0xa1, 0x61, 0xca, 0xb8, 0x3, 0xa0, 0xff,
+ 00, 0x68, 0x7a, 0xd7, 0xd2, 0x5f, 0x19, 0x7f, 0x65, 0x2b,
+ 0xf, 0x85, 0x3e, 0xb, 0xbd, 0xb9, 0x31, 0x1d, 0xd0, 0xc2,
+ 0x39, 0x66, 0xe3, 0xb7, 0xfb, 0x46, 0xbe, 0xe4, 0xfd, 0x9f,
+ 0x3e, 0x18, 0xd8, 0x7c, 0x3d, 0xf8, 0x73, 0xa5, 0x42, 0x96,
+ 0xe8, 0x93, 0x98, 0x83, 0xb1, 0x5c, 0xf1, 0xf2, 0x8e, 0x3f,
+ 0x4a, 0xf9, 0x37, 0xfe, 0xa, 0x3d, 0xf1, 0x23, 0xfb, 0x23,
+ 0xc1, 0x97, 0xf6, 0xa9, 0x3e, 0x1a, 0x4e, 0x2, 0xf1, 0x8e,
+ 0xa3, 0xaf, 0x14, 0x1, 0xf9, 0x24, 0x90, 0xd, 0x53, 0xc7,
+ 0x13, 0x84, 0x19, 0x41, 0x27, 0x6, 0xbf, 0x67, 0x3f, 0xe0,
+ 0x9b, 0xde, 0x2, 0xfe, 0xc6, 0xf0, 0x6c, 0xba, 0x9c, 0x91,
+ 0xec, 0x69, 0x14, 0xed, 0xe7, 0x3d, 0xc7, 0xbd, 0x7e, 0x3d,
+ 0xfc, 0x18, 0xd2, 0x9f, 0xc4, 0x3e, 0x30, 0xc6, 0x3, 0xbb,
+ 0x48, 0xb9, 0x3f, 0x52, 0x6b, 0xfa, 00, 0xfd, 0x98, 0x7c,
+ 0x28, 0x9e, 0x12, 0xf8, 0x53, 0xa6, 0x44, 0x63, 0x11, 0xb3,
+ 0xc6, 0x18, 0x9c, 0xf5, 0xa0, 0xe, 0x37, 0xf6, 0xc5, 0xd7,
+ 0x56, 0xd7, 0xc2, 0x33, 0x40, 0xc7, 0x2a, 0xb0, 0xb3, 0x10,
+ 0x3e, 0x8d, 0x5f, 0x83, 0x7f, 0x15, 0xf5, 0x31, 0xac, 0x78,
+ 0xea, 0xfe, 0x45, 0x70, 0xe8, 0x25, 0x65, 0x18, 0x18, 0x3,
+ 0xe6, 0x35, 0xfa, 0xe3, 0xfb, 0x7f, 0x7c, 0x48, 0x8b, 0x4f,
+ 0xd1, 0xb5, 0x18, 0xc4, 0xcd, 0xfe, 0xad, 0x94, 0x28, 0x3,
+ 0x9e, 0x1a, 0xbf, 0x1a, 0xae, 0x26, 0x3a, 0x86, 0xab, 0x34,
+ 0xa7, 0x96, 0x92, 0x46, 0x73, 0xf8, 0x9c, 0xd0, 0x7, 0xdd,
+ 0xff, 00, 0xf0, 0x4d, 0x8f, 0xd, 0xbe, 0xbf, 0xe3, 0xd8,
+ 0x5c, 0xa9, 0x31, 0xc0, 0xc8, 0x33, 0xd8, 0x70, 0xdc, 0xf5,
+ 0xe6, 0xbf, 0x6a, 0x14, 00, 0xa0, 0xe, 0x95, 0xf9, 0xa3,
+ 0xff, 00, 0x4, 0xaa, 0xf8, 0x78, 0x6d, 0x74, 0x9b, 0x8d,
+ 0x5e, 0x58, 0x40, 0x62, 0xc0, 0x86, 0x24, 0xf1, 0xf7, 0xbf,
+ 0x33, 0x5f, 0xa5, 0xdd, 0xa8, 0x2, 0x9e, 0xaf, 0x37, 0x93,
+ 0x66, 0xe7, 0xda, 0xbc, 0x7, 0xc5, 0xf7, 0x66, 0xeb, 0x53,
+ 0x61, 0x9c, 0x85, 0x27, 0x8a, 0xf6, 0xaf, 0x16, 0xde, 0xb,
+ 0x7b, 0x27, 0xfa, 0x57, 0x80, 0xdf, 0xcb, 0xe7, 0xdf, 0xca,
+ 0xfd, 0x7e, 0x63, 0x5f, 0x9d, 0xf1, 0x3d, 0x7b, 0xf2, 0xd2,
+ 0x4c, 0xfc, 0xa7, 0x8c, 0xb1, 0x3a, 0xc2, 0x8a, 0x21, 0xa2,
+ 0x8a, 0x2b, 0xe0, 0xf, 0xcc, 0x2, 0x8a, 0x28, 0xa0, 0x2,
+ 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28,
+ 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x82, 0x1, 0xa2, 0x8a,
+ 00, 0x54, 0x95, 0xa0, 0x39, 0x5e, 0x2b, 0xb9, 0xf0, 0x47,
+ 0x89, 0x25, 0x8a, 0x54, 0x49, 0x1f, 0xb, 0xf4, 0xae, 0x16,
+ 0xa6, 0xb3, 0x9d, 0xa0, 0x9d, 0x48, 0x62, 0x6, 0x7b, 0x57,
+ 0x6e, 0xf, 0x11, 0x2c, 0x2d, 0x55, 0x38, 0xb3, 0xd0, 0xc0,
+ 0x63, 0x27, 0x82, 0xad, 0x1a, 0x91, 0x67, 0xd2, 0xf6, 0x17,
+ 0x49, 0x77, 0x2, 0xba, 0x9c, 0xf1, 0x56, 0x6b, 0x8c, 0xf0,
+ 0x26, 0xaa, 0x2f, 0x2d, 0x95, 0x1, 0xc8, 00, 0x57, 0x64,
+ 0x39, 0xaf, 0xda, 0xf0, 0xb5, 0xd6, 0x22, 0x8c, 0x6a, 0x2e,
+ 0xa7, 0xf4, 0x3e, 0xb, 0x10, 0xb1, 0x54, 0x23, 0x55, 0x75,
+ 0x16, 0x90, 0xd2, 0xd3, 0x58, 0xe0, 0x57, 0x59, 0xdc, 0x70,
+ 0x5f, 0x14, 0x2e, 0xf6, 0x69, 0x72, 0xc7, 0x9e, 0xa3, 0xa5,
+ 0x78, 0xc5, 0x7a, 0x37, 0xc5, 0x2d, 0x43, 0x7c, 0xc2, 0x20,
+ 0x7e, 0xa0, 0x57, 0x9c, 0xd7, 0xe3, 0xf9, 0xf5, 0x6f, 0x6b,
+ 0x8c, 0x69, 0x74, 0x3f, 0x5, 0xe2, 0x6a, 0xfe, 0xdb, 0x30,
+ 0x95, 0xba, 0x68, 0x14, 0x51, 0x45, 0x7c, 0xe9, 0xf2, 0x81,
+ 0x8a, 0x28, 0xa2, 0x90, 0x5, 0x18, 0xa2, 0x8a, 00, 0x36,
+ 0x8a, 0x4d, 0xa3, 0xd2, 0x96, 0x8a, 0x34, 0x16, 0x82, 0x6d,
+ 0x1e, 0x94, 0x6c, 0x1e, 0x94, 0xb4, 0x51, 0x64, 0x16, 0x42,
+ 0x6c, 0x14, 0x6c, 0x5f, 0x4a, 0x5a, 0x29, 0x59, 0x5, 0x90,
+ 0x86, 0x35, 0x34, 0x9e, 0x58, 0xf5, 0xa7, 0x51, 0x47, 0x2a,
+ 0x15, 0x90, 0xdf, 0x2c, 0x53, 0x5a, 0x2c, 0xf4, 0x26, 0xa4,
+ 0xa9, 0x6d, 0x13, 0xcc, 0xbb, 0x85, 0x3a, 0xe5, 0x80, 0xc5,
+ 0x35, 0x14, 0xda, 0x43, 0x50, 0x4e, 0x49, 0x1e, 0xb7, 0xf0,
+ 0xe7, 0x4e, 0xf2, 0x6d, 0x90, 0x90, 0x6b, 0xd1, 0x6b, 0x9b,
+ 0xf0, 0x75, 0xa7, 0x93, 0x62, 0xa4, 0x8e, 0xd5, 0xd2, 0xd7,
+ 0xed, 0xf9, 0x6d, 0x2f, 0x63, 0x86, 0x8c, 0x4f, 0xe8, 0xcc,
+ 0x9e, 0x82, 0xc3, 0xe0, 0xe1, 0x5, 0xd8, 0x28, 0xa2, 0x8a,
+ 0xf5, 0xf, 0x68, 0x29, 0x29, 0x7, 0xad, 0x50, 0xd5, 0x75,
+ 0x58, 0xb4, 0xf8, 0x19, 0x99, 0xc0, 0x6c, 0x74, 0xa8, 0x9c,
+ 0xe3, 0x8, 0xb9, 0x4b, 0x64, 0x67, 0x52, 0xa4, 0x69, 0xc5,
+ 0xca, 0x6e, 0xc9, 0x16, 0xe6, 0x99, 0x6d, 0xd4, 0xb3, 0x1c,
+ 0x57, 0x3d, 0xaa, 0xf8, 0xca, 0xd6, 0xce, 0x36, 0x1, 0x86,
+ 0xef, 0xaf, 0xff, 00, 0x5a, 0xb8, 0x6f, 0x11, 0xfc, 0x44,
+ 0x79, 0x19, 0xa3, 0x47, 0x6c, 0x67, 0x1c, 0xa, 0xe1, 0xaf,
+ 0xf5, 0x49, 0x2f, 0x98, 0xb6, 0xe3, 0xcd, 0x7c, 0x56, 0x3f,
+ 0x88, 0xa1, 0x4e, 0xf0, 0xa1, 0xab, 0x3f, 0x3b, 0xcc, 0xf8,
+ 0xaa, 0x14, 0xaf, 0xc, 0x36, 0xac, 0xed, 0x75, 0x8f, 0x1d,
+ 0x4a, 0xe4, 0xf9, 0x4f, 0x8a, 0xe4, 0xaf, 0x3c, 0x4f, 0x7b,
+ 0x70, 0x4e, 0x5e, 0xb2, 0x40, 0x3d, 0xcd, 0x2d, 0x7c, 0x2e,
+ 0x23, 0x30, 0xc4, 0x62, 0x1d, 0xe5, 0x26, 0x7e, 0x6f, 0x89,
+ 0xcd, 0x71, 0x58, 0xa7, 0x79, 0x49, 0xa2, 0xc3, 0x6a, 0x97,
+ 0xf, 0xf7, 0x8d, 0x42, 0xd2, 0xb4, 0x87, 0x2d, 0x4d, 0xa2,
+ 0xbc, 0xf7, 0x29, 0x4b, 0x76, 0x79, 0x6e, 0x53, 0x97, 0xc4,
+ 0xee, 0x18, 0x14, 0x9b, 0x45, 0x2d, 0x15, 0x36, 0x44, 0xd8,
+ 0x4d, 0xb4, 0xe4, 0x25, 0xf, 0x4, 0x8a, 0x4a, 0x28, 0xb0,
+ 0x6d, 0xa9, 0x76, 0xdf, 0x53, 0x6b, 0x72, 0xe, 0xe3, 0xc5,
+ 0x6d, 0x69, 0xfe, 0x31, 0x6b, 0x77, 0x1f, 0x35, 0x73, 0x18,
+ 0x6, 0x80, 00, 0x3d, 0x2b, 0xae, 0x9e, 0x26, 0xb5, 0x1f,
+ 0x85, 0x9d, 0xb4, 0x71, 0xb5, 0xe8, 0x3b, 0xc1, 0x9e, 0xc5,
+ 0xa1, 0xf8, 0xf8, 0x4c, 0x8a, 0xa5, 0x86, 0x2b, 0xb5, 0xd3,
+ 0xf5, 0x15, 0xbe, 0x40, 0x46, 0x2b, 0xe6, 0xfb, 0x7d, 0x46,
+ 0x4b, 0x56, 0x1b, 0x7b, 0x57, 0x63, 0xe1, 0xbf, 0x18, 0xcd,
+ 0x13, 0x28, 0x66, 0x2a, 0x3f, 0xa, 0xfb, 0x4c, 0xb7, 0x88,
+ 0x1b, 0x6a, 0x15, 0x99, 0xfa, 0x1e, 0x53, 0xc5, 0xf, 0x99,
+ 0x53, 0xc4, 0x33, 0xdb, 0x47, 0x4a, 0x5a, 0xc5, 0xd1, 0x75,
+ 0xa8, 0xef, 0x62, 0x5c, 0xc9, 0x92, 0x6b, 0x60, 0x73, 0xcd,
+ 0x7e, 0x81, 0x4e, 0xac, 0x6a, 0xc7, 0x9a, 0x27, 0xea, 0x14,
+ 0xaa, 0xc2, 0xb4, 0x54, 0xe0, 0xf4, 0x1d, 0x45, 0x14, 0x56,
+ 0xa6, 0xc1, 0x45, 0x14, 0x50, 0x1, 0x45, 0x14, 0x50, 0x1,
+ 0x45, 0x14, 0x86, 0x80, 0x16, 0x8a, 0x8a, 0x59, 0x56, 0x24,
+ 0x2c, 0xe7, 00, 0x56, 0xe, 0xa7, 0xe2, 0xfb, 0x4b, 0x35,
+ 0x23, 0x7f, 0x22, 0xb0, 0xab, 0x5e, 0x9d, 0x15, 0x79, 0xbb,
+ 0x1c, 0xd5, 0xb1, 0x14, 0xb0, 0xea, 0xf5, 0x25, 0x63, 0xa0,
+ 0x67, 0x3, 0xa9, 0xc5, 0x50, 0xbe, 0xd5, 0xe2, 0xb2, 0x42,
+ 0x4b, 0x2, 0x45, 0x79, 0x9e, 0xad, 0xe3, 0xb6, 0x77, 0x6f,
+ 0x26, 0x43, 0x5c, 0x96, 0xa3, 0xe2, 0xbb, 0xcb, 0x96, 0x3f,
+ 0xbc, 0x62, 0x3f, 0xa, 0xf9, 0x6c, 0x57, 0x11, 0x51, 0xa5,
+ 0x75, 0x5, 0x76, 0x7c, 0x5e, 0x37, 0x8a, 0xb0, 0xf4, 0x13,
+ 0x8d, 0x35, 0x76, 0x7a, 0xec, 0xde, 0x3a, 0x86, 0x2c, 0xf4,
+ 0xaa, 0x13, 0xfc, 0x4a, 0x86, 0x3e, 0x32, 0x33, 0xf4, 0x35,
+ 0xe4, 0x7, 0x56, 0x9d, 0xc7, 0x24, 0x9a, 0x85, 0xee, 0x5d,
+ 0xfa, 0xe6, 0xbe, 0x6e, 0xa7, 0x12, 0x62, 0x1f, 0xc0, 0x7c,
+ 0x9d, 0x5e, 0x2d, 0xc4, 0xbf, 0x80, 0xf5, 0x79, 0xbe, 0x27,
+ 0xa1, 0x3f, 0x7c, 0xf, 0xc3, 0xff, 00, 0xad, 0x51, 0xaf,
+ 0xc4, 0x98, 0xcf, 0xf1, 0x8f, 0xf3, 0xf8, 0x57, 0x94, 0x75,
+ 0xa4, 0xdb, 0x5c, 0x8f, 0x3f, 0xc6, 0x37, 0x7b, 0x9e, 0x7b,
+ 0xe2, 0x7c, 0x7b, 0x77, 0xb9, 0xeb, 0xab, 0xf1, 0x1a, 0x1f,
+ 0xef, 0xff, 00, 0x3a, 0xb3, 0xf, 0xc4, 0x48, 0x1b, 0xab,
+ 0x8f, 0xd7, 0xfc, 0x2b, 0xc6, 0x76, 0xfb, 0xd2, 0x8c, 0x8e,
+ 0xe6, 0xaa, 0x3c, 0x43, 0x8b, 0x46, 0x91, 0xe2, 0x9c, 0x6c,
+ 0x5e, 0xb6, 0x3d, 0xe2, 0xd3, 0xc7, 0x36, 0x8f, 0xf7, 0x9c,
+ 0x67, 0xf1, 0xff, 00, 0xa, 0xd5, 0x83, 0xc4, 0xf6, 0x53,
+ 0x8e, 0x24, 0xc7, 0xe7, 0x5f, 0x3c, 0x45, 0x72, 0xf1, 0xff,
+ 00, 0x11, 0xad, 0xb, 0x6d, 0x75, 0xa0, 0xc6, 0x5d, 0x85,
+ 0x7a, 0x94, 0x38, 0x9a, 0xa2, 0xd2, 0x69, 0x1e, 0xce, 0x1f,
+ 0x8c, 0x2a, 0xad, 0x2a, 0x45, 0x1f, 0x41, 0xa6, 0xad, 0x6d,
+ 0x27, 0x49, 0x33, 0x56, 0x52, 0x55, 0x7e, 0x41, 0xcd, 0x78,
+ 0x4d, 0x9f, 0x8c, 0x4c, 0x4c, 0x33, 0x23, 0x7e, 0x55, 0xd8,
+ 0xe8, 0x5e, 0x3e, 0x85, 0x99, 0x55, 0x9f, 0x24, 0xfb, 0x57,
+ 0xd0, 0x61, 0x73, 0xda, 0x35, 0xdd, 0xa4, 0xec, 0x7d, 0x4e,
+ 0xb, 0x89, 0x70, 0xf8, 0x96, 0xa3, 0x36, 0x91, 0xe9, 0x35,
+ 0x14, 0xcf, 0xb5, 0x6a, 0xb5, 0x86, 0xa4, 0x97, 0xa8, 0x19,
+ 0x4f, 0x5a, 0x4b, 0xc9, 0xb1, 0x9e, 0x6b, 0xe9, 0xe3, 0x25,
+ 0x35, 0x74, 0x7d, 0x84, 0x27, 0x1a, 0x8b, 0x9a, 0x3b, 0x14,
+ 0x6f, 0x64, 0xe0, 0xf3, 0x5c, 0xee, 0xa1, 0x27, 0x5a, 0xd5,
+ 0xbc, 0x9f, 0xad, 0x73, 0xba, 0x84, 0xff, 00, 0x7b, 0x9a,
+ 0xa2, 0xcc, 0x5d, 0x4d, 0xf2, 0xd, 0x71, 0x9a, 0xae, 0xe,
+ 0x6b, 0xa7, 0xd4, 0x67, 0xe1, 0xb9, 0xae, 0x3b, 0x56, 0x9b,
+ 0x93, 0x40, 0x1c, 0x3f, 0x89, 0x63, 0x1e, 0x5c, 0x98, 0xaf,
+ 0x1c, 0xf1, 0x85, 0xc0, 0xb3, 0x63, 0x2a, 0x31, 0x8e, 0x64,
+ 0x3b, 0x91, 0xd4, 0xe0, 0xa9, 0x1d, 0x8, 0xf7, 0xaf, 0x5e,
+ 0xf1, 0x35, 0xc0, 0x4b, 0x69, 0x58, 0x9c, 0x60, 0x57, 0xce,
+ 0xdf, 0x11, 0x35, 0x8c, 0x34, 0x9f, 0x37, 0x1c, 0xff, 00,
+ 0x5a, 0xe4, 0xc4, 0xd5, 0x54, 0xe1, 0xa9, 0xc3, 0x8b, 0xad,
+ 0x1a, 0x50, 0x77, 0x3e, 0xbb, 0xfd, 0x95, 0x7f, 0x69, 0xe4,
+ 0xf1, 0xf7, 0xfc, 0x52, 0x7e, 0x22, 0xb8, 0x8d, 0x7c, 0x43,
+ 0x6e, 0xbf, 0xe8, 0xf2, 0x85, 0x23, 0xed, 0x51, 0x81, 0xce,
+ 0x40, 0x5d, 0xa0, 0x8e, 0xfc, 0xf3, 0x5f, 0x4f, 0x7, 0xe2,
+ 0xbf, 0xb, 0x67, 0xf1, 0xed, 0xf7, 0x84, 0xfc, 0x4b, 0x6b,
+ 0xaa, 0xe9, 0xb7, 0xf, 0x6f, 0x77, 0x6b, 0x20, 0x92, 0x39,
+ 0x13, 0x19, 0x1e, 0xa3, 0x9f, 0x6e, 0x3f, 0x1a, 0xfd, 0x62,
+ 0xfd, 0x97, 0x3e, 0x3b, 0xda, 0xfc, 0x68, 0xf8, 0x7d, 0x63,
+ 0x74, 0xf7, 0x46, 0x5d, 0x52, 0x34, 0xc4, 0xde, 0x66, 0xd5,
+ 0x67, 0xe4, 0x8c, 0xe0, 0x7d, 0xf, 0x1e, 0x83, 0x3d, 0xeb,
+ 0xc, 0x1e, 0x2a, 0x35, 0xd3, 0x8f, 0x54, 0x73, 0x60, 0x31,
+ 0x91, 0xc4, 0x27, 0x1b, 0xea, 0x8f, 0x71, 0xd, 0x4f, 0x56,
+ 0xe6, 0xa0, 0x57, 0xcd, 0x38, 0x35, 0x7a, 0x47, 0xae, 0x58,
+ 0xd, 0xcd, 0x3b, 0x75, 0x42, 0x8d, 0x4f, 0xdd, 0x40, 0x12,
+ 0x75, 0xa7, 0x8c, 0x54, 0x60, 0x80, 0x29, 0xca, 0x45, 00,
+ 0x3a, 0x8a, 0x4c, 0x8a, 0x5a, 00, 0x75, 0x2d, 0x34, 0x1c,
+ 0x52, 0xe7, 0x34, 00, 0xb4, 0x51, 0x45, 00, 0x14, 0x51,
+ 0x45, 00, 0x14, 0xd2, 0x69, 0xd4, 0xd3, 0xd6, 0x80, 0x12,
+ 0x90, 0x9a, 0x5a, 0x6b, 0x50, 0x2, 0x66, 0x98, 0x7a, 0x52,
+ 0x93, 0x83, 0x4d, 0x2c, 0x28, 0x1, 0x8c, 0x6a, 0x9, 0x1a,
+ 0xa4, 0x73, 0xc5, 0x57, 0x91, 0xa8, 0x2, 0x37, 0x35, 0x56,
+ 0x56, 0xa9, 0x9d, 0xb8, 0xaa, 0x93, 0x3f, 0x5a, 00, 0xe3,
+ 0x3e, 0x2f, 0x78, 0x9a, 0x3f, 0xa, 0x7c, 0x38, 0xf1, 0x16,
+ 0xa4, 0xed, 0xb4, 0xc7, 0x67, 0x22, 0x21, 0xc8, 0x18, 0x76,
+ 0x52, 0xab, 0xd4, 0x8e, 0xe4, 0x57, 0xce, 0x9f, 0xb1, 0xcf,
+ 0x87, 0xde, 0xe2, 0xc6, 0xfb, 0x59, 0x9d, 0x1, 0x96, 0xe6,
+ 0x5c, 0xee, 0xee, 0x4f, 0xcc, 0x4f, 0xf3, 0xae, 0x8b, 0xf6,
+ 0xdf, 0xf1, 0x7f, 0xd8, 0x3c, 0xb, 0xa7, 0xf8, 0x7e, 0x17,
+ 0xc4, 0xda, 0x95, 0xd2, 0xb4, 0xab, 0x9c, 0x66, 0x15, 0xc,
+ 0x73, 0x8c, 0xff, 00, 0x78, 0x2f, 0x51, 0x5d, 0x8f, 0xec,
+ 0xbd, 0xe1, 0xe5, 0xd3, 0x3e, 0x1a, 0x69, 0xd, 0xb1, 0x91,
+ 0xe5, 0x42, 0xec, 0x8, 0xc1, 0xce, 0xe2, 0x2b, 0xe5, 0x6a,
+ 0xc9, 0x62, 0xb3, 0x78, 0x53, 0x5b, 0x53, 0x8d, 0xfe, 0x6c,
+ 0xf8, 0x9a, 0xd2, 0x58, 0xcc, 0xf6, 0x14, 0xba, 0x52, 0x8d,
+ 0xfe, 0x6c, 0xf7, 0xad, 0x26, 0x1d, 0xa8, 0xbc, 0x56, 0xd8,
+ 0xe0, 0xa, 0xa3, 0x61, 0x16, 0xd5, 0x2, 0xaf, 0xd7, 0xd5,
+ 0x1f, 0x6c, 0x14, 0x51, 0x45, 00, 0x15, 0xe2, 0x1f, 0xb5,
+ 0x4f, 0x89, 0x7f, 0xb1, 0x3c, 0x9, 0x3c, 0x6a, 0xec, 0xac,
+ 0xc8, 0x58, 0xe3, 0xea, 0x2b, 0xdb, 0xeb, 0xe6, 0xf, 0xdb,
+ 0x62, 0x46, 0xb2, 0xf0, 0x6, 0xa3, 0x7d, 0x23, 0xf9, 0x69,
+ 0x1c, 0x58, 0x42, 0x7a, 0x13, 0xc5, 00, 0x7e, 0x21, 0xfc,
+ 0x7b, 0xd7, 0xce, 0xbb, 0xe3, 0xab, 0x9f, 0x9d, 0x9d, 0x55,
+ 0xba, 0xb1, 0xf5, 0xaf, 0x7d, 0xfd, 0x82, 0xbc, 0x37, 0x1e,
+ 0xbb, 0xf1, 0x2b, 0x44, 0xb7, 0x28, 0x19, 0x56, 0x78, 0xc9,
+ 0xff, 00, 0xbe, 0xd7, 0xf4, 0xaf, 0x94, 0x7c, 0x5d, 0x7a,
+ 0xfa, 0x87, 0x88, 0x6f, 0x2e, 0x9b, 0xab, 0xc8, 0x6b, 0xdb,
+ 0x3f, 0x65, 0x4f, 0x8a, 0xef, 0xf0, 0xeb, 0xc5, 0x10, 0x5d,
+ 0xf9, 0xd0, 0xc6, 0xe6, 0x55, 0xe6, 0x43, 0x82, 0x6, 0x47,
+ 0xb8, 0xf4, 0xa0, 0xf, 0xe8, 0x22, 0xe1, 0xe3, 0xd2, 0xbc,
+ 0x3a, 0x15, 0x70, 0xa9, 0x14, 0x21, 0x46, 0xd3, 0xd3, 0x8a,
+ 0xfc, 0x6f, 0xff, 00, 0x82, 0x99, 0x7c, 0x40, 0x37, 0xfa,
+ 0xcb, 0x69, 0x49, 0x31, 0x60, 0x64, 0x19, 0x40, 0x78, 0xe3,
+ 0x7, 0x9e, 0x7d, 0xab, 0xee, 0x1b, 0x3f, 0xdb, 0xf, 0xc3,
+ 0x77, 0x5e, 0x3, 0x48, 0xe6, 0xd4, 0xa0, 0x7b, 0x9f, 0x2b,
+ 0x73, 0xec, 0x91, 0x4f, 0x6f, 0xf7, 0xeb, 0xf2, 0x27, 0xf6,
+ 0xa9, 0xf8, 0x8f, 0xff, 00, 0xb, 0x13, 0xe2, 0x5d, 0xe4,
+ 0xf1, 0x48, 0xaf, 0x2, 0xb9, 0x20, 0xa9, 0xe0, 0x9c, 0xfd,
+ 0x4e, 0x68, 0x3, 0xb1, 0xfd, 0x88, 0x3c, 0x14, 0x7c, 0x4f,
+ 0xf1, 0x6, 0x15, 0x30, 0x89, 00, 0x74, 0x3c, 0x8e, 0x9f,
+ 0x7b, 0xda, 0xbf, 0x77, 0x2e, 0xee, 0xad, 0xfc, 0xd, 0xf0,
+ 0xec, 0xc8, 0xe4, 0x45, 0x1d, 0xad, 0xa7, 0x7e, 00, 0x21,
+ 0x7f, 0xa, 0xfc, 0x83, 0xff, 00, 0x82, 0x76, 0x6a, 0x5e,
+ 0x1b, 0xf0, 0xa7, 0x88, 0x6e, 0x6f, 0xf5, 0x9b, 0xa8, 0xed,
+ 0xd2, 0x25, 0x8d, 0x81, 0x91, 0xd4, 0x2, 0x7e, 0x7f, 0x5f,
+ 0xc2, 0xbd, 0x53, 0xf6, 0xbd, 0xfd, 0xbe, 0xef, 0x6f, 0x74,
+ 0xed, 0x43, 0x43, 0xd1, 0x2e, 0x6d, 0x24, 0xb3, 0x70, 0x50,
+ 0xb0, 0x2d, 0x92, 0x31, 0x8f, 0xe1, 0x92, 0x80, 0x3c, 0x7,
+ 0xf6, 0xde, 0xf8, 0xe0, 0x9e, 0x2f, 0xd5, 0xaf, 0xed, 0x2d,
+ 0xae, 0x9a, 0x44, 0x67, 0x28, 0x70, 0x41, 0xcf, 0x27, 0xdc,
+ 0xfa, 0xd7, 0xc9, 0x5e, 0x13, 0xd2, 0x65, 0xd6, 0x35, 0x78,
+ 0x21, 0x8d, 0x59, 0x8c, 0x8e, 0x13, 0xa, 0x33, 0x9c, 0x9a,
+ 0xaf, 0xae, 0x6b, 0xb7, 0x3e, 0x22, 0xbf, 0x92, 0xe2, 0xe0,
+ 0xe6, 0x49, 0x18, 0xb1, 0xe4, 0xf2, 0x49, 0xfa, 0xd7, 0xd6,
+ 0x7f, 0xb1, 0x97, 0xec, 0xf6, 0xde, 0x36, 0xf1, 0xe, 0x95,
+ 0x75, 0x71, 0x6d, 0x31, 0x42, 0xca, 0xf9, 0x1c, 0xe, 0xa3,
+ 0xfd, 0x9a, 00, 0xfd, 0x4a, 0xfd, 0x85, 0xfe, 0x1e, 0x8f,
+ 0x5, 0xfc, 0x24, 0xb3, 0x66, 0x81, 0x62, 0x79, 0x80, 0x6e,
+ 0x6, 0x3d, 0x7d, 0x87, 0xad, 0x7d, 0x29, 0x59, 0x1e, 0x10,
+ 0xd0, 0x61, 0xf0, 0xcf, 0x86, 0xec, 0x34, 0xdb, 0x75, 0xdb,
+ 0x1c, 0x11, 0x5, 0x3, 0xf9, 0xd6, 0xb3, 0x36, 0xd0, 0x4d,
+ 0x26, 0x7, 0x1, 0xf1, 0x26, 0xfc, 0x41, 0x6d, 0x22, 0xe7,
+ 0xb5, 0x78, 0xd8, 0x39, 0xc9, 0xf5, 0x39, 0xae, 0xf3, 0xe2,
+ 0x86, 0xa6, 0x65, 0xbd, 0x78, 0x81, 0x18, 0x27, 0x1c, 0x57,
+ 0x6, 0x6, 00, 0xaf, 0xc7, 0x73, 0xca, 0xfe, 0xdb, 0x18,
+ 0xd2, 0xe8, 0x7e, 0x5, 0xc4, 0x78, 0x8f, 0xac, 0x63, 0xe4,
+ 0x96, 0xd1, 0xd0, 0x28, 0xa2, 0x8a, 0xf9, 0xf3, 0xe5, 0xc2,
+ 0x8a, 0x28, 0xa6, 0x1, 0xf8, 0x66, 0x93, 0x77, 0xb1, 0xae,
+ 0x9f, 0x44, 0xf0, 0xa4, 0xda, 0x94, 0x4a, 0xea, 0x8d, 0x83,
+ 0xed, 0x5b, 0x7, 0xe1, 0xdd, 0xc7, 0xf7, 0x1b, 0xfc, 0xfe,
+ 0x15, 0xe9, 0xd3, 0xcb, 0x31, 0x35, 0x63, 0xcf, 0x18, 0xe8,
+ 0x7b, 0x34, 0x72, 0x8c, 0x5d, 0x78, 0x29, 0xc2, 0x1a, 0x1c,
+ 0x6, 0xef, 0x63, 0x46, 0xea, 0xef, 0x1b, 0xe1, 0xfd, 0xc0,
+ 0x1f, 0xea, 0x98, 0xfe, 0x1f, 0xfd, 0x6a, 0xcf, 0xbb, 0xf0,
+ 0x45, 0xdc, 0x59, 0xc4, 0x27, 0xf2, 0x3f, 0xe1, 0x44, 0xf2,
+ 0xcc, 0x54, 0x15, 0xdc, 0x42, 0x79, 0x36, 0x36, 0xa, 0xee,
+ 0xf, 0xee, 0x39, 0x4a, 0x2b, 0x4a, 0xe7, 0xc3, 0xd7, 0xd0,
+ 0x13, 0xfb, 0x9f, 0xe7, 0xfe, 0x15, 0x42, 0x4b, 0x79, 0x60,
+ 0x38, 0x91, 0x76, 0xd7, 0x4, 0xe9, 0x4e, 0x9f, 0xc7, 0x1b,
+ 0x1e, 0x5d, 0x4a, 0x35, 0x29, 0x69, 0x38, 0xb4, 0x32, 0x8a,
+ 0x28, 0xac, 0x8c, 0x82, 0x8a, 0x28, 0xa0, 0x2, 0x90, 0xf1,
+ 0x83, 0x4b, 0x41, 0xa1, 0x89, 0xec, 0x7a, 0x37, 0xc3, 0x9d,
+ 0x44, 0xc6, 0xc2, 0x31, 0x9c, 0x9a, 0xf5, 0xd4, 0x3f, 0x2e,
+ 0x7d, 0xab, 0xc3, 0xbe, 0x1d, 0x3e, 0xeb, 0xf0, 0xc7, 0xa0,
+ 0x38, 0xaf, 0x6f, 0x85, 0xb7, 0xc4, 0xa7, 0xd4, 0x57, 0xeb,
+ 0x3c, 0x3d, 0x37, 0x3c, 0x2e, 0xa7, 0xee, 0x3c, 0x2b, 0x55,
+ 0xd4, 0xc1, 0x59, 0xf4, 0x25, 0xa8, 0x6e, 0xe4, 0x10, 0xc0,
+ 0xec, 0x7a, 00, 0x6a, 0x45, 0x35, 0x8f, 0xe2, 0xab, 0xef,
+ 0xb1, 0xe9, 0x53, 0x36, 0x40, 0x3b, 0x4f, 0x5f, 0xa5, 0x7d,
+ 0x25, 0x69, 0xaa, 0x74, 0xe5, 0x37, 0xd0, 0xfa, 0xdc, 0x45,
+ 0x45, 0x4a, 0x94, 0xa6, 0xfa, 0x23, 0xc5, 0xfc, 0x73, 0x7b,
+ 0xf6, 0xad, 0x62, 0x4c, 0x1e, 0x7, 0xf8, 0xd7, 0x37, 0x56,
+ 0x35, 0x2b, 0xa3, 0x73, 0x7b, 0x2c, 0x84, 0xe7, 0x2c, 0x6a,
+ 0xb6, 0xe1, 0xeb, 0x5f, 0x85, 0x62, 0x6a, 0xfb, 0x6a, 0xd2,
+ 0x9f, 0x76, 0x7f, 0x36, 0x63, 0x2b, 0x7b, 0x7c, 0x44, 0xea,
+ 0x3e, 0xac, 0x5a, 0x28, 0xdc, 0x28, 0xc8, 0xae, 0x7b, 0xa3,
+ 0x92, 0xe8, 0x28, 0xa2, 0x8a, 0x2e, 0x17, 0xa, 0x28, 0xa2,
+ 0x81, 0x85, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5,
+ 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x5f, 0xf0,
+ 0xfc, 0x1f, 0x69, 0xd6, 0x6d, 0x97, 0x1d, 0x18, 0x55, 0x3,
+ 0xd2, 0xba, 0x7f, 0x87, 0xb6, 0x5f, 0x69, 0xd6, 0x15, 0x8e,
+ 0x4e, 0x8, 0xae, 0xbc, 0x24, 0x3d, 0xae, 0x22, 0x10, 0x5d,
+ 0xce, 0xec, 0xd, 0x2f, 0x6f, 0x8a, 0xa7, 0x5, 0xdd, 0x1e,
+ 0xdd, 0xa2, 0x42, 0x21, 0xb3, 0x51, 0x8c, 0x71, 0x5a, 0x35,
+ 0xd, 0xbc, 0x7e, 0x54, 0x48, 0xa2, 0xa6, 0xaf, 0xdd, 0x29,
+ 0xc7, 0x92, 0x2a, 0x28, 0xfe, 0x92, 0xa5, 0x1e, 0x48, 0x28,
+ 0x89, 0x46, 0x68, 0x6a, 0xe7, 0x7c, 0x49, 0xe2, 0x88, 0xb4,
+ 0x98, 0x5c, 0x2b, 0xa9, 0x71, 0x51, 0x5a, 0xb4, 0x28, 0x41,
+ 0xce, 0xa3, 0xb2, 0x22, 0xbd, 0x7a, 0x78, 0x68, 0x3a, 0x95,
+ 0x1d, 0x92, 0x2d, 0xeb, 0x1a, 0xf5, 0xbe, 0x95, 0x3, 0x33,
+ 0x38, 0x7, 0x1e, 0xa2, 0xbc, 0x7b, 0xc5, 0xbe, 0x2e, 0x9b,
+ 0x50, 0xb9, 0x22, 0x19, 0x4e, 0xca, 0xce, 0xd7, 0xfc, 0x57,
+ 0x73, 0xac, 0xb3, 0x7, 0x23, 0x67, 0xb7, 0xff, 00, 0xae,
+ 0xb0, 0xc7, 0xbf, 0x5a, 0xfc, 0xbf, 0x35, 0xce, 0xa7, 0x8b,
+ 0x7e, 0xca, 0x96, 0x91, 0x3f, 0x19, 0xce, 0xf8, 0x86, 0x78,
+ 0xe6, 0xe9, 0x50, 0x76, 0x80, 0xac, 0xed, 0x21, 0xcb, 0x9c,
+ 0x9a, 0x4a, 0x28, 0xaf, 0x93, 0x3e, 0x23, 0xcd, 0x85, 0x14,
+ 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40,
+ 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x83, 0x2,
+ 0x95, 0x25, 0x78, 0xdb, 0xe4, 0x6c, 0x52, 0x51, 0xd6, 0x8f,
+ 0x41, 0xea, 0xb5, 0x47, 0x5d, 0xe1, 0x6f, 0x11, 0xc9, 0x6f,
+ 0x32, 0x9, 0x25, 0x38, 0xcf, 0xad, 0x7b, 0x36, 0x8f, 0xaa,
+ 0x47, 0xa8, 0x5b, 0x29, 0x43, 0x92, 0x7, 0x35, 0xf3, 0x5a,
+ 0x37, 0x94, 0xe1, 0x87, 0x5a, 0xf4, 0x2f, 0x2, 0x78, 0xa6,
+ 0x58, 0xa7, 0x58, 0x49, 0x1, 0x3d, 0xeb, 0xed, 0x32, 0x3c,
+ 0xd5, 0xd2, 0x9a, 0xa3, 0x51, 0xe8, 0xcf, 0xd0, 0xb8, 0x73,
+ 0x3b, 0x74, 0x2a, 0x2a, 0x15, 0x9e, 0x8c, 0xf6, 0x3a, 0x5a,
+ 0x82, 0xde, 0x75, 0xb8, 0x8c, 0x30, 0x20, 0xfb, 0x8a, 0x98,
+ 0x57, 0xe9, 0xc9, 0xa6, 0xae, 0x8f, 0xd8, 0x93, 0x4d, 0x5d,
+ 0xb, 0x45, 0x14, 0x53, 0x18, 0x51, 0x45, 0x14, 00, 0x99,
+ 0xac, 0xfd, 0x53, 0x56, 0x87, 0x4f, 0x88, 0xb3, 0x38, 0x6,
+ 0xb3, 0x7c, 0x4d, 0xe2, 0x78, 0xb4, 0x68, 0x1f, 0xe6, 0x50,
+ 0xfe, 0xe6, 0xbc, 0x83, 0xc4, 0x1e, 0x31, 0xba, 0xd4, 0x65,
+ 0x3b, 0x1c, 0x14, 0xf6, 0xff, 00, 0xf5, 0xd7, 0xce, 0x66,
+ 0x79, 0xc5, 0x2c, 0xa, 0xe5, 0x5a, 0xc8, 0xf9, 0x3c, 0xdf,
+ 0x3e, 0xa1, 0x97, 0x45, 0xc1, 0x6b, 0x23, 0xa8, 0xf1, 0x17,
+ 0xc4, 0x5c, 0x97, 0x8d, 0x19, 0xb0, 0x38, 0xe3, 0xff, 00,
+ 0xd7, 0x5c, 0x1e, 0xa1, 0xac, 0x4d, 0x7a, 0xe5, 0xbc, 0xc6,
+ 0xe7, 0xde, 0xa8, 0x33, 0xb4, 0xa4, 0x97, 0xea, 0x69, 0x31,
+ 0x8a, 0xfc, 0xc7, 0x17, 0x98, 0xd7, 0xc5, 0xc9, 0xb9, 0xbd,
+ 0xf, 0xc7, 0x71, 0xb9, 0xae, 0x27, 0x1d, 0x2b, 0xd4, 0x7a,
+ 0x9, 0xf3, 0x93, 0xcb, 0x13, 0xf8, 0xd2, 0xe3, 0x34, 0x51,
+ 0x5e, 0x69, 0xe3, 0xd8, 0x30, 0x28, 0xa2, 0x8a, 0x6, 0x14,
+ 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x85, 0x73,
+ 0x4b, 0x45, 0x16, 0x15, 0x86, 0xf9, 0x62, 0xad, 0xe9, 0xe,
+ 0xc6, 0xf9, 0x15, 0x7f, 0x4a, 0xac, 0x6b, 0x7f, 0xc1, 0x1a,
+ 0x60, 0xbc, 0xd4, 0x37, 0x36, 0x48, 0x18, 0xae, 0x8c, 0x35,
+ 0x37, 0x56, 0xb4, 0x61, 0x1e, 0xe7, 0x56, 0x12, 0x94, 0xab,
+ 0x57, 0x84, 0x21, 0xdc, 0xf5, 0xbf, 0xa, 0xee, 0x5b, 0x65,
+ 0x27, 0x23, 0x8e, 0xf5, 0x6e, 0xf6, 0x72, 0x33, 0xcd, 0x4d,
+ 0xa7, 0xdb, 0x8b, 0x6b, 0x5e, 0x6, 0x38, 0xac, 0xfb, 0xe9,
+ 0x39, 0x3f, 0x5a, 0xfd, 0xc3, 0xb, 0x4d, 0xd3, 0xa4, 0xa2,
+ 0xcf, 0xe8, 0xec, 0x15, 0x27, 0x4a, 0x84, 0x62, 0xcc, 0xcb,
+ 0xdb, 0xa3, 0xcf, 0x35, 0xce, 0x6a, 0x17, 0x7d, 0x6b, 0x5e,
+ 0xf9, 0xf8, 0x6a, 0xe5, 0xb5, 0x39, 0x71, 0x9e, 0x6b, 0xac,
+ 0xee, 0x33, 0x35, 0xb, 0xb1, 0x86, 0xe4, 0xd7, 0x23, 0xaa,
+ 0x5d, 0x2f, 0x3c, 0xd6, 0xb6, 0xa9, 0x39, 0x50, 0xd8, 0xae,
+ 0x33, 0x57, 0xbb, 0x3c, 0xf4, 0xa0, 0xe, 0x63, 0xc6, 0xd7,
+ 0xa2, 0x1d, 0x36, 0x63, 0xbb, 0x92, 0x3d, 0x6b, 0xe5, 0x8f,
+ 0x89, 0x3a, 0xc1, 0x6, 0x41, 0xbc, 0xf4, 0xff, 00, 0x1a,
+ 0xf7, 0x7f, 0x88, 0xfa, 0xc3, 0x43, 0x63, 0x28, 0xc8, 0xe9,
+ 0x5f, 0x28, 0xf8, 0xf3, 0x57, 0x37, 0x17, 0x6c, 0xa0, 0x8f,
+ 0xf3, 0x9a, 0xf9, 0x7c, 0xde, 0xb5, 0xad, 0x14, 0x7c, 0x66,
+ 0x79, 0x5f, 0x97, 0xdd, 0x47, 0x9e, 0xeb, 0x53, 0x19, 0x64,
+ 0x76, 0x63, 0x92, 0x6b, 0xd9, 0x3f, 0x63, 0x3f, 0x8e, 0x57,
+ 0x3f, 0xd, 0x3e, 0x21, 0x26, 0x9a, 0xd7, 0x4d, 0xc, 0x17,
+ 0x52, 0x6, 0x81, 0xb, 0x62, 0x3d, 0xc0, 0x1c, 0xa9, 0xf9,
+ 0x86, 0x77, 0x70, 0x31, 0x5e, 0x25, 0xa9, 0xcb, 0x92, 0x6b,
+ 0x8f, 0xd4, 0x2f, 0x65, 0xb0, 0xba, 0x4b, 0x9b, 0x79, 0x1a,
+ 0x39, 0xa3, 0x6c, 0xa3, 0x21, 0xc1, 0x7, 0xea, 0x2b, 0xcf,
+ 0xcb, 0xa6, 0xe1, 0x35, 0x24, 0x79, 0x59, 0x4c, 0xdd, 0x3a,
+ 0x8a, 0x47, 0xf4, 0x51, 0xa0, 0xeb, 0x96, 0xfe, 0x20, 0xd2,
+ 0x2d, 0x75, 0xb, 0x57, 0xf, 0x4, 0xe8, 0x19, 0x79, 0x7,
+ 0x1e, 0xdd, 0x6b, 0x4d, 0x5f, 0x38, 0xaf, 0x92, 0xbf, 0x61,
+ 0x1f, 0x8d, 0x2d, 0xf1, 0x23, 0xc0, 0x16, 0xb1, 0x4f, 0x22,
+ 0x6f, 0x78, 0x7c, 0xcc, 0x2f, 0x18, 0x94, 0x1c, 0x48, 0xa0,
+ 0x6e, 0x3c, 0x64, 0x8f, 0xd6, 0xbe, 0xae, 0x8d, 0xeb, 0xee,
+ 0x13, 0xb9, 0xfa, 0x42, 0x77, 0x57, 0x2e, 0x2b, 0x75, 0xa9,
+ 0x14, 0xf0, 0x2a, 0xb2, 0xbf, 0xbd, 0x4a, 0xae, 0x4d, 00,
+ 0x4f, 0x9a, 0x72, 0x9a, 0x84, 0x31, 0x35, 0x22, 0x9f, 0x4a,
+ 00, 0x96, 0x9c, 0xe, 0x69, 0x82, 0x97, 0x38, 0xa0, 0x7,
+ 0x52, 0x83, 0x8a, 0x4a, 0x28, 0x1, 0xc3, 0x9a, 0x5a, 0x6e,
+ 0x69, 0xd4, 00, 0x51, 0x45, 0x14, 00, 0x87, 0xa5, 0x36,
+ 0x9c, 0x4e, 0x29, 0xb4, 00, 0x53, 0x18, 0xd3, 0xcf, 0x15,
+ 0x1b, 0x50, 0x3, 0x18, 0xd4, 0x6c, 0x69, 0xe7, 0xbd, 0x46,
+ 0xdd, 0x28, 0x1, 0x8f, 0xd2, 0xab, 0x48, 0x6a, 0x77, 0x35,
+ 0x5a, 0x53, 0x40, 0x10, 0x48, 0x70, 0xd, 0x53, 0x95, 0xaa,
+ 0xc4, 0xcd, 0xc5, 0x66, 0xdf, 0xdc, 0x8b, 0x5b, 0x69, 0xa6,
+ 0x6e, 0x56, 0x24, 0x67, 0x38, 0xf4, 0x3, 0x34, 0x6d, 0xab,
+ 0x7, 0xa1, 0xf0, 0xff, 00, 0xed, 0x67, 0xac, 0xb7, 0x8a,
+ 0xbe, 0x35, 0x58, 0x69, 0x31, 0x4d, 0xe7, 0x47, 0x61, 0xa,
+ 0xc1, 0xb1, 0xf, 0xa, 0xcc, 0xd9, 0x20, 0xfa, 0x9c, 0xe6,
+ 0xbe, 0xc4, 0xf8, 0x4b, 0xa2, 0x8d, 0x23, 0xc2, 0x5a, 0x65,
+ 0xb2, 0xa9, 0x51, 0x1c, 0x40, 0x60, 0x9f, 0x72, 0x6b, 0xe1,
+ 0x6f, 0x4, 0x8f, 0xf8, 0x59, 0x5f, 0x1f, 0x35, 0x3d, 0x55,
+ 0x23, 0xcd, 0xbd, 0xce, 0xa5, 0x3d, 0xca, 0x2b, 0x1f, 0xba,
+ 0x86, 0x46, 0x2a, 0x3f, 0x22, 0x2b, 0xf4, 0x4b, 0xc2, 0xf6,
+ 0xc2, 0x1b, 0x8, 0x54, 0xc, 0x6d, 0x5c, 0x57, 0xc6, 0x64,
+ 0x9f, 0xed, 0x18, 0xac, 0x46, 0x2d, 0xf5, 0x76, 0x5f, 0x23,
+ 0xe0, 0x38, 0x77, 0xfd, 0xab, 0x19, 0x8a, 0xc7, 0x3f, 0xb4,
+ 0xec, 0xbd, 0x11, 0xd3, 0x5a, 0xa6, 0xd5, 0xa9, 0xe9, 0xb1,
+ 0x8c, 0x20, 0xa7, 0x57, 0xd9, 0x9f, 0x7e, 0x14, 0x51, 0x45,
+ 00, 0x15, 0xf2, 0xd7, 0xed, 0xed, 0x1c, 0xf7, 0xbf, 0xc,
+ 0xe5, 0xb3, 0x82, 0x32, 0xc6, 0x44, 0x39, 0x20, 0x67, 0xb8,
+ 0xaf, 0xa9, 0x6b, 0xcc, 0xbe, 0x3c, 0xf8, 0x56, 0xdf, 0x5f,
+ 0xf0, 0x4d, 0xfb, 0x3c, 0x7b, 0xe6, 0x11, 0xe1, 0x48, 0x27,
+ 0x23, 0xa5, 00, 0x7f, 0x39, 0x3e, 0x3e, 0xd3, 0x8e, 0x99,
+ 0xaf, 0xdc, 0x5b, 0xec, 0x29, 0xb0, 0xf2, 0xf, 0x5a, 0xc4,
+ 0xb0, 0xbd, 0x92, 0xce, 0x75, 0x75, 0x90, 0xa6, 0x3d, 0xd,
+ 0x7b, 0x17, 0xed, 0x19, 0xe0, 0xb, 0xef, 0xe, 0x78, 0xb2,
+ 0xf6, 0x4b, 0x88, 0x84, 0x42, 0x49, 0x49, 0x55, 0xdc, 0x9,
+ 0x2, 0xbc, 0x51, 0x97, 0x69, 0xc1, 0xa0, 0xf, 0x42, 0xb6,
+ 0xf8, 0xa1, 0x7b, 0x6d, 0xa7, 0xbc, 0x2, 0xf6, 0x43, 0x95,
+ 0xdb, 0x8d, 0xcd, 0x5c, 0x35, 0xd5, 0xeb, 0xde, 0x5e, 0x3c,
+ 0xf2, 0xbe, 0xe6, 0x63, 0x9c, 0xd5, 0x5a, 0x28, 0x3, 0xb4,
+ 0xd0, 0x7c, 0x7b, 0x7d, 0xe1, 0xfb, 0x69, 0x16, 0xce, 0xf1,
+ 0xe0, 0x2e, 00, 0x3b, 0x9, 0x19, 0xae, 0x73, 0x54, 0xd7,
+ 0xef, 0x75, 0x79, 0x99, 0xee, 0xae, 0x24, 0x9b, 0x71, 0xc9,
+ 0x2c, 0x6b, 0x3a, 0xaf, 0x69, 0x7a, 0x2d, 0xde, 0xb1, 0x32,
+ 0xc5, 0x6b, 0x9, 0x91, 0xd8, 0xe0, 0x1, 0x81, 0xfc, 0xe8,
+ 0x3, 0x5f, 0xc0, 0xbe, 0x12, 0xb9, 0xf1, 0x56, 0xbf, 0x65,
+ 0x69, 0xc, 0x6c, 0xfe, 0x64, 0xca, 0xbf, 0x2e, 0x3d, 0x6b,
+ 0xf7, 0x27, 0xf6, 0x33, 0xf8, 0x3, 0x17, 0x82, 0xbc, 0x2d,
+ 0xa5, 0x5e, 0x5c, 0x5a, 0x3a, 0x37, 0x92, 0xad, 0x97, 0x23,
+ 0x9f, 0x94, 0x57, 0xc9, 0x5f, 0xb0, 0xaf, 0xec, 0x85, 0x2e,
+ 0xaa, 0x96, 0x1a, 0xee, 0xa5, 0x68, 0xb9, 0x49, 0x15, 0x81,
+ 0x66, 0xc6, 0x3e, 0xe9, 0xec, 0xd5, 0xfa, 0xc5, 0xa3, 0xe9,
+ 0xb1, 0x69, 0x1a, 0x75, 0xbd, 0xa4, 0x4a, 0x15, 0x21, 0x45,
+ 0x41, 0xf8, 0xc, 0x50, 0x5, 0xc0, 0x30, 0x2a, 0xbd, 0xec,
+ 0xbe, 0x4d, 0xbb, 0x9e, 0x9c, 0x55, 0x9a, 0xc7, 0xf1, 0x1d,
+ 0xc8, 0x86, 0xc1, 0xfe, 0x95, 0x8d, 0x59, 0x72, 0x41, 0xc8,
+ 0xe7, 0xc4, 0x4f, 0xd9, 0xd2, 0x94, 0xfb, 0x1e, 0x1d, 0xe3,
+ 0x6b, 0xbf, 0xb4, 0xeb, 0xb2, 0x8c, 0xe4, 0x29, 0xac, 0x2a,
+ 0xb9, 0xac, 0xc9, 0xe7, 0x6a, 0xb7, 0xf, 0xfe, 0xd5, 0x53,
+ 0xaf, 0xc2, 0xf1, 0x33, 0xf6, 0x95, 0xa7, 0x2e, 0xec, 0xfe,
+ 0x6c, 0xc5, 0xd4, 0x75, 0x71, 0x15, 0x26, 0xfa, 0xb6, 0x14,
+ 0x51, 0x45, 0x73, 0x1c, 0xa1, 0x52, 0x5b, 0xa7, 0x9b, 0x71,
+ 0x1a, 0x77, 0x66, 0x2, 0xa3, 0xab, 0xda, 0x14, 0x26, 0xe3,
+ 0x59, 0xb6, 0x41, 0xfd, 0xf0, 0x6b, 0x4a, 0x71, 0xe7, 0x9c,
+ 0x63, 0xdd, 0x9a, 0xd2, 0x8f, 0x3d, 0x48, 0xc7, 0xbb, 0x3d,
+ 0xb7, 0xc1, 0x5a, 0x78, 0x82, 0xc2, 0x3c, 0xaf, 0xf0, 0x8f,
+ 0xe5, 0x5d, 0x46, 0xd0, 0x47, 0x41, 0x54, 0x34, 0x48, 0x4,
+ 0x36, 0x68, 0x3d, 0xab, 0x44, 0xc, 0x57, 0xee, 0x78, 0x4a,
+ 0x6a, 0x95, 0x18, 0xc4, 0xfe, 0x91, 0xc0, 0xd1, 0x54, 0x70,
+ 0xf0, 0x82, 0xec, 0x33, 0xca, 0x53, 0xfc, 0x22, 0xa3, 0x92,
+ 0xd2, 0x29, 0x7, 0x28, 0x3f, 0x2a, 0x9e, 0x81, 0x5d, 0x6e,
+ 0x29, 0xee, 0x76, 0x38, 0xa7, 0xba, 0x30, 0x35, 0x1f, 0xd,
+ 0xc5, 0x70, 0xe, 0xd4, 0x15, 0xe6, 0xbe, 0x34, 0xf0, 0xa3,
+ 0x5a, 0x61, 0xc2, 0x90, 0xbd, 0x4d, 0x7b, 0x49, 0x15, 0xcd,
+ 0x78, 0xd2, 0xc3, 0xed, 0x7a, 0x79, 0x38, 0xe4, 0x3, 0x5f,
+ 0x3d, 0x9a, 0x65, 0xd4, 0xab, 0x51, 0x94, 0x92, 0xd4, 0xf9,
+ 0x8c, 0xe7, 0x29, 0xa3, 0x88, 0xc3, 0x4e, 0x49, 0x6a, 0x8f,
+ 00, 0x2a, 0x55, 0x88, 0xf4, 0xa4, 0xab, 0x9a, 0xa4, 0x22,
+ 0xde, 0xed, 0x90, 0x76, 0xeb, 0x54, 0xeb, 0xf2, 0x19, 0x47,
+ 0x92, 0x4e, 0x3d, 0x8f, 0xc1, 0xa5, 0xe, 0x49, 0xb8, 0xf6,
+ 0xa, 0x28, 0xa2, 0xa0, 0x90, 0xa4, 0x6e, 0x94, 0xb4, 0x87,
+ 0x92, 0x7, 0xa9, 0xa1, 0x89, 0x9d, 0xb7, 0xc3, 0xe8, 0x8,
+ 0x99, 0x70, 0x3a, 0x9a, 0xf6, 0xd8, 0x86, 0xd8, 0xd4, 0x77,
+ 0xc5, 0x79, 0x5f, 0xc3, 0x8b, 0x2d, 0xd2, 0xa9, 0xc7, 0x3,
+ 0x15, 0xea, 0xc3, 0x8a, 0xfd, 0x6f, 0x87, 0xe9, 0x72, 0x61,
+ 0x6e, 0xfa, 0x9f, 0xba, 0x70, 0xbd, 0x1f, 0x67, 0x82, 0xbb,
+ 0xea, 0x2e, 0x39, 0xac, 0x4f, 0x13, 0xe9, 0xa7, 0x50, 0xb1,
+ 0x68, 0xc0, 0xc9, 0x39, 0xad, 0xca, 0x6b, 0xa0, 0x71, 0xcf,
+ 0x35, 0xf4, 0x55, 0x69, 0xaa, 0xb0, 0x70, 0x7d, 0x4f, 0xab,
+ 0xad, 0x46, 0x35, 0xe9, 0xba, 0x72, 0xd9, 0x9e, 0x3f, 0x27,
+ 0xc3, 0x80, 0xcc, 0xc7, 0xcb, 0x6e, 0x7d, 0xea, 0x16, 0xf8,
+ 0x71, 0xe8, 0x8d, 0xf9, 0xd7, 0xb1, 0x1b, 0x68, 0xc9, 0xfb,
+ 0xb4, 0x1b, 0x58, 0xcf, 0xf0, 0xd7, 0xce, 0x3e, 0x1f, 0xc2,
+ 0xbe, 0x87, 0xc9, 0x3e, 0x17, 0xc1, 0xbf, 0xb2, 0x78, 0xb3,
+ 0xfc, 0x39, 0x61, 0xd1, 0x1f, 0xf3, 0xa8, 0x5b, 0xe1, 0xdc,
+ 0xa3, 0xf8, 0x64, 0xfc, 0xc5, 0x7b, 0x69, 0xb3, 0x8c, 0xf6,
+ 0xa4, 0x36, 0x11, 0x1e, 0xd5, 0x93, 0xe1, 0xdc, 0x33, 0xe8,
+ 0x60, 0xf8, 0x4f, 0x8, 0xfa, 0x1e, 0x1d, 0x27, 0xc3, 0xf9,
+ 0xd0, 0x13, 0x87, 0xe3, 0xe9, 0x58, 0x9a, 0x96, 0x92, 0xda,
+ 0x69, 0xc3, 0xe4, 0x1f, 0x7a, 0xfa, 0xe, 0xee, 0xc2, 0x3f,
+ 0x25, 0xb8, 0xe3, 0x1d, 0xeb, 0xc4, 0xbc, 0x75, 0x32, 0xff,
+ 00, 0x69, 0x18, 0xd4, 0xf4, 0x35, 0xf3, 0x79, 0xbe, 0x55,
+ 0x47, 0x3, 0x4b, 0x9e, 0x3b, 0xb3, 0xe4, 0xf3, 0xcc, 0x97,
+ 0xf, 0x96, 0x51, 0xf6, 0x90, 0xdd, 0x9c, 0xcd, 0x25, 0x14,
+ 0x57, 0xc7, 0x23, 0xe0, 0x42, 0x8a, 0x28, 0xa0, 0x3, 0xa5,
+ 0x4b, 0x1d, 0xb4, 0xb3, 0xfd, 0xc5, 0xcd, 0x42, 0xc7, 0xa0,
+ 0xf5, 0x38, 0xaf, 0x44, 0xf0, 0x4f, 0x87, 0x85, 0xda, 0x21,
+ 0x65, 0xc8, 0xe2, 0xbb, 0xb0, 0x78, 0x59, 0x63, 0x2a, 0xfb,
+ 0x38, 0x9e, 0x96, 0x5f, 0x82, 0x96, 0x3e, 0xb7, 0xb2, 0x89,
+ 0xc2, 0x9d, 0x2a, 0xf0, 0x7f, 0xcb, 0x13, 0x8f, 0xc2, 0x9a,
+ 0x74, 0xeb, 0xb1, 0xff, 00, 0x2c, 0x1b, 0xf4, 0xaf, 0x7a,
+ 0x3e, 0x13, 0x83, 0x3, 0x31, 0xe7, 0xf1, 0xa8, 0xdb, 0xc2,
+ 0x30, 0x1f, 0xf9, 0x67, 0xfa, 0xd7, 0xd4, 0x3e, 0x19, 0x9a,
+ 0xda, 0x47, 0xd9, 0x3e, 0xf, 0xab, 0xd2, 0x47, 0x83, 0x9b,
+ 0x3b, 0x85, 0xeb, 0xb, 0xa, 0x69, 0xb7, 0x9c, 0x7f, 0xcb,
+ 0x26, 0xaf, 0x75, 0x6f, 0x7, 0x40, 0x47, 0xfa, 0xbf, 0xd6,
+ 0xa2, 0x6f, 0x5, 0x40, 0xdf, 0xf2, 0xce, 0xb2, 0x7c, 0x37,
+ 0x5b, 0xa3, 0x30, 0x7c, 0x23, 0x5d, 0x6d, 0x23, 0xc3, 0x24,
+ 0x8a, 0x55, 0x1c, 0xc6, 0xdf, 0x95, 0x7a, 0x2f, 0xc2, 0xfd,
+ 0x3d, 0x95, 0xd6, 0x46, 0x42, 0x32, 0x73, 0xcd, 0x75, 0xf,
+ 0xe0, 0x68, 0x18, 0x8f, 0x93, 0xfc, 0xfe, 0x75, 0xd1, 0x68,
+ 0xda, 0x14, 0x5a, 0x6c, 0x60, 0x20, 0xc5, 0x77, 0xe5, 0xb9,
+ 0x15, 0x5c, 0x3e, 0x21, 0x54, 0x9b, 0xd1, 0x1e, 0xa6, 0x51,
+ 0xc3, 0x55, 0xb0, 0xb8, 0xa5, 0x5a, 0xa3, 0xba, 0x46, 0xaa,
+ 0xd0, 0x4d, 0x2e, 0x2a, 0xbd, 0xdd, 0xd2, 0x5a, 0x42, 0x5d,
+ 0xce, 00, 0x15, 0xfa, 0x13, 0x6a, 0x2a, 0xec, 0xfd, 0x4a,
+ 0x52, 0x51, 0x5c, 0xcc, 0xa1, 0xaf, 0x6b, 0x71, 0xe9, 0x36,
+ 0xe5, 0x8b, 00, 0xd5, 0xe1, 0xfe, 0x26, 0xf1, 0xc, 0xba,
+ 0x9d, 0xf4, 0x98, 0x7c, 0xae, 0x6b, 0x6b, 0xc7, 0xfe, 0x26,
+ 0x37, 0x57, 0x7e, 0x52, 0x31, 0xc6, 0x6b, 0x87, 0x1f, 0x78,
+ 0xb7, 0x73, 0x5f, 0x95, 0x67, 0x99, 0xa4, 0xb1, 0x35, 0x1d,
+ 0x1a, 0x6f, 0xdd, 0x47, 0xe2, 0xdc, 0x49, 0x9c, 0xcb, 0x17,
+ 0x55, 0xe1, 0xe9, 0x3f, 0x75, 00, 0xe9, 0x45, 0x14, 0x57,
+ 0xc9, 0x1f, 0xa, 0x14, 0x51, 0x45, 00, 0x14, 0x50, 0x78,
+ 0x15, 0x25, 0xbd, 0xbb, 0x5c, 0xb8, 0x45, 0x19, 0x26, 0x9a,
+ 0xbb, 0x76, 0x40, 0x93, 0x93, 0xb2, 0x23, 0x7, 0x26, 0x97,
+ 0xca, 0x90, 0xf2, 0x10, 0x9a, 0xea, 0x34, 0xbf, 0x3, 0x5d,
+ 0xdd, 0x61, 0xb0, 0x71, 0x5d, 0x65, 0xa7, 0x80, 0xa4, 0x8e,
+ 0x35, 0xc, 0x99, 0x38, 0xff, 00, 0x3d, 0xeb, 0xd8, 0xc3,
+ 0xe5, 0x38, 0x9a, 0xea, 0xee, 0x36, 0x47, 0xd0, 0x61, 0xb2,
+ 0x3c, 0x5e, 0x25, 0x73, 0x72, 0xd9, 0x1e, 0x55, 0xe5, 0x4c,
+ 0x3f, 0xe5, 0x99, 0xa4, 0x29, 0x2f, 0x75, 0x35, 0xec, 0xd,
+ 0xe0, 0x7e, 0x3e, 0xe1, 0xcd, 0x66, 0xde, 0xf8, 0x26, 0x42,
+ 0xe, 0xd8, 0xeb, 0xa6, 0x79, 0x16, 0x22, 0xa, 0xfa, 0x9d,
+ 0x75, 0x38, 0x6f, 0x15, 0x4d, 0x5c, 0xf3, 0x20, 0x8, 0xea,
+ 0x31, 0x45, 0x6f, 0xea, 0xde, 0x1a, 0xba, 0xb6, 0x62, 0x76,
+ 0x60, 0x56, 0x13, 0xc4, 0xf0, 0xb6, 0xd7, 0x18, 0x35, 0xe1,
+ 0xd5, 0xa3, 0x52, 0x8b, 0xb4, 0xd1, 0xf3, 0x75, 0xb0, 0xf5,
+ 0x70, 0xf2, 0xe5, 0x9a, 0xb0, 0xda, 0x28, 0xa2, 0xb1, 0x30,
+ 0xa, 0x28, 0xa2, 0x80, 0xa, 0xbb, 0xa4, 0xde, 0xb5, 0xa5,
+ 0xd2, 0x90, 0xd8, 0xc9, 0x15, 0x4a, 0x80, 0x76, 0xb8, 0x6f,
+ 0x4a, 0xa8, 0x4d, 0xd3, 0x92, 0x92, 0x2e, 0x13, 0x74, 0xe4,
+ 0xa6, 0xba, 0x1f, 0x41, 0xf8, 0x32, 0xfc, 0x5e, 0xe9, 0xcb,
+ 0xf3, 0x65, 0x86, 0x33, 0x5d, 0x10, 0x18, 0xaf, 0x36, 0xf8,
+ 0x57, 0xa9, 0x6f, 0xb6, 0x64, 0x27, 0xa9, 0xaf, 0x49, 0xaf,
+ 0xdb, 0x32, 0xca, 0xff, 00, 0x58, 0xc2, 0xc2, 0x67, 0xf4,
+ 0x46, 0x4f, 0x88, 0xfa, 0xce, 0xa, 0x9c, 0xfc, 0x85, 0xa2,
+ 0x8a, 0x2b, 0xd5, 0x3d, 0xa1, 0xd, 0x54, 0xd4, 0x2f, 0xe3,
+ 0xb1, 0x85, 0x99, 0x98, 0x2, 0x5, 0x5a, 0x66, 0xda, 0x32,
+ 0x7a, 0x57, 0x97, 0x7c, 0x44, 0xf1, 0x19, 0x8e, 0x76, 0x81,
+ 0x1b, 0xa0, 0xaf, 0x37, 0x1f, 0x8b, 0x8e, 0xa, 0x8b, 0xa8,
+ 0xcf, 0x23, 0x34, 0xc7, 0xc7, 0x2f, 0xc3, 0xba, 0xb2, 0x39,
+ 0xf, 0x17, 0xf8, 0x8a, 0x4d, 0x4e, 0xf6, 0x75, 0xdd, 0x95,
+ 0xdd, 0xc5, 0x73, 0x6a, 0x30, 0x29, 0x5d, 0x8c, 0x8e, 0xce,
+ 0xc7, 0x24, 0x9c, 0xd2, 0x57, 0xe2, 0xb5, 0xeb, 0x4b, 0x11,
+ 0x51, 0xd4, 0x9b, 0xdc, 0xfe, 0x7a, 0xc4, 0xe2, 0x27, 0x8a,
+ 0xaa, 0xea, 0xd4, 0x7a, 0xb0, 0xa2, 0x8a, 0x2b, 0x3, 0x98,
+ 0x28, 0xa2, 0x8a, 00, 0x28, 0xa3, 0xad, 0x1b, 0x5c, 0xf4,
+ 0x53, 0x40, 0x5, 0x14, 0x85, 0x64, 0xfe, 0xe9, 0xa4, 0x3b,
+ 0xc7, 0xf0, 0x9a, 0x57, 0xf2, 0x15, 0xfc, 0x87, 0x51, 0x4c,
+ 0xde, 0x47, 0x50, 0x7f, 0x2a, 0x5d, 0xfc, 0x51, 0x71, 0x5c,
+ 0x75, 0x14, 0x3, 0x9a, 0x29, 0x8c, 0x1b, 0x90, 0x6b, 0xd1,
+ 0x7e, 0x1a, 0x69, 0xe4, 0x27, 0x98, 0x57, 0x9e, 0xb5, 0xe7,
+ 0x68, 0xbb, 0xdc, 0x1, 0xde, 0xbd, 0xa7, 0xc0, 0x96, 0x2,
+ 0xdb, 0x4f, 0x53, 0x8e, 0xb5, 0xf4, 0x79, 0xd, 0xf, 0x6b,
+ 0x8a, 0x4d, 0xf4, 0x3e, 0xb7, 0x86, 0x70, 0xfe, 0xdb, 0x1b,
+ 0xcc, 0xfa, 0x1d, 0x44, 0x9f, 0x24, 00, 0x7b, 0x56, 0xd,
+ 0xeb, 0xf5, 0xfa, 0xd6, 0xe5, 0xd9, 0xc2, 0x91, 0x9a, 0xe7,
+ 0x6f, 0x9f, 0x4, 0xfd, 0x6b, 0xf5, 0xf4, 0xac, 0x8f, 0xde,
+ 0x12, 0xb2, 0xb1, 0x89, 0xa8, 0xbe, 0x1, 0xae, 0x5b, 0x52,
+ 0x93, 0x83, 0x5d, 0xe, 0xa4, 0xfd, 0x6b, 0x95, 0xd4, 0xe4,
+ 0xeb, 0x4c, 0x67, 0x37, 0xab, 0xc9, 0xc1, 0xae, 0x1b, 0x58,
+ 0x97, 0x1b, 0xab, 0xad, 0xd6, 0x25, 0xeb, 0x5c, 0x2e, 0xb9,
+ 0x3e, 0xd4, 0x73, 0xed, 0x40, 0x6c, 0x78, 0xdf, 0xc5, 0x3b,
+ 0xfd, 0xb6, 0x97, 0x3, 0x77, 0x6a, 0xf9, 0x57, 0xc4, 0xd7,
+ 0x86, 0x5b, 0xd9, 0x9, 0x39, 0x3, 0xff, 00, 0xaf, 0x5f,
+ 0x43, 0xfc, 0x56, 0xd4, 0x3f, 0xd1, 0x2e, 0x79, 0x35, 0xf3,
+ 0x2e, 0xb5, 0x3f, 0x99, 0x34, 0x8d, 0xea, 0x6b, 0xe1, 0xb3,
+ 0x29, 0x73, 0xd5, 0xe5, 0x3f, 0x38, 0xcd, 0xe7, 0xcf, 0x59,
+ 0x23, 0x7, 0x50, 0x9f, 0x83, 0xcd, 0x72, 0x1a, 0xd3, 0xe5,
+ 0x4f, 0xbd, 0x6f, 0x6a, 0x53, 0x63, 0x35, 0xce, 0x6a, 0x4d,
+ 0xbe, 0x33, 0x5a, 0xe1, 0x61, 0x66, 0x99, 0xae, 0xa, 0x1c,
+ 0xb6, 0x67, 0xdb, 0x5f, 0xf0, 0x4c, 0x4f, 0x1c, 0x3d, 0x86,
+ 0xaf, 0x71, 0x61, 0x2d, 0xcf, 0xee, 0xed, 0xee, 0xd7, 0x6c,
+ 0x44, 0x9f, 0xba, 0xe1, 0xf3, 0xfa, 0xed, 0xaf, 0xd6, 0x44,
+ 0x7e, 0x2b, 0xf1, 0xb, 0xfe, 0x9, 0xfd, 0x7c, 0xf6, 0xdf,
+ 0x14, 0x75, 0x18, 0x83, 0x60, 0x79, 0x29, 0x2e, 0x31, 0xdc,
+ 0x48, 0x83, 0x3f, 0xad, 0x7e, 0xd8, 0xd9, 0x4e, 0x65, 0xb5,
+ 0x85, 0xf3, 0x9d, 0xc8, 0x1b, 0x3f, 0x85, 0x7d, 0x85, 0x3f,
+ 0x85, 0x1f, 0x7b, 0x4d, 0xde, 0x8, 0xd4, 0x46, 0xe9, 0x53,
+ 0x21, 0x15, 0x4a, 0x37, 0xcf, 0x5a, 0xb3, 0x1b, 0x71, 0x5a,
+ 0x1a, 0x96, 0x57, 0x8a, 0x91, 0x4e, 0x4f, 0x5a, 0x85, 0x4d,
+ 0x3d, 0x4f, 0x14, 0x1, 0x3a, 0xf7, 0xa7, 0x8e, 0x95, 0xa,
+ 0x9f, 0x7a, 0x91, 0x48, 0xcd, 00, 0x48, 0x29, 0x69, 0xbd,
+ 0xe9, 0xd4, 00, 0xa3, 0xad, 0x3a, 0x99, 0x4e, 0x1d, 0x28,
+ 0x1, 0x68, 0xa2, 0x8a, 00, 0x6b, 0x52, 0x50, 0x68, 0xa0,
+ 0x4, 0x6a, 0x8d, 0xa9, 0xec, 0x79, 0xa8, 0xd8, 0xd0, 0x3,
+ 0x1a, 0xa3, 0x63, 0x8a, 0x7b, 0x54, 0x6d, 0xd2, 0x80, 0x21,
+ 0x73, 0xc5, 0x56, 0x90, 0xe7, 0x35, 0x62, 0x43, 0x55, 0x65,
+ 0x34, 0x1, 0x56, 0x73, 0x8a, 0xf3, 0x1f, 0xda, 0xb, 0xc4,
+ 0xf1, 0x78, 0x57, 0xe1, 0x2f, 0x88, 0xee, 0xde, 0x63, 0x4,
+ 0xd2, 0x5b, 0x3c, 0x16, 0xe7, 0xbb, 0x4a, 0xca, 0x76, 0x8f,
+ 0x6e, 0x86, 0xbd, 0x2e, 0x66, 0xe6, 0xbe, 0x55, 0xfd, 0xb9,
+ 0xfc, 0x47, 0xe5, 0x78, 0x6f, 0x42, 0xd0, 0x22, 0x95, 0x77,
+ 0x5d, 0x5d, 0x7d, 0xa2, 0x48, 0xc3, 0x7c, 0xc0, 0x28, 0x21,
+ 0x4e, 0x3d, 0x39, 0x35, 0xe5, 0xe6, 0x75, 0xfe, 0xad, 0x83,
+ 0xa9, 0x53, 0xc8, 0xf1, 0xb3, 0x8c, 0x4f, 0xd5, 0x30, 0x15,
+ 0x6a, 0xf6, 0x4f, 0xf1, 0xd0, 0xe3, 0x7f, 0x63, 0x9f, 0xc,
+ 0xfd, 0xa3, 0x55, 0xb8, 0xd4, 0x18, 0x13, 0xb1, 0x76, 0x83,
+ 0x8e, 0x33, 0xc5, 0x7d, 0xe1, 0xa3, 0x45, 0xb2, 0xdd, 0x31,
+ 0xe9, 0x5f, 0x35, 0x7e, 0xca, 0x3e, 0x1a, 0x3a, 0x5f, 0x82,
+ 0x6d, 0xa6, 0x65, 0x2a, 0xf3, 0xfc, 0xfd, 0x3b, 0x1c, 0x57,
+ 0xd4, 0x1a, 0x64, 0x7b, 0x61, 0x5a, 0xe2, 0xc8, 0xa8, 0x7b,
+ 0xc, 0xc, 0x2f, 0xbb, 0xd7, 0xef, 0x3c, 0xfe, 0x1a, 0xc3,
+ 0xfd, 0x5f, 0x2d, 0xa7, 0x7d, 0xe5, 0xaf, 0xdf, 0xa9, 0x7f,
+ 0xa5, 0x2d, 0x14, 0x57, 0xd0, 0x9f, 0x52, 0x14, 0x51, 0x45,
+ 00, 0x15, 0x53, 0x53, 0xb2, 0x5d, 0x42, 0xce, 0x58, 0x1b,
+ 0xa3, 0x8c, 0x55, 0xba, 0x28, 0x3, 0xf3, 0x43, 0xf6, 0xd8,
+ 0xfd, 0x94, 0xc6, 0xaa, 0x66, 0xd6, 0x9c, 0x49, 0xc9, 0x62,
+ 0x36, 0xe, 0xbc, 0x7f, 0xbd, 0x5f, 0x98, 0x3e, 0x38, 0xf8,
+ 0x7c, 0xde, 0x1a, 0xba, 0x91, 0x36, 0x4b, 0xf2, 0x93, 0xf7,
+ 0x94, 0xd7, 0xf4, 0x91, 0xe3, 0x3f, 0x3, 0xd9, 0xf8, 0xde,
+ 0xc3, 0xec, 0xb7, 0xa5, 0x96, 0x3f, 0xf6, 0x40, 0x3f, 0xce,
+ 0xbe, 0x66, 0xf8, 0x9f, 0xfb, 0x10, 0xf8, 0x77, 0x56, 0x57,
+ 0x92, 0x29, 0x65, 0x24, 0x8c, 0xe0, 0x46, 0x9f, 0xfc, 0x4d,
+ 00, 0x7e, 0xb, 0x32, 0x90, 0xc4, 0x60, 0xd2, 0xc6, 0xbb,
+ 0xdc, 0x2f, 0xad, 0x7e, 0xab, 0x78, 0x8f, 0xf6, 0x11, 0xb3,
+ 0x5b, 0x87, 0x11, 0x2c, 0xe4, 0xe, 0x9f, 0xba, 0x1f, 0xfc,
+ 0x45, 0x5e, 0xf0, 0x9f, 0xfc, 0x13, 0xa6, 0xc7, 0x54, 0x91,
+ 0x3c, 0xdc, 0xa6, 0x7a, 0xee, 0x88, 0x3, 0xff, 00, 0xa2,
+ 0xe8, 0x3, 0xf3, 0x43, 0xc0, 0xff, 00, 0xc, 0xaf, 0x3c,
+ 0x69, 0x7a, 0x20, 0xb7, 0x59, 0x33, 0xc7, 0x28, 0x9b, 0xab,
+ 0xf4, 0x17, 0xf6, 0x48, 0xfd, 0x86, 0x2e, 0xa0, 0xbb, 0x86,
+ 0xf7, 0x56, 0x8a, 0xe1, 0xd7, 0x70, 0x7d, 0xaf, 0x9, 0x5e,
+ 0xe3, 0xfd, 0xaa, 0xfa, 0xdb, 0xe1, 0x2f, 0xec, 0x21, 0xa2,
+ 0x7c, 0x3d, 0xbe, 0x5b, 0xcf, 0x3f, 0x73, 0xf0, 0x70, 0x15,
+ 0x7b, 0x7f, 0xc0, 0x5, 0x7d, 0x53, 0xa4, 0xe9, 0x50, 0xe8,
+ 0xf6, 0x8b, 0x4, 0x23, 0xe5, 0x51, 0x8e, 0x68, 0x3, 0x1f,
+ 0xc0, 0xbe, 0xd, 0xb3, 0xf0, 0x66, 0x85, 0x6f, 0x63, 0x6c,
+ 0x9b, 0x42, 0x28, 0xe7, 0xf0, 0xff, 00, 0xeb, 0x57, 0x4b,
+ 0x45, 0x14, 00, 0x57, 0x1b, 0xe3, 0xcb, 0xdf, 0x26, 0xc5,
+ 0xf9, 0xed, 0x5d, 0x83, 0x30, 0xa, 0x4d, 0x79, 0x57, 0xc4,
+ 0xad, 0x47, 0xfd, 0x1d, 0x90, 0x1c, 0x92, 0x71, 0x5e, 0x26,
+ 0x6f, 0x5b, 0xd8, 0xe1, 0x64, 0xcf, 0x9d, 0xcf, 0x71, 0x1f,
+ 0x57, 0xc1, 0x4d, 0xf9, 0x1e, 0x65, 0x23, 0xf9, 0x92, 0xbb,
+ 0x7a, 0x9a, 0x6d, 0x22, 0xf4, 0x14, 0xb5, 0xf8, 0xbd, 0xef,
+ 0xa9, 0xfc, 0xf9, 0x7b, 0xea, 0x14, 0x51, 0x45, 0x30, 0xa,
+ 0xe8, 0x7c, 0x7, 0x6b, 0xf6, 0x8d, 0x7a, 0x32, 0x47, 0xb,
+ 0x5c, 0xf1, 0xe9, 0x5d, 0xff, 00, 0xc2, 0xdb, 0x12, 0xd7,
+ 0x82, 0x5c, 0x1e, 0xb5, 0xe9, 0x65, 0x94, 0xfd, 0xae, 0x2e,
+ 0x11, 0xf3, 0x3d, 0x8c, 0xa2, 0x8f, 0xb6, 0xc7, 0x53, 0x8f,
+ 0x99, 0xec, 0x56, 0xc8, 0x12, 0x15, 0x3, 0xd2, 0xa5, 0xa6,
+ 0xaf, 0x2, 0x9d, 0x5f, 0xb7, 0xa5, 0x65, 0x63, 0xfa, 0x31,
+ 0x2b, 0x2b, 0x5, 0x14, 0x51, 0x4c, 0x61, 0x59, 0xda, 0xe6,
+ 0xd1, 0xa7, 0x4a, 0x5b, 0x9c, 0x29, 0xad, 0x1a, 0xe6, 0xfc,
+ 0x6d, 0x7b, 0xf6, 0x3d, 0x1e, 0x43, 0x90, 0x37, 0x2, 0x39,
+ 0xae, 0x5c, 0x54, 0xd5, 0x3a, 0x33, 0x93, 0xe8, 0x8e, 0x3c,
+ 0x65, 0x45, 0x4b, 0xf, 0x39, 0xcb, 0x64, 0x99, 0xe1, 0xda,
+ 0xe3, 0x6f, 0xd4, 0x25, 0x6f, 0xf6, 0x8d, 0x67, 0x55, 0x8b,
+ 0xd9, 0x7c, 0xd9, 0x98, 0xfb, 0x9a, 0xaf, 0x5f, 0x85, 0x55,
+ 0x7c, 0xd5, 0x24, 0xcf, 0xe6, 0xba, 0xd2, 0xe7, 0xab, 0x29,
+ 0x77, 0xa, 0x28, 0xa2, 0xb3, 0x32, 0xa, 0x92, 0xd9, 0x3c,
+ 0xcb, 0x94, 0x15, 0x1d, 0x69, 0xf8, 0x76, 0xd8, 0xdc, 0xdf,
+ 0xc, 0x74, 0xc8, 0xe9, 0x5a, 0x53, 0x87, 0xb4, 0xa9, 0x18,
+ 0xa3, 0x6a, 0x30, 0x75, 0x2a, 0x46, 0xb, 0xa9, 0xeb, 0xbf,
+ 0xf, 0x2c, 0x3c, 0xab, 0x53, 0x21, 0x1c, 0xf1, 0xda, 0xbb,
+ 0x40, 0x2b, 0x33, 0xc3, 0x96, 0xa2, 0xd7, 0x4e, 0x41, 0xdc,
+ 0x8a, 0xd5, 0xaf, 0xdc, 0x30, 0x34, 0x95, 0x1a, 0x11, 0x82,
+ 0x3f, 0xa3, 0x72, 0xea, 0x1f, 0x57, 0xc2, 0xc2, 0x1e, 0x41,
+ 0x45, 0x14, 0x57, 0x79, 0xe9, 0x5, 0x14, 0x51, 0x40, 0x5,
+ 0x14, 0x51, 0x40, 0x19, 0x7a, 0xed, 0xc7, 0x91, 0x61, 0x23,
+ 0x7a, 0x29, 0xaf, 0x9f, 0x35, 0xeb, 0x9f, 0xb5, 0x6a, 0xb3,
+ 0x3e, 0x73, 0xc9, 0x15, 0xed, 0x3e, 0x3b, 0xbd, 0x16, 0xfa,
+ 0x64, 0xbc, 0x8f, 0xba, 0x6b, 0xc2, 0x64, 0x7f, 0x32, 0x57,
+ 0x63, 0xdc, 0x9a, 0xfc, 0xd7, 0x89, 0xeb, 0x73, 0x54, 0x8d,
+ 0x24, 0x7e, 0x43, 0xc6, 0x58, 0x8e, 0x6a, 0xb0, 0xa2, 0xba,
+ 0xd, 0xa2, 0x8a, 0x2b, 0xe1, 0x8f, 0xce, 0x2, 0x8a, 0x28,
+ 0xa0, 0x7, 0xdb, 0x46, 0x66, 0xbb, 0x8d, 0x7b, 0x64, 0x57,
+ 0xb9, 0xf8, 0x16, 0xd3, 0xca, 0xb6, 0x7, 0xd8, 0x57, 0x8c,
+ 0xf8, 0x72, 0xf, 0xb4, 0xea, 0x4b, 0xc6, 0x71, 0x5e, 0xff,
+ 00, 0xe1, 0xbb, 0x6f, 0x22, 0xc5, 0x7d, 0xc0, 0xaf, 0xb8,
+ 0xe1, 0x8a, 0x1c, 0xd3, 0x75, 0x4f, 0xd1, 0xb8, 0x3b, 0xf,
+ 0xcf, 0x56, 0x55, 0x59, 0xaa, 0x6, 0x29, 0x71, 0x4b, 0x45,
+ 0x7e, 0x96, 0x7e, 0xbe, 0x26, 0x28, 0xc7, 0xb9, 0xa5, 0xa2,
+ 0x80, 0x1b, 0xc7, 0x7e, 0xb4, 0xa2, 0x96, 0x90, 0xd0, 00,
+ 0x48, 0x3, 0x26, 0xbc, 0xfb, 0xe2, 0x2f, 0x88, 0x85, 0xac,
+ 0x3e, 0x52, 0x10, 0x38, 0xf5, 0xae, 0xb7, 0x5f, 0xbf, 0x5b,
+ 0xb, 0x17, 0x72, 0x70, 0x71, 0x5e, 0x13, 0xe2, 0xdd, 0x54,
+ 0xea, 0x37, 0xc7, 0xb8, 0x15, 0xf2, 0x79, 0xf6, 0x3f, 0xea,
+ 0xd4, 0x1d, 0x38, 0xbd, 0x59, 0xf1, 0x1c, 0x4f, 0x99, 0xfd,
+ 0x53, 0xe, 0xe8, 0xc1, 0xfb, 0xcc, 0xc8, 0xb9, 0x99, 0xae,
+ 0x67, 0x2e, 0xdc, 0xd4, 0x74, 0x51, 0x5f, 0x94, 0xb6, 0xdb,
+ 0xbb, 0x3f, 0x12, 0x6d, 0xb6, 0xe4, 0xf7, 0xa, 0x28, 0xa2,
+ 0x90, 0x82, 0x8a, 0x2a, 0xc6, 0x9d, 0x68, 0xd7, 0xf7, 0x22,
+ 0x35, 0x4, 0xe7, 0xd0, 0x53, 0x49, 0xc9, 0xa8, 0xae, 0xa5,
+ 0x46, 0x2e, 0x72, 0x51, 0x8e, 0xec, 0x93, 0x4f, 0xd3, 0xe4,
+ 0xbe, 0x90, 0x2a, 0xa9, 0x3c, 0xf6, 0x15, 0xea, 0x7e, 0x16,
+ 0xf0, 0x24, 0x62, 0x14, 0x96, 0x41, 0x83, 0x56, 0x7c, 0xb,
+ 0xe1, 0x34, 0xb4, 0xb7, 0xdf, 0x30, 0x3b, 0x8e, 0x3a, 0x8a,
+ 0xee, 0xa3, 0x8c, 0x46, 0x81, 0x40, 0xe0, 0x57, 0xe9, 0x59,
+ 0x3e, 0x49, 0x1a, 0x71, 0x55, 0xab, 0xad, 0x4f, 0xd7, 0x32,
+ 0xe, 0x1d, 0x85, 0x28, 0x2c, 0x46, 0x21, 0x5d, 0xbe, 0x84,
+ 0x16, 0x76, 0x31, 0xda, 0x26, 0xd5, 0x15, 0x67, 0x2, 0x9d,
+ 0x45, 0x7d, 0xb4, 0x62, 0xa2, 0xac, 0x8f, 0xd1, 0x63, 0x15,
+ 0x5, 0xcb, 0x1d, 0x86, 0xe2, 0x82, 0xaa, 0x47, 0x23, 0x34,
+ 0xea, 0x29, 0xd8, 0x66, 0x1e, 0xb7, 0xa2, 0x2d, 0xf4, 0x47,
+ 0x6a, 0x8a, 0xf1, 0xff, 00, 0x15, 0x78, 0x71, 0xac, 0x66,
+ 0x77, 0x39, 0xc6, 0x6b, 0xde, 0x98, 0x67, 0x8e, 0xd5, 0xc8,
+ 0xf8, 0xd3, 0x44, 0x5b, 0x9b, 0x66, 0x6e, 0x78, 0x19, 0xc5,
+ 0x7c, 0xce, 0x71, 0x97, 0x47, 0x11, 0x49, 0xce, 0x2b, 0x54,
+ 0x7c, 0x7e, 0x7d, 0x94, 0xc3, 0x17, 0x45, 0xd4, 0x8a, 0xf7,
+ 0x91, 0xe1, 0x44, 0x60, 0xd2, 0x55, 0x9d, 0x42, 0x13, 0x5,
+ 0xdb, 0xa9, 0x4, 00, 0x71, 0x55, 0xab, 0xf2, 0x47, 0x17,
+ 0x16, 0xe2, 0xcf, 0xc3, 0x65, 0x17, 0x9, 0x38, 0xbe, 0x81,
+ 0x45, 0x14, 0x52, 0x24, 0x28, 0x23, 0x39, 0xa2, 0x8a, 0x1e,
+ 0xc0, 0x77, 0x7f, 0xc, 0xaf, 0xa, 0xdd, 0x94, 0xe8, 0x1,
+ 0xaf, 0x69, 0x8d, 0x83, 0x20, 0x23, 0xd2, 0xbe, 0x7f, 0xf0,
+ 0x34, 0xc6, 0x1d, 0x40, 0x1, 0xd5, 0x8d, 0x7b, 0xdd, 0x91,
+ 0xcd, 0xb4, 0x67, 0xda, 0xbf, 0x53, 0xe1, 0xaa, 0xbc, 0xf8,
+ 0x6e, 0x5e, 0xc7, 0xed, 0x3c, 0x23, 0x5b, 0x9f, 0x7, 0xc9,
+ 0xd8, 0x9e, 0x9b, 0x93, 0x4e, 0xa6, 0x9e, 0x73, 0x5f, 0x60,
+ 0x7d, 0xe1, 0x8d, 0xe2, 0x4d, 0x53, 0xfb, 0x3e, 0xd1, 0x8e,
+ 0x70, 0x48, 0xaf, 0x6, 0xf1, 0x6, 0xa2, 0xda, 0x86, 0xa5,
+ 0x23, 0x13, 0xd0, 0xd7, 0xa4, 0xfc, 0x46, 0xd5, 0x42, 0xb3,
+ 0x44, 0xf, 0x4c, 0xd7, 0x92, 0x33, 0x6f, 0x95, 0xdb, 0xd4,
+ 0xd7, 0xe5, 0xbc, 0x47, 0x8c, 0x75, 0x2a, 0xaa, 0x31, 0x7a,
+ 0x23, 0xf1, 0x8e, 0x2c, 0xc7, 0x3a, 0xd5, 0xd5, 0x4, 0xf4,
+ 0x41, 0x45, 0x14, 0x57, 0xc7, 0x1f, 0x2, 0x14, 0x51, 0x45,
+ 0x30, 0xa, 0x92, 0xde, 0xdd, 0xae, 0xdf, 0x62, 0xf5, 0xa4,
+ 0x89, 0xc, 0xb2, 0x4, 00, 0x92, 0x7d, 0x2b, 0xd1, 0xbc,
+ 0x9, 0xe0, 0xe1, 0x70, 0xcb, 0x34, 0x80, 0x81, 0xd7, 0x91,
+ 0x5d, 0xf8, 0x2c, 0x1d, 0x4c, 0x6d, 0x55, 0x4e, 0x8, 0xf5,
+ 0x32, 0xec, 0x5, 0x4c, 0xc2, 0xb2, 0xa5, 0x4, 0x73, 0xba,
+ 0x67, 0x82, 0xae, 0x6e, 0x48, 0x3f, 0x36, 0x3f, 0xdd, 0xae,
+ 0x8e, 0xdf, 0xc0, 0x92, 0x2a, 0x8d, 0xca, 0x7f, 0x2a, 0xf5,
+ 0x1b, 0x4b, 0x8, 0xec, 0xd0, 0x5, 0x15, 0x64, 0x28, 0xf4,
+ 0x19, 0xaf, 0xd1, 0xb0, 0xfc, 0x3d, 0x87, 0xa7, 0x1f, 0x7b,
+ 0x73, 0xf5, 0x8c, 0x37, 0xa, 0xe1, 0x69, 0x47, 0xde, 0xd5,
+ 0x9e, 0x60, 0x9e, 0x7, 0x3, 0xaa, 0x9f, 0xca, 0x91, 0xfc,
+ 0x10, 0x3f, 0xb8, 0x7f, 0xef, 0x9a, 0xf5, 0x1c, 0xf, 0x4a,
+ 0x4d, 0x8b, 0xe9, 0xfa, 0x57, 0x6f, 0xf6, 0x2e, 0x1b, 0xb1,
+ 0xe8, 0xff, 00, 0xab, 0xd8, 0x4b, 0x5a, 0xc7, 0x92, 0x5c,
+ 0x78, 0x2b, 0x1d, 0x11, 0xbf, 0x2a, 0xca, 0xbc, 0xf0, 0x8b,
+ 0xc4, 0x38, 0x46, 0xfc, 0xab, 0xdb, 0x8c, 0x48, 0xdf, 0xc3,
+ 0x9a, 0x89, 0xec, 0xe2, 0x7e, 0xa8, 0xd, 0x72, 0xd4, 0xc8,
+ 0x28, 0x4d, 0x68, 0x70, 0xd5, 0xe1, 0x8c, 0x3c, 0xfe, 0x13,
+ 0xe7, 0x4b, 0xdd, 0x16, 0xe2, 0x2, 0x7f, 0x74, 0xdf, 0x95,
+ 0x66, 0xbc, 0x33, 0x47, 0xc3, 0x21, 0x15, 0xf4, 0x46, 0xa3,
+ 0xe1, 0xc8, 0x27, 0x53, 0xb5, 0x39, 0xfa, 0x57, 0x15, 0xaf,
+ 0xf8, 0x35, 0xca, 0x37, 0x96, 0x8c, 0x3f, 0xe0, 0x35, 0xf2,
+ 0xd8, 0xce, 0x1e, 0xa9, 0x45, 0x39, 0x43, 0x53, 0xe3, 0x31,
+ 0xfc, 0x2d, 0x56, 0x85, 0xe5, 0x4d, 0xdc, 0xf3, 0x8d, 0x1e,
+ 0xdc, 0xdc, 0x5f, 0x44, 0x87, 0xd6, 0xbd, 0xf3, 0x43, 0xb6,
+ 0x16, 0xd6, 0x31, 0x28, 0xf4, 0xaf, 0x2d, 0xf0, 0xe7, 0x85,
+ 0xe7, 0x8f, 0x57, 0x52, 0xc0, 0x85, 0x53, 0xd3, 0x15, 0xec,
+ 0x28, 0xbe, 0x54, 0x20, 0x7a, 0xc, 0x57, 0xb1, 0xc3, 0x78,
+ 0x49, 0x52, 0x8c, 0xa7, 0x35, 0x66, 0x7b, 0xfc, 0x25, 0x81,
+ 0x95, 0x18, 0xce, 0xa5, 0x45, 0x66, 0x52, 0xbc, 0x7c, 0x66,
+ 0xb9, 0xcb, 0xf7, 0xeb, 0xf5, 0xad, 0xdb, 0xd7, 0xeb, 0x5c,
+ 0xe5, 0xfb, 0xfd, 0xea, 0xfb, 0xb3, 0xf4, 0xa3, 0x3, 0x52,
+ 0x93, 0xad, 0x72, 0x9a, 0x94, 0x9d, 0x6b, 0xa2, 0xd4, 0xa4,
+ 0xeb, 0x5c, 0xa6, 0xa7, 0x26, 0x3, 0x50, 0x7, 0x2f, 0xac,
+ 0xcb, 0xd6, 0xbc, 0xff, 00, 0xc4, 0xf7, 0x3e, 0x5d, 0xbc,
+ 0x84, 0x7a, 0x75, 0xae, 0xd3, 0x58, 0x97, 0xef, 0x73, 0x5e,
+ 0x67, 0xe3, 0x6b, 0xa0, 0x96, 0xad, 0xf3, 0x1, 0xc5, 0x44,
+ 0xdd, 0xa2, 0xd9, 0x9d, 0x47, 0xcb, 0x6, 0xcf, 0x9f, 0x7e,
+ 0x2b, 0xdf, 0x7f, 0xa3, 0x4e, 0x5, 0x7c, 0xf7, 0xa9, 0xcb,
+ 0x9d, 0xc6, 0xbd, 0x8b, 0xe2, 0x95, 0xee, 0xe8, 0xe5, 0x5c,
+ 0xd7, 0x8a, 0x6a, 0x72, 0x70, 0x45, 0x7c, 0xd, 0x77, 0xcf,
+ 0x5a, 0xe7, 0xe6, 0x18, 0x99, 0x7b, 0x4c, 0x49, 0xce, 0x6a,
+ 0x4f, 0xc9, 0xac, 0x3b, 0x93, 0x90, 0x45, 0x6a, 0x6a, 0xf,
+ 0x96, 0x35, 0x8f, 0x3b, 0x73, 0x5e, 0xb5, 0x5, 0x64, 0x7b,
+ 0xb8, 0x68, 0xd9, 0x23, 0xdf, 0xbf, 0x61, 0x1b, 0x76, 0xff,
+ 00, 0x85, 0xb1, 0xa9, 0x48, 0x9, 0x3, 0xec, 0x21, 0x78,
+ 0xf5, 0xf3, 0x52, 0xbf, 0x6b, 0xf4, 0x62, 0x57, 0x4c, 0xb3,
+ 0x52, 0x79, 0x10, 0x27, 0xfe, 0x82, 0x2b, 0xf2, 0x3, 0xfe,
+ 0x9, 0xf7, 0xa0, 0x3d, 0xef, 0x89, 0xb5, 0x5b, 0xc0, 0xa4,
+ 0x7e, 0xfa, 0x8, 0x41, 0xc7, 0x18, 0x2d, 0x93, 0xff, 00,
+ 0xa0, 0xd7, 0xec, 0x5, 0xa8, 0x11, 0xc4, 0x8a, 0xf, 0xdd,
+ 00, 0x57, 0xd2, 0xd2, 0xf8, 0x11, 0xf5, 0xf4, 0x3f, 0x86,
+ 0x8d, 0x48, 0x5e, 0xac, 0xa3, 0x73, 0x59, 0xf0, 0x9c, 0xd5,
+ 0xb4, 0x6a, 0xd8, 0xdc, 0xb9, 0x1b, 0xd4, 0xca, 0xd9, 0xaa,
+ 0xb1, 0x9c, 0xd4, 0xea, 0xdd, 0x28, 0x2, 0x75, 0x22, 0xa4,
+ 0x53, 0x50, 0xa1, 0xcd, 0x4c, 0xa7, 0x8a, 00, 0x90, 0x1a,
+ 0x55, 0xa6, 0xad, 0x2d, 00, 0x3e, 0x94, 0x75, 0xa4, 0xa5,
+ 0x14, 00, 0xea, 0x28, 0xa2, 0x80, 0x19, 0x45, 0x14, 0x87,
+ 0x8a, 00, 0x6b, 0x1e, 0x2a, 0x36, 0xa7, 0xb5, 0x46, 0x4d,
+ 00, 0x31, 0x8d, 0x46, 0xfc, 0xa, 0x7b, 0x54, 0x52, 0x1e,
+ 0x28, 0x2, 0x9, 0xd, 0x55, 0x94, 0xd4, 0xf2, 0x1a, 0xab,
+ 0x29, 0xa0, 0xa, 0xb3, 0x1a, 0xf8, 0x23, 0xf6, 0x95, 0xd7,
+ 0x1f, 0xc7, 0x5f, 0x1e, 0xa3, 0xd3, 0xed, 0xa4, 0x5b, 0xab,
+ 0x7b, 0x18, 0xa2, 0xb4, 0xb, 0x1, 0xdc, 0x37, 0xef, 0x62,
+ 0x7d, 0x79, 0xc3, 0xa, 0xfb, 0x9b, 0xc4, 0x3a, 0xa2, 0x68,
+ 0x9a, 0x35, 0xfe, 0xa1, 0x22, 0xee, 0x8e, 0xd2, 0x7, 0x9d,
+ 0x94, 0x1c, 0x64, 0x2a, 0x92, 0x7f, 0x95, 0x7c, 0xb, 0xf0,
+ 0x46, 0xc2, 0x4f, 0x1b, 0xfc, 0x61, 0xb8, 0xd4, 0x66, 0x3b,
+ 0xf7, 0x5d, 0x3c, 0xe4, 0x9e, 0x78, 0xdf, 0xc7, 0x5f, 0x6a,
+ 0xf9, 0xe, 0x21, 0x9b, 0xa9, 0x1a, 0x58, 0x48, 0xfd, 0xb9,
+ 0x2b, 0xfa, 0x23, 0xe0, 0xf8, 0xaa, 0xa3, 0xa9, 0xa, 0x18,
+ 0x18, 0xef, 0x52, 0x4a, 0xfe, 0x88, 0xfb, 0x7b, 0xe1, 0x36,
+ 0x80, 0x34, 0x4f, 0xc, 0xe9, 0xb6, 0xa2, 0x32, 0x9e, 0x5c,
+ 0x8, 0xa, 0x9e, 0xa0, 0xed, 0x15, 0xea, 0xf6, 0x69, 0x88,
+ 0x45, 0x73, 0x1e, 0x1d, 0xb6, 0x11, 0xc1, 0x18, 0x3, 0xf8,
+ 0x6b, 0xac, 0x88, 0x62, 0x35, 0xaf, 0xaa, 0xa5, 0x5, 0x4e,
+ 0x9c, 0x60, 0xba, 0x23, 0xed, 0x68, 0x53, 0x54, 0xa9, 0x46,
+ 0x9a, 0xd9, 0x21, 0xf4, 0x51, 0x45, 0x6a, 0x6e, 0x14, 0x51,
+ 0x45, 00, 0x14, 0x51, 0x5c, 0x3f, 0x8e, 0x3e, 0x2e, 0x68,
+ 0x9e, 0x4, 0x57, 0xfb, 0x73, 0xb1, 0x75, 0xfe, 0x15, 0xc7,
+ 0x34, 0x1, 0xdb, 0x34, 0x8a, 0x83, 0x2c, 0xc1, 0x7e, 0xa7,
+ 0x15, 0xc, 0xaf, 0x6d, 0x30, 0xc3, 0xbc, 0x6c, 0x3d, 0xc8,
+ 0x35, 0xf0, 0xa7, 0xc6, 0x3f, 0xdb, 0x66, 0xc2, 0x11, 0x22,
+ 0xe9, 0xad, 0x74, 0x84, 0x67, 0x95, 0x97, 0x3, 0xf4, 0x35,
+ 0xf3, 0x7e, 0xaf, 0xfb, 0x74, 0x6b, 0x30, 0xca, 0xe6, 0x2b,
+ 0x8b, 0xb2, 0x1, 0xef, 0x72, 0xff, 00, 0xe3, 0x40, 0x1f,
+ 0xad, 0x92, 0x68, 0xba, 0x4c, 0xcc, 0x4b, 0x45, 0xb, 0x37,
+ 0xe1, 0x56, 0xed, 0x34, 0xcb, 0x4b, 0x5e, 0x61, 0x89, 0x7,
+ 0xb8, 0x2, 0xbf, 0x20, 0xbc, 0x13, 0xfb, 0x6d, 0xf8, 0x97,
+ 0x5e, 0xd7, 0xe3, 0x80, 0xcb, 0x74, 0x54, 0xb6, 0xd1, 0xfe,
+ 0x96, 0xfc, 0x9c, 0xfd, 0x6b, 0xf5, 0x13, 0xe0, 0x76, 0xb3,
+ 0x77, 0xad, 0xf8, 0xa, 0xca, 0xfe, 0xf5, 0x9b, 0xcc, 0x95,
+ 0x3, 0x7c, 0xee, 0x58, 0xfe, 0x66, 0x80, 0x3d, 0x10, 0xc,
+ 0x52, 0xd6, 0x7b, 0xeb, 0xd6, 0x11, 0xc9, 0xe5, 0xbd, 0xca,
+ 0xab, 0xfa, 0x10, 0x6a, 0x68, 0x35, 0x1b, 0x7b, 0xa3, 0x88,
+ 0xa5, 0x57, 0xfa, 0x50, 0x5, 0xaa, 0x43, 0x4b, 0x49, 0x40,
+ 0x15, 0xef, 0x65, 0xf2, 0x6d, 0xdc, 0xe6, 0xbc, 0x2b, 0xc7,
+ 0x97, 0xe6, 0xe2, 0xff, 00, 0xcb, 0xc, 0x8, 0xce, 0x78,
+ 0xaf, 0x63, 0xf1, 0x3d, 0xcf, 0xd9, 0xec, 0x9b, 0x9c, 0x71,
+ 0x5f, 0x3f, 0x6a, 0xf7, 0x6, 0xe7, 0x51, 0x91, 0x89, 0x27,
+ 0x9a, 0xf8, 0x1e, 0x27, 0xc4, 0x5a, 0xa, 0x92, 0xea, 0x7e,
+ 0x61, 0xc6, 0x38, 0xae, 0x58, 0x46, 0x82, 0xea, 0x55, 0xe9,
+ 0x45, 0x14, 0x57, 0xe7, 0x47, 0xe5, 0x3b, 0x5, 0x14, 0x51,
+ 0x4c, 00, 0x8c, 0x8c, 0xe, 0xa6, 0xbd, 0x8f, 0xe1, 0xae,
+ 0x9d, 0xf6, 0x7b, 0x64, 0x72, 0xb8, 0x38, 0xaf, 0x24, 0xd3,
+ 0x62, 0xf3, 0xef, 0xe2, 0x4f, 0xf6, 0xab, 0xdf, 0xfc, 0x29,
+ 0x6e, 0xb0, 0x59, 0xa8, 0x3, 0x1c, 0x57, 0xd8, 0x70, 0xdd,
+ 0xe, 0x7a, 0xee, 0xa3, 0xe8, 0x7d, 0xef, 0x8, 0xe1, 0xbd,
+ 0xae, 0x29, 0xd6, 0x7d, 0xd, 0xe1, 0x4b, 0x48, 0x29, 0x6b,
+ 0xf5, 0x23, 0xf6, 0x80, 0xa4, 0xcd, 0x23, 0x38, 0x3, 0x93,
+ 0x50, 0xbd, 0xd4, 0x71, 0xa9, 0x25, 0x80, 0xa9, 0x6d, 0x2d,
+ 0xd9, 0x2e, 0x49, 0x6e, 0xc9, 0x5e, 0x40, 0x8a, 0x49, 0xe0,
+ 0xf, 0x5a, 0xf2, 0xdf, 0x8a, 0x5e, 0x20, 0x8e, 0x58, 0x63,
+ 0xb7, 0x8a, 0x40, 0xdc, 0x9e, 0x95, 0xb3, 0xe2, 0xef, 0x19,
+ 0x25, 0xa4, 0x2f, 0x1c, 0x64, 0xf4, 0xec, 0x6b, 0xc8, 0x35,
+ 0x2b, 0xf3, 0xa8, 0xcf, 0xbd, 0x89, 0x3d, 0x4f, 0x26, 0xbe,
+ 0x1b, 0x3e, 0xcd, 0xa2, 0xa9, 0xbc, 0x3d, 0x27, 0x76, 0xf7,
+ 0x3f, 0x38, 0xe2, 0x6c, 0xee, 0xa, 0x94, 0xb0, 0x94, 0x5d,
+ 0xdb, 0xdc, 0xaa, 0x4e, 0xee, 0x69, 0x28, 0xa2, 0xbf, 0x37,
+ 0x3f, 0x23, 0xa, 0x28, 0xa2, 0x80, 0xc, 0xd7, 0x79, 0xf0,
+ 0xe7, 0x44, 0x7b, 0xad, 0xb3, 0x18, 0xdb, 0x6e, 0x7a, 0xd7,
+ 0x17, 0xa7, 0xda, 0x9b, 0xcb, 0x8d, 0xa2, 0xbd, 0xeb, 0xc0,
+ 0xfa, 0x62, 0xe9, 0xfa, 0x14, 0xb, 0x81, 0xb8, 0x8c, 0xe7,
+ 0x15, 0xf4, 0xf9, 0x6, 0xf, 0xeb, 0x38, 0x8e, 0x79, 0x6c,
+ 0x8f, 0xb2, 0xe1, 0x8c, 0xbf, 0xeb, 0x98, 0xbf, 0x69, 0x2f,
+ 0x86, 0x26, 0xfd, 0xbc, 0x62, 0x28, 0x95, 00, 0xe0, 0xa,
+ 0x96, 0x90, 0x1, 0x4b, 0x5f, 0xad, 0xa5, 0x6d, 0x8f, 0xdc,
+ 0x92, 0xb2, 0xb2, 0xa, 0x28, 0xa2, 0x98, 0xc2, 0x8a, 0x28,
+ 0xa0, 0x4, 0x27, 0x14, 0x8c, 0xdb, 0x41, 0x3e, 0x94, 0xa7,
+ 0xa8, 0xa8, 0x2e, 0xdf, 0x64, 0x2c, 0x69, 0x37, 0x65, 0x72,
+ 0x64, 0xf9, 0x53, 0x67, 0x9a, 0x7c, 0x50, 0xd4, 0x82, 0xc2,
+ 0xd1, 0x6, 0x19, 0x22, 0xbc, 0xad, 0x47, 0x15, 0xd5, 0x7c,
+ 0x41, 0xbe, 0x37, 0x1a, 0xa1, 0x4c, 0x9c, 0xf, 0x7f, 0xad,
+ 0x72, 0xc2, 0xbf, 0x16, 0xcd, 0xeb, 0xfb, 0x7c, 0x5c, 0x9f,
+ 0x6d, 0xf, 0xe7, 0xbc, 0xf7, 0x11, 0xf5, 0x9c, 0x74, 0xdf,
+ 0x45, 0xa0, 0x51, 0x45, 0x15, 0xe3, 0x1e, 00, 0x50, 0x4e,
+ 0x5, 0x14, 0x8d, 0xe9, 0xeb, 0x43, 0xd8, 0x4f, 0x63, 0xa9,
+ 0xf0, 0x1d, 0x89, 0x9a, 0xe8, 0x3e, 0xd3, 0xd6, 0xbd, 0xd6,
+ 0xc2, 0x3f, 0x2a, 0xd9, 0x17, 0xa1, 0xc5, 0x79, 0x8f, 0xc3,
+ 0x7b, 0x1f, 0x96, 0x33, 0x81, 0xd2, 0xbd, 0x55, 00, 00,
+ 0x1, 0x5f, 0xab, 0xf0, 0xf6, 0x1f, 0xd9, 0x61, 0xb9, 0xbb,
+ 0x9f, 0xb7, 0xf0, 0xae, 0x17, 0xd8, 0xe1, 0x39, 0xdf, 0x51,
+ 0xd4, 0x51, 0x45, 0x7d, 0x61, 0xf6, 0xe1, 0x45, 0x14, 0x50,
+ 0x1, 0x48, 0xc4, 0x1, 0x93, 0x4b, 0x54, 0x75, 0x8b, 0xa1,
+ 0x69, 0x61, 0x2c, 0x87, 0xb2, 0x9a, 0x89, 0xc9, 0x42, 0x2e,
+ 0x4f, 0xa1, 0x13, 0x92, 0x84, 0x5c, 0x9f, 0x43, 0x83, 0xf8,
+ 0x9f, 0xaf, 0x2c, 0x70, 0x2c, 0x31, 0xb8, 0xcf, 0xa5, 0x79,
+ 0x2c, 0x8e, 0x65, 0x72, 0xc6, 0xb6, 0x3c, 0x57, 0xa8, 0xb5,
+ 0xf6, 0xa2, 0x72, 0x49, 00, 0x93, 0x58, 0xb5, 0xf8, 0xbe,
+ 0x6b, 0x8b, 0x78, 0xbc, 0x4c, 0xa5, 0xd1, 0x1f, 0xcf, 0x99,
+ 0xde, 0x39, 0xe3, 0xb1, 0x72, 0x9f, 0x44, 0x14, 0x51, 0x45,
+ 0x79, 0x7, 0x80, 0x14, 0x51, 0x41, 0xa4, 0x21, 0xd1, 0xa3,
+ 0x4b, 0x22, 0xa2, 0x82, 0x49, 0xec, 0x2b, 0xd2, 0xbe, 0x1e,
+ 0xf8, 0x51, 0x8c, 0xe2, 0x69, 0xa2, 0x60, 0x31, 0xde, 0xb9,
+ 0x7f, 0x5, 0xe9, 0x1f, 0x6e, 0xd5, 0xa3, 0xc8, 0xc8, 0x1c,
+ 0xf4, 0xaf, 0x78, 0xb1, 0xb3, 0x4b, 0x38, 0x55, 0x15, 0x40,
+ 0xe3, 0xb0, 0xaf, 0xb5, 0xe1, 0xfc, 0xb1, 0x57, 0x7f, 0x58,
+ 0xa9, 0xb2, 0x3f, 0x45, 0xe1, 0x7c, 0x9d, 0x62, 0x25, 0xf5,
+ 0xaa, 0xbb, 0x45, 0xe8, 0x4b, 0x14, 0x4b, 0x12, 0xed, 0x40,
+ 00, 0x15, 0x26, 0x28, 0x14, 0xb5, 0xfa, 0x75, 0x8f, 0xd8,
+ 0x12, 0x49, 0x59, 0x5, 0x14, 0x51, 0x40, 0xc2, 0x8a, 0x28,
+ 0xa0, 0x4, 0x35, 0x4f, 0x54, 0x83, 0xed, 0x16, 0x8e, 0xb8,
+ 0xc9, 0xc5, 0x5c, 0x34, 0xc9, 0x7e, 0xe3, 0x7d, 0x2a, 0x27,
+ 0x15, 0x28, 0xb4, 0xc8, 0x9c, 0x54, 0xa2, 0xd3, 0x3c, 0x3,
+ 0xc6, 0x96, 0x82, 0xd7, 0x50, 0x2a, 0x6, 0x39, 0xe6, 0xb9,
+ 0xca, 0xee, 0xbe, 0x21, 0xdb, 0x84, 0xb8, 0x77, 0x3d, 0x79,
+ 0xae, 0x14, 0x74, 0xaf, 0xc4, 0xb3, 0x1a, 0x7e, 0xcf, 0x13,
+ 0x28, 0x9f, 0xce, 0x99, 0xb5, 0x3f, 0x65, 0x8c, 0x9c, 0x7c,
+ 0xc2, 0x8a, 0x28, 0xaf, 0x30, 0xf2, 0x2, 0x8a, 0x28, 0xa0,
+ 0xd, 0xbf, 0x8, 0x30, 0x5d, 0x55, 0x9, 0xe8, 0xd, 0x7b,
+ 0xfe, 0x97, 0x2f, 0x9b, 0x68, 0x87, 0xda, 0xbe, 0x78, 0xd0,
+ 0x18, 0xa5, 0xf2, 0x1, 0xdd, 0xab, 0xe8, 0x2d, 0x5, 0x71,
+ 0xa6, 0xc3, 0xf4, 0xaf, 0xd1, 0xb8, 0x5e, 0x5e, 0xe4, 0xa2,
+ 0x8f, 0xd6, 0x38, 0x32, 0x6d, 0xc2, 0x71, 0x34, 0x6a, 0x19,
+ 0xe5, 0x11, 0x44, 0xee, 0x4e, 00, 0x1d, 0x6a, 0x6a, 0xc8,
+ 0xf1, 0x2c, 0xff, 00, 0x67, 0xd2, 0xa5, 0x6c, 0xe0, 0xe2,
+ 0xbe, 0xe2, 0xac, 0xfd, 0x9c, 0x1c, 0xfb, 0x1f, 0xa3, 0x57,
+ 0xa9, 0xec, 0xa9, 0x4a, 0x7d, 0x91, 0xe3, 0x9e, 0x37, 0xd5,
+ 0x3e, 0xd7, 0xa8, 0xcb, 0xb5, 0x81, 0x19, 0x23, 0xf5, 0xae,
+ 0x48, 0x77, 0xab, 0xba, 0xa3, 0xf9, 0x97, 0x72, 0x31, 0x39,
+ 0xcb, 0x13, 0x54, 0xeb, 0xf0, 0xbc, 0x5d, 0x57, 0x5e, 0xbc,
+ 0xa6, 0xfb, 0x9f, 0xcd, 0xf8, 0xea, 0xd2, 0xc4, 0xe2, 0x25,
+ 0x52, 0x5d, 0xc2, 0x8a, 0x28, 0xae, 0x53, 0x84, 0x28, 0xa2,
+ 0x82, 0x70, 0x28, 0x6e, 0xc8, 0x46, 0xf7, 0x83, 0x74, 0xcf,
+ 0xed, 0xd, 0x49, 0x72, 0x85, 0x80, 0x3e, 0x95, 0xef, 0x1a,
+ 0x3d, 0x82, 0x58, 0xda, 0xaa, 0xaa, 0xe3, 0x8a, 0xf2, 0xaf,
+ 0x86, 0x4a, 0xa8, 0xfb, 0x8f, 0x52, 0x6b, 0xd8, 0xa3, 0xfb,
+ 0x80, 0xfb, 0x66, 0xbf, 0x52, 0xe1, 0xcc, 0x3c, 0x21, 0x87,
+ 0xf6, 0x9d, 0x59, 0xfb, 0x3f, 0x9, 0x61, 0x61, 0xc, 0x2f,
+ 0xb5, 0xea, 0xc7, 0xd2, 0xa, 0x5a, 0x2b, 0xec, 0x4f, 0xbf,
+ 0xa, 0x28, 0xa2, 0x80, 0x10, 0x8c, 0xd1, 0x4b, 0x45, 00,
+ 0x26, 0x33, 0x4c, 0x92, 0x25, 0x91, 0x70, 0xc0, 0x1f, 0xad,
+ 0x49, 0x48, 0x7a, 0x8a, 0x56, 0x13, 0x57, 0xd1, 0x99, 0xd0,
+ 0x69, 0x71, 0xc5, 0x39, 0x90, 0x28, 0x15, 0x2d, 0xc1, 0xa,
+ 0xd, 0x5b, 0x6e, 0x14, 0xd6, 0x75, 0xdb, 0xf0, 0x6a, 0x61,
+ 0x8, 0xc1, 0x5a, 0x24, 0x42, 0x9c, 0x69, 0xab, 0x45, 0x19,
+ 0x37, 0xaf, 0xd6, 0xb9, 0xbd, 0x42, 0x4f, 0xbd, 0x5b, 0x97,
+ 0xaf, 0xd6, 0xb9, 0xad, 0x49, 0xf1, 0x9a, 0xb3, 0x43, 0x3,
+ 0x52, 0x90, 0x73, 0xcd, 0x72, 0x3a, 0xac, 0x98, 0xd, 0xcd,
+ 0x74, 0x5a, 0x93, 0xf5, 0xae, 0x47, 0x57, 0x93, 00, 0xd0,
+ 0x7, 0x2b, 0xac, 0x4b, 0xf7, 0xb9, 0xaf, 0x25, 0xf8, 0x83,
+ 0x7f, 0xb6, 0x36, 0x19, 0x1d, 0x2b, 0xd3, 0x35, 0xa9, 0x71,
+ 0xba, 0xbc, 0x37, 0xe2, 0x45, 0xf7, 0x12, 0x63, 0x3c, 0xf,
+ 0x5a, 0xe3, 0xc5, 0x4b, 0x96, 0x9b, 0x38, 0x31, 0xb3, 0xe4,
+ 0xa2, 0xcf, 0x9f, 0xbe, 0x22, 0x5e, 0xf9, 0x92, 0xc8, 0x37,
+ 0x3, 0xcd, 0x79, 0x4e, 0xa9, 0x27, 0x26, 0xbb, 0x7f, 0x18,
+ 0xdc, 0xf9, 0xb7, 0x52, 0x72, 0x48, 0xc9, 0xaf, 0x3d, 0xd5,
+ 0x24, 0xeb, 0x5f, 0xf, 0xf, 0x7e, 0xa3, 0x67, 0xe7, 0x14,
+ 0xff, 00, 0x79, 0x59, 0xb3, 0x6, 0xf5, 0xb2, 0xc6, 0xb2,
+ 0xa7, 0x6e, 0xb5, 0x7e, 0xe9, 0xf9, 0x35, 0x99, 0x33, 0x63,
+ 0x9a, 0xf7, 0xe9, 0x2e, 0x87, 0xd4, 0x50, 0x89, 0xfa, 0x31,
+ 0xff, 00, 0x4, 0xe7, 0xf0, 0x44, 0xd1, 0x68, 0x9a, 0x6d,
+ 0xe4, 0xd6, 0xce, 0xa6, 0x7b, 0x87, 0xb8, 0x70, 0xc3, 0x39,
+ 0x8c, 0x64, 0x23, 0x7b, 0xf, 0x9a, 0xbf, 0x46, 0x61, 0x7e,
+ 0x3a, 0xd7, 0xcc, 0xbf, 0xb1, 0xe7, 0x84, 0x8f, 0x85, 0xfc,
+ 0x29, 0xd, 0xbb, 0x2a, 0xa7, 0xd8, 0xac, 0xe1, 0xb6, 0xe9,
+ 0xd4, 0xe0, 0xe7, 0xf9, 0x7e, 0xb5, 0xf4, 0xa4, 0x2f, 0xc0,
+ 0xaf, 0xa2, 0x82, 0xb4, 0x52, 0x3e, 0xae, 0x9a, 0xe5, 0x82,
+ 0x46, 0xa4, 0x2d, 0x56, 0x91, 0xab, 0x3e, 0x6, 0xcd, 0x5d,
+ 0x88, 0xd5, 0x96, 0x5d, 0x8d, 0xaa, 0xc2, 0x1c, 0xd5, 0x48,
+ 0xaa, 0xc2, 0x1e, 0x28, 0x2, 0xca, 0x1c, 0xa, 0x95, 0x4d,
+ 0x40, 0x3b, 0x54, 0xc9, 0x40, 0x13, 0x2b, 0x71, 0x4e, 0xa8,
+ 0xc7, 0x4a, 0x72, 0x9a, 00, 0x90, 0x1c, 0xd1, 0x48, 0x3a,
+ 0x52, 0xd0, 0x3, 0xe8, 0xa4, 0x7, 0x34, 0xb4, 00, 0xca,
+ 0x46, 0xa5, 0xa2, 0x80, 0x22, 0x26, 0xa3, 0x6a, 0x94, 0x8c,
+ 0x53, 0x18, 0xa, 00, 0x84, 0xf5, 0xa8, 0x65, 0x3c, 0x54,
+ 0xed, 0x55, 0xe5, 0x34, 0x1, 0x5a, 0x43, 0x55, 0x25, 0x3c,
+ 0x9a, 0xb3, 0x21, 0xaa, 0x72, 0x9a, 00, 0xf1, 0xff, 00,
+ 0xda, 0x8f, 0xc4, 0xcb, 0xe1, 0xcf, 0x83, 0x7a, 0xf3, 0x6f,
+ 0x65, 0x9e, 0xee, 0x31, 0x6b, 0x1a, 0xa9, 0xc6, 0xed, 0xec,
+ 0x15, 0x86, 0x71, 0xfd, 0xd2, 0x7a, 0xd7, 0x8a, 0xfe, 0xc6,
+ 0x7e, 0x18, 0x38, 0xbb, 0xd4, 0x59, 0x30, 0x32, 0x23, 0x53,
+ 0x8e, 0xbd, 0xf, 0xad, 0x68, 0xfe, 0xdd, 0x5e, 0x20, 0x2d,
+ 0xf, 0x86, 0x74, 0x8, 0xd9, 0x33, 0x24, 0xad, 0x74, 0xe0,
+ 0x7d, 0xe2, 00, 0x2b, 0x8f, 0xa6, 0x48, 0xaf, 0x4a, 0xfd,
+ 0x98, 0xfc, 0x34, 0x34, 0x7f, 0x3, 0x59, 0x12, 0x8, 0x79,
+ 0xbf, 0x78, 0x77, 0x2e, 0x3a, 0x81, 0xfe, 0x15, 0xf1, 0x93,
+ 0xff, 00, 0x6b, 0xce, 0x94, 0x7a, 0x53, 0x5f, 0x8b, 0x3f,
+ 0x3e, 0xab, 0xfe, 0xdd, 0xc4, 0x51, 0x8f, 0x4a, 0x51, 0xfc,
+ 0x59, 0xef, 0xfa, 0x3c, 0x3b, 0x62, 0x1f, 0x4a, 0xdd, 0x51,
+ 0x85, 0x15, 0x9d, 0xa7, 0x47, 0xb5, 0x14, 0x56, 0x95, 0x7d,
+ 0x99, 0xfa, 0x8, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x62,
+ 0x78, 0xc7, 0xc4, 0x31, 0x78, 0x63, 0xc3, 0xb7, 0xba, 0x84,
+ 0xcc, 0xa8, 0xb0, 0xc6, 0x5b, 0x2e, 0xc0, 0xc, 0xe2, 0x80,
+ 0x39, 0x9f, 0x8d, 0x3f, 0x14, 0x6c, 0xbe, 0x18, 0x78, 0x32,
+ 0xef, 0x54, 0x9e, 0x54, 0xf3, 0x15, 0x4e, 0xd5, 0xdd, 0x83,
+ 0xfc, 0x8d, 0x7e, 0x28, 0x7e, 0xd2, 0xff, 00, 0xb5, 0x9d,
+ 0xf7, 0xc4, 0x4d, 0x6a, 0xf0, 0x5b, 0xdd, 0x4c, 0x81, 0xb8,
+ 0xca, 0xbf, 0xb0, 0xe9, 0xf2, 0x8a, 0xef, 0x7f, 0x6d, 0x8f,
+ 0xda, 0xa6, 0xfb, 0xc5, 0x73, 0xdc, 0xe9, 0x96, 0xcd, 0x3,
+ 0x41, 0xbc, 0x8c, 0xab, 0x6, 0x27, 0x91, 0x5f, 0x7, 0xcb,
+ 0x23, 0xdd, 0xce, 0x5c, 0xf2, 0xcc, 0x68, 0x2, 0xed, 0xc7,
+ 0x88, 0xb5, 0xb, 0x87, 0x2c, 0xd7, 0x93, 0x36, 0x4f, 0x77,
+ 0x35, 0x7, 0xf6, 0xa5, 0xd1, 0xeb, 0x3b, 0x9f, 0xc6, 0x8f,
+ 0xec, 0xab, 0x9d, 0xbb, 0xbc, 0xb6, 0xc7, 0xae, 0xd, 0x57,
+ 0x8e, 0x32, 0xd2, 0xaa, 0x11, 0x82, 0x58, 0xf, 0xd6, 0x80,
+ 0x3e, 0x8a, 0xfd, 0x94, 0x7c, 0x39, 0x71, 0xe2, 0xf, 0x19,
+ 0xe9, 0xd1, 0xe4, 0x9d, 0xf2, 0x82, 0x49, 0x19, 0xe3, 0xf3,
+ 0xaf, 0xdb, 0xed, 0x56, 0x57, 0xf0, 0x2f, 0xc2, 0x4b, 0x24,
+ 0x8d, 0xbc, 0x81, 0x6f, 0x6a, 0x19, 0x9b, 0xf5, 0xf7, 0xf5,
+ 0xaf, 0xcc, 0x3f, 0xf8, 0x27, 0x4f, 0x80, 0x4e, 0xad, 0xe3,
+ 0x5b, 0x29, 0xb6, 0xbe, 0x23, 0x23, 0x9d, 0xa7, 0x1d, 0xab,
+ 0xf4, 0xc3, 0xf6, 0xa4, 0x65, 0xb1, 0xf8, 0x4b, 0xa8, 0x84,
+ 0x3b, 0x5b, 0xca, 0xda, 0x9, 0xec, 0x1, 0x1f, 0x99, 0xa0,
+ 0xf, 0xcd, 0x4f, 0x88, 0x1f, 0xb5, 0xb6, 0xa3, 0x6d, 0xe3,
+ 0x1b, 0xd8, 0x63, 0xbf, 0x90, 0x47, 0x1b, 0x1, 0x8f, 0x33,
+ 0xdb, 0xfd, 0xda, 0xf7, 0xcf, 0xd8, 0xff, 00, 0xe3, 0x85,
+ 0xef, 0x8d, 0xf5, 0xa3, 0x2c, 0xf7, 0x4f, 0x2a, 0x6f, 0xc0,
+ 0xcb, 0xf0, 0x3a, 0x7b, 0xa, 0xfc, 0xa5, 0xf8, 0xa7, 0xa7,
+ 0x9d, 0x3f, 0xc5, 0x57, 0x4, 0x12, 0x1e, 0x69, 0x19, 0x8e,
+ 0x7f, 0xa, 0xfb, 0xa3, 0xfe, 0x9, 0xdb, 0x6a, 0xc9, 0x7d,
+ 0xa7, 0xc0, 0xa4, 0x96, 0x91, 0xc1, 0x3c, 0x70, 0x32, 0x45,
+ 00, 0x7e, 0xc0, 0x69, 0x92, 0x99, 0xec, 0x61, 0x90, 0xe7,
+ 0xe6, 0x50, 0x79, 0xab, 0x55, 0x5b, 0x4f, 0x8b, 0xc9, 0xb2,
+ 0x85, 0x3f, 0xba, 0x80, 0x7e, 0x95, 0x34, 0x8d, 0xb5, 0x9,
+ 0xf6, 0xa0, 0xe, 0x27, 0xe2, 0x5, 0xf8, 0x8a, 0xd5, 0xc6,
+ 0x7b, 0x57, 0x88, 0xee, 0x2e, 0xec, 0xc7, 0xb9, 0xcd, 0x7a,
+ 0x47, 0xc4, 0xcb, 0xfc, 0x86, 0x40, 0x79, 0x3c, 0x57, 0x9b,
+ 0xa8, 0xc0, 0xaf, 0xc8, 0x33, 0xfa, 0xde, 0xdb, 0x16, 0xd7,
+ 0x63, 0xf0, 0x6e, 0x26, 0xc4, 0x7b, 0x6c, 0x73, 0x8f, 0x44,
+ 0x2d, 0x14, 0x51, 0x5f, 0x36, 0x7c, 0x98, 0x51, 0x45, 0x14,
+ 0x1, 0x77, 0x48, 0x9d, 0x6d, 0x6f, 0x16, 0x56, 0xed, 0x5e,
+ 0x91, 0xa6, 0x78, 0xfe, 0x2b, 0x68, 0x82, 0xf1, 0xf9, 0xff,
+ 00, 0xf5, 0xab, 0xca, 0xc1, 0xc5, 0x2f, 0x98, 0x71, 0xd2,
+ 0xbd, 0x4c, 0x1e, 0x61, 0x57, 0x5, 0xfc, 0x33, 0xd9, 0xc0,
+ 0x66, 0x95, 0xb2, 0xe5, 0xfb, 0xa3, 0xd9, 0x93, 0xe2, 0x44,
+ 0x18, 0xe4, 0x8f, 0xcf, 0xff, 00, 0xad, 0x49, 0x2f, 0xc4,
+ 0x68, 0x31, 0xd5, 0x7f, 0x3f, 0xfe, 0xb5, 0x78, 0xd7, 0x9a,
+ 0x7d, 0x29, 0x19, 0xb7, 0xf5, 0xaf, 0x5b, 0xfd, 0x62, 0xc5,
+ 0x58, 0xf6, 0xff, 00, 0xd6, 0xbc, 0x6d, 0xac, 0x7a, 0xad,
+ 0xe7, 0xc4, 0x8, 0xdd, 0x48, 0xd, 0x8f, 0xa1, 0xff, 00,
+ 0xeb, 0x57, 0x37, 0xa9, 0x78, 0xca, 0x59, 0x41, 0x9, 0x21,
+ 0xfc, 0xff, 00, 0xfa, 0xd5, 0xc5, 0xf9, 0x62, 0x94, 0x2e,
+ 0x2b, 0xcf, 0xad, 0x9b, 0xe2, 0x6b, 0x6e, 0xec, 0x79, 0xb5,
+ 0xf3, 0xec, 0x66, 0x23, 0x46, 0xec, 0x59, 0xba, 0xbf, 0x96,
+ 0xed, 0xc9, 0x76, 0x24, 0x1f, 0x7a, 0xaf, 0x45, 0x15, 0xe3,
+ 0xb9, 0x39, 0x3b, 0xb6, 0x7c, 0xfc, 0xa5, 0x29, 0xbb, 0xc9,
+ 0xea, 0x14, 0x51, 0x41, 0x38, 0xa9, 0x24, 0x29, 0xd1, 0xa3,
+ 0x4a, 0xe1, 0x14, 0x64, 0x9a, 0x48, 0xd4, 0xca, 0xc1, 0x54,
+ 0x12, 0x4d, 0x76, 0xfe, 0xd, 0xf0, 0x64, 0xb7, 0x37, 0x29,
+ 0x2c, 0xa1, 0x82, 0xfa, 0x62, 0xba, 0xf0, 0xb8, 0x5a, 0x98,
+ 0xba, 0x8a, 0x10, 0x47, 0x76, 0xb, 0x7, 0x57, 0x1d, 0x55,
+ 0x53, 0xa4, 0x8d, 0x1f, 0x87, 0x7e, 0x14, 0x32, 0xb1, 0x9a,
+ 0x55, 0xc0, 0xeb, 0xc8, 0xaf, 0x57, 0x86, 0x1, 0x6f, 0x10,
+ 0x45, 0xe8, 0x2a, 0xd, 0x3b, 0x4f, 0x8f, 0x4f, 0x80, 0x22,
+ 0xe, 0xd5, 0x72, 0xbf, 0x63, 0xcb, 0xb0, 0x30, 0xc0, 0xd1,
+ 0x50, 0x5b, 0x9f, 0xbe, 0xe5, 0x59, 0x74, 0x32, 0xea, 0xa,
+ 0x9c, 0x56, 0xbd, 0x40, 0xc, 0x52, 0xd1, 0x45, 0x7a, 0xa7,
+ 0xb4, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x21,
+ 0xac, 0xdd, 0x7a, 0xe3, 0xc8, 0xb2, 0x73, 0xd3, 0x83, 0x5a,
+ 0x58, 0xae, 0x53, 0xc7, 0x57, 0xa2, 0xdf, 0x4f, 0x93, 0xe9,
+ 0x5c, 0x78, 0xba, 0x9e, 0xca, 0x84, 0xa4, 0x70, 0x63, 0xaa,
+ 0xfb, 0x1c, 0x3c, 0xe7, 0xe4, 0x78, 0xaf, 0x88, 0x6e, 0x3e,
+ 0xd3, 0xab, 0xcc, 0xd9, 0xc8, 0xce, 0x2b, 0x3e, 0x9f, 0x33,
+ 0x99, 0x67, 0x91, 0xcf, 0x73, 0x4c, 0xaf, 0xc3, 0x2a, 0x4f,
+ 0xda, 0x4e, 0x53, 0x7d, 0x4f, 0xe6, 0xda, 0xb3, 0xf6, 0x95,
+ 0x25, 0x3e, 0xed, 0x85, 0x14, 0x51, 0x59, 0x99, 0x85, 0x3a,
+ 0x8, 0xfc, 0xeb, 0xa8, 0xd0, 0x73, 0xc8, 0xa6, 0xd5, 0xed,
+ 0x6, 0xf, 0xb4, 0x6a, 0x89, 0xc7, 0x2, 0xae, 0x11, 0xe7,
+ 0x9c, 0x63, 0xdd, 0x9a, 0x53, 0x8f, 0xb4, 0xa9, 0x18, 0xf7,
+ 0x67, 0xb0, 0xf8, 0x6, 0xc8, 0xc5, 0x2, 0x92, 0x3b, 0x57,
+ 0x6d, 0x58, 0x9e, 0x17, 0xb7, 0xf2, 0x6c, 0x14, 0xfa, 0x81,
+ 0x5b, 0x75, 0xfb, 0x86, 0x2, 0x97, 0xb2, 0xc3, 0xc6, 0x27,
+ 0xf4, 0x6e, 0x5b, 0x4b, 0xd8, 0xe1, 0x61, 0x11, 0x68, 0xa2,
+ 0x8a, 0xf4, 0xf, 0x50, 0x28, 0xa2, 0x8a, 00, 0x69, 0xae,
+ 0x4b, 0xe2, 0x1e, 0xa6, 0x2d, 0x34, 0x97, 0x8c, 0x1f, 0x99,
+ 0x81, 0xae, 0xb0, 0x9c, 0x3, 0x5e, 0x47, 0xf1, 0x4b, 0x52,
+ 0xf3, 0x2e, 0x4, 0x43, 0x9e, 0xdd, 0x6b, 0xc3, 0xce, 0x31,
+ 0x1f, 0x57, 0xc2, 0x49, 0xad, 0xde, 0x87, 0xce, 0x67, 0xf8,
+ 0xaf, 0xaa, 0xe0, 0x67, 0x25, 0xbb, 0xd0, 0xf3, 0xab, 0x89,
+ 0xc, 0xb3, 0x97, 0xf5, 0x34, 0xda, 0x5, 0x15, 0xf8, 0xc5,
+ 0xdb, 0x6d, 0xb3, 0xf9, 0xf6, 0xf7, 0x77, 0x61, 0x45, 0x14,
+ 0x50, 0x1, 0x4f, 0x82, 0x33, 0x35, 0xc4, 0x69, 0xea, 0x69,
+ 0x95, 0xaf, 0xe1, 0x8b, 0x33, 0x77, 0xaa, 0xc4, 0x30, 0x70,
+ 0x8, 0xad, 0xa9, 0x41, 0xd5, 0xa9, 0x18, 0x2e, 0xa6, 0xd4,
+ 0x69, 0xba, 0xd5, 0x63, 0x4d, 0x75, 0x67, 0xa6, 0xfc, 0x3d,
+ 0xd0, 0xc5, 0xb0, 0xf3, 0x98, 0x73, 0x8a, 0xf4, 0x11, 0x59,
+ 0x9a, 0x1d, 0xa0, 0xb6, 0xb3, 0x51, 0xed, 0x5a, 0x95, 0xfb,
+ 0x6e, 0x3, 0xe, 0xb0, 0xd4, 0x23, 0x4, 0x7f, 0x45, 0x65,
+ 0x98, 0x58, 0xe1, 0x30, 0xd1, 0xa7, 0x10, 0xa2, 0x8a, 0x2b,
+ 0xd0, 0x3d, 0x50, 0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a, 0x28,
+ 0x1, 0x8, 0xce, 0x29, 0x1c, 0x65, 0x48, 0xf6, 0xa7, 0x52,
+ 0x13, 0x80, 0x68, 0x13, 0x3c, 0x77, 0xe2, 0x87, 0x13, 0x95,
+ 0x3, 0xde, 0xbc, 0xf2, 0xbd, 0x17, 0xe2, 0x5a, 0xee, 0x9a,
+ 0x47, 0x3d, 0xab, 0xce, 0x57, 0xa5, 0x7e, 0x2f, 0x9c, 0xab,
+ 0x63, 0x66, 0x7f, 0x3e, 0xe7, 0xff, 00, 0xef, 0xf3, 0x16,
+ 0x8a, 0x28, 0xaf, 0x10, 0xf9, 0xd0, 0xa2, 0x8a, 0x28, 0x3,
+ 0x5f, 0xc2, 0xf1, 0x79, 0xba, 0xb4, 0x43, 0xd0, 0xe6, 0xbe,
+ 0x82, 0xd2, 0x6, 0x2c, 0x90, 0x7a, 0xa, 0xf0, 0x2f, 0x8,
+ 0xf, 0xf8, 0x99, 0x6e, 0xf4, 0x35, 0xef, 0x7a, 0x38, 0x3f,
+ 0x63, 0x43, 0xed, 0x5f, 0xa3, 0x70, 0xba, 0xf7, 0x24, 0xcf,
+ 0xd6, 0x78, 0x35, 0x5a, 0x9c, 0xd9, 0x7e, 0xb9, 0x6f, 0x1e,
+ 0x4f, 0xb3, 0x4a, 0x65, 0xee, 0x41, 0xae, 0xa6, 0xb8, 0x5f,
+ 0x88, 0x92, 0x11, 0x9, 0x51, 0xd3, 0x15, 0xf5, 0x59, 0x94,
+ 0xf9, 0x30, 0xb3, 0x67, 0xda, 0x66, 0xd5, 0x3d, 0x9e, 0xe,
+ 0xa3, 0xf2, 0x3c, 0x66, 0xf4, 0xff, 00, 0xa4, 0x11, 0xef,
+ 0x50, 0xd3, 0xa6, 0x6d, 0xf7, 0x32, 0x1f, 0x73, 0x4d, 0xaf,
+ 0xc4, 0x5b, 0xbb, 0x67, 0xf3, 0x9c, 0x9d, 0xe4, 0xc2, 0x8a,
+ 0x28, 0xa9, 0x10, 0x50, 0x7a, 0x51, 0x45, 0x2, 0x3a, 0xff,
+ 00, 0x5, 0x6a, 0x2b, 0x6b, 0x74, 0x8a, 0x4e, 0x5, 0x7b,
+ 0x65, 0x85, 0xec, 0x57, 0x70, 0xa9, 0x46, 0x7, 0x8a, 0xf9,
+ 0xae, 0xce, 0xe3, 0xec, 0xb2, 0x86, 0xcd, 0x7a, 0x47, 0x84,
+ 0x3c, 0x66, 0x23, 0x65, 0x88, 0x95, 0x23, 0xdd, 0xab, 0xee,
+ 0x72, 0x2c, 0xd2, 0x34, 0x57, 0xb1, 0xa9, 0xd4, 0xfd, 0x27,
+ 0x86, 0x73, 0x88, 0x61, 0xff, 00, 0xd9, 0xea, 0xbd, 0x19,
+ 0xea, 0xf4, 0x56, 0x7d, 0x86, 0xae, 0x97, 0xa0, 0x74, 0x19,
+ 0xf4, 0x35, 0x7f, 0x76, 0x47, 0x15, 0xfa, 0x3c, 0x67, 0x19,
+ 0xab, 0xc5, 0x9f, 0xac, 0xc2, 0xa4, 0x6a, 0x2e, 0x68, 0xbb,
+ 0x8b, 0x45, 0x20, 0x34, 0x3, 0x9a, 0xb3, 0x41, 0x68, 0xa2,
+ 0x8a, 00, 0x28, 0xa2, 0x8a, 00, 0x64, 0xa7, 0xb, 0x59,
+ 0x37, 0x8f, 0xd7, 0xeb, 0x5a, 0x73, 0x9e, 0x2b, 0x1a, 0xf5,
+ 0xba, 0xd0, 0x6, 0x3d, 0xf3, 0xf0, 0x6b, 0x97, 0xd4, 0xa4,
+ 0xc1, 0x6a, 0xe8, 0xaf, 0x5f, 0x83, 0x5c, 0xa6, 0xa7, 0x27,
+ 0x2d, 0x40, 0x1c, 0xee, 0xa5, 0x27, 0x5a, 0xe3, 0xf5, 0x89,
+ 0x78, 0x6a, 0xe9, 0xf5, 0x17, 0xfb, 0xdc, 0xd7, 0x19, 0xac,
+ 0x4b, 0xf7, 0xa8, 0x3, 0x90, 0xd7, 0xe7, 0x9, 0x14, 0x86,
+ 0xbe, 0x77, 0xf8, 0x97, 0x7e, 0x2, 0xcb, 0xce, 0x3a, 0xd7,
+ 0xba, 0x78, 0xae, 0xe7, 0xcb, 0xb5, 0x90, 0xd7, 0xcc, 0xff,
+ 00, 0x13, 0x2f, 0xf3, 0xe6, 0x8c, 0x8e, 0xfd, 0xeb, 0xc5,
+ 0xcc, 0xa7, 0xcb, 0x4e, 0xc7, 0xcf, 0x66, 0xf5, 0x39, 0x69,
+ 0xd8, 0xf1, 0x3f, 0x10, 0xdc, 0x19, 0x27, 0x94, 0xfb, 0xd7,
+ 0x11, 0xa9, 0xc9, 0x9c, 0xd7, 0x53, 0xac, 0x4b, 0x9d, 0xe7,
+ 0xd4, 0xd7, 0x1b, 0xa9, 0x49, 0x92, 0x45, 0x7c, 0xbe, 0x16,
+ 0x37, 0x77, 0x3e, 0x37, 0x5, 0x1b, 0xbb, 0x99, 0x17, 0xd,
+ 0xd6, 0xb6, 0x7e, 0x19, 0x68, 0x5f, 0xf0, 0x94, 0xfc, 0x43,
+ 0xd0, 0xf4, 0xc3, 0xf7, 0x2e, 0x2e, 0x55, 0x5c, 0xe3, 0x38,
+ 0x5e, 0xe7, 0x1d, 0xeb, 0xa, 0x76, 0xaf, 0x60, 0xfd, 0x91,
+ 0xbc, 0x38, 0x75, 0xaf, 0x8a, 0xf1, 0x5e, 0xb0, 0x26, 0x1b,
+ 0x8, 0x9a, 0x43, 0xb4, 0x7f, 0x11, 0x7, 0x6f, 0x3f, 0x51,
+ 0x5f, 0x4b, 0x42, 0x37, 0x92, 0x3e, 0xbb, 0xd, 0x1b, 0xc9,
+ 0x1f, 0xae, 0x9f, 0x5, 0xb4, 0xef, 0xec, 0xff, 00, 0x7,
+ 0xc5, 0x21, 0x3f, 0x34, 0xcc, 0x5b, 0xa7, 0x6e, 0xd5, 0xe8,
+ 0xf0, 0xb7, 0x4e, 0x6b, 0x9a, 0xf0, 0x85, 0x8a, 0xe9, 0x5e,
+ 0x1f, 0xb1, 0xb5, 0x4, 0x9f, 0x2e, 0x20, 0x9, 0x3d, 0xeb,
+ 0xa2, 0x81, 0xb9, 0xaf, 0x74, 0xfa, 0x53, 0x4e, 0x3, 0xfc,
+ 0xea, 0xf4, 0x47, 0x26, 0xb3, 0xad, 0xdb, 0x35, 0x7a, 0x23,
+ 0xcd, 00, 0x5d, 0x8c, 0x8a, 0xb2, 0x95, 0x52, 0x3a, 0xb3,
+ 0x19, 0xe2, 0x80, 0x2d, 0x27, 0x5a, 0x95, 0x7a, 0x54, 0x11,
+ 0xe3, 0x19, 0xab, 0x9, 0x40, 0x12, 0x2d, 0x3d, 0x69, 0x8b,
+ 0x52, 0xe, 0x94, 00, 0xa3, 0x93, 0x4e, 0xa6, 0xaf, 0x5a,
+ 0x75, 00, 0x39, 0x69, 0x69, 0xa0, 0xd3, 0xa8, 0x1, 0x94,
+ 0x87, 0xa5, 0x2d, 0x23, 0x50, 0x3, 0x1b, 0x93, 0x51, 0xb1,
+ 0xa7, 0x31, 0xc8, 0xa6, 0x35, 00, 0x44, 0xf5, 0x5e, 0x53,
+ 0x53, 0xc9, 0x55, 0x65, 0xa0, 0xa, 0xf2, 0x9a, 0xa7, 0x29,
+ 0xab, 0x32, 0x1a, 0xc8, 0xd7, 0x75, 0x18, 0x74, 0xad, 0x36,
+ 0xea, 0xee, 0x79, 0x52, 0x8, 0xa1, 0x8c, 0xb3, 0x4b, 0x21,
+ 0xc0, 0x5a, 0x99, 0x4b, 0x96, 0x2e, 0x4f, 0xa1, 0x32, 0x92,
+ 0x84, 0x5c, 0x9f, 0x43, 0xe1, 0x1f, 0x8e, 0xba, 0xb7, 0xfc,
+ 0x2c, 0x4f, 0xda, 0x2a, 0x5b, 0x3b, 0x6d, 0xd2, 0x5b, 0x5b,
+ 0x4b, 0x15, 0x9a, 0x7, 0x18, 0xc3, 00, 0xa1, 0xfa, 0x76,
+ 0xdc, 0xd, 0x7d, 0xb7, 0xf0, 0xef, 0x49, 0x1a, 0x76, 0x8b,
+ 0x65, 0x6e, 0x10, 0x28, 0x8e, 0x35, 0x5c, 0x1, 0xc7, 0x41,
+ 0x5f, 0xa, 0x7c, 00, 0xb5, 0x97, 0xc7, 0x7f, 0x16, 0x1b,
+ 0x58, 0xba, 0x3e, 0x64, 0x92, 0xdc, 0x35, 0xdb, 0xee, 0xe7,
+ 0x92, 0x73, 0xef, 0x5f, 0xa1, 0xbe, 0x1d, 0xb6, 0x11, 0xc2,
+ 0x83, 00, 0x60, 0x1, 0xc5, 0x7c, 0x7e, 0x42, 0x9d, 0x6a,
+ 0xb5, 0xf1, 0x6f, 0xed, 0x4b, 0x4f, 0x44, 0x7c, 0x17, 0xc,
+ 0xc5, 0xe2, 0x2b, 0x62, 0x71, 0xd2, 0xfb, 0x72, 0x69, 0x7a,
+ 0x23, 0xa5, 0xb4, 0x5c, 0xa, 0xb5, 0x51, 0x40, 0x30, 0xb5,
+ 0x2d, 0x7d, 0x91, 0xf7, 0xe1, 0x45, 0x14, 0x50, 0x3, 0x59,
+ 0x82, 0x82, 0x4f, 0x40, 0x33, 0x5f, 0x12, 0xfe, 0xde, 0xdf,
+ 0xb4, 0x4, 0x5e, 0x18, 0xf0, 0x16, 0xa3, 0xa6, 0xdb, 0x5d,
+ 0x98, 0xa5, 0x2a, 0xc3, 0xe5, 0xc6, 0x3a, 0x11, 0xfd, 0x2b,
+ 0xec, 0x1f, 0x18, 0xea, 0x83, 0x46, 0xf0, 0xdd, 0xfd, 0xde,
+ 0x9, 0x29, 0x13, 0x11, 0x8f, 0xa1, 0xaf, 0xc4, 0x9f, 0xdb,
+ 0xc3, 0xe2, 0x75, 0xc6, 0xbb, 0xac, 0x5d, 0x5a, 0x99, 0x1f,
+ 0x69, 0x90, 0x8c, 0x6e, 0x38, 0x1c, 0x9f, 0x7a, 00, 0xf8,
+ 0xff, 00, 0x58, 0xd5, 0x2e, 0x35, 0xfd, 0x4d, 0xe4, 0x92,
+ 0x67, 0x99, 0xe5, 0x93, 0xab, 0x9c, 0xe7, 0x26, 0xbe, 0x8d,
+ 0xf8, 0x1d, 0xfb, 0x1a, 0x6b, 0xff, 00, 0x12, 0x5e, 0xda,
+ 0x78, 0x6c, 0xdd, 0xc4, 0x9d, 0x39, 0x6c, 0x77, 0xf4, 0x5a,
+ 0xf1, 0x8f, 0x84, 0x3e, 0xf, 0x6f, 0x16, 0x78, 0xbb, 0x4a,
+ 0xb5, 0xca, 0x81, 0x2d, 0xd4, 0x6b, 0x96, 0x19, 0x1f, 0x7b,
+ 0xe9, 0x5f, 0xd0, 0x7f, 0xc1, 0x9f, 0x83, 0x5a, 0x57, 0xc3,
+ 0x1f, 0x9, 0xd8, 0xf9, 0x70, 0x42, 0x66, 0x48, 0x43, 0x16,
+ 0x11, 0xa8, 0x39, 0x39, 0x3e, 0x83, 0xd6, 0x80, 0x3f, 0x24,
+ 0xfe, 0x33, 0xfe, 0xca, 0x17, 0xbf, 0xb, 0x7c, 0x3b, 0x3d,
+ 0xd5, 0xdd, 0xba, 0xc5, 0xe5, 0x8c, 0x64, 0x93, 0xe9, 0xee,
+ 0xa2, 0xbe, 0x37, 0xd2, 0x2d, 0x3e, 0xdd, 0xaf, 0xa4, 0x6a,
+ 0x3, 0xf, 0x34, 0x7b, 0x77, 0xaf, 0xd4, 0xdf, 0xf8, 0x29,
+ 0x7f, 0xc4, 0x21, 0xa7, 0x78, 0x6d, 0xec, 0xa3, 0x53, 0xba,
+ 0x42, 0x78, 0x5e, 0x9c, 0xfa, 0xf3, 0x5f, 0x9a, 0x9f, 0xa,
+ 0x74, 0x93, 0xaa, 0xf8, 0x92, 0xdc, 0x1e, 0x73, 0x22, 0x81,
+ 0xf9, 0x8f, 0xf1, 0xa0, 0xf, 0xd6, 0xff, 00, 0xf8, 0x26,
+ 0x97, 0x80, 0x3e, 0xc5, 0xa4, 0x49, 0xaa, 0x49, 00, 0xc8,
+ 0x1c, 0x39, 0x1e, 0xc3, 0xa5, 0x7b, 0xe7, 0xed, 0x77, 0xaa,
+ 0x45, 0xf, 0x82, 0x66, 0xb7, 0x91, 0x88, 0x1b, 0x72, 0x40,
+ 0xfc, 0x2a, 0x4f, 0xd8, 0xd3, 0xc2, 0x9, 0xe1, 0x8f, 0x85,
+ 0x36, 0xaf, 0xb5, 0x43, 0xcd, 0xb4, 0xe4, 0xc, 0x7f, 0x8,
+ 0xaf, 0x22, 0xfd, 0xbb, 0xbc, 0x72, 0xba, 0x5e, 0x81, 0xa8,
+ 0xae, 0xf2, 0xa1, 0x17, 0x6f, 0xca, 0x79, 0xed, 0xd3, 0x9a,
+ 00, 0xfc, 0x72, 0xf8, 0xbb, 0x7d, 0x1e, 0xa1, 0xf1, 0x2,
+ 0xec, 0x45, 0x83, 0x1a, 0x3e, 0x3a, 0xd7, 0xe8, 0x57, 0xfc,
+ 0x13, 0x7, 0x42, 0x93, 0x56, 0xd7, 0xe3, 0xba, 0x64, 0xd,
+ 0x14, 0xc, 0x31, 0x9f, 0xba, 0x31, 0x8f, 0xd6, 0xbf, 0x34,
+ 0x2f, 0xee, 0x9b, 0x56, 0xf1, 0xd, 0xc4, 0xe4, 0x92, 0x5e,
+ 0x42, 0x79, 0x39, 0xaf, 0xd9, 0x4f, 0xf8, 0x25, 0xff, 00,
+ 0x80, 0xce, 0x8f, 0xe0, 0x73, 0xa8, 0xb8, 0x5, 0xdd, 0x7a,
+ 0x81, 0xeb, 0x8f, 0x6e, 0xb4, 0x1, 0xf7, 0xc8, 0x18, 0x2,
+ 0xab, 0x6a, 0x33, 0x79, 0x36, 0xce, 0x7d, 0xaa, 0xc7, 0x6a,
+ 0xc6, 0xf1, 0x2d, 0xc8, 0xb7, 0xb2, 0x3c, 0xf6, 0xac, 0x2b,
+ 0xcd, 0x53, 0xa6, 0xe4, 0x73, 0x62, 0x2a, 0x7b, 0x2a, 0x52,
+ 0x9b, 0xe8, 0x78, 0xc7, 0x8f, 0x2f, 0x4d, 0xce, 0xa5, 0xb3,
+ 0x39, 00, 0xd7, 0x37, 0x57, 0x35, 0xab, 0x8f, 0xb5, 0x6a,
+ 0x73, 0x37, 0x3c, 0x1c, 0x55, 0x3a, 0xfc, 0x37, 0x15, 0x53,
+ 0xda, 0xd7, 0x9c, 0xdf, 0x73, 0xf9, 0xbf, 0x1b, 0x55, 0xd7,
+ 0xc4, 0xce, 0x6f, 0xb8, 0x51, 0x45, 0x15, 0xca, 0x71, 0x85,
+ 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51,
+ 0x40, 0x82, 0x8a, 0x28, 0xa0, 0x61, 0x45, 0x14, 0xaa, 0x37,
+ 0x11, 0x40, 0x87, 0x2c, 0x32, 0x49, 0xf7, 0x17, 0x35, 0xa3,
+ 0x61, 0xa0, 0xdc, 0xdd, 0x38, 0x6, 0x23, 0x8a, 0xe8, 0xbc,
+ 0x1f, 0xa6, 0xc3, 0x73, 0x22, 0xef, 0x40, 0xd9, 0xaf, 0x56,
+ 0xd3, 0xfc, 0x3f, 0x67, 0x4, 0x2a, 0xc2, 0x15, 0xce, 0x3d,
+ 0x5, 0x7d, 0x66, 0x5b, 0x92, 0x3c, 0x62, 0xf6, 0x8d, 0xe8,
+ 0x7d, 0xc6, 0x53, 0xc3, 0xaf, 0x1f, 0x15, 0x52, 0x52, 0xd0,
+ 0xe2, 0x3c, 0x39, 0xf0, 0xed, 0xe, 0xd9, 0x24, 0x8d, 0x78,
+ 0xe7, 0x9a, 0xf4, 0x5b, 0xd, 0x3e, 0x2b, 0x18, 0x42, 0x46,
+ 0xa1, 0x70, 0x3b, 0xa, 0x9d, 0x23, 0x58, 0x86, 0xd5, 0x18,
+ 0x1e, 0xd5, 0x20, 0xaf, 0xd1, 0x30, 0x78, 0xa, 0x38, 0x38,
+ 0xda, 0x9a, 0xd4, 0xfd, 0x5f, 0x1, 0x96, 0x61, 0xf2, 0xf8,
+ 0xda, 0x94, 0x75, 0x13, 0xaf, 0x14, 0xea, 0x28, 0xaf, 0x4c,
+ 0xf5, 0xc2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2,
+ 0x8a, 0x28, 0xa0, 0x4, 0x63, 0x81, 0x5e, 0x65, 0xf1, 0x42,
+ 0xff, 00, 0x65, 0xb1, 0x4c, 0xf5, 0xe3, 0x15, 0xe9, 0x53,
+ 0xb0, 0x48, 0xc9, 0x35, 0xe2, 0x3f, 0x12, 0xaf, 0xfc, 0xeb,
+ 0xc1, 0x18, 0x27, 0xad, 0x7c, 0xce, 0x7f, 0x5b, 0xd9, 0x61,
+ 0x1a, 0xee, 0x7c, 0x7f, 0x13, 0xe2, 0x3d, 0x8e, 0x6, 0x4b,
+ 0xb9, 0xc5, 0x8e, 0x94, 0x51, 0x45, 0x7e, 0x44, 0x7e, 0x12,
+ 0x82, 0x8a, 0x28, 0xa0, 0x60, 0x4e, 0x1, 0x35, 0xd2, 0x78,
+ 0x1a, 0xcf, 0xce, 0xbc, 0xdf, 0x8c, 0xf3, 0x5c, 0xd3, 0x9e,
+ 0x3d, 0xeb, 0xd1, 0x3e, 0x1b, 0xd8, 0xef, 0x2a, 0x71, 0xd6,
+ 0xbd, 0x4c, 0xb2, 0x97, 0xb6, 0xc5, 0xc5, 0x1e, 0xce, 0x4f,
+ 0x47, 0xdb, 0xe3, 0x61, 0x13, 0xd5, 0xf4, 0xc8, 0xbc, 0x9b,
+ 0x38, 0xc7, 0xb7, 0xf4, 0xab, 0x62, 0x99, 0x1a, 0x6d, 0x40,
+ 0x5, 0x49, 0x5f, 0xb6, 0x41, 0x72, 0xc5, 0x23, 0xfa, 0x26,
+ 0x11, 0xe5, 0x8a, 0x41, 0x45, 0x14, 0x55, 0x96, 0x14, 0x51,
+ 0x45, 00, 0x56, 0xd4, 0x25, 0xf2, 0x2d, 0x9d, 0xf3, 0x8c,
+ 0xa, 0xf0, 0x1f, 0x18, 0xdf, 0x1b, 0xbd, 0x5a, 0x4e, 0x73,
+ 0x83, 0x5e, 0xd3, 0xe2, 0xcb, 0xc1, 0x6d, 0xa6, 0xca, 0x73,
+ 0x8e, 0x3b, 0x57, 0xcf, 0xf7, 0xf3, 0x19, 0xef, 0x25, 0x7c,
+ 0xe7, 0x2c, 0x6b, 0xf3, 0xee, 0x27, 0xaf, 0x65, 0x1a, 0x49,
+ 0x9f, 0x97, 0x71, 0x96, 0x26, 0xca, 0x14, 0x13, 0x2b, 0xd1,
+ 0x45, 0x15, 0xf9, 0xe9, 0xf9, 0x58, 0x51, 0x45, 0x14, 00,
+ 0x1e, 0x95, 0xdf, 0xfc, 0x2d, 0xd3, 0x3e, 0xd5, 0x74, 0xf2,
+ 0x11, 0x9d, 0xa4, 0x73, 0x5c, 0xa, 0xae, 0xe6, 0x2, 0xbd,
+ 0x8f, 0xe1, 0x2d, 0x8f, 0x95, 0xa6, 0xcd, 0x21, 0x1c, 0x96,
+ 0xe2, 0xbe, 0x87, 0x22, 0xa3, 0xed, 0xb1, 0xb1, 0xbe, 0xc8,
+ 0xfa, 0xae, 0x19, 0xc3, 0xfd, 0x63, 0x30, 0x8d, 0xd6, 0x8b,
+ 0x53, 0xbe, 0x8e, 0x31, 0x1a, 0x80, 0x38, 0x2, 0xa4, 0xa4,
+ 0xc5, 0x2d, 0x7e, 0xc2, 0x7e, 0xf4, 0x95, 0xb4, 0xa, 0x28,
+ 0xa2, 0x98, 0xc2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0,
+ 0x4, 0xef, 0x51, 0xcc, 0xdb, 0x63, 0x6f, 0xa5, 0x4b, 0x55,
+ 0xef, 0x1b, 0x6c, 0xe, 0x6a, 0x64, 0xec, 0x9b, 0x22, 0x6e,
+ 0xd1, 0x6c, 0xf1, 0xff, 00, 0x89, 0x13, 0x81, 0x23, 0x2e,
+ 0x7a, 0xf1, 0x5c, 0x8, 0xe9, 0x5d, 0x4f, 0x8f, 0xee, 0xbc,
+ 0xed, 0x4c, 0xa8, 0xe9, 0x9f, 0xf1, 0xae, 0x5a, 0xbf, 0x12,
+ 0xcc, 0xe7, 0xed, 0x31, 0x73, 0x67, 0xf3, 0xbe, 0x73, 0x53,
+ 0xda, 0x63, 0x66, 0xd0, 0x51, 0x45, 0x15, 0xe5, 0x9e, 0x28,
+ 0x50, 0x68, 0xa0, 0xf4, 0xa0, 0xe, 0x87, 0xc1, 0x51, 0x19,
+ 0x2f, 0xd4, 0x1, 0x9c, 0xb5, 0x7b, 0xed, 0x82, 0x79, 0x76,
+ 0xb1, 0xaf, 0xb5, 0x78, 0xb7, 0xc3, 0x6b, 0x4f, 0x3b, 0x51,
+ 0x4e, 0x3a, 0x57, 0xb7, 0xa0, 0xc2, 0x81, 0xe9, 0x5f, 0xa9,
+ 0x70, 0xd5, 0x3e, 0x5c, 0x33, 0x91, 0xfb, 0x37, 0x7, 0xd1,
+ 0xe5, 0xc2, 0x39, 0xf7, 0x1d, 0x5c, 0x2f, 0xc4, 0x48, 0x8a,
+ 0x59, 0x3b, 0x9f, 0x43, 0x5d, 0xd5, 0x72, 0x5e, 0x3b, 0xb7,
+ 0x33, 0xd8, 0x95, 0x3, 0x23, 0x15, 0xee, 0xe6, 0x51, 0xe7,
+ 0xc2, 0xcd, 0x1f, 0x4d, 0x9b, 0xc3, 0x9f, 0x7, 0x51, 0x2e,
+ 0xc7, 0x83, 0xb0, 0xc3, 0xb7, 0xd6, 0x92, 0xa6, 0xbd, 0x4f,
+ 0x2e, 0xed, 0xd7, 0x18, 00, 0xd4, 0x35, 0xf8, 0x8b, 0x56,
+ 0x93, 0x47, 0xf3, 0xa4, 0x97, 0x2c, 0x9a, 0x61, 0x45, 0x14,
+ 0x52, 0x10, 0x51, 0x45, 0x14, 00, 0x11, 0x9a, 0x96, 0xda,
+ 0xf1, 0xad, 0x24, 0xc, 0x99, 0xcf, 0xb5, 0x45, 0x45, 0x34,
+ 0xda, 0x77, 0x40, 0x9b, 0x8b, 0xbc, 0x77, 0x3a, 0x9d, 0x27,
+ 0xc6, 0x97, 0x36, 0xec, 0x3e, 0x76, 0x15, 0xda, 0xe9, 0x7e,
+ 0x39, 0x69, 0x2, 0x87, 0x90, 0xfe, 0x38, 0xaf, 0x20, 0xcb,
+ 0xe, 0x86, 0xa5, 0x8e, 0xfa, 0xe2, 0x36, 0xf9, 0x5c, 0x8f,
+ 0xc6, 0xbd, 0xac, 0x2e, 0x71, 0x5f, 0xf, 0xa3, 0x6d, 0xa3,
+ 0xe8, 0xf0, 0x79, 0xee, 0x27, 0x9, 0xa3, 0x93, 0x68, 0xfa,
+ 0x2f, 0x4c, 0xd6, 0xe2, 0xbb, 0x41, 0x99, 0x6, 0x7e, 0xb5,
+ 0xa8, 0xb2, 0xa3, 0xf4, 0x60, 0x7e, 0x86, 0xbe, 0x7d, 0xd2,
+ 0xbc, 0x4d, 0x77, 0x6e, 0xc3, 0x32, 0x9f, 0xcc, 0xff, 00,
+ 0x8d, 0x76, 0xda, 0x1f, 0x8c, 0xcb, 0x32, 0x89, 0x1c, 0xe3,
+ 0xeb, 0xff, 00, 0xd7, 0xaf, 0xba, 0xc1, 0x67, 0xd4, 0xab,
+ 0x25, 0x19, 0xe8, 0xcf, 0xd2, 0x32, 0xfe, 0x26, 0xa3, 0x88,
+ 0x4a, 0x35, 0x34, 0x67, 0xa7, 0xd1, 0x59, 0x36, 0x1a, 0xed,
+ 0xbd, 0xd2, 0xf, 0x9b, 0x9f, 0xad, 0x6a, 0x2b, 0xac, 0x8b,
+ 0x90, 0x72, 0x2b, 0xea, 0xa1, 0x52, 0x35, 0x15, 0xe2, 0xcf,
+ 0xb5, 0xa7, 0x56, 0x15, 0x55, 0xe0, 0xee, 0x3a, 0x8a, 0x29,
+ 0xf, 0x4a, 0xd0, 0xd4, 0xab, 0x72, 0xdc, 0x1a, 0xc5, 0xbc,
+ 0x7e, 0xb5, 0xad, 0x74, 0xdc, 0x1a, 0xc2, 0xbd, 0x6c, 0x66,
+ 0x80, 0x31, 0xaf, 0x9f, 0x86, 0xae, 0x4b, 0x53, 0x93, 0x96,
+ 0xae, 0x9a, 0xfd, 0xfe, 0x53, 0x5c, 0x86, 0xa6, 0xfc, 0xb7,
+ 0xd6, 0x80, 0x39, 0xed, 0x4a, 0x4e, 0x1a, 0xb8, 0x9d, 0x62,
+ 0x5f, 0xbd, 0x5d, 0x66, 0xab, 0x2f, 0x6, 0xb8, 0x7d, 0x66,
+ 0x5f, 0xbd, 0x40, 0x1e, 0x77, 0xe3, 0xab, 0xcf, 0x2e, 0xd9,
+ 0xc6, 0xec, 0x7f, 0x91, 0x5f, 0x2e, 0xfc, 0x49, 0xbf, 0xdc,
+ 0xee, 0x3, 0x73, 0x5f, 0x42, 0xfc, 0x45, 0xbd, 0x28, 0x92,
+ 0x2e, 0x4e, 00, 0xff, 00, 0xa, 0xf9, 0x6f, 0xc7, 0x97,
+ 0x9e, 0x65, 0xd1, 00, 0xf1, 0xef, 0x5f, 0x2b, 0x9a, 0xcf,
+ 0xa1, 0xf1, 0x39, 0xdd, 0x5e, 0x88, 0xf3, 0xdd, 0x56, 0x4c,
+ 0x2b, 0x57, 0x21, 0x7e, 0xf9, 0x63, 0x5d, 0x36, 0xab, 0x27,
+ 0xc8, 0xd5, 0xc9, 0x5e, 0x3f, 0x26, 0xbc, 0xfc, 0x24, 0x74,
+ 0x3c, 0xcc, 0x14, 0x74, 0x33, 0xe7, 0x3c, 0x1a, 0xfa, 0xff,
+ 00, 0xfe, 0x9, 0xf7, 0xe1, 0x44, 0xbf, 0xbb, 0xd4, 0xef,
+ 0x9a, 0xdc, 0x39, 0xb9, 0xb9, 0x8a, 0xd7, 0x79, 0x52, 0x70,
+ 0x17, 0x24, 0xfb, 0x7f, 0x15, 0x7c, 0x79, 0x3b, 0x57, 0xe9,
+ 0x57, 0xfc, 0x13, 0xf3, 0xc2, 0x46, 0xc3, 0xc1, 0x7a, 0x1d,
+ 0xcb, 0xc6, 0x11, 0xe7, 0xf3, 0xae, 0x64, 0x52, 0x39, 0xce,
+ 0xf7, 0x55, 0x3d, 0x3d, 0x14, 0x57, 0xd2, 0xe1, 0x63, 0xef,
+ 0x5c, 0xfa, 0xfc, 0x14, 0x7d, 0xeb, 0x9f, 0x72, 0x41, 0x91,
+ 0x81, 0xe8, 0x2a, 0xfc, 0x24, 0xf1, 0x59, 0xf0, 0xe7, 0xd6,
+ 0xaf, 0xc2, 0x78, 0x15, 0xea, 0x9e, 0xd1, 0xa3, 0x5, 0x5e,
+ 0x84, 0xf4, 0xac, 0xfb, 0x7c, 0xd5, 0xf8, 0x4f, 0x2, 0x80,
+ 0x2e, 0xc4, 0x78, 0xab, 0x51, 0xf4, 0xaa, 0x90, 0xd5, 0xb8,
+ 0xce, 0x28, 0x2, 0xc2, 0xa, 0x9d, 0x2a, 0x4, 0x3c, 0x8a,
+ 0x99, 0xe, 0x7b, 0x50, 0x4, 0xa3, 0x9a, 0x91, 0x6a, 0x35,
+ 0xed, 0x52, 0x2d, 00, 0x3d, 0x69, 0x69, 0x1, 0xe2, 0x96,
+ 0x80, 0x14, 0x75, 0xa5, 0xcd, 0x36, 0x8a, 00, 0x29, 0xa4,
+ 0xd3, 0x8d, 0x46, 0xd4, 00, 0xc3, 0xe9, 0x4c, 0x63, 0x4f,
+ 0x3d, 0x6a, 0x26, 0x34, 0x1, 0x1c, 0x87, 0x8a, 0xab, 0x23,
+ 0x71, 0x56, 0x64, 0x38, 0xaa, 0x92, 0x9a, 00, 0xab, 0x2b,
+ 0x57, 0x87, 0xfe, 0xd6, 0x9e, 0x32, 0x8b, 0xc3, 0x1f, 0x7,
+ 0xf5, 0x5b, 0x7c, 0x31, 0xb9, 0xd5, 0x31, 0x69, 0xe, 0xd6,
+ 0x20, 0xa9, 0x24, 0x12, 0xdd, 0x3b, 0x7f, 0x5a, 0xf6, 0xd9,
+ 0x8e, 0x2b, 0xe2, 0xaf, 0xdb, 0x8b, 0xc4, 0x8d, 0xa8, 0xf8,
+ 0xc7, 0xc3, 0x5e, 0x1c, 0x42, 0x7, 0xd9, 0x22, 0x7b, 0x99,
+ 00, 0xce, 0x4f, 0x98, 0x50, 0x2f, 0xfe, 0x8b, 0x6a, 0xf1,
+ 0x73, 0x9c, 0x47, 0xd5, 0xb0, 0x35, 0x26, 0xb7, 0x6a, 0xcb,
+ 0xe6, 0x7c, 0xf6, 0x7f, 0x8a, 0xfa, 0x9e, 0x5d, 0x56, 0xa2,
+ 0xdd, 0xab, 0x2f, 0x9e, 0x86, 0xaf, 0xec, 0x75, 0xe0, 0xf6,
+ 0x8a, 0xd2, 0x7d, 0x51, 0xf6, 0xfc, 0xe7, 0x62, 0xf1, 0xce,
+ 0x32, 0x3f, 0xc2, 0xbe, 0xce, 0xd2, 0x21, 0xd9, 0x12, 0xd7,
+ 0x8a, 0x7e, 0xcf, 0x7e, 0x1a, 0x1a, 0x27, 0x82, 0x74, 0xe8,
+ 0xb6, 0x6d, 0x2c, 0xa1, 0xcf, 0x39, 0xeb, 0xff, 00, 0xeb,
+ 0xaf, 0x77, 0xb0, 0x8f, 0x6a, 0xa8, 0x14, 0x64, 0xf8, 0x7f,
+ 0xab, 0x60, 0xa1, 0xe, 0xb6, 0xb8, 0x64, 0x18, 0x55, 0x84,
+ 0xcb, 0xa9, 0x43, 0xab, 0x57, 0xfb, 0xcd, 0x4, 0x18, 0x51,
+ 0x4e, 0xa2, 0x8a, 0xf6, 0x8f, 0xa1, 0xa, 0x28, 0xa4, 0x3d,
+ 0x28, 0x3, 0xc6, 0xff, 00, 0x6a, 0xf, 0x16, 0xa7, 0x87,
+ 0x3e, 0x1e, 0xdd, 0x47, 0xf3, 0xee, 0x94, 0x1f, 0xb9, 0xe9,
+ 0xb4, 0xf7, 0xaf, 0xc1, 0x8f, 0xda, 0x2f, 0xc4, 0xff, 00,
+ 0xf0, 0x90, 0x78, 0xe2, 0xed, 0x6, 0xed, 0xab, 0x21, 0xea,
+ 0x73, 0xdc, 0xd7, 0xed, 0x17, 0xed, 0xb5, 0x75, 0x2a, 0xf8,
+ 0x3a, 0xf6, 0x4c, 0x8f, 0x2e, 0x28, 0xcf, 0xfe, 0x82, 0x6b,
+ 0xf0, 0x8f, 0xc7, 0x77, 0xe7, 0x51, 0xf1, 0x6e, 0xa3, 0x3e,
+ 0xed, 0xe0, 0xce, 0xc0, 0x1c, 0x7a, 0x13, 0x40, 0x1f, 0x50,
+ 0x7e, 0xc1, 0xde, 0xc, 0x4f, 0x10, 0x7c, 0x4f, 0xd1, 0x53,
+ 0x6a, 0x1f, 0x2a, 0x65, 0x90, 0x96, 0x1d, 0x31, 0x9a, 0xfd,
+ 0xc9, 0xf1, 0x5d, 0xf2, 0xe9, 0x5a, 0x4, 0xc7, 0xd1, 0x30,
+ 0x31, 0x5f, 0x85, 0x9f, 0xb0, 0xcf, 0x8e, 0x17, 0xc2, 0x9e,
+ 0x39, 0xb7, 0xbb, 0x99, 0xc4, 0x59, 0x91, 0x57, 0x79, 0x19,
+ 0xf5, 0xed, 0x5f, 0xae, 0x1f, 0x14, 0x7e, 0x33, 0x68, 0x3,
+ 0xc0, 0xb2, 0x3a, 0xea, 0x4a, 0xf2, 0x8b, 0x72, 0xc4, 0x8,
+ 0xd8, 0x64, 0xfa, 0x74, 0xa0, 0xf, 0xc9, 0xff, 00, 0xf8,
+ 0x28, 0x87, 0xc4, 0x65, 0xf1, 0x1f, 0x8f, 0xe, 0x99, 0x11,
+ 0x93, 0x11, 0x36, 0x58, 0x13, 0xc1, 0xae, 0x23, 0xf6, 0x47,
+ 0xf0, 0x2c, 0xbe, 0x25, 0xf1, 0xa6, 0x95, 0x12, 0x95, 0x1,
+ 0xee, 0x23, 0x24, 0xb0, 0xe3, 0x1b, 0x96, 0xbc, 0xef, 0xe3,
+ 0xc7, 0x89, 0x4f, 0x8c, 0x3e, 0x29, 0x6a, 0x17, 0xb, 0x28,
+ 0x9a, 0x22, 0xe1, 0x50, 0xa8, 0xc0, 0xaf, 0xb3, 0xff, 00,
+ 0xe0, 0x9d, 0x9e, 0x16, 0xb0, 0x6f, 0x16, 0x58, 0x5e, 0x5d,
+ 0x30, 0x55, 0x85, 0x91, 0x89, 0x24, 0x80, 0x30, 0x54, 0xd0,
+ 0x7, 0xea, 0xc7, 0x86, 0xed, 0xe2, 0xf0, 0x27, 0xc3, 0x8b,
+ 0x75, 0x97, 0x1, 0x2d, 0xad, 0x83, 0x36, 0xc1, 0x81, 0xf7,
+ 0x6b, 0xf2, 0x43, 0xf6, 0xf1, 0xf8, 0xf9, 0x6b, 0xe2, 0x29,
+ 0xf5, 0x1b, 0x2b, 0x4f, 0x3f, 0x73, 0x48, 0x54, 0x92, 0x7b,
+ 0x64, 0x57, 0xd8, 0x7f, 0xb6, 0x4f, 0xed, 0x61, 0x6b, 0xe1,
+ 0x3f, 0x8, 0xea, 0x1a, 0x4e, 0x97, 0x77, 0x13, 0x13, 0x19,
+ 0x52, 0x76, 0x1e, 0xc0, 0x8f, 0xee, 0xd7, 0xe2, 0xe7, 0x8d,
+ 0x7c, 0x5d, 0x71, 0xe2, 0xbd, 0x4a, 0xe2, 0xe6, 0x79, 0x37,
+ 0x99, 0x24, 0x2e, 0x4f, 0x4c, 0x93, 0xf8, 0x50, 0x4, 0xdf,
+ 0xe, 0xb4, 0x19, 0xbc, 0x4b, 0xe2, 0x9b, 0x4b, 0x48, 0xb1,
+ 0xba, 0x49, 0x54, 0x73, 0xcf, 0x7a, 0xfe, 0x84, 0xbf, 0x65,
+ 0x1f, 0x1, 0x1f, 0x3, 0xfc, 0x2b, 0xd2, 0xed, 0xdc, 0x26,
+ 0xe7, 0x8c, 0x11, 0xb5, 0x71, 0xc6, 0x2b, 0xf1, 0xf7, 0xf6,
+ 0x6, 0xf8, 0x42, 0xde, 0x37, 0xf8, 0x83, 0x5, 0xc4, 0x90,
+ 0x99, 0x12, 0x12, 0x8d, 0xf7, 0xb1, 0xd7, 0x77, 0x3d, 0x7d,
+ 0xab, 0xf7, 0x83, 0x47, 0xb0, 0x4d, 0x33, 0x4b, 0xb5, 0xb5,
+ 0x8c, 0x61, 0x62, 0x8c, 0x28, 0xfc, 0xa8, 0x2, 0xe1, 0xe9,
+ 0x5c, 0x37, 0x8f, 0xf5, 0x11, 0x5, 0x9c, 0xbd, 0x78, 0x6,
+ 0xbb, 0x79, 0x1b, 0x64, 0x6c, 0x7d, 0x5, 0x78, 0xf7, 0xc4,
+ 0xad, 0x40, 0x90, 0xc8, 0xf, 0x53, 0x8a, 0xf0, 0x33, 0x9c,
+ 0x47, 0xb0, 0xc2, 0xb3, 0xe5, 0xf8, 0x87, 0x13, 0xf5, 0x6c,
+ 0x14, 0x9f, 0x73, 0xcf, 0x59, 0xbc, 0xc9, 0x19, 0xfd, 0x4e,
+ 0x68, 0xa4, 0x5f, 0xba, 0x29, 0x6b, 0xf1, 0xb3, 0xf0, 0x1b,
+ 0xdf, 0x50, 0xa2, 0x8a, 0x28, 0x18, 0x51, 0x45, 0x48, 0x96,
+ 0xd2, 0xcc, 0x3f, 0x76, 0xb9, 0xa6, 0x93, 0x7b, 0x2, 0x4d,
+ 0xe8, 0x88, 0xe8, 0xa9, 0xbf, 0xb3, 0xae, 0xc7, 0xfc, 0xb3,
+ 0xa6, 0x35, 0xa5, 0xc2, 0x75, 0x43, 0x4f, 0x96, 0x6b, 0x74,
+ 0xca, 0xe4, 0x9a, 0xde, 0x2c, 0x65, 0x14, 0x6d, 0x75, 0x3f,
+ 0x32, 0xe2, 0x8a, 0x92, 0x7d, 0x42, 0x8a, 0x28, 0xa0, 0x2,
+ 0x94, 0x36, 0xd3, 0x9a, 0x4a, 0x28, 0x3, 0x7f, 0xc3, 0xfe,
+ 0x25, 0x6d, 0x3e, 0x75, 0x1, 0x9, 0xfa, 0x1a, 0xf6, 0xbf,
+ 0xd, 0xea, 0xff, 00, 0xda, 0x96, 0x6a, 0xc7, 0x83, 0x8e,
+ 0x84, 0xd7, 0xce, 0xab, 0x95, 0x91, 0x48, 0xf5, 0xaf, 0x5a,
+ 0xf8, 0x6d, 0x7e, 0xd2, 0xe1, 0x4b, 0x70, 0x2b, 0xed, 0x38,
+ 0x7b, 0x1d, 0x52, 0x35, 0xbd, 0x8c, 0x9e, 0x87, 0xe8, 0x3c,
+ 0x2b, 0x99, 0x54, 0x8d, 0x7f, 0xab, 0xc9, 0xe8, 0xcf, 0x4b,
+ 0xc5, 0x2d, 0x20, 0xe9, 0x4b, 0x5f, 0xa7, 0x9f, 0xb2, 0x5,
+ 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51,
+ 0x40, 0x5, 0x26, 0x78, 0xa5, 0xa4, 0x3d, 0x28, 0x2, 0x8e,
+ 0xad, 0x70, 0x20, 0xb5, 0x66, 0xf6, 0x35, 0xf3, 0xff, 00,
+ 0x8a, 0x6f, 0x3e, 0xd7, 0xab, 0x48, 0x7b, 0x3, 0xde, 0xbd,
+ 0xa3, 0xc6, 0x97, 0x9f, 0x67, 0xd3, 0xe4, 0x39, 0xc7, 0x15,
+ 0xe0, 0x97, 0x12, 0x19, 0xae, 0x65, 0x73, 0xd4, 0xb5, 0x7e,
+ 0x71, 0xc4, 0xf5, 0xef, 0x28, 0xd2, 0x47, 0xe4, 0xdc, 0x65,
+ 0x89, 0xbc, 0xa1, 0x41, 0x7a, 0x91, 0xd1, 0x45, 0x15, 0xf0,
+ 0x67, 0xe6, 0x61, 0x45, 0x14, 0x50, 0x20, 0x55, 0xf3, 0x26,
+ 0x8d, 0x7, 0x52, 0x6b, 0xd9, 0xfe, 0x1e, 0xe9, 0xc6, 0x18,
+ 0x51, 0xbd, 0x5, 0x79, 0x16, 0x8f, 0xf, 0x9f, 0xa8, 0xc6,
+ 0x7, 0x63, 0x5e, 0xf9, 0xe1, 0x2b, 0x51, 0xd, 0x8a, 0x9c,
+ 0x60, 0xe2, 0xbe, 0xc7, 0x86, 0xa8, 0x7b, 0x4a, 0xce, 0xa3,
+ 0xe8, 0x7d, 0xff, 00, 0x8, 0xe1, 0xbd, 0xa6, 0x21, 0xd5,
+ 0x7d, 0xd, 0xfa, 0x5a, 0x28, 0xaf, 0xd4, 0x8f, 0xd9, 0xc2,
+ 0x8a, 0x28, 0xa0, 0x2, 0x92, 0x8a, 0x6b, 0xb6, 0x10, 0x9a,
+ 0x4f, 0x41, 0x37, 0x63, 0x80, 0xf8, 0x95, 0xa9, 0xfd, 0x9e,
+ 0xc1, 0x97, 0x9e, 0x7d, 0xeb, 0xc6, 0xf3, 0xb8, 0x93, 0xeb,
+ 0x5e, 0x81, 0xf1, 0x3e, 0xf3, 0x7c, 0xfe, 0x5e, 0x7b, 0xf4,
+ 0xaf, 0x3f, 0x1d, 0x2b, 0xf1, 0xec, 0xf2, 0xb3, 0xad, 0x8c,
+ 0x92, 0xec, 0x7e, 0x9, 0xc4, 0x98, 0x8f, 0x6f, 0x8f, 0x92,
+ 0xed, 0xa0, 0x51, 0x45, 0x15, 0xf3, 0xc7, 0xcb, 0x5, 0x14,
+ 0x51, 0x43, 0xd8, 0xb, 0x16, 0x51, 0x19, 0x27, 0x51, 0xeb,
+ 0x5e, 0xf9, 0xe0, 0x7b, 0x1f, 0xb0, 0xe8, 0xa8, 0xa7, 0x92,
+ 0x79, 0xaf, 0x13, 0xf0, 0xdd, 0xbf, 0xda, 0x2f, 0xe2, 0x5c,
+ 0x67, 0x9a, 0xfa, 0xb, 0x4b, 0x84, 0x41, 0x65, 0x12, 0x1,
+ 0xd1, 0x45, 0x7d, 0xff, 00, 0xb, 0xd0, 0xf7, 0xa7, 0x54,
+ 0xfd, 0x43, 0x83, 0x70, 0xfe, 0xf4, 0xeb, 0x76, 0xd0, 0xb6,
+ 0x69, 0x68, 0xa2, 0xbf, 0x44, 0x3f, 0x55, 0xa, 0x28, 0xa2,
+ 0x80, 0xa, 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2, 0x80, 0x10,
+ 0xd6, 0x6e, 0xb7, 0x70, 0x2d, 0xec, 0xdc, 0x9f, 0x43, 0x5a,
+ 0x75, 0xca, 0x78, 0xea, 0xef, 0xc8, 0xd3, 0xe4, 0xe7, 0xb5,
+ 0x71, 0xe2, 0xea, 0x7b, 0x2a, 0x12, 0x97, 0x91, 0xc1, 0x8e,
+ 0xab, 0xec, 0x70, 0xf3, 0x9f, 0x64, 0x78, 0xb7, 0x88, 0xae,
+ 0xbe, 0xd7, 0xaa, 0xca, 0xdd, 0x81, 0x35, 0x9b, 0x4f, 0x99,
+ 0xbc, 0xc9, 0xe4, 0x73, 0xd4, 0xb1, 0x34, 0xca, 0xfc, 0x36,
+ 0xa4, 0xfd, 0xa4, 0xe5, 0x37, 0xd4, 0xfe, 0x6e, 0xad, 0x37,
+ 0x56, 0xa4, 0xa6, 0xfa, 0xb0, 0xa2, 0x8a, 0x2b, 0x23, 0x20,
+ 0xa5, 0x3, 0x26, 0x92, 0x9d, 0x1f, 0x2e, 0x5, 0x1b, 0xe8,
+ 0x1b, 0xe8, 0x7a, 0x7f, 0xc2, 0x6b, 0x2f, 0x32, 0x59, 0x65,
+ 0x3d, 0x16, 0xbd, 0x50, 0xa, 0xe1, 0x7e, 0x15, 0xda, 0x79,
+ 0x3a, 0x54, 0x92, 0xe3, 0x96, 0x35, 0xdd, 0xe, 0xa6, 0xbf,
+ 0x67, 0xc9, 0x69, 0xfb, 0x3c, 0x14, 0x17, 0x73, 0xfa, 0x7,
+ 0x87, 0xe9, 0x7b, 0x1c, 0xba, 0x9a, 0xef, 0xa8, 0xb5, 0x9d,
+ 0xac, 0xda, 0xb, 0xab, 0x39, 0x17, 0x19, 0x38, 0xad, 0x1a,
+ 0x6b, 0x28, 0x2a, 0x41, 0xe8, 0x6b, 0xd9, 0x9c, 0x54, 0xe2,
+ 0xe2, 0xfa, 0x9f, 0x41, 0x52, 0xa, 0xa4, 0x1c, 0x1f, 0x53,
+ 0xe7, 0x7f, 0x14, 0xe9, 0x6f, 0x63, 0x78, 0xf9, 0x23, 0x96,
+ 0xed, 0x58, 0x60, 0xe6, 0xbd, 0x87, 0xc7, 0x5e, 0x1c, 0x49,
+ 0x23, 0x79, 0x82, 0xe5, 0xb9, 0xef, 0x5e, 0x47, 0x75, 0x6e,
+ 0xf6, 0xf2, 0x95, 0xda, 0x47, 0x35, 0xf8, 0xce, 0x6b, 0x82,
+ 0x96, 0x12, 0xbb, 0xd3, 0x46, 0x7f, 0x3f, 0x67, 0x79, 0x7c,
+ 0xf0, 0x38, 0x97, 0xa6, 0x8c, 0x8a, 0x8a, 0x28, 0xaf, 0x14,
+ 0xf9, 0xf0, 0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a, 0x28, 0x1,
+ 0x69, 0x28, 0xa2, 0x80, 0x10, 0x83, 0xd8, 0xe2, 0x9f, 0x14,
+ 0xb2, 0xc4, 0x72, 0x24, 0x61, 0xf8, 0xd3, 0x68, 0xa3, 0x6d,
+ 0x50, 0x2d, 0x35, 0x47, 0x41, 0xa4, 0x78, 0xad, 0xac, 0x1d,
+ 0x77, 0xb3, 0xb7, 0xe2, 0x6b, 0xd4, 0xfc, 0x2b, 0xe3, 0x48,
+ 0xb5, 0x28, 0xfc, 0xb0, 0x87, 0x23, 0xb9, 0x35, 0xe1, 0x64,
+ 0xa, 0xd4, 0xd1, 0x35, 0x89, 0x6c, 0x2e, 0x6, 0xd3, 0x81,
+ 0x9a, 0xfa, 0x1c, 0xb7, 0x36, 0xad, 0x84, 0xa8, 0xa3, 0x27,
+ 0xee, 0x9f, 0x55, 0x94, 0xe7, 0xb5, 0xb0, 0x55, 0x14, 0x64,
+ 0xef, 0x13, 0xe9, 0x4, 0x90, 0x48, 0xa0, 0x8e, 0x86, 0x89,
+ 0x1b, 0xb, 0x5c, 0x9f, 0x84, 0xbc, 0x43, 0xf6, 0xe8, 0x57,
+ 0x7b, 0x73, 0x8e, 0xf5, 0xd4, 0x48, 0xfb, 0x97, 0x39, 0xaf,
+ 0xd6, 0x30, 0xf8, 0x88, 0x62, 0x29, 0xa9, 0xc4, 0xfd, 0xbf,
+ 0x9, 0x8a, 0x86, 0x2e, 0x92, 0xa9, 0xe, 0xa5, 0x1b, 0xb9,
+ 0x38, 0x35, 0x85, 0x7e, 0xfc, 0x1a, 0xd6, 0xbc, 0x6e, 0xb5,
+ 0x83, 0x7c, 0xfc, 0x9a, 0xea, 0x3b, 0xc, 0x4d, 0x46, 0x4c,
+ 0x29, 0xae, 0x43, 0x52, 0x97, 0x96, 0xfa, 0xd7, 0x4d, 0xa9,
+ 0x3f, 0x6, 0xb8, 0xfd, 0x4a, 0x4e, 0x5b, 0xeb, 0x40, 0x1c,
+ 0xe6, 0xaf, 0x2e, 0x33, 0x5c, 0x2e, 0xb5, 0x3f, 0xd, 0x5d,
+ 0x6e, 0xb1, 0x2f, 0xde, 0xaf, 0x3f, 0xf1, 0x1d, 0xcf, 0x97,
+ 0x6f, 0x29, 0xcf, 0x6a, 0x4d, 0xd9, 0x5c, 0x4d, 0xd9, 0x5c,
+ 0xf1, 0xaf, 0x89, 0x3a, 0x98, 0xb, 0x37, 0x5f, 0xf3, 0x8a,
+ 0xf9, 0x9b, 0xc5, 0x37, 0x66, 0x6b, 0xd9, 0xf, 0x6a, 0xf6,
+ 0xcf, 0x89, 0x3a, 0x9f, 0x33, 0xc, 0xd7, 0xcf, 0xda, 0xcc,
+ 0xfb, 0xe6, 0x90, 0xe7, 0xa9, 0xaf, 0x85, 0xc7, 0xd4, 0xe7,
+ 0xa9, 0x63, 0xf3, 0x5c, 0xd2, 0xa7, 0xb4, 0xad, 0x63, 0x99,
+ 0xd5, 0xa5, 0xf9, 0x1a, 0xb9, 0x6b, 0x97, 0xce, 0x6b, 0x7b,
+ 0x56, 0x93, 0x2a, 0xd5, 0xcd, 0xdc, 0x1c, 0xe6, 0xba, 0x70,
+ 0xd1, 0xb2, 0x3b, 0x70, 0x91, 0xb4, 0x48, 0x60, 0xb5, 0x6b,
+ 0xfb, 0xeb, 0x6b, 0x68, 0xf1, 0xbe, 0x69, 0x16, 0x35, 0xcf,
+ 0xa9, 0x20, 0xf, 0xe7, 0x5f, 0xb2, 0x7f, 0xb3, 0x7, 0x86,
+ 0x6, 0x83, 0xe1, 0x28, 0xd7, 0x6a, 0x2a, 0xc5, 0x4, 0x70,
+ 00, 00, 0x18, 0x60, 0x37, 0x1c, 0x7f, 0xdf, 0x55, 0xf9,
+ 0x3b, 0xf0, 0x4b, 0xc3, 0x6b, 0xe2, 0xdf, 0x8a, 0xde, 0x1f,
+ 0xd3, 0xdc, 0x6e, 0x8c, 0xce, 0x66, 0x3c, 0xe3, 0x1b, 0x14,
+ 0xb8, 0xee, 0x3b, 0xa8, 0xaf, 0xda, 0xf, 0x85, 0xda, 0x77,
+ 0xd8, 0x3c, 0x27, 0x6a, 0x48, 0xc3, 0xca, 0x59, 0xc8, 0xfc,
+ 0x48, 0x1f, 0xa6, 0x2b, 0xe9, 0x70, 0xd1, 0xb4, 0x5b, 0x3e,
+ 0xbb, 0x7, 0x1b, 0x45, 0xb3, 0xb8, 0x87, 0xa0, 0xab, 0xf0,
+ 0xf6, 0xaa, 0x30, 0x91, 0xc6, 0x6a, 0xf4, 0x18, 0xcd, 0x76,
+ 0x9e, 0x81, 0xa1, 0x6f, 0xf5, 0xab, 0xf1, 0xe, 0x95, 0x46,
+ 0xd6, 0xb4, 0x22, 0xc5, 00, 0x5b, 0x84, 0x1a, 0xb4, 0x83,
+ 0xa5, 0x55, 0x88, 0x71, 0x56, 0xa3, 0x18, 0xc5, 00, 0x59,
+ 0x41, 0x53, 0x20, 0xe2, 0xa0, 0x41, 0xc5, 0x4c, 0xbc, 0x1a,
+ 00, 0x99, 0x45, 0x48, 0x3a, 0x54, 0x4a, 0x4d, 0x48, 0xf,
+ 0x34, 00, 0xe1, 0xd6, 0x9d, 0x48, 0xb4, 0xb4, 00, 0x53,
+ 0xb1, 0x48, 0x3a, 0xd3, 0xa8, 0x2, 0x36, 0xa8, 0xc9, 0xe6,
+ 0x9e, 0x7a, 0xd4, 0x6c, 0x68, 0x1, 0x87, 0xa5, 0x46, 0xdd,
+ 0xaa, 0x46, 0xa8, 0x98, 0xe4, 0x50, 0x4, 0x32, 0x1a, 0xab,
+ 0x21, 0xe2, 0xac, 0x49, 0x55, 0x65, 0xa0, 0xa, 0x93, 0x9e,
+ 0x3a, 0xe2, 0xbf, 0x3b, 0xfc, 0x79, 0x7e, 0x3e, 0x24, 0xfe,
+ 0xd1, 0x5a, 0x9c, 0xd6, 0xf9, 0x7b, 0x53, 0x72, 0x91, 0x42,
+ 0x5f, 0xae, 0xc5, 0x51, 0xe9, 0xef, 0x9f, 0x5a, 0xfb, 0xcb,
+ 0xc7, 0xba, 0xfa, 0x78, 0x67, 0xc2, 0x1a, 0xc6, 0xa8, 0xf2,
+ 0x88, 0xbe, 0xc9, 0x6b, 0x24, 0xa1, 0x89, 0x3, 0x90, 0xa7,
+ 0x18, 0xcf, 0x72, 0x6b, 0xe1, 0x7f, 0xd9, 0x77, 0x43, 0x6f,
+ 0x10, 0xfc, 0x40, 0x96, 0xfe, 0x60, 0x66, 0xd8, 0x4c, 0xac,
+ 0xf2, 0x2, 0x4e, 0x49, 0x3f, 0xaf, 0x15, 0xf1, 0xb9, 0xfc,
+ 0x9d, 0x6a, 0x94, 0x30, 0x8b, 0xed, 0x4a, 0xef, 0xe4, 0x7c,
+ 0x7, 0x13, 0xc9, 0xd7, 0xab, 0x86, 0xc0, 0xc7, 0xed, 0xca,
+ 0xef, 0xe4, 0x7d, 0xdb, 0xe0, 0xad, 0x38, 0x59, 0x69, 0xf6,
+ 0xf0, 0x85, 00, 0x22, 0x81, 0x8f, 0xc2, 0xbb, 0xcb, 0x45,
+ 0xc0, 0xae, 0x7f, 0x42, 0xb7, 0x11, 0xc2, 0xbd, 0xb0, 0x2b,
+ 0xa5, 0xb7, 0x5c, 0x2d, 0x7d, 0x7c, 0x22, 0xa3, 0x15, 0x15,
+ 0xd0, 0xfb, 0xc8, 0x45, 0x42, 0xa, 0x2b, 0xa1, 0x35, 0x14,
+ 0x51, 0x56, 0x58, 0x52, 0x52, 0xd1, 0x40, 0x1f, 0x29, 0x7e,
+ 0xdf, 0xf3, 0x18, 0x7e, 0x16, 0x5d, 0x45, 0x1f, 0xfa, 0xc9,
+ 0x54, 0xff, 00, 0xe8, 0x2d, 0xd6, 0xbf, 0x7, 0xfc, 0x5b,
+ 0x6c, 0x6d, 0x75, 0x9b, 0x84, 0x63, 0x96, 0x2e, 0x4b, 0x1f,
+ 0x7c, 0x9a, 0xfe, 0x85, 0xff, 00, 0x6a, 0xef, 0x6, 0x45,
+ 0xe2, 0x7f, 0x1, 0x5f, 0x49, 0x2a, 0x9, 0x56, 0x18, 0x89,
+ 0x8, 0x47, 0x4, 0xed, 0x3e, 0xd5, 0xf8, 0x21, 0xf1, 0x97,
+ 0x40, 0x9f, 0x4c, 0xf1, 0x86, 0xa6, 0xcf, 0xf, 0x94, 0x82,
+ 0x76, 0x55, 0xe3, 0x1c, 0x66, 0x80, 0x39, 0x8f, 0xc, 0x78,
+ 0x92, 0xf7, 0x42, 0xd4, 0x21, 0x96, 0xda, 0xe1, 0xa1, 0xd8,
+ 0xc0, 0xe4, 00, 0x6b, 0xd7, 0xf5, 0xbf, 0xda, 0x3, 0x5a,
+ 0xd4, 0x34, 0x39, 0x6d, 0xa4, 0xd5, 0x26, 0x90, 0x3a, 0x6d,
+ 0xdb, 0xb5, 0x7a, 0x7a, 0x74, 0xaf, 0x4, 0xe9, 0x4e, 0xf3,
+ 0x1b, 0x18, 0xdc, 0x71, 0xe9, 0x9a, 00, 0xb0, 0x6e, 0xda,
+ 0x7b, 0xf3, 0x3c, 0x87, 0x73, 0x16, 0xdc, 0x7d, 0xeb, 0xd9,
+ 0xbe, 0x1d, 0x7c, 0x6b, 0xd5, 0x3c, 0x7, 0x67, 0x21, 0xb1,
+ 0xbb, 0x78, 0x58, 0xa1, 0x1f, 0x2e, 0x3d, 0x3d, 0xc1, 0xaf,
+ 0xf, 0xa7, 0x9, 0x5c, 0xc, 0x6, 0x38, 0xa0, 0xe, 0xe7,
+ 0xc7, 0x9f, 0x16, 0xf5, 0xcf, 0x1c, 0x5c, 0xca, 0xda, 0x85,
+ 0xdb, 0xce, 0xac, 0x7f, 0x88, 0x2f, 0x4f, 0xc0, 0xf, 0x5a,
+ 0xe3, 0xf4, 0xdd, 0x36, 0x6d, 0x4a, 0xea, 0x28, 0x62, 0x42,
+ 0xec, 0xec, 0x14, 0x62, 0xaa, 0xe0, 0xb1, 0xe9, 0x5f, 0x57,
+ 0xfe, 0xc9, 0xbf, 0xb3, 0x5d, 0xd7, 0xc4, 0x4d, 0x57, 0x4d,
+ 0xbe, 0x92, 0xdd, 0x9e, 0xdf, 0xcc, 0xc, 0x4e, 0xc2, 0x72,
+ 0x39, 0xff, 00, 0x64, 0xd0, 0x7, 0xdf, 0x5f, 0xf0, 0x4d,
+ 0xbf, 0x82, 0x6d, 0xe1, 0x8d, 0x12, 0x4d, 0x52, 0xee, 0xd9,
+ 0x11, 0x9d, 0x50, 0xa8, 0x7, 0xa6, 0x37, 0xff, 00, 0x8d,
+ 0x7d, 0xfa, 0x3a, 0x57, 0x23, 0xf0, 0xc3, 0xc1, 0x16, 0x7e,
+ 0x5, 0xf0, 0xad, 0x9e, 0x9f, 0x6b, 0x6e, 0x96, 0xe5, 0x63,
+ 0x1, 0x82, 0x80, 0x32, 0x79, 0xeb, 0xc0, 0xf5, 0xae, 0xba,
+ 0x80, 0x2a, 0x6a, 0x72, 0x88, 0xad, 0x5c, 0xe7, 0xb5, 0x78,
+ 0x37, 0x8e, 0x2f, 0x3e, 0xd3, 0xa9, 0x6d, 0x1c, 0xe0, 0x93,
+ 0x5e, 0xcf, 0xe2, 0x8b, 0x9f, 0x22, 0xc9, 0x86, 0x71, 0xc1,
+ 0x35, 0xe0, 0x5a, 0xc4, 0xff, 00, 0x69, 0xd4, 0xa5, 0x6c,
+ 0xf4, 0x35, 0xf9, 0xff, 00, 0x13, 0xd7, 0xb4, 0x63, 0x49,
+ 0x1f, 0x97, 0x71, 0x8e, 0x26, 0xd1, 0x8d, 0x14, 0x54, 0x1c,
+ 0x51, 0x45, 0x15, 0xf9, 0xe1, 0xf9, 0x50, 0x51, 0x45, 0x14,
+ 00, 0x60, 0xb1, 0x3, 0xd4, 0xd7, 0xa6, 0xf8, 0x43, 0xc3,
+ 0x2, 0xe2, 0xd9, 0x19, 0xa3, 0x7, 0x38, 0xeb, 0x5e, 0x75,
+ 0xa6, 0x40, 0x6e, 0x2f, 0xe2, 0x4e, 0xbf, 0x30, 0xeb, 0x5e,
+ 0xff, 00, 0xe1, 0x4b, 0x51, 0x5, 0x92, 0xc, 0x63, 00,
+ 0x57, 0xd5, 0xf0, 0xfe, 0xe, 0x38, 0x9a, 0xae, 0x53, 0x5a,
+ 0x23, 0xee, 0x38, 0x5b, 0x3, 0x1c, 0x5d, 0x79, 0x4e, 0x6b,
+ 0x44, 0x51, 0x1e, 0x10, 0x8b, 0xfe, 0x78, 0x8a, 0xa7, 0x7f,
+ 0xe0, 0xf8, 0xcc, 0x4d, 0xb6, 0x2e, 0x71, 0x5d, 0xc6, 0x29,
+ 0xa, 0x82, 0x30, 0x79, 0x1e, 0x95, 0xfa, 0x24, 0xb2, 0xec,
+ 0x3c, 0x95, 0xac, 0x7e, 0xab, 0x3c, 0xab, 0xd, 0x28, 0xdb,
+ 0x94, 0xf0, 0x7f, 0x11, 0x78, 0x66, 0x6b, 0x56, 0x66, 0x11,
+ 0xe0, 0x57, 0x28, 0xc8, 0x50, 0xe1, 0xba, 0x8a, 0xfa, 0xf,
+ 0xc5, 0x1a, 0x32, 0xde, 0x5a, 0x3e, 0xd4, 0x5e, 0x9e, 0x95,
+ 0xe1, 0x9a, 0xe5, 0x9f, 0xd9, 0x2f, 0x9d, 0x3d, 0xd, 0x7e,
+ 0x6d, 0x9d, 0x65, 0xdf, 0x53, 0x9f, 0x34, 0x76, 0x67, 0xe4,
+ 0x9c, 0x43, 0x94, 0xfd, 0x42, 0xa7, 0x3c, 0x36, 0x66, 0x75,
+ 0x14, 0x51, 0x5f, 0x32, 0x7c, 0x70, 0x51, 0x45, 0x14, 00,
+ 0x8e, 0x70, 0xb5, 0xe8, 0x9f, 0xd, 0xa6, 0xf2, 0x98, 0x28,
+ 0xfb, 0xc6, 0xbc, 0xf0, 0x8c, 0xd7, 0x71, 0xf0, 0xd9, 0x8b,
+ 0x6a, 0x4a, 0xf, 0xdd, 0x6, 0xbd, 0x9c, 0xa2, 0x5c, 0xb8,
+ 0xc8, 0x1e, 0xf6, 0x45, 0x3e, 0x5c, 0x7c, 0x2d, 0xd4, 0xf6,
+ 0xd5, 0xfb, 0xa2, 0x96, 0x9a, 0xad, 0x90, 0x29, 0xd5, 0xfb,
+ 0x51, 0xfd, 0xc, 0x82, 0x8a, 0x28, 0xa0, 0x61, 0x45, 0x14,
+ 0x50, 0x1, 0x45, 0x14, 0x50, 0x1, 0x4d, 0x3c, 0xa, 0x75,
+ 0x47, 0x29, 0xdb, 0x1b, 0x1a, 0x4, 0xcf, 0x3d, 0xf8, 0x97,
+ 0x7e, 0x12, 0xc9, 0x97, 0x38, 0x3c, 0xd7, 0x8f, 0xe, 0x71,
+ 0x5d, 0xe7, 0xc4, 0xeb, 0xff, 00, 0x32, 0xe4, 0x44, 0x9,
+ 0xc1, 0x35, 0xc2, 0x1, 0x81, 0x5f, 0x8d, 0xe7, 0x75, 0xbd,
+ 0xae, 0x31, 0xf9, 0x1f, 0x81, 0x71, 0x16, 0x23, 0xdb, 0xe3,
+ 0xe5, 0xe4, 0x14, 0x51, 0x45, 0x78, 0x7, 0xcc, 0x5, 0x4,
+ 0xe2, 0x8a, 0x47, 0xfb, 0xb4, 0x9, 0xec, 0x74, 0x1e, 0xb,
+ 0xb4, 0x33, 0xdf, 0x86, 0xc7, 0x7a, 0xf7, 0x9d, 0x26, 0x1f,
+ 0x26, 0xcd, 0x6, 0x3b, 0x57, 0x91, 0x7c, 0x3a, 0xb2, 0x2d,
+ 0x22, 0x31, 0x1d, 0x48, 0xaf, 0x67, 0x85, 0x76, 0x46, 0xa0,
+ 0x76, 0x15, 0xfa, 0x8f, 0xd, 0x50, 0xe4, 0xa0, 0xe7, 0xdc,
+ 0xfd, 0x9b, 0x84, 0x70, 0xfc, 0x98, 0x67, 0x51, 0xf5, 0x24,
+ 0xa2, 0x8a, 0x2b, 0xec, 0x8f, 0xd0, 0x2, 0x8a, 0x28, 0xa0,
+ 0x2, 0xa0, 0xba, 0x7d, 0x90, 0x39, 0xa9, 0xb3, 0x54, 0x35,
+ 0xa9, 0x3c, 0x9d, 0x3e, 0x56, 0xf4, 0x6, 0xb3, 0xa8, 0xf9,
+ 0x60, 0xd9, 0x95, 0x59, 0x72, 0x53, 0x94, 0x8f, 0xd, 0xf1,
+ 0xc5, 0xdf, 0xda, 0x75, 0x67, 0xe7, 0x80, 0x7a, 0x57, 0x36,
+ 0x3a, 0x56, 0x86, 0xb7, 0x31, 0x9a, 0xfe, 0x56, 0x3d, 0xcd,
+ 0x67, 0xd7, 0xe1, 0x58, 0xaa, 0x9e, 0xd2, 0xbc, 0xa5, 0xe6,
+ 0x7f, 0x36, 0x63, 0x6a, 0x3a, 0xb8, 0x99, 0xcd, 0xf7, 0xa,
+ 0x28, 0xa2, 0xb9, 0x4e, 0x20, 0xa2, 0x8a, 0x28, 0x7b, 0x9,
+ 0x9d, 0x57, 0x80, 0x6d, 0x4c, 0xda, 0xb2, 0x7a, 0xa, 0xf7,
+ 0x88, 0x57, 0x6a, 0x28, 0xf4, 0x18, 0xaf, 0x18, 0xf8, 0x61,
+ 0x16, 0xeb, 0xc3, 0x21, 0x1e, 0x9f, 0xd6, 0xbd, 0xa2, 0x3f,
+ 0xb8, 0x2b, 0xf5, 0x5e, 0x1b, 0x87, 0x26, 0x15, 0xbe, 0xe7,
+ 0xed, 0x9c, 0x23, 0x5, 0xc, 0x17, 0x37, 0x71, 0xf4, 0x51,
+ 0x45, 0x7d, 0x71, 0xf7, 0x41, 0x45, 0x14, 0x50, 0x1, 0x45,
+ 0x14, 0x50, 0x1, 0x45, 0x14, 0x50, 0x2, 0x31, 0xc0, 0xaf,
+ 0x33, 0xf8, 0x9d, 0x7f, 0xb6, 0xd8, 0xa0, 0x6e, 0xbc, 0x57,
+ 0xa3, 0x5d, 0xc9, 0xe5, 0xc0, 0xcd, 0xd3, 0x2, 0xbc, 0x47,
+ 0xe2, 0x2e, 0xa1, 0xf6, 0x8b, 0xad, 0x99, 0xef, 0x5f, 0x31,
+ 0x9f, 0xd7, 0xf6, 0x58, 0x57, 0x1e, 0xe7, 0xc7, 0x71, 0x3e,
+ 0x25, 0x50, 0xc1, 0x4a, 0x3d, 0x59, 0xc7, 0xe, 0x94, 0x50,
+ 0x6, 0x5, 0x15, 0xf9, 0x1f, 0x43, 0xf0, 0xae, 0x81, 0x45,
+ 0x14, 0x50, 0x30, 0xab, 0x16, 0x31, 0x19, 0x67, 0x50, 0x3d,
+ 0x71, 0x55, 0xc9, 0xc0, 0xad, 0x9f, 0xd, 0xda, 0x1b, 0x9b,
+ 0xd8, 0x94, 0xe, 0xac, 0x2b, 0x6a, 0x30, 0xf6, 0x95, 0x23,
+ 0x13, 0xa3, 0xd, 0x4f, 0xda, 0xd6, 0x8c, 0x17, 0x53, 0xda,
+ 0xbc, 0xf, 0x67, 0xf6, 0x3d, 0x16, 0x31, 0x8c, 0x64, 0xf,
+ 0xe5, 0x5d, 0x10, 0xaa, 0x5a, 0x4c, 0x1e, 0x45, 0x84, 0x29,
+ 0xe8, 0xa3, 0xf9, 0x55, 0xd1, 0x5f, 0xba, 0x61, 0xa9, 0xfb,
+ 0x2a, 0x31, 0x87, 0x64, 0x7f, 0x49, 0x61, 0x29, 0x7b, 0x1c,
+ 0x3c, 0x29, 0xf6, 0x42, 0xd1, 0x45, 0x15, 0xd2, 0x75, 0x95,
+ 0x6f, 0xac, 0xe3, 0xbc, 0x88, 0xa3, 0xae, 0x45, 0x79, 0x77,
+ 0x8b, 0xbc, 0x2b, 0x20, 0x67, 0x68, 0xa3, 0xe2, 0xbd, 0x68,
+ 0xd5, 0x5b, 0xdb, 0x18, 0xee, 0xa2, 0x21, 0x91, 0x49, 0x3e,
+ 0xa2, 0xbc, 0xac, 0x7e, 0x2, 0x18, 0xd8, 0x59, 0xee, 0x78,
+ 0x99, 0x9e, 0x5b, 0x4f, 0x30, 0xa4, 0xe3, 0x2d, 0xcf, 0x9a,
+ 0x6e, 0x2c, 0xa5, 0xb5, 0x94, 0x87, 0x18, 0xc5, 0x45, 0x91,
+ 0x5e, 0xa5, 0xe2, 0x6f, 0x3, 0xc9, 0x2b, 0xbb, 0xa2, 0xc,
+ 0x67, 0xb0, 0xff, 00, 0xeb, 0x57, 0x5, 0xa8, 0x78, 0x72,
+ 0x5b, 0x27, 0x6d, 0xd9, 0xfc, 0xab, 0xf2, 0x7c, 0x66, 0x5b,
+ 0x5b, 0xb, 0x26, 0xad, 0xa1, 0xf8, 0x86, 0x3f, 0x28, 0xc4,
+ 0x60, 0xa6, 0xd3, 0x8b, 0xb1, 0x95, 0x45, 0xc, 0x36, 0x1c,
+ 0x1a, 0x40, 0xd9, 0xaf, 0x26, 0xfd, 0x19, 0xe1, 0xdf, 0x5b,
+ 0x31, 0x68, 0xa2, 0x8a, 0x6, 0x14, 0x51, 0x45, 00, 0x14,
+ 0x51, 0x45, 00, 0x14, 0x8d, 0x91, 0xf7, 0x78, 0x34, 0xb4,
+ 0x52, 0x62, 0x67, 0x51, 0xe0, 0xfd, 0x65, 0xed, 0xee, 0xa3,
+ 0x46, 0x73, 0x8e, 0xf5, 0xec, 0xb6, 0x17, 0xe9, 0x75, 0x6c,
+ 0x19, 0x4e, 0x70, 0x2b, 0xe7, 0x5b, 0x4b, 0x83, 0x6d, 0x3a,
+ 0xb6, 0x71, 0xcd, 0x7b, 0x17, 0x84, 0x35, 0x4f, 0x32, 0xc5,
+ 0x17, 0x24, 0x9c, 0x77, 0xaf, 0xbe, 0xe1, 0xbc, 0x6b, 0xbb,
+ 0xa3, 0x23, 0xf4, 0xee, 0x12, 0xcc, 0x24, 0xe4, 0xe8, 0x49,
+ 0x9b, 0xf7, 0x8f, 0xd6, 0xb9, 0xfb, 0xc7, 0xeb, 0x5b, 0x37,
+ 0xb2, 0x71, 0x9a, 0xc0, 0xbe, 0x6c, 0x3, 0x5f, 0xa3, 0x1f,
+ 0xac, 0x18, 0x1a, 0x94, 0x9d, 0x6b, 0x90, 0xd4, 0xe4, 0xfb,
+ 0xf5, 0xd3, 0x6a, 0x72, 0x7d, 0xea, 0xe3, 0xf5, 0x59, 0x30,
+ 0x1a, 0x80, 0x39, 0x5d, 0x62, 0x5f, 0xbd, 0x5e, 0x6b, 0xe3,
+ 0x2b, 0xbf, 0x2a, 0xcd, 0xf9, 0xc5, 0x77, 0xda, 0xcc, 0xbf,
+ 0x7a, 0xbc, 0x9b, 0xe2, 0x15, 0xe6, 0xcb, 0x76, 0x5c, 0x90,
+ 0x70, 0x6b, 0x1a, 0xd2, 0xe5, 0x83, 0x67, 0x3e, 0x22, 0x5c,
+ 0x94, 0xdb, 0x3e, 0x7a, 0xf8, 0x8d, 0x7d, 0x9f, 0x37, 0x9f,
+ 0xf3, 0xc5, 0x78, 0xae, 0xa5, 0x27, 0x5a, 0xf4, 0xaf, 0x88,
+ 0x37, 0xa5, 0xe5, 0x71, 0x93, 0x9c, 0xd7, 0x96, 0x6a, 0x4f,
+ 0xc1, 0xe6, 0xbe, 0x2, 0xab, 0xe7, 0xaa, 0x7e, 0x5f, 0x59,
+ 0xfb, 0x4a, 0xe7, 0x39, 0xaa, 0x3e, 0x41, 0xac, 0x9, 0xdb,
+ 0xad, 0x6b, 0xea, 0x32, 0x64, 0xb5, 0x62, 0x5c, 0x36, 0x33,
+ 0x5e, 0xd6, 0x1d, 0x59, 0x1f, 0x47, 0x86, 0x8d, 0xa2, 0x7d,
+ 0x1, 0xfb, 0x15, 0x78, 0x69, 0xb5, 0x6f, 0x89, 0x37, 0x37,
+ 0xec, 0xa0, 0xa5, 0xad, 0xb9, 0x44, 0x6c, 0xf2, 0x1d, 0x88,
+ 0x5f, 0xe4, 0x4d, 0x7e, 0xb8, 0xe8, 0x76, 0xcb, 0x67, 0xa5,
+ 0xda, 0x40, 0xa3, 0x2, 0x38, 0xc0, 0xfc, 0x7b, 0xd7, 0xe7,
+ 0x67, 0xfc, 0x13, 0xe3, 0xc1, 0xd1, 0x4b, 0x63, 0x2e, 0xa0,
+ 0xc8, 0xb2, 0x49, 0x7d, 0x76, 00, 0x2c, 0x73, 0x85, 0x8f,
+ 0x77, 0x1f, 0xa5, 0x7e, 0x8e, 0xc1, 0xc6, 00, 0x15, 0xf4,
+ 0xb4, 0x55, 0xa0, 0x8f, 0xad, 0xc3, 0xc6, 0xd4, 0xd1, 0xa1,
+ 00, 0xab, 0xf0, 0xad, 0x52, 0x87, 0x3c, 0x55, 0xe8, 0x8f,
+ 0x2, 0xb6, 0x3a, 0xd, 0xb, 0x61, 0xc5, 0x5f, 0x88, 0x55,
+ 0x2b, 0x6e, 0x95, 0x7a, 0x3a, 00, 0xb7, 0x17, 0x41, 0x56,
+ 0x63, 0xc7, 0x15, 0x5e, 0x31, 0x56, 0x63, 0x1d, 0x28, 0x2,
+ 0xc2, 0xc, 0xd4, 0xcb, 0x51, 0x46, 0x2a, 0x55, 0xe9, 0x40,
+ 0x12, 0x2f, 0x6a, 0x91, 0x6a, 0x31, 0x52, 0x2d, 00, 0x3d,
+ 0x7a, 0x52, 0xd0, 0x38, 0xa2, 0x80, 0x15, 0x69, 0xd4, 0x8b,
+ 0x4b, 0x40, 0x10, 0xb7, 0x7a, 0x63, 0x53, 0x9a, 0xa3, 0x63,
+ 0xcd, 00, 0x31, 0x8d, 0x44, 0xfc, 0xa, 0x91, 0xba, 0x54,
+ 0x32, 0x1a, 00, 0x86, 0x43, 0x55, 0x65, 0x35, 0x3c, 0x86,
+ 0xaa, 0x4e, 0x7e, 0x53, 0x40, 0x1f, 0x3f, 0xfe, 0xd9, 0xbe,
+ 0x29, 0x6d, 0x7, 0xe1, 0x14, 0xf6, 0x71, 0x48, 0xb1, 0xcd,
+ 0xa9, 0xdc, 0x47, 0x2, 0xe4, 0xe0, 0x90, 0x18, 0x33, 0x1,
+ 0xcf, 0xa0, 0x3f, 0xad, 0x71, 0x9f, 0xb1, 0xdf, 0x85, 0x7e,
+ 0xcd, 0xa3, 0x5c, 0x6a, 0xf, 0x11, 0xd, 0x29, 0x50, 0xac,
+ 0x47, 0x61, 0x9e, 0x9c, 0x7b, 0xd7, 0x37, 0xfb, 0x70, 0xf8,
+ 0x88, 0x6a, 0x9e, 0x30, 0xf0, 0xf7, 0x87, 0xa1, 0x90, 0xc8,
+ 0xb6, 0xf1, 0x19, 0xe5, 0x8c, 0x64, 0x6d, 0x90, 0x92, 0x7,
+ 0x5e, 0x3e, 0xe9, 0x15, 0xef, 0xdf, 00, 0x3c, 0x34, 0x34,
+ 0x2f, 0x6, 0xe9, 0xf0, 0x14, 0x28, 0xc5, 0x77, 0x30, 0x3e,
+ 0xbc, 0xd7, 0xc6, 0x47, 0xfd, 0xaf, 0x3b, 0x72, 0xe9, 0x4d,
+ 0x5b, 0xe6, 0x7e, 0x7d, 0xf, 0xf6, 0xee, 0x23, 0x94, 0xba,
+ 0x52, 0x8d, 0xbe, 0x67, 0xb2, 0xe9, 0xd1, 0xed, 0x45, 0xad,
+ 0xa8, 0xc6, 0x14, 0x55, 0xb, 0x48, 0xf8, 0x5a, 0xd1, 0x15,
+ 0xf6, 0x67, 0xe8, 0x22, 0xd1, 0x45, 0x14, 00, 0x51, 0x45,
+ 0x66, 0xea, 0x5e, 0x21, 0xd3, 0xf4, 0x90, 0x7e, 0xd5, 0x75,
+ 0x1c, 0x24, 0x7f, 0x78, 0xd0, 0x5, 0xf, 0x1c, 0x68, 0x6b,
+ 0xe2, 0x1d, 0x2, 0xe2, 0xcd, 0xa3, 0xf3, 0x3, 0x83, 0xf2,
+ 0x81, 0x9c, 0xf1, 0x5f, 0x91, 0x1f, 0xb6, 0x9f, 0xec, 0xd9,
+ 0xa8, 0xc7, 0xad, 0xdc, 0xde, 0xdb, 0x58, 0x4b, 0xd, 0xb0,
+ 0x25, 0x8b, 0x8, 0xf6, 0x82, 0x72, 0x7d, 0x16, 0xbf, 0x5d,
+ 0x2d, 0xfe, 0x20, 0x68, 0x57, 0x2c, 0x55, 0x75, 0x2b, 0x72,
+ 0x7a, 0x63, 0x75, 0x79, 0xd7, 0xc6, 0x1f, 0x86, 0x3a, 0x5f,
+ 0xc5, 0xd, 0x2d, 0xe1, 0x49, 0x63, 0x98, 0xb2, 0x9e, 0x51,
+ 0x80, 0x3d, 0xe8, 0x3, 0xf9, 0xd6, 0xd7, 0xf4, 0x9, 0x74,
+ 0x3b, 0xb6, 0x86, 0x51, 0x86, 0x4, 0xf0, 0x7f, 0xfd, 0x55,
+ 0x93, 0x5f, 0xa5, 0x3f, 0x1b, 0xbf, 0x60, 0xa4, 0xb7, 0xbb,
+ 0x96, 0xed, 0x2d, 0x2e, 0x32, 0x73, 0x8d, 0xb2, 0x8e, 0x79,
+ 0xff, 00, 0x7a, 0xbe, 0x72, 0xbd, 0xfd, 0x91, 0xee, 0x60,
+ 0x99, 0x90, 0x59, 0xdc, 0x8c, 0x1c, 0x7f, 0xac, 0x7, 0xfa,
+ 0xd0, 0x7, 0xcc, 0x75, 0x7f, 0x4d, 0xd0, 0xef, 0x75, 0x67,
+ 0x9, 0x6b, 0x3, 0xca, 0xc7, 0x80, 0x14, 0x75, 0xaf, 0xa6,
+ 0xf4, 0x1f, 0xd8, 0x9b, 0x56, 0xd7, 0xa7, 0xf2, 0xe1, 0xb5,
+ 0xbc, 0x27, 0x3d, 0x99, 0x7f, 0xc6, 0xbe, 0x9e, 0xf8, 0x23,
+ 0xff, 00, 0x4, 0xe9, 0xbe, 0xd3, 0x6e, 0x2d, 0x6e, 0xef,
+ 0xec, 0x2e, 0xda, 0x35, 0x60, 0x49, 0x77, 0x4c, 0x75, 0x1e,
+ 0xf4, 0x1, 0xf2, 0xbf, 0xec, 0xdf, 0xfb, 0x2a, 0x78, 0x83,
+ 0xc7, 0x5a, 0xd4, 0x7f, 0x6e, 0xd1, 0xe7, 0x10, 0x6f, 0x1c,
+ 0xbc, 0x67, 0x18, 0xf7, 0xca, 0x9a, 0xfd, 0x9b, 0xfd, 0x9f,
+ 0xbe, 00, 0x69, 0x1f, 0xc, 0x7c, 0x2d, 0x60, 0x89, 0x6c,
+ 0x91, 0xdc, 0x2a, 0x2, 0x54, 0x46, 0xa3, 0x1f, 0xf8, 0xe8,
+ 0xad, 0x8f, 0x84, 0xbf, 0x4, 0x74, 0x4f, 00, 0xe9, 0xc8,
+ 0x23, 0xd3, 0xc4, 0x73, 0x80, 0x39, 0x63, 0x9e, 0xc2, 0xbd,
+ 0x4d, 0x50, 0x20, 00, 0xc, 0x28, 0xe8, 0x5, 00, 0x28,
+ 0x18, 0x14, 0xb4, 0x87, 0xa5, 0x32, 0x46, 0xd8, 0xa4, 0xfa,
+ 0xa, 0x5b, 0x6, 0xc7, 0xf, 0xf1, 0xb, 0x50, 0xf2, 0x6d,
+ 0x64, 00, 0xe3, 0x8c, 0x57, 0x8a, 0x96, 0x2f, 0x23, 0xb1,
+ 0xee, 0x4d, 0x7a, 0x27, 0xc4, 0xbd, 0x43, 0x24, 0xc6, 0xf,
+ 0x27, 0xb5, 0x79, 0xd2, 0xf4, 0xaf, 0xc8, 0x33, 0xda, 0xfe,
+ 0xdb, 0x16, 0xd7, 0x63, 0xf0, 0x5e, 0x25, 0xc4, 0x7b, 0x7c,
+ 0x6b, 0x8d, 0xf6, 0x16, 0x8a, 0x28, 0xaf, 0x9c, 0x3e, 0x50,
+ 0x28, 0xa2, 0x83, 0x43, 0x3, 0x7f, 0xc1, 0x36, 0x5f, 0x6a,
+ 0xd5, 0x15, 0x88, 0x27, 0x6, 0xbd, 0xef, 0x4c, 0x88, 0x45,
+ 0x6c, 0xa0, 0x57, 0x92, 0xfc, 0x33, 0xd3, 0xf7, 0x3f, 0x9a,
+ 0x57, 0x8c, 0xf5, 0xaf, 0x62, 0x85, 0x76, 0x46, 0x7, 0xb5,
+ 0x7e, 0xa5, 0xc3, 0x74, 0x39, 0x30, 0xfc, 0xef, 0xa9, 0xfb,
+ 0x3f, 0x8, 0xe1, 0xbd, 0x96, 0x13, 0xda, 0x35, 0xb9, 0x25,
+ 0x14, 0x51, 0x5f, 0x62, 0x7d, 0xf1, 0xd, 0xd2, 0x6f, 0x81,
+ 0xd7, 0xd4, 0x57, 0x88, 0x7c, 0x41, 0xb2, 0xfb, 0x35, 0xe1,
+ 0x2a, 0x39, 0x26, 0xbd, 0xd1, 0xba, 0x57, 0x92, 0x7c, 0x4b,
+ 0xb7, 0xcc, 0xed, 0x21, 0x18, 0x2, 0xbe, 0x53, 0x88, 0xa9,
+ 0x29, 0xe1, 0x5c, 0xbb, 0x1f, 0x15, 0xc5, 0x54, 0x55, 0x4c,
+ 0x13, 0x97, 0x63, 0xcd, 0x68, 0xa4, 0x53, 0x9c, 0xd2, 0xd7,
+ 0xe4, 0xc8, 0xfc, 0x39, 0x5, 0x14, 0x51, 0x4c, 0x60, 0x78,
+ 0x15, 0xda, 0xfc, 0x3e, 0x95, 0x61, 0xb8, 0x51, 0xc6, 0xe2,
+ 0x6b, 0x8a, 0xae, 0xb7, 0xc0, 0x7, 0x76, 0xa6, 0xa0, 0xf4,
+ 0x6, 0xbd, 0x4c, 0xb1, 0xdb, 0x15, 0xb, 0x77, 0x3d, 0x8c,
+ 0x9e, 0x5c, 0xb8, 0xd8, 0x58, 0xf7, 0x58, 0xbe, 0xe2, 0xfd,
+ 0x29, 0xfd, 0xe9, 0x91, 0x30, 0x64, 0x52, 0x3d, 0x29, 0xe2,
+ 0xbf, 0x6e, 0x5b, 0x1f, 0xd1, 0x6b, 0x64, 0x2d, 0x14, 0x51,
+ 0x4c, 0xa0, 0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a, 0x28, 00,
+ 0xaa, 0x5a, 0x94, 0xe2, 0xb, 0x57, 0x24, 0xf6, 0xab, 0xb5,
+ 0xce, 0x78, 0xc6, 0xf0, 0x5b, 0x69, 0xd2, 0x1d, 0xd8, 0xe2,
+ 0xb9, 0xb1, 0x35, 0x3d, 0x95, 0x29, 0x4f, 0xb1, 0xc9, 0x8b,
+ 0xab, 0xec, 0x68, 0x4a, 0x6f, 0xa2, 0x3c, 0x63, 0xc6, 0x17,
+ 0xa2, 0xf3, 0x56, 0x72, 0xe, 0x42, 0xd6, 0x1d, 0x4d, 0x79,
+ 0x31, 0x9e, 0xee, 0x57, 0x3d, 0xda, 0xa1, 0xaf, 0xc3, 0x2b,
+ 0xd4, 0x75, 0x6a, 0xca, 0x6f, 0xab, 0x3f, 0x9b, 0x71, 0x35,
+ 0x5d, 0x6a, 0xf3, 0xa8, 0xfa, 0xb0, 0xa2, 0x8a, 0x2b, 0x3,
+ 0x9c, 0x29, 0xa, 0xee, 0x65, 0x5f, 0x53, 0x4b, 0x53, 0xe9,
+ 0x90, 0xfd, 0xa2, 0xfe, 0x35, 0x3, 0x38, 0x34, 0xd4, 0x79,
+ 0x9a, 0x8a, 0xea, 0x38, 0xc7, 0x9e, 0x4a, 0x2b, 0xa9, 0xeb,
+ 0x1f, 0xf, 0x74, 0xfd, 0x91, 0xc6, 0xdb, 0x7d, 0xeb, 0xd1,
+ 0x47, 0x15, 0xcd, 0x78, 0x36, 0xd3, 0xc9, 0xb3, 0x7, 0x18,
+ 0xe2, 0xba, 0x6c, 0x75, 0xaf, 0xdb, 0x72, 0xca, 0x5e, 0xc7,
+ 0xd, 0x14, 0x7f, 0x44, 0xe4, 0xf4, 0x15, 0xc, 0x24, 0x22,
+ 0x2d, 0x14, 0x51, 0x5e, 0xa9, 0xed, 0x85, 0x14, 0x51, 0x40,
+ 0x8, 0x6b, 0xb, 0xc5, 0xf2, 0x98, 0xb4, 0xa9, 0x31, 0xdc,
+ 0x1a, 0xde, 0xae, 0x77, 0xc6, 0x43, 0x36, 0x4, 0x76, 0xc5,
+ 0x71, 0xe3, 0x1d, 0xa8, 0x4e, 0xdd, 0x8e, 0xc, 0x7b, 0x6b,
+ 0xd, 0x3b, 0x76, 0x3c, 0x13, 0x53, 0x38, 0xb9, 0x23, 0xbe,
+ 0x6a, 0xb5, 0x58, 0xd4, 0x9b, 0x75, 0xf4, 0x9f, 0x5a, 0xaf,
+ 0x5f, 0x86, 0x54, 0xf8, 0xe4, 0x7f, 0x36, 0xd5, 0xd6, 0xa4,
+ 0x98, 0x51, 0x45, 0x15, 0x99, 0x98, 0x52, 0x31, 0xc0, 0xa5,
+ 0xa0, 0x8d, 0xd8, 0xa1, 0x89, 0xec, 0x7a, 0x6f, 0xc3, 0x5b,
+ 0x70, 0x81, 0x78, 0xe6, 0xbd, 0x61, 0x46, 0x14, 0x57, 0x94,
+ 0x7c, 0x33, 0x2d, 0x2c, 0xff, 00, 0xec, 0x8a, 0xf5, 0x71,
+ 0x5f, 0xb0, 0x64, 0x4b, 0xfd, 0x8e, 0x36, 0x3f, 0x7a, 0xe1,
+ 0xa4, 0x96, 0x6, 0x2d, 0xb, 0x45, 0x14, 0x57, 0xd1, 0x9f,
+ 0x58, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14,
+ 0x51, 0x4d, 0x24, 0x1, 0xcf, 0x14, 0x1, 0x8d, 0xe2, 0x7d,
+ 0x41, 0x6c, 0xec, 0xce, 0x58, 0xc, 0xfa, 0xd7, 0x82, 0xf8,
+ 0x86, 0xf3, 0xed, 0x9a, 0x8b, 0x1c, 0xe7, 0x7, 0xd6, 0xbd,
+ 0x1b, 0xe2, 0x4e, 0xba, 0xaa, 0xfe, 0x4a, 0x3f, 0x23, 0xd2,
+ 0xbc, 0xa5, 0xcf, 0x99, 0x23, 0x31, 0xee, 0x6b, 0xf2, 0xde,
+ 0x23, 0xc6, 0x2a, 0xb5, 0xbd, 0x94, 0x7a, 0x1f, 0x8b, 0xf1,
+ 0x66, 0x3f, 0xdb, 0x57, 0xf6, 0x11, 0x7a, 0x21, 0x28, 0xa2,
+ 0x8a, 0xf8, 0xe3, 0xe0, 0x82, 0x8a, 0x28, 0xa0, 0x4, 0x6e,
+ 0x46, 0x2b, 0xbb, 0xf8, 0x7f, 0xa6, 0x99, 0xaf, 0xa3, 0x25,
+ 0x4e, 0x1, 0xae, 0x1e, 0x4, 0x32, 0xdc, 0xc6, 0x83, 0xa9,
+ 0x23, 0x8a, 0xf6, 0x7f, 0x87, 0xfa, 0x4f, 0xd9, 0xe3, 0x12,
+ 0x15, 0x23, 0x23, 0x39, 0xaf, 0xa0, 0xc8, 0xf0, 0xde, 0xdf,
+ 0x12, 0x9f, 0x44, 0x7d, 0x4f, 0xe, 0x61, 0x1e, 0x27, 0x18,
+ 0x9f, 0x44, 0x77, 0x48, 0xbb, 0x42, 0x8f, 0x41, 0x4e, 0x14,
+ 0xb4, 0x57, 0xec, 0x67, 0xef, 0x76, 0xa, 0x28, 0xa2, 0x81,
+ 0x85, 0x21, 0xa5, 0xa2, 0x80, 0x20, 0x96, 0x15, 0x99, 0x76,
+ 0xb0, 0xac, 0x1d, 0x53, 0xc2, 0x10, 0x5e, 0xab, 0x1c, 0x2,
+ 0x6b, 0xa5, 0xa4, 0x35, 0xcf, 0x56, 0x85, 0x3a, 0xca, 0xd5,
+ 0x15, 0xce, 0x5a, 0xf8, 0x6a, 0x58, 0x85, 0x6a, 0x91, 0xb9,
+ 0xe4, 0x3a, 0xc7, 0x80, 0x12, 0x1d, 0xc5, 0x53, 0xf4, 0xff,
+ 00, 0xeb, 0x57, 0x1d, 0xa9, 0xe8, 0x8d, 0x66, 0x4f, 0xc8,
+ 0xdc, 0x7b, 0x57, 0xd0, 0xf3, 0x59, 0x45, 0x36, 0x77, 0x2e,
+ 0x73, 0x58, 0x7a, 0xb7, 0x84, 0xad, 0x6e, 0x50, 0x9d, 0x9c,
+ 0xd7, 0xc8, 0x63, 0x78, 0x7a, 0x35, 0x13, 0x95, 0x1d, 0x19,
+ 0xf0, 0x99, 0x8f, 0xb, 0x42, 0xa2, 0x72, 0xa0, 0x92, 0x3e,
+ 0x7d, 0x60, 0xca, 0x70, 0x54, 0xfe, 0x22, 0x94, 0x74, 0xaf,
+ 0x46, 0xd7, 0x3c, 0x1b, 0xe5, 0x6, 0x31, 0xc4, 0x4d, 0x70,
+ 0xba, 0x86, 0x9b, 0x3d, 0xa3, 0xb6, 0xe8, 0xc8, 0x1e, 0xf5,
+ 0xf0, 0x78, 0xac, 0xd, 0x6c, 0x2b, 0xb4, 0x91, 0xf9, 0x9e,
+ 0x33, 0x2d, 0xaf, 0x82, 0x7e, 0xfa, 0xd0, 0xa7, 0x45, 0x3,
+ 0x3d, 0xe8, 0xaf, 0x3c, 0xf2, 0xc2, 0x8a, 0x28, 0xa0, 0x2,
+ 0x8a, 0x28, 0x3d, 0x29, 0x31, 0x32, 0x23, 0xc3, 0x29, 0x3d,
+ 0x8d, 0x7a, 0x37, 0x80, 0x2f, 0xc, 0xe4, 0x29, 0x38, 0x51,
+ 0x5e, 0x6f, 0x31, 0xda, 0xb5, 0xd9, 0xf8, 0x12, 0xe7, 0xc9,
+ 0xc7, 0x3f, 0x31, 0xff, 00, 0xeb, 0x57, 0xb9, 0x92, 0x4b,
+ 0x93, 0x14, 0x8f, 0xa3, 0xe1, 0xda, 0x9e, 0xcf, 0x1a, 0x8f,
+ 0x49, 0xbd, 0x97, 0x2b, 0x58, 0x1a, 0x84, 0x98, 0x52, 0x2b,
+ 0x56, 0x59, 0x33, 0x12, 0x9f, 0x6a, 0xc2, 0xd4, 0x5f, 00,
+ 0xd7, 0xec, 0xe9, 0xdd, 0x5c, 0xfe, 0x81, 0x8b, 0xba, 0xb9,
+ 0xce, 0xea, 0x52, 0x75, 0xe6, 0xb8, 0xfd, 0x5e, 0x4f, 0xbd,
+ 0xcd, 0x75, 0x1a, 0x8c, 0x9d, 0x6b, 0x8c, 0xd6, 0x65, 0xfb,
+ 0xd4, 0xca, 0x39, 0x1d, 0x66, 0x6e, 0x5b, 0x9a, 0xf1, 0x1f,
+ 0x89, 0x5a, 0x87, 0xfa, 0xd0, 0xf, 0x6a, 0xf6, 0x1d, 0x6e,
+ 0x6c, 0x24, 0x87, 0xda, 0xbe, 0x7a, 0xf8, 0x95, 0xa8, 0x65,
+ 0xa5, 0xe7, 0xd7, 0xf9, 0xd7, 0x9d, 0x8e, 0x9f, 0x2d, 0x23,
+ 0xca, 0xcc, 0x67, 0xc9, 0x44, 0xf0, 0x4f, 0x19, 0xdd, 0x79,
+ 0xb7, 0x6c, 0x33, 0xde, 0xbc, 0xff, 00, 0x52, 0x93, 0x19,
+ 0xae, 0xb3, 0xc4, 0x57, 0x1e, 0x6d, 0xdc, 0xa7, 0x35, 0xc5,
+ 0x6a, 0x72, 0x7d, 0xea, 0xf8, 0x9a, 0x7e, 0xf4, 0xee, 0x7e,
+ 0x77, 0x45, 0x73, 0x54, 0x6c, 0xe7, 0xef, 0x5f, 0x25, 0xab,
+ 0x22, 0xe0, 0xe7, 0x23, 0xae, 0x6b, 0x4a, 0xe9, 0xbe, 0xf5,
+ 0x57, 0xd3, 0x6c, 0xe4, 0xd4, 0xb5, 0x8b, 0x2b, 0x58, 0x90,
+ 0xc9, 0x24, 0xb3, 0x22, 0x5, 0xce, 0x33, 0x93, 0x5f, 0x47,
+ 0x45, 0x6c, 0x8f, 0xac, 0xc3, 0xc6, 0xf6, 0x47, 0xe9, 0xef,
+ 0xec, 0x31, 0xe1, 0x6f, 0xec, 0x9f, 0x2, 0x68, 0x5, 0xad,
+ 0xda, 0x16, 0xfb, 0x17, 0xda, 0x18, 0x3a, 0x5, 0x3b, 0xdf,
+ 0x4, 0xff, 00, 0x33, 0xef, 0x5f, 0x5d, 0x5b, 0x8e, 0x95,
+ 0xe4, 0x7f, 0xb3, 0xf6, 0x83, 0x1e, 0x8b, 0xe1, 0x8d, 0x91,
+ 0xae, 0x22, 0x44, 0x8e, 0x28, 0xfd, 0x82, 0xaf, 0x23, 0xf9,
+ 0x57, 0xaf, 0x40, 0x38, 0x15, 0xf4, 0x51, 0x56, 0x56, 0x3e,
+ 0xae, 0x2b, 0x95, 0x24, 0x5f, 0x84, 0x70, 0x2a, 0xf4, 0x23,
+ 0x91, 0x54, 0xed, 0xc5, 0x5e, 0x82, 0xa8, 0xa3, 0x42, 0xdd,
+ 0x78, 0xab, 0xd1, 0x2f, 0x35, 0x4a, 0xdc, 0x74, 0xab, 0xd1,
+ 0xe, 0x68, 0x2, 0xdc, 0x62, 0xac, 0xc6, 0x2a, 0xbc, 0x43,
+ 0x22, 0xac, 0xc6, 0x28, 0x2, 0x74, 0x15, 0x2a, 0x8a, 0x62,
+ 0x8e, 0x2a, 0x41, 0xd6, 0x80, 0x1e, 0xb5, 0x20, 0xed, 0x4c,
+ 0x5a, 0x90, 0x75, 0xa0, 0x7, 0x51, 0x45, 0x14, 00, 0xe1,
+ 0xd2, 0x96, 0x90, 0x52, 0xd0, 0x5, 0x76, 0x35, 0x1b, 0x53,
+ 0xcd, 0x46, 0xd4, 00, 0xd6, 0x35, 0x5e, 0x43, 0x53, 0x31,
+ 0xaa, 0xd2, 0x1a, 00, 0x82, 0x43, 0x54, 0xaf, 0x25, 0x58,
+ 0x21, 0x79, 0x1c, 0xed, 0x45, 0x5, 0x98, 0x9e, 0xc0, 0x77,
+ 0xab, 0x72, 0x1a, 0xe2, 0x3e, 0x2e, 0xf8, 0x8d, 0xbc, 0x2b,
+ 0xf0, 0xe7, 0xc4, 0x3a, 0xa2, 0x22, 0xc8, 0xd6, 0xf6, 0x72,
+ 0x30, 0x57, 0x6d, 0xa0, 0xe4, 0x63, 0xaf, 0xe3, 0x59, 0xd4,
+ 0x9a, 0xa7, 0x9, 0x4d, 0xec, 0x8c, 0xaa, 0xcd, 0x52, 0xa7,
+ 0x2a, 0x8f, 0x64, 0xae, 0x7c, 0x41, 0xab, 0x5d, 0xb7, 0xc5,
+ 0x3f, 0xda, 0x33, 0x51, 0x98, 0xb1, 0xba, 0xb6, 0x37, 0xc6,
+ 0x18, 0xc9, 0xe3, 0x31, 0xc7, 0xf2, 0x8f, 0x4e, 0x30, 0xbd,
+ 0xeb, 0xef, 0xaf, 0x7, 0xe9, 0xcb, 0x67, 0x67, 0xc, 0x6a,
+ 0xbb, 0x55, 0x54, 00, 0x2b, 0xe1, 0xcf, 0xd9, 0x1b, 0xc3,
+ 0x87, 0x54, 0xf1, 0x44, 0xba, 0x94, 0xc0, 0xb3, 0x44, 0x33,
+ 0xb8, 0xaf, 0x56, 0x20, 0xe7, 0xf9, 0xd7, 0xdf, 0x9a, 0x1d,
+ 0xb8, 0x48, 0x57, 0x15, 0xf2, 0x9c, 0x3b, 0x7, 0x52, 0x9d,
+ 0x4c, 0x54, 0xb7, 0x9c, 0x9f, 0xdc, 0x7c, 0x47, 0xa, 0x41,
+ 0xd4, 0xa7, 0x57, 0x1b, 0x3d, 0xea, 0x49, 0xfd, 0xc6, 0xed,
+ 0xb4, 0x78, 0xab, 0x34, 0xd4, 0x5d, 0xaa, 0x29, 0xd5, 0xf5,
+ 0xe7, 0xde, 0x5, 0x14, 0x51, 0x40, 0x15, 0xf5, 0xb, 0x91,
+ 0x67, 0x65, 0x3c, 0xec, 0x70, 0x23, 0x42, 0xd5, 0xf9, 0x5f,
+ 0xfb, 0x6e, 0x7e, 0xd2, 0x7a, 0xf6, 0x81, 0x75, 0x7a, 0x9a,
+ 0x76, 0xac, 0xf6, 0xe4, 0x64, 0x2e, 0x22, 0x53, 0xf8, 0x72,
+ 0xb5, 0xfa, 0x5b, 0xf1, 0x3b, 0x50, 0x93, 0x4f, 0xf0, 0x66,
+ 0xa0, 0xf1, 0xc, 0xc8, 0xc9, 0xb4, 0x1, 0xf8, 0x57, 0xe1,
+ 0x3f, 0xed, 0xb5, 0xe2, 0x9, 0xee, 0x3c, 0x59, 0x2d, 0xac,
+ 0x87, 0xef, 0x37, 0x73, 0xc9, 0x1f, 0x4e, 0xd4, 0x1, 0xc8,
+ 0xe9, 0x7f, 0xb5, 0x5f, 0xc4, 0x8, 0x27, 0x7, 0xfe, 0x12,
+ 0x16, 0xe4, 0xff, 00, 0xcf, 0xbc, 0x5f, 0xfc, 0x45, 0x7d,
+ 0xc9, 0xfb, 0x1f, 0x7c, 0x60, 0xf1, 0x97, 0x8f, 0xf5, 0x9b,
+ 0xb, 0x6b, 0xed, 0x5d, 0xe7, 0x8d, 0xca, 0x86, 0x1e, 0x5a,
+ 0x1, 0x83, 0xf4, 0x51, 0x5f, 0x96, 0x1a, 0x44, 0x3f, 0x69,
+ 0xd4, 0x60, 0x8c, 0x9e, 0xb, 0xa, 0xfd, 0x69, 0xff, 00,
+ 0x82, 0x69, 0xf8, 0x22, 0x1b, 0xad, 0x45, 0x2f, 0x8a, 0x87,
+ 0x10, 0x80, 0xdf, 0x30, 0xe0, 0x60, 0x3, 0xeb, 0xd6, 0x80,
+ 0x3f, 0x45, 0x2e, 0xbc, 0x17, 0xa4, 0xea, 0x96, 0x89, 0x15,
+ 0xe5, 0xa8, 0x9b, 0xa, 0x1, 0xcb, 0x11, 0x9f, 0xc8, 0xd6,
+ 0x4, 0xbf, 0x3, 0xbc, 0x1d, 0x2b, 0x16, 0x3a, 0x4a, 0x67,
+ 0xfd, 0xf7, 0xff, 00, 0x1a, 0xef, 0x47, 0x14, 0xb4, 0x1,
+ 0xc8, 0x69, 0x3f, 0xa, 0x7c, 0x37, 0xa2, 0x49, 0xbe, 0xd7,
+ 0x4f, 0x58, 0xcf, 0xb3, 0x37, 0xf8, 0xd7, 0x57, 0xc, 0x29,
+ 0x4, 0x61, 0x10, 0x6d, 0x50, 0x30, 0x7, 0xa5, 0x49, 0x45,
+ 00, 0x25, 0x2d, 0x14, 0x50, 0x2, 0x55, 0x3d, 0x4e, 0x6f,
+ 0x22, 0xd2, 0x46, 0xf6, 0x35, 0x70, 0xf4, 0xac, 0xf, 0x16,
+ 0xdd, 0xfd, 0x9e, 0xc5, 0xf0, 0x7b, 0x66, 0xb9, 0xf1, 0x13,
+ 0xf6, 0x74, 0xa5, 0x23, 0x97, 0x15, 0x53, 0xd9, 0x51, 0x94,
+ 0xfb, 0x23, 0xc6, 0x3c, 0x6d, 0x7a, 0x6e, 0xb5, 0x46, 0x5d,
+ 0xdc, 0x3, 0xfd, 0x4d, 0x60, 0x55, 0x9d, 0x52, 0x63, 0x71,
+ 0xa8, 0xca, 0xe4, 0xe7, 0x9a, 0xad, 0x5f, 0x86, 0x62, 0x2a,
+ 0x7b, 0x5a, 0xd2, 0x9b, 0xea, 0xcf, 0xe6, 0xec, 0x55, 0x57,
+ 0x5a, 0xbc, 0xea, 0x3e, 0xac, 0x28, 0xa2, 0x8a, 0xe7, 0x39,
+ 0x42, 0x94, 0xd, 0xcc, 0xaa, 0x3b, 0x9c, 0x52, 0x55, 0xad,
+ 0x2a, 0xf, 0xb4, 0xea, 0x31, 0x27, 0xb8, 0xab, 0x8c, 0x79,
+ 0xa4, 0xa3, 0xdc, 0xa8, 0x45, 0xce, 0x4a, 0x2b, 0xa9, 0xec,
+ 0x1f, 0xe, 0xb4, 0xd1, 0x5, 0x84, 0x67, 0x6f, 0x38, 0xeb,
+ 0x5d, 0xd8, 0x18, 0x15, 0x87, 0xe1, 0x6b, 0x41, 0x6f, 0x60,
+ 0x9c, 0x63, 0xe5, 0x15, 0xb8, 0x2b, 0xf6, 0xfc, 0x5, 0x2f,
+ 0x63, 0x87, 0x84, 0x7c, 0x8f, 0xe8, 0xec, 0xae, 0x82, 0xc3,
+ 0xe1, 0x61, 0xf, 0x21, 0x68, 0xa2, 0x8a, 0xf4, 0x4f, 0x54,
+ 0x42, 0x33, 0x5e, 0x65, 0xf1, 0x45, 0x31, 0x16, 0xd5, 0xe7,
+ 0x3d, 0x6b, 0xd3, 0x6b, 0xce, 0xfe, 0x24, 0x28, 0x31, 0x33,
+ 0x1e, 0xc2, 0xbc, 0x2c, 0xe6, 0x3c, 0xd8, 0x39, 0xa3, 0xe6,
+ 0xf8, 0x82, 0x3c, 0xd8, 0x9, 0xa3, 0xc7, 0xb1, 0xb4, 0x90,
+ 0x28, 0xa4, 0x7, 0x73, 0x13, 0xeb, 0x4b, 0x5f, 0x8c, 0xa3,
+ 0xf9, 0xf4, 0x28, 0xa2, 0x8a, 0x6, 0x7, 0xa5, 0x74, 0xde,
+ 0x7, 0x90, 0xc5, 0x7a, 0xa0, 0x7d, 0xe6, 0x35, 0xcc, 0x9e,
+ 0x95, 0xd1, 0xf8, 0x24, 0xe7, 0x55, 0x4c, 0xf4, 0x6, 0xbb,
+ 0xb0, 0x3f, 0xef, 0x30, 0xf5, 0x3d, 0x2c, 0xb5, 0xdb, 0x17,
+ 0x4f, 0xd5, 0x1e, 0xf7, 0x68, 0xbb, 0x6d, 0xd0, 0x1f, 0x4a,
+ 0x9e, 0xa1, 0xb5, 0x71, 0x24, 0x2a, 0x45, 0x4d, 0x5f, 0xb9,
+ 0x43, 0xe1, 0x47, 0xf4, 0x84, 0x2d, 0xca, 0xac, 0x2d, 0x14,
+ 0x51, 0x56, 0x58, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x21,
+ 0xa0, 0x2, 0xbc, 0xe7, 0xe2, 0x6e, 0xa4, 0x61, 0xb3, 0x64,
+ 0xc, 0x79, 0xaf, 0x43, 0x95, 0xb6, 0xc6, 0x4d, 0x78, 0xb7,
+ 0xc4, 0xcd, 0x40, 0xcb, 0x73, 0xe5, 0x67, 0x3f, 0x35, 0x7c,
+ 0xe6, 0x7b, 0x5f, 0xd8, 0xe1, 0x24, 0xbb, 0x9f, 0x25, 0xc4,
+ 0xb8, 0x9f, 0x61, 0x81, 0x97, 0x99, 0xc3, 0xe, 0x79, 0xf5,
+ 0xa2, 0x81, 0xd2, 0x8a, 0xfc, 0x7c, 0xfc, 0x19, 0x5, 0x14,
+ 0x51, 0x40, 0x5, 0x6e, 0x78, 0x36, 0xd3, 0xed, 0x37, 0xe0,
+ 0xe3, 0xb8, 0xac, 0x26, 0x38, 0x53, 0x5d, 0xdf, 0xc3, 0xcb,
+ 0xd, 0xd2, 0xab, 0x11, 0xe9, 0x5e, 0x8e, 0x5f, 0x49, 0xd6,
+ 0xc5, 0x46, 0x27, 0xad, 0x95, 0x50, 0x75, 0xf1, 0x90, 0x89,
+ 0xeb, 0xba, 0x3d, 0xb8, 0x82, 0xc9, 00, 0x18, 0xe2, 0xaf,
+ 0xd4, 0x70, 0x2e, 0xc8, 0x94, 0xe, 0xc2, 0xa4, 0xaf, 0xdb,
+ 0xe1, 0x1e, 0x58, 0xa4, 0x7f, 0x46, 0x53, 0x8f, 0x24, 0x14,
+ 0x7b, 0x5, 0x14, 0x51, 0x56, 0x68, 0x14, 0x51, 0x45, 00,
+ 0x15, 0xcd, 0xf8, 0xd9, 0xfc, 0xbd, 0x2d, 0xdb, 0xbe, 0x2b,
+ 0xa3, 0x35, 0xcd, 0xf8, 0xd9, 0x3c, 0xcd, 0x38, 0xaf, 0x6c,
+ 0x57, 0xe, 0x37, 0xfd, 0xde, 0x7e, 0x87, 0x9d, 0x98, 0xdf,
+ 0xea, 0xb5, 0x2d, 0xd8, 0xf0, 0x2b, 0xac, 0x99, 0xd8, 0x9e,
+ 0xa4, 0xd4, 0x75, 0x3e, 0xa3, 0xf2, 0xde, 0x3a, 0xfa, 0x1a,
+ 0x82, 0xbf, 0xd, 0x9f, 0xc4, 0xd1, 0xfc, 0xdd, 0x51, 0x5a,
+ 0x72, 0x41, 0x45, 0x14, 0x54, 0x10, 0x14, 0x13, 0x81, 0x45,
+ 0x7, 0xa5, 0x26, 0x1d, 0xf, 0x48, 0xf8, 0x67, 0x75, 0xe4,
+ 0x38, 0x1f, 0xc4, 0x45, 0x7a, 0xea, 0x9c, 0x81, 0x5e, 0xf,
+ 0xe0, 0x1b, 0xd2, 0xba, 0x96, 0xf, 0xa, 0x31, 0xfd, 0x6b,
+ 0xdc, 0xed, 0x64, 0x12, 0xc2, 0xac, 0x3b, 0x8a, 0xfd, 0x67,
+ 0x87, 0x6a, 0xa9, 0xe1, 0x79, 0x57, 0x43, 0xf6, 0xfe, 0x14,
+ 0xae, 0xaa, 0x60, 0xf9, 0x7b, 0x13, 0x51, 0x45, 0x15, 0xf5,
+ 0x67, 0xdb, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x52, 0x50,
+ 0x2, 0xd6, 0x2f, 0x89, 0x35, 0x51, 0xa7, 0x5a, 0x31, 0xdd,
+ 0xb5, 0xab, 0x52, 0x79, 0x85, 0xba, 0x16, 0x35, 0xe4, 0x7f,
+ 0x11, 0x3c, 0x4c, 0xd3, 0xdc, 0xf9, 0x51, 0xbe, 0x7, 0xa0,
+ 0xaf, 0x1b, 0x35, 0xc6, 0xc7, 0x5, 0x87, 0x72, 0xbe, 0xa7,
+ 0xcf, 0xe7, 0x39, 0x84, 0x30, 0x18, 0x69, 0x49, 0xbd, 0x5e,
+ 0xc7, 0x1f, 0xe2, 0x3d, 0x49, 0xf5, 0xd, 0x4a, 0x46, 0x2d,
+ 0x91, 0x9a, 0xcb, 0xa5, 0x66, 0x2e, 0xe5, 0x8f, 0x53, 0x49,
+ 0x5f, 0x8c, 0xd4, 0xa8, 0xea, 0xcd, 0xce, 0x5d, 0x4f, 0xe7,
+ 0xfa, 0xb5, 0x65, 0x5a, 0xa4, 0xaa, 0x4b, 0x76, 0x14, 0x51,
+ 0x45, 0x66, 0x64, 0x14, 0x51, 0x4a, 0x8b, 0xe6, 0x48, 0xaa,
+ 0x3b, 0xd0, 0x6, 0xef, 0x83, 0x74, 0xef, 0xb7, 0xea, 0xf1,
+ 0x82, 0x32, 0x1, 0x15, 0xef, 0x3a, 0x5d, 0x92, 0x59, 0xdb,
+ 0x2a, 0xaa, 0xe3, 0x8a, 0xf3, 0xdf, 0x86, 0x5a, 0x28, 0x49,
+ 0x3c, 0xe7, 0x5e, 0x7a, 0xe4, 0x8a, 0xf4, 0xec, 0xc, 0xf,
+ 0x4a, 0xfd, 0x5b, 0x87, 0xb0, 0x7e, 0xc7, 0xf, 0xed, 0x24,
+ 0xb5, 0x67, 0xed, 0x9c, 0x2b, 0x81, 0xfa, 0xbe, 0x17, 0xda,
+ 0xc9, 0x6b, 0x21, 0xf4, 0x51, 0x45, 0x7d, 0x69, 0xf7, 0x21,
+ 0x45, 0x14, 0x50, 0x1, 0x45, 0x14, 0x50, 0x1, 0x48, 0x46,
+ 0x69, 0x68, 0xa0, 0x4, 0x2, 0x82, 0x32, 0x31, 0x4b, 0x45,
+ 00, 0x41, 0x2d, 0xa4, 0x52, 0x82, 0x19, 0x1, 0xcd, 0x72,
+ 0x1e, 0x2d, 0xf0, 0xac, 0x77, 0x16, 0xae, 0xd1, 0xa6, 0x3e,
+ 0x86, 0xbb, 0x53, 0x51, 0x5c, 0x42, 0xb3, 0xc2, 0xc8, 0x7b,
+ 0xd7, 0x1e, 0x27, 0xd, 0x4f, 0x11, 0x7, 0x9, 0x23, 0x83,
+ 0x17, 0x83, 0xa5, 0x8a, 0xa4, 0xe1, 0x34, 0x7c, 0xdd, 0xab,
+ 0x69, 0xe6, 0xc2, 0x7d, 0x87, 0xd6, 0xa8, 0x57, 0x77, 0xe3,
+ 0xdd, 0x2d, 0x2d, 0xe6, 0x77, 0x3, 0xa5, 0x70, 0x6a, 0xc5,
+ 0xb9, 0xaf, 0xc5, 0xb1, 0xb4, 0x3e, 0xad, 0x5e, 0x54, 0xcf,
+ 0xe7, 0xbc, 0xc7, 0xd, 0xf5, 0x4c, 0x44, 0xa9, 0xb, 0x45,
+ 0x14, 0x57, 0x9, 0xe6, 0x85, 0x23, 0x74, 0xa5, 0xa4, 0x6e,
+ 0x94, 0x99, 0x2c, 0xaf, 0x71, 0xc9, 0x3, 0xad, 0x75, 0x3e,
+ 0xa, 0x52, 0xf7, 0x61, 0x6b, 0x95, 0x90, 0xe6, 0x4a, 0xee,
+ 0x3c, 0x3, 00, 0x32, 0x6f, 0xaf, 0x6f, 0x26, 0xa6, 0xe7,
+ 0x8a, 0x89, 0xf4, 0xbc, 0x3d, 0x49, 0xd4, 0xc6, 0xc4, 0xed,
+ 0xe7, 0x6c, 0x46, 0xa0, 0x76, 0x15, 0xcf, 0x6a, 0x72, 0x75,
+ 0xad, 0xbb, 0xa7, 0xc2, 0x57, 0x35, 0xa9, 0x49, 0x9c, 0xd7,
+ 0xed, 0xb, 0x43, 0xfa, 0x5, 0x68, 0x91, 0x81, 0xa8, 0xc9,
+ 0xc1, 0xe6, 0xb8, 0x7d, 0x6a, 0x6f, 0xbd, 0xcd, 0x75, 0xda,
+ 0x94, 0x9c, 0x35, 0x70, 0x9a, 0xd4, 0xdc, 0xb7, 0xd6, 0x98,
+ 0xce, 0x2b, 0xc5, 0x17, 0x66, 0x1b, 0x39, 0x5b, 0x38, 0xe2,
+ 0xbe, 0x67, 0xf8, 0x8f, 0xa8, 0x96, 0x69, 0x7e, 0x7f, 0x5a,
+ 0xf7, 0xff, 00, 0x1d, 0xdd, 0x98, 0xac, 0xdf, 0x1d, 0xc5,
+ 0x7c, 0xbb, 0xf1, 0x16, 0xfc, 0xb3, 0x48, 0x33, 0xeb, 0x5f,
+ 0x3d, 0x9a, 0x54, 0xb2, 0xb1, 0xf2, 0xd9, 0xd5, 0x5e, 0x58,
+ 0xf2, 0x9e, 0x53, 0xab, 0x4c, 0x5d, 0xdd, 0x89, 0xea, 0x6b,
+ 0x92, 0xd4, 0xe5, 0xeb, 0xcd, 0x74, 0x5a, 0x94, 0x9c, 0x1a,
+ 0xe5, 0x35, 0x19, 0x32, 0x4d, 0x7c, 0xfe, 0x1a, 0x37, 0x67,
+ 0xcb, 0x60, 0xe3, 0x7d, 0x4c, 0x7b, 0x96, 0xce, 0x6b, 0xbe,
+ 0xfd, 0x9b, 0xfc, 0x3b, 0xff, 00, 0x9, 0x3f, 0xc6, 0x2d,
+ 0x16, 0x2f, 0x2c, 0x48, 0xb6, 0x8d, 0xf6, 0xb6, 0x4, 0xe3,
+ 0x84, 0x23, 0x3c, 0xfe, 0x3d, 0x2b, 0xcf, 0x6e, 0x1b, 0x8a,
+ 0xfa, 0x4b, 0xf6, 0x14, 0xf0, 0xbf, 0xf6, 0xa7, 0x8c, 0xb5,
+ 0x5d, 0x48, 0x8f, 0x9e, 0x15, 0x4b, 0x78, 0xfe, 0x5c, 0xe7,
+ 0x79, 0xf9, 0xb9, 0xfc, 0xab, 0xe9, 0xb0, 0xd1, 0xbc, 0x91,
+ 0xf6, 0x18, 0x48, 0xde, 0x48, 0xfd, 0x3b, 0xf8, 0x7b, 0xa7,
+ 0x7f, 0x67, 0x78, 0x5a, 0xca, 0x3d, 0xa1, 0x4c, 0x89, 0xe6,
+ 0x11, 0xee, 0x79, 0xae, 0xc6, 0xdd, 0x7a, 0x56, 0x6e, 0x9f,
+ 0x6e, 0x2d, 0xed, 0xe2, 0x89, 0x7e, 0xea, 0x20, 0x2, 0xb5,
+ 0x20, 0xe3, 0x15, 0xed, 0x9f, 0x44, 0x5d, 0x80, 0x56, 0x85,
+ 0xba, 0xf4, 0xe2, 0xa9, 0x42, 0x38, 0x15, 0xa1, 0x7, 0x4,
+ 0x50, 0x5, 0xd8, 0x5, 0x5e, 0x85, 0x78, 0x6, 0xa9, 0xc1,
+ 0x57, 0xe2, 0x1c, 0xa, 00, 0xb1, 0x10, 0xab, 0x31, 0xf6,
+ 0xaa, 0xf1, 0x8c, 0x55, 0x98, 0xc7, 0x4a, 00, 0x9d, 0x2a,
+ 0x55, 0xa8, 0x90, 0x54, 0xa3, 0xa5, 00, 0x48, 0xbd, 0xaa,
+ 0x45, 0xa6, 0x2d, 0x3c, 0x74, 0xa0, 0x5, 0xa5, 0x1d, 0x69,
+ 0x29, 0x56, 0x80, 0x1d, 0x45, 0x14, 0x50, 0x5, 0x56, 0xa8,
+ 0xcf, 0x7a, 0x7b, 0x1a, 0x8d, 0xa8, 0x2, 0x37, 0xe9, 0x55,
+ 0xa4, 0xa9, 0xe4, 0x35, 0x5a, 0x43, 0x40, 0x15, 0xe4, 0x3c,
+ 0xd7, 0xce, 0xdf, 0xb6, 0xe5, 0xdc, 0xb6, 0xff, 00, 0x7,
+ 0x61, 0x48, 0x8e, 0x4, 0xfa, 0xa4, 0x30, 0xbf, 0xba, 0x94,
+ 0x94, 0x9f, 0xe4, 0x2b, 0xe8, 0x79, 0x5b, 00, 0xd7, 0xc9,
+ 0x5f, 0xb6, 0xcf, 0x88, 0x9a, 0xe6, 0x6f, 0xc, 0xf8, 0x5a,
+ 0x19, 0x43, 0x79, 0xf2, 0x9b, 0xb9, 0xa1, 00, 0xe7, 0x2b,
+ 0xf2, 0xa1, 0xf4, 0xfe, 0x26, 0xaf, 0x17, 0x39, 0xa9, 0xec,
+ 0xf0, 0x15, 0x5f, 0x75, 0x6f, 0xbc, 0xf9, 0xfc, 0xfe, 0xaf,
+ 0xb2, 0xcb, 0x2b, 0x3e, 0xad, 0x5b, 0xef, 0xd0, 0xd5, 0xfd,
+ 0x91, 0x3c, 0x2f, 0xfd, 0x9f, 0xe1, 0x61, 0x78, 0xca, 0x43,
+ 0x5c, 0x36, 0x72, 0x47, 0x50, 0x32, 0x2b, 0xeb, 0x1d, 0x32,
+ 0x20, 0xb1, 0x8a, 0xf2, 0x3f, 0x82, 0x5e, 0x1e, 0x5d, 0x1b,
+ 0xc2, 0x5a, 0x5c, 0x2, 0x3d, 0xa5, 0x61, 0x5c, 0xf1, 0xdf,
+ 0xad, 0x7b, 0x35, 0x8a, 00, 0xa2, 0xb6, 0xca, 0xe8, 0x7d,
+ 0x5b, 0x9, 0x4e, 0x9f, 0x91, 0xb6, 0x4d, 0x86, 0x58, 0x4c,
+ 0xd, 0x2a, 0x5e, 0x45, 0xda, 0x28, 0xa2, 0xbd, 0x43, 0xda,
+ 0xa, 0x28, 0xa2, 0x80, 0x39, 0xbf, 0x1e, 0x58, 0x7d, 0xbf,
+ 0xc3, 0xd7, 0x2a, 0x46, 0x42, 0xa1, 0x38, 0xaf, 0xc1, 0x9f,
+ 0xdb, 0x5b, 0xc3, 0x77, 0x2b, 0xf1, 0x2b, 0x52, 0xbc, 0x93,
+ 0x7a, 0xc2, 0x87, 0x3, 0x78, 0xc6, 0x7f, 0x4a, 0xfd, 0xfb,
+ 0xd6, 0x44, 0x72, 0x69, 0x93, 0xc7, 0x23, 0xa4, 0x6a, 0xeb,
+ 0xb7, 0x32, 0x30, 0x2, 0xbf, 0x2c, 0xff, 00, 0x6e, 0x5f,
+ 0x83, 0x3a, 0x5d, 0xdd, 0xd5, 0xdd, 0xca, 0x4b, 0x14, 0xa7,
+ 0x1b, 0x98, 0xa4, 0xca, 0x73, 0xf4, 0xc5, 00, 0x7e, 0x5f,
+ 0xe9, 0x53, 0x79, 0x17, 0xc9, 0x20, 0x3c, 0x8f, 0x5a, 0xfd,
+ 0x7b, 0xff, 00, 0x82, 0x6c, 0x78, 0xae, 0xc3, 0x4a, 0xd0,
+ 0x12, 0x39, 0x24, 0x43, 0x75, 0x28, 00, 0xd, 0xc3, 0x3,
+ 0x20, 0x74, 0xc9, 0xcd, 0x7e, 0x47, 0xeb, 0x76, 0x11, 0x69,
+ 0x9a, 0x9c, 0xb1, 0xc6, 0x70, 0x88, 0xe4, 0x2, 0xf, 0xa1,
+ 0xaf, 0xa8, 0xbf, 0x65, 0xf, 0xda, 0x2, 0xdf, 0xe1, 0xc6,
+ 0xaf, 0x6e, 0xf7, 0x17, 0x91, 0xc6, 0xa8, 0xea, 0x2, 0xcb,
+ 0x92, 0xbd, 0xbd, 0xe8, 0x3, 0xf7, 0xae, 0x27, 0xe, 0x81,
+ 0x87, 0x42, 0x33, 0x4f, 0xaf, 0x9b, 0x3e, 0x17, 0x7e, 0xd5,
+ 0x96, 0x3e, 0x30, 0xb4, 0x87, 0x75, 0xc5, 0xab, 0x96, 0xe9,
+ 0xb1, 0x48, 0x3f, 0xce, 0xbd, 0x86, 0xf, 0x89, 0x3a, 0x74,
+ 0xa8, 0x18, 0xcc, 0x83, 0x34, 0x1, 0xd9, 0x51, 0x5c, 0xaa,
+ 0xf8, 0xff, 00, 0x4e, 0x6f, 0xf9, 0x6e, 0x9f, 0x9d, 0x4e,
+ 0x9e, 0x39, 0xd3, 0x1b, 0xfe, 0x5b, 0xad, 00, 0x74, 0x74,
+ 0x56, 0x75, 0x8e, 0xbb, 0x69, 0x7f, 0x8f, 0x2a, 0x50, 0xc4,
+ 0xd6, 0x8d, 00, 0x21, 0xae, 0x3, 0xe2, 0x2e, 0xa0, 0x22,
+ 0xb4, 0x90, 0x3, 0xd8, 0xd7, 0x7b, 0x29, 0xda, 0x84, 0xfb,
+ 0x57, 0x8e, 0x7c, 0x4b, 0xd4, 0xb, 0x31, 0x8c, 0x1e, 0xa6,
+ 0xbe, 0x7f, 0x3b, 0xaf, 0xec, 0x70, 0x92, 0x3e, 0x5b, 0x88,
+ 0xf1, 0x1e, 0xc3, 0x5, 0x2b, 0x75, 0x3c, 0xff, 00, 0x3b,
+ 0x98, 0xb7, 0xa9, 0xcd, 0x14, 0x8b, 0xc0, 0xa5, 0xaf, 0xc7,
+ 0x11, 0xf8, 0x12, 0xa, 0x28, 0xa2, 0x81, 0x85, 0x74, 0x3e,
+ 0x6, 0xb3, 0x37, 0x3a, 0xb8, 0x6c, 0x70, 0x3f, 0xc4, 0x57,
+ 0x3c, 0x7a, 0x1a, 0xf4, 0x1f, 0x86, 0x5a, 0x7e, 0xe9, 0x3c,
+ 0xc2, 0x3a, 0xd7, 0xa9, 0x96, 0x52, 0xf6, 0xd8, 0xa8, 0x44,
+ 0xf6, 0x32, 0x7a, 0x1f, 0x58, 0xc6, 0xd3, 0x8f, 0x9d, 0xcf,
+ 0x5a, 0xd3, 0xa2, 0xf2, 0xed, 0x94, 0x63, 0x1c, 0x55, 0xaa,
+ 0x6c, 0x6b, 0xb5, 0x14, 0x53, 0xeb, 0xf6, 0xc8, 0xae, 0x54,
+ 0x91, 0xfd, 0x15, 0x8, 0xf2, 0xc5, 0x44, 0x28, 0xa2, 0x8a,
+ 0xb2, 0xc4, 0xaf, 0x3d, 0xf8, 0x9f, 0xc5, 0x99, 0x51, 0xd4,
+ 0x8a, 0xf4, 0x23, 0x5e, 0x79, 0xf1, 0x24, 0xef, 0x8c, 0xfb,
+ 0xa, 0xf1, 0x73, 0x8f, 0xf7, 0x39, 0x9f, 0x3d, 0x9f, 0x7f,
+ 0xb8, 0x4d, 0x1e, 0x3c, 0x57, 0x69, 0x23, 0xd2, 0x92, 0x82,
+ 0x77, 0x3b, 0x1a, 0x2b, 0xf1, 0x63, 0xf9, 0xec, 0x28, 0xa2,
+ 0x8a, 00, 0x2b, 0x6b, 0xc2, 0x6f, 0xe5, 0xde, 0x8f, 0x52,
+ 0x6b, 0x16, 0xb6, 0x3c, 0x2f, 0xf3, 0x6a, 0x91, 0x8e, 0xc0,
+ 0xf5, 0xae, 0xac, 0x2e, 0x95, 0xe1, 0xea, 0x76, 0xe0, 0x9d,
+ 0xb1, 0x30, 0xf5, 0x3e, 0x82, 0xd2, 0xc6, 0xdb, 0x28, 0xf3,
+ 0xe9, 0x56, 0xd6, 0xaa, 0x69, 0xcf, 0xe6, 0x5a, 0x21, 0xf4,
+ 0x15, 0x6c, 0x57, 0xee, 0x94, 0xed, 0xc8, 0xac, 0x7f, 0x49,
+ 0x52, 0xb7, 0x24, 0x6d, 0xd9, 0xb, 0x45, 0x14, 0x56, 0xa6,
+ 0xc1, 0x45, 0x14, 0x50, 0x1, 0x48, 0xdd, 0x29, 0x69, 0xd,
+ 00, 0x55, 0xd4, 0x24, 0xf2, 0xac, 0xe5, 0x63, 0xd8, 0x57,
+ 0xcf, 0xde, 0x2d, 0xba, 0xfb, 0x56, 0xb1, 0x27, 0x39, 0xa,
+ 0x6b, 0xdd, 0x3c, 0x4b, 0x3f, 0x91, 0xa4, 0xdc, 0x36, 0x7a,
+ 0x29, 0x35, 0xf3, 0xc5, 0xf4, 0xa6, 0x7b, 0xc9, 0x64, 0xf5,
+ 0x63, 0x5f, 0x9f, 0x71, 0x4d, 0x5b, 0x28, 0x52, 0x47, 0xe5,
+ 0xbc, 0x67, 0x5e, 0xca, 0x9d, 0x15, 0xd7, 0x52, 0xa, 0x28,
+ 0xa2, 0xbf, 0x3e, 0x3f, 0x2c, 0xa, 0x28, 0xa2, 0x80, 0x1a,
+ 0x46, 0x58, 0xf, 0x5a, 0xf6, 0xf, 0x87, 0x76, 0x25, 0x23,
+ 0x52, 0x47, 0x4a, 0xf2, 0x7b, 0x28, 0x7c, 0xfb, 0xc8, 0xd7,
+ 0x19, 0xe6, 0xbd, 0xdb, 0xc1, 0x16, 0x9e, 0x4d, 0xae, 0x48,
+ 0xed, 0x5f, 0x59, 0xc3, 0x94, 0x7d, 0xa6, 0x25, 0xcf, 0xb1,
+ 0xf6, 0xfc, 0x29, 0x87, 0xf6, 0xb8, 0xa7, 0x37, 0xd0, 0xea,
+ 0x14, 0x62, 0x9d, 0x48, 0x29, 0x6b, 0xf5, 0x63, 0xf6, 0xe0,
+ 0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a, 0x28, 00, 0xac, 0x4f,
+ 0x14, 0x45, 0xbf, 0x4d, 0x95, 0xbb, 0xe2, 0xb6, 0xea, 0x86,
+ 0xb1, 0xf, 0x9f, 0x64, 0xe9, 0x5c, 0xf8, 0x88, 0xf3, 0xd2,
+ 0x92, 0xf2, 0x39, 0x71, 0x51, 0xe7, 0xa3, 0x28, 0xf9, 0x1f,
+ 0x39, 0xea, 0x91, 0x79, 0x77, 0x6e, 0xd8, 0xc6, 0x4d, 0x54,
+ 0xad, 0xaf, 0x16, 0x40, 0x62, 0xd4, 0x8a, 0xe3, 0x81, 0x58,
+ 0xb5, 0xf8, 0x66, 0x22, 0x1c, 0x95, 0x65, 0x13, 0xf9, 0xb7,
+ 0x15, 0xf, 0x67, 0x5e, 0x71, 0xf3, 0xa, 0x28, 0xa2, 0xb9,
+ 0xce, 0x60, 0xa2, 0x8a, 0x28, 0x3, 0x4b, 0x43, 0xba, 0xfb,
+ 0x2d, 0xd2, 0x74, 0xe4, 0xf7, 0xaf, 0x7a, 0xf0, 0xbd, 0xfa,
+ 0x5e, 0x69, 0xcb, 0xb4, 0xe4, 0xaf, 0x5a, 0xf9, 0xd1, 0x5b,
+ 0xcb, 0x70, 0xc3, 0xb5, 0x7a, 0x87, 0xc3, 0xdf, 0x11, 0x88,
+ 0xa2, 0x30, 0x96, 0x1f, 0x31, 0xaf, 0xb0, 0xe1, 0xec, 0x62,
+ 0xa1, 0x57, 0xd9, 0x4d, 0xe8, 0xcf, 0xbd, 0xe1, 0x5c, 0xc1,
+ 0x61, 0xeb, 0xba, 0x33, 0xd9, 0x9e, 0xa8, 0xd, 0x2d, 0x43,
+ 0x4, 0xeb, 0x34, 0x61, 0x87, 0x39, 0xf4, 0xa9, 0x6b, 0xf5,
+ 0x24, 0xd3, 0xd5, 0x1f, 0xb3, 0xa7, 0x75, 0x74, 0x2d, 0x14,
+ 0x51, 0x4c, 0x62, 0x53, 0x5d, 0xc4, 0x60, 0x96, 0x20, 0xa,
+ 0x49, 0x25, 0x11, 0x2e, 0xe6, 0x38, 0x1e, 0xf5, 0xc5, 0x78,
+ 0xaf, 0xc6, 0x50, 0xdb, 0x43, 0x2c, 0x71, 0x48, 0x37, 0xe,
+ 0x2b, 0x8f, 0x13, 0x8a, 0xa7, 0x85, 0x83, 0x9c, 0xd9, 0xc1,
+ 0x8b, 0xc6, 0x52, 0xc1, 0xd3, 0x75, 0x2a, 0x32, 0x1f, 0x1e,
+ 0xf8, 0xb5, 0x6c, 0x60, 0xd9, 0x13, 0x6, 0x27, 0x8e, 0xd,
+ 0x78, 0xfd, 0xf5, 0xdb, 0x5f, 0x5c, 0x99, 0x18, 0xd4, 0xfa,
+ 0xae, 0xa9, 0x2e, 0xa5, 0x29, 0x2e, 0xdb, 0x86, 0x6a, 0x8f,
+ 0x4a, 0xfc, 0x87, 0x33, 0xcc, 0x27, 0x8f, 0xaa, 0xdf, 0x43,
+ 0xf0, 0x8c, 0xe3, 0x34, 0xa9, 0x99, 0x57, 0x72, 0xbf, 0xbb,
+ 0xd8, 0x28, 0xa2, 0x8a, 0xf1, 0x8f, 00, 0x28, 0xa2, 0x8a,
+ 00, 0x2b, 0x63, 0xc2, 0x9a, 0x61, 0xd4, 0x35, 0x25, 0x18,
+ 0x24, 0xf, 0x6a, 0xc9, 0x85, 0x1a, 0x69, 0x95, 0x14, 0x67,
+ 0x35, 0xea, 0xff, 00, 0xe, 0x7c, 0x3a, 0x21, 0x73, 0x33,
+ 0xa9, 0xfc, 0x6b, 0xd8, 0xca, 0xf0, 0x8f, 0x17, 0x88, 0x8c,
+ 0x7a, 0x23, 0xdd, 0xc9, 0xb0, 0x32, 0xc7, 0x62, 0xa3, 0x1b,
+ 0x68, 0xb7, 0x3b, 0x9d, 0xb, 0x4d, 0x5b, 0xb, 0x45, 00,
+ 0x60, 0xe2, 0xb5, 0x29, 0x14, 0x60, 0x52, 0xd7, 0xec, 0xf4,
+ 0xe0, 0xa9, 0xc5, 0x45, 0x74, 0x3f, 0xa0, 0xe9, 0x53, 0x54,
+ 0xa0, 0xa1, 0x1d, 0x90, 0x51, 0x49, 0x9f, 0x6a, 0xcb, 0xbe,
+ 0xd7, 0xa0, 0xb1, 0x97, 0x63, 0x38, 0xcd, 0x13, 0xa9, 0x1a,
+ 0x6a, 0xf2, 0x76, 0xa, 0x95, 0x61, 0x49, 0x73, 0x4d, 0xd9,
+ 0x1a, 0xb4, 0x55, 0x1b, 0x2d, 0x52, 0x2b, 0xd5, 0xca, 0x30,
+ 0x3f, 0x4a, 0xbb, 0x55, 0x19, 0x29, 0xab, 0xc5, 0x95, 0x9,
+ 0xa9, 0xae, 0x68, 0xbd, 0x5, 0xa2, 0x8a, 0x2a, 0x8b, 0xa,
+ 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2, 0x80, 0x12, 0x91, 0xcf,
+ 0xca, 0x68, 0x6a, 0x8a, 0xe6, 0x41, 0x14, 0x2c, 0xc4, 0xe0,
+ 0xa, 0x96, 0xec, 0xae, 0x4c, 0x9d, 0x93, 0x67, 0x94, 0x7c,
+ 0x4f, 0x91, 0x50, 0x6c, 0x1d, 0x4d, 0x79, 0xb8, 0x18, 0x15,
+ 0xd7, 0x7c, 0x44, 0xd4, 0x45, 0xce, 0xa4, 0x10, 0x36, 0x40,
+ 0xf4, 0xae, 0x46, 0xbf, 0x15, 0xcd, 0xaa, 0xaa, 0x98, 0xb9,
+ 0xb5, 0xd0, 0xfe, 0x79, 0xcf, 0x2b, 0x2a, 0xd8, 0xf9, 0xc9,
+ 0x74, 0xa, 0x28, 0xa2, 0xbc, 0x83, 0xc1, 0xa, 0x6b, 0x9e,
+ 0xd, 0x3a, 0xa2, 0x95, 0xbe, 0x53, 0x52, 0xc9, 0x64, 0x7,
+ 0xe6, 0x92, 0xbd, 0x2f, 0xc1, 0x36, 0xde, 0x55, 0xa6, 0xea,
+ 0xf3, 0xab, 0x28, 0xbc, 0xe9, 0xd1, 0x71, 0x9c, 0x9c, 0x57,
+ 0xad, 0x68, 0x56, 0xff, 00, 0x67, 0xd3, 0x93, 0x8c, 0x12,
+ 0x5, 0x7d, 0xa7, 0xd, 0x50, 0x73, 0xac, 0xe6, 0xfa, 0x1f,
+ 0xa1, 0xf0, 0x8e, 0x1b, 0x9f, 0x10, 0xea, 0x76, 0x44, 0xb7,
+ 0xb2, 0x61, 0xd, 0x72, 0xfa, 0x8b, 0xf5, 0xae, 0x87, 0x51,
+ 0x93, 00, 0xd7, 0x2d, 0xa8, 0xc9, 0xd6, 0xbf, 0x51, 0x3f,
+ 0x65, 0x39, 0xed, 0x4e, 0x4c, 0x2b, 0x57, 0x3, 0xac, 0xcb,
+ 0xf3, 0x35, 0x76, 0x9a, 0xac, 0x98, 0x6, 0xbc, 0xff, 00,
+ 0x59, 0x9b, 0x97, 0x3f, 0x5a, 00, 0xf2, 0xbf, 0x89, 0x17,
+ 0xbb, 0x63, 0x75, 0x4, 0x70, 0xd, 0x7c, 0xb9, 0xe3, 0xdb,
+ 0xbf, 0x32, 0xe1, 0x96, 0xbe, 0x81, 0xf8, 0x99, 0xa8, 0xd,
+ 0xf3, 0x60, 0x8e, 0x33, 0xfd, 0x6b, 0xe6, 0x5f, 0x16, 0xdd,
+ 0x79, 0xd7, 0x6f, 0xce, 0x79, 0xaf, 0x8e, 0xcd, 0x2a, 0x5e,
+ 0x56, 0x3e, 0x3, 0x3a, 0xab, 0xcd, 0x3b, 0x1c, 0x6e, 0xa6,
+ 0xfd, 0x45, 0x72, 0xb7, 0xef, 0x97, 0x35, 0xd0, 0xea, 0x6f,
+ 0xcb, 0x73, 0x5c, 0xc5, 0xe3, 0xe5, 0x8d, 0x73, 0xe1, 0x63,
+ 0x63, 0x9b, 0x7, 0x1b, 0x23, 0x3a, 0xe1, 0xb8, 0x22, 0xbe,
+ 0xf7, 0xff, 00, 0x82, 0x7c, 0xf8, 0x33, 0xc8, 0xf0, 0xdc,
+ 0x57, 0x92, 0x67, 0x7d, 0xde, 0xa0, 0xd7, 0x4a, 0x3b, 0x6c,
+ 0x55, 0x8f, 0x3, 0xa7, 0xa8, 0x35, 0xf0, 0x2d, 0xc1, 0xc8,
+ 0x6f, 0xf0, 0xaf, 0xd6, 0x2f, 0xd8, 0xe3, 0xc2, 0xe9, 0xa1,
+ 0xf8, 0x1b, 0x48, 0x45, 0x89, 0x93, 0xca, 0xb1, 0x46, 0xdc,
+ 0x47, 0x52, 0xfc, 0x9f, 0x7e, 0x84, 0x57, 0xd3, 0x61, 0x23,
+ 0xad, 0xcf, 0xb0, 0xc0, 0xc7, 0x5b, 0x9f, 0x4b, 0x41, 0xd6,
+ 0xb4, 0x61, 0xe0, 0xa, 0xa1, 0x8, 0xe2, 0xb4, 0x20, 0x1d,
+ 0x2b, 0xd3, 0x3d, 0x82, 0xf4, 0x39, 0xe2, 0xb4, 0x21, 0x1d,
+ 0x2a, 0x8c, 0x23, 0x9a, 0xbd, 0xf, 0x41, 0x40, 0x17, 0xed,
+ 0xc6, 00, 0xab, 0xd1, 0x72, 0x2a, 0x9c, 0x1c, 0xe3, 0xda,
+ 0xae, 0xc5, 0xd2, 0x80, 0x2c, 0xc6, 0x2a, 0xcc, 0x62, 0xab,
+ 0xc7, 0x56, 0x63, 0xa0, 0x9, 0x93, 0xa5, 0x4a, 0x3a, 0xd4,
+ 0x4b, 0x52, 0x29, 0xa0, 0x9, 0x7, 0x4a, 0x90, 0x54, 0x6a,
+ 0x6a, 0x40, 0x73, 0x40, 0x5, 0x39, 0x69, 0xb4, 0xe1, 0xd2,
+ 0x80, 0x16, 0x8a, 0x28, 0xa0, 0xa, 0x6d, 0x51, 0xb1, 0xa7,
+ 0xb5, 0x46, 0xc7, 0xad, 00, 0x43, 0x21, 0xcd, 0x55, 0x90,
+ 0xd5, 0x89, 0x3a, 0x55, 0x69, 0x28, 0x2, 0xb4, 0xc7, 0xa8,
+ 0xaf, 0x86, 0xbe, 0x26, 0x5f, 0xb7, 0xc4, 0x8f, 0xda, 0x99,
+ 0xac, 0xe, 0xc, 0x3a, 0x57, 0xfa, 0x16, 0xd0, 0x31, 0xca,
+ 0x33, 0x12, 0x7f, 0xf1, 0xe1, 0xf9, 0x57, 0xda, 0x9e, 0x23,
+ 0xd5, 0x23, 0xd1, 0x34, 0x3d, 0x4b, 0x51, 0x98, 0x81, 0x15,
+ 0xa5, 0xbc, 0x97, 0xf, 0x93, 0x81, 0xb5, 0x10, 0xb1, 0xe7,
+ 0xb7, 0x2, 0xbe, 0x18, 0xfd, 0x99, 0xe1, 0x93, 0xc5, 0x1f,
+ 0x1a, 0xf5, 0x5d, 0x5a, 0x45, 0x2c, 0x24, 0x13, 0xcc, 0x4f,
+ 0x1d, 0x4b, 0xae, 0x3f, 0x4a, 0xf9, 0x5c, 0xee, 0x5e, 0xd2,
+ 0x74, 0x30, 0xbf, 0xcd, 0x25, 0xf7, 0x23, 0xe2, 0xb8, 0x8a,
+ 0x7e, 0xd6, 0x78, 0x6c, 0x1a, 0xfb, 0x73, 0x57, 0xf4, 0x47,
+ 0xdc, 0xfe, 0x10, 0xb0, 0x16, 0xb6, 0x70, 0xa0, 0x18, 0xa,
+ 0xa0, 0xa, 0xed, 0x6d, 0x97, 0xb, 0x9a, 0xc1, 0xd1, 0x20,
+ 0xf2, 0xe2, 0x5a, 0xe8, 0xa3, 0x1b, 0x50, 0x57, 0xd4, 0xc5,
+ 0x72, 0xab, 0x1f, 0x67, 0x15, 0xcb, 0x14, 0x90, 0xfa, 0x28,
+ 0xa2, 0x99, 0x41, 0x4d, 0x77, 0x8, 0xa5, 0x8f, 0x41, 0x4e,
+ 0xaa, 0x1a, 0xd5, 0xc8, 0xb6, 0xd3, 0xe5, 0x62, 0x40, 0xe3,
+ 0xbd, 00, 0x7c, 0x79, 0xfb, 0x71, 0xfe, 0xd1, 0xd7, 0xbf,
+ 0xb, 0xbc, 0x32, 0xc9, 0xa7, 0xbe, 0xdb, 0x89, 0xe, 0x7,
+ 00, 0xe3, 0x91, 0xea, 0x3d, 0xeb, 0xf2, 0xff, 00, 0xc7,
+ 0xff, 00, 0xb4, 0x7e, 0xb9, 0xe3, 0x3b, 0x19, 0x7e, 0xdd,
+ 0x3e, 0xe7, 0x71, 0x83, 0x85, 0x51, 0xfc, 0x85, 0x7a, 0xdf,
+ 0xfc, 0x14, 0xd3, 0xe2, 0x7, 0xf6, 0xaf, 0x8b, 0x62, 0xd2,
+ 0xe0, 0xb9, 0xc, 0x91, 0xb1, 0xdc, 0x88, 0xd9, 0xc7, 0xb,
+ 0xd6, 0xbe, 0x11, 0x33, 0xc8, 0x46, 0xb, 0x93, 0xf8, 0xd0,
+ 0x5, 0xad, 0x56, 0xec, 0xdd, 0x5c, 0x33, 0x12, 0x4e, 0x49,
+ 0x3c, 0xd2, 0xe9, 0x7a, 0x9b, 0xe9, 0xd3, 0xa4, 0x8b, 0xce,
+ 0xd3, 0x9a, 0xa2, 0x4e, 0x68, 0xa0, 0xf, 0x78, 0xf0, 0x47,
+ 0xed, 0x4f, 0xab, 0xf8, 0x31, 0x63, 0x58, 0x22, 0x24, 0x2f,
+ 0x71, 0xb7, 0xfa, 0x8a, 0xf4, 0xfb, 0x3f, 0xf8, 0x28, 0x66,
+ 0xbf, 00, 0x50, 0x62, 0x90, 0x1, 0xfe, 0xcc, 0x67, 0xfa,
+ 0x57, 0xc7, 0x14, 0x50, 0x7, 0xdb, 0xf6, 0xbf, 0xf0, 0x51,
+ 0x7d, 0x65, 0x71, 0xba, 0x37, 0xce, 0x39, 0xca, 0x47, 0x5b,
+ 0xba, 0x6f, 0xfc, 0x14, 0x6b, 0x51, 0x92, 0x78, 0xd0, 0xc6,
+ 0x72, 0xce, 0x14, 0x60, 0x47, 0xdf, 0xf0, 0xaf, 0x80, 0xeb,
+ 0x7b, 0xc1, 0x5a, 0x6b, 0x6a, 0x7a, 0xfd, 0xac, 0x61, 0x4b,
+ 00, 0xeb, 0x9c, 0xc, 0xf7, 0xa0, 0xf, 0xdb, 0xaf, 0xd9,
+ 0x33, 0xf6, 0x84, 0xbc, 0xf8, 0xa9, 0xa8, 0xc1, 0x13, 0x2,
+ 0xab, 0x81, 0xd5, 0x57, 0x24, 0xe0, 0x74, 0xc5, 0x7d, 0xa1,
+ 0x5f, 0xf, 0xff, 00, 0xc1, 0x3b, 0xbc, 0x4, 0xda, 0x66,
+ 0x85, 0x26, 0xa4, 0xf1, 0x6c, 0xc2, 0x85, 0xcb, 0x2e, 0x9,
+ 0xc8, 0x1c, 0x75, 0xaf, 0xb7, 0xf3, 0x40, 0x15, 0x75, 0x39,
+ 0xbc, 0x9b, 0x66, 0x3e, 0xd5, 0xe0, 0x9e, 0x37, 0xbd, 0x37,
+ 0x3a, 0x99, 0x4e, 0xc0, 0xd7, 0xb4, 0xf8, 0xae, 0xe8, 0x5b,
+ 0xd8, 0xe7, 0x38, 0xeb, 0x5f, 0x3f, 0xea, 0x93, 0x7d, 0xa7,
+ 0x50, 0x95, 0xfb, 0x67, 0x15, 0xf9, 0xff, 00, 0x13, 0xd7,
+ 0xd2, 0x34, 0x91, 0xf9, 0x77, 0x19, 0x62, 0x6d, 0x18, 0xd1,
+ 0x4f, 0x72, 0xb7, 0x4a, 0x28, 0xa2, 0xbf, 0x3c, 0x3f, 0x2a,
+ 0x5a, 0x5, 0x14, 0x51, 0x4c, 0x60, 0x6, 0xe6, 0x51, 0xea,
+ 0x6b, 0xd9, 0xfe, 0x1d, 0x69, 0xe2, 0x1b, 0x38, 0xcf, 0x4c,
+ 0x81, 0x5e, 0x43, 0xa6, 0x40, 0x6e, 0x2f, 0xe1, 0x40, 0x33,
+ 0xf3, 0xa, 0xf7, 0xef, 0xb, 0x5a, 0x7d, 0x9a, 0xc5, 0x32,
+ 0x3b, 0x57, 0xd8, 0xf0, 0xd5, 0xe, 0x7a, 0xce, 0xa3, 0x5b,
+ 0x1f, 0x7d, 0xc2, 0x18, 0x6f, 0x69, 0x89, 0x95, 0x56, 0xb6,
+ 0x37, 0xa9, 0x68, 0xa2, 0xbf, 0x51, 0x3f, 0x67, 0xa, 0x28,
+ 0xa2, 0x80, 0x13, 0x38, 0xaf, 0x3d, 0xf8, 0x99, 0x1f, 0x97,
+ 0x66, 0xc4, 0x75, 0x22, 0xbd, 0xa, 0xbc, 0xff, 00, 0xe2,
+ 0x4b, 0x6f, 0x8b, 0x1d, 0x80, 0xaf, 0x1b, 0x37, 0xff, 00,
+ 0x73, 0x99, 0xf3, 0xf9, 0xed, 0xbe, 0xa3, 0x33, 0xc6, 0xb1,
+ 0xb7, 0x8a, 0x28, 0x63, 0xba, 0x46, 0x34, 0x57, 0xe2, 0xa7,
+ 0xf3, 0xd0, 0x51, 0x45, 0x14, 00, 0x56, 0xb7, 0x86, 0x5b,
+ 0x65, 0xee, 0xec, 0xf7, 0xac, 0x9a, 0xd1, 0xd0, 0x1b, 0xfe,
+ 0x26, 0x8, 0x3d, 0xeb, 0xa3, 0xe, 0xed, 0x56, 0x3e, 0xa7,
+ 0x4e, 0x15, 0xdb, 0x11, 0xf, 0x53, 0xe8, 0x4d, 0x10, 0x11,
+ 0x61, 0x1e, 0x7a, 0x9a, 0xd0, 0x15, 0x9d, 0xa2, 0x4a, 0x24,
+ 0xb2, 0x40, 0x3b, 0xa, 0xd1, 0x15, 0xfb, 0xa5, 0x1f, 0xe1,
+ 0xc7, 0xd0, 0xfe, 0x94, 0xc3, 0xdb, 0xd9, 0x46, 0xdd, 0x85,
+ 0xa2, 0x8a, 0x2b, 0x73, 0xa0, 0x28, 0xa2, 0x8a, 00, 0x29,
+ 0xd, 0x2d, 0x23, 0x1c, 0x50, 0x7, 0x23, 0xf1, 0x6, 0xf3,
+ 0xc8, 0xd1, 0xae, 0x31, 0xfd, 0xc3, 0x5e, 0x10, 0xe, 0x72,
+ 0x7d, 0x6b, 0xd6, 0x3e, 0x29, 0x5f, 0x3, 0x66, 0xd1, 0x67,
+ 0xaf, 0x1d, 0x6b, 0xc9, 0xc7, 0x4a, 0xfc, 0x9b, 0x88, 0xaa,
+ 0xfb, 0x4c, 0x5d, 0x97, 0x44, 0x7e, 0x1d, 0xc5, 0x95, 0xfd,
+ 0xae, 0x3b, 0x95, 0x6c, 0x90, 0x51, 0x45, 0x15, 0xf2, 0xa7,
+ 0xc5, 0x85, 0x14, 0x50, 0x4e, 0x5, 00, 0x6a, 0xf8, 0x5a,
+ 0xdf, 0xed, 0x1a, 0xa0, 0x1d, 0x85, 0x7b, 0xf6, 0x83, 00,
+ 0xb7, 0xb3, 0x5f, 0x7a, 0xf1, 0x5f, 0x87, 0x96, 0xa6, 0x7d,
+ 0x45, 0x9f, 0x15, 0xee, 0xd6, 0xd1, 0xec, 0x85, 0x16, 0xbf,
+ 0x49, 0xe1, 0x8a, 0x36, 0xa4, 0xea, 0x33, 0xf5, 0xce, 0xe,
+ 0xa1, 0x6a, 0xe, 0xab, 0x5b, 0x93, 0xa, 0x5a, 0x28, 0xaf,
+ 0xba, 0x3f, 0x49, 0xa, 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2,
+ 0x80, 0x10, 0x9a, 0x8e, 0x65, 0xcc, 0x6e, 0x2a, 0x5a, 0x42,
+ 0x33, 0x49, 0xab, 0x89, 0xab, 0xab, 0x1e, 0x21, 0xf1, 0x3,
+ 0x4d, 0xfb, 0x3c, 0xed, 0x21, 0xea, 0x4f, 0xf8, 0x57, 0x12,
+ 0x3a, 0x57, 0xb2, 0xfc, 0x41, 0xd2, 0xc, 0xf1, 0x3c, 0x9b,
+ 0x49, 0xc7, 0xa0, 0xaf, 0x1c, 0x95, 0x1a, 0x39, 0x59, 0x58,
+ 0x15, 0xe7, 0xbd, 0x7e, 0x39, 0x9d, 0x61, 0x9d, 0xc, 0x53,
+ 0x76, 0xd1, 0x9f, 0x81, 0x71, 0x16, 0x11, 0xe1, 0xb1, 0x8d,
+ 0xa5, 0xa3, 0x1b, 0x45, 0x14, 0x57, 0x80, 0x7c, 0xc0, 0x51,
+ 0x45, 0x14, 00, 0x11, 0x91, 0x57, 0x74, 0xcd, 0x56, 0x4d,
+ 0x3a, 0x40, 0x53, 0x39, 0xaa, 0x54, 0x1c, 0xf6, 0xaa, 0x8c,
+ 0xa5, 0x7, 0xcd, 0x1d, 0xca, 0x84, 0xe5, 0x4e, 0x4a, 0x71,
+ 0x76, 0x67, 0xa6, 0x68, 0x7e, 0x3b, 0x98, 0x5, 0x56, 0xe9,
+ 0xf8, 0x57, 0x6b, 0x61, 0xe2, 0x84, 0x99, 0x6, 0xe2, 0x2b,
+ 0xe7, 0xf4, 0x9e, 0x58, 0xcf, 0xca, 0xd8, 0xab, 0x90, 0xeb,
+ 0x17, 0x51, 0x74, 0x90, 0xd7, 0xd5, 0x61, 0x33, 0xfa, 0xb4,
+ 0x15, 0xa7, 0xa9, 0xf6, 0xb8, 0x1e, 0x27, 0xad, 0x87, 0x4a,
+ 0x35, 0x2e, 0xcf, 0xa0, 0x8f, 0x88, 0x22, 0x3, 0x39, 0x15,
+ 0x95, 0xa8, 0xf8, 0xd1, 0x2d, 0x41, 0xc7, 0x35, 0xe2, 0xe7,
+ 0xc4, 0x37, 0x78, 0xc6, 0xf3, 0xf9, 0xd5, 0x79, 0x75, 0x7b,
+ 0x89, 0x78, 0x66, 0x26, 0xbb, 0xaa, 0xf1, 0x34, 0xa5, 0x1b,
+ 0x41, 0x58, 0xf4, 0xab, 0x71, 0x84, 0xa5, 0x1b, 0x53, 0x56,
+ 0x67, 0xa1, 0x6b, 0x3f, 0x13, 0xb, 0xa3, 0x22, 0x8a, 0xf3,
+ 0xed, 0x43, 0x51, 0x92, 0xfe, 0x79, 0x1c, 0xb1, 0xf9, 0x89,
+ 0x35, 0x55, 0xd8, 0xbf, 0x5a, 0x4a, 0xf9, 0x7c, 0x5e, 0x3e,
+ 0xbe, 0x35, 0xfe, 0xf1, 0xe8, 0x7c, 0x66, 0x37, 0x34, 0xc4,
+ 0xe6, 0xf, 0xf7, 0xd2, 0xd0, 0x3a, 0x8a, 0x28, 0xa2, 0xbc,
+ 0xe3, 0xc8, 0xa, 0x28, 0xa2, 0x90, 0xc2, 0x8e, 0xe2, 0x8a,
+ 0xd1, 0xd1, 0x74, 0x79, 0x75, 0x2b, 0xc8, 0x80, 0x46, 0x2b,
+ 0x9e, 0xc2, 0xb4, 0x85, 0x39, 0x54, 0x92, 0x8c, 0x16, 0xac,
+ 0xd2, 0x9d, 0x39, 0xd6, 0x9a, 0x84, 0x15, 0xdb, 0x35, 0xfc,
+ 0x19, 0xe1, 0xc9, 0x2f, 0xf5, 0x4, 0x66, 0xfb, 0xb9, 0xe9,
+ 0x5e, 0xe1, 0xa6, 0x69, 0xe9, 0x63, 00, 0x55, 0x18, 0x26,
+ 0xb2, 0xfc, 0x2f, 0xa0, 0x8d, 0x36, 0xd9, 0x9, 0x18, 0x6c,
+ 0x57, 0x45, 0x5f, 0xae, 0xe4, 0xf9, 0x74, 0x70, 0x54, 0x53,
+ 0x6b, 0xde, 0x67, 0xee, 0xf9, 0xe, 0x53, 0x1c, 0xba, 0x82,
+ 0x72, 0x5e, 0xf3, 0x12, 0x96, 0x8a, 0x2b, 0xe8, 0x8f, 0xaa,
+ 0x23, 0x99, 0xc2, 0x46, 0xcd, 0xe8, 0x2b, 0xc5, 0xfc, 0x69,
+ 0xaf, 0xb4, 0x5a, 0x84, 0x84, 0x13, 0xc1, 0xc7, 0x15, 0xeb,
+ 0x5a, 0xed, 0xc8, 0xb5, 0xd3, 0x65, 0x62, 0x71, 0xc6, 0x2b,
+ 0xe7, 0xdf, 0x10, 0xdc, 0x7d, 0xa6, 0xed, 0xcf, 0xa9, 0xaf,
+ 0x89, 0xe2, 0x4c, 0x4b, 0xa5, 0x4e, 0x30, 0x8b, 0xd4, 0xfc,
+ 0xef, 0x8b, 0xb1, 0x92, 0xa3, 0x4a, 0x34, 0xa0, 0xf5, 0x3a,
+ 0xaf, 0xd, 0xf8, 0xe9, 0xad, 0xf0, 0xa7, 0x35, 0xe8, 0x3a,
+ 0x5f, 0x8b, 0x96, 0xf4, 0xa8, 0x3c, 0x66, 0xbc, 0xa, 0x39,
+ 0x1a, 0x1e, 0x54, 0x56, 0x95, 0x97, 0x88, 0x2e, 0x2d, 0x9c,
+ 0x63, 0x38, 0xfa, 0xd7, 0xcd, 0xe0, 0x33, 0xca, 0xb8, 0x7b,
+ 0x42, 0xa3, 0xd0, 0xf9, 0xc, 0xb3, 0x89, 0x2b, 0x61, 0x52,
+ 0x85, 0x57, 0x74, 0x7d, 0x1f, 0x14, 0xeb, 0x2a, 0x82, 0xd,
+ 0x49, 0x9a, 0xf1, 0x3b, 0xf, 0x1d, 0xce, 0x98, 0x5, 0x88,
+ 0xfc, 0x6b, 0xa3, 0xd3, 0xbc, 0x71, 0xe6, 0x63, 0x7c, 0x98,
+ 0xfc, 0x7f, 0xfa, 0xd5, 0xf6, 0xd4, 0x33, 0xcc, 0x35, 0x5d,
+ 0xf, 0xd1, 0xb0, 0xdc, 0x49, 0x84, 0xaf, 0x65, 0x7b, 0x1e,
+ 0x95, 0x45, 0x73, 0x36, 0x9e, 0x29, 0xb7, 0x92, 0x30, 0x4c,
+ 0xc9, 0x9f, 0xf7, 0xaa, 0xf2, 0x6b, 0xf6, 0xcc, 0x38, 0x99,
+ 0xf, 0xfc, 0xa, 0xbd, 0x98, 0xe2, 0xa9, 0x4d, 0x69, 0x23,
+ 0xdf, 0x86, 0x36, 0x84, 0xd5, 0xd4, 0x91, 0xb1, 0x45, 0x64,
+ 0x1d, 0x7a, 0xd8, 0x7f, 0xcb, 0x64, 0xff, 00, 0xbe, 0x85,
+ 0x52, 0xbb, 0xf1, 0x75, 0xbd, 0xbe, 0x70, 0xea, 0x7f, 0x1a,
+ 0x25, 0x8a, 0xa3, 0x5, 0x79, 0x48, 0x27, 0x8d, 0xc3, 0xd3,
+ 0x57, 0x94, 0x91, 0xd1, 0x31, 00, 0x64, 0xf4, 0xae, 0x5b,
+ 0xc6, 0x5a, 0xfc, 0x76, 0x3a, 0x74, 0x8a, 0xa7, 0xe6, 0x35,
+ 0x8d, 0xa9, 0xfc, 0x46, 0x8d, 0x23, 0x65, 0x52, 0x7, 0x1e,
+ 0xbf, 0xfd, 0x6a, 0xf3, 0x7f, 0x10, 0x6b, 0xcf, 0xab, 0x31,
+ 0xc3, 0x1c, 0x66, 0xbe, 0x6b, 0x33, 0xce, 0xe9, 0x53, 0xa4,
+ 0xe1, 0x45, 0xdd, 0xb3, 0xe4, 0x33, 0x8e, 0x22, 0xa1, 0x4a,
+ 0x8c, 0xa1, 0x41, 0xde, 0x4c, 0xce, 0xd5, 0x6e, 0xda, 0xf2,
+ 0xf1, 0xa4, 0x27, 0x35, 0x5a, 0x8a, 0x2b, 0xf2, 0xc9, 0x49,
+ 0xce, 0x4e, 0x4f, 0xa9, 0xf8, 0xbc, 0xe4, 0xe7, 0x27, 0x27,
+ 0xbb, 0xa, 0x28, 0xa2, 0xa4, 0x80, 0x35, 0x5e, 0xe0, 0xe1,
+ 0x45, 0x4e, 0xdd, 0x2a, 0x6, 0x43, 0x3c, 0xa8, 0x8a, 0x9,
+ 0xc9, 0xed, 0x45, 0xae, 0xec, 0x81, 0x27, 0x26, 0x92, 0x35,
+ 0x7c, 0x39, 0x65, 0xe7, 0x5c, 0xc4, 0x7d, 0xeb, 0xd5, 0x51,
+ 0x4, 0x36, 0xb1, 0xaf, 0xfb, 0x22, 0xb9, 0x8f, 0xc, 0x68,
+ 0x86, 0x2f, 0x2d, 0xd9, 0x8, 0xfa, 0x8a, 0xea, 0x6e, 0xdb,
+ 0x6a, 0xfd, 0x2b, 0xf5, 0xbc, 0x83, 0xa, 0xe8, 0x51, 0xe6,
+ 0x6b, 0x73, 0xf7, 0x3e, 0x18, 0xc1, 0x3c, 0x36, 0x1f, 0x9e,
+ 0x4b, 0x56, 0x62, 0xea, 0x52, 0x75, 0xae, 0x57, 0x50, 0x7e,
+ 0xb5, 0xbf, 0xa9, 0x49, 0x92, 0xd5, 0xcc, 0x6a, 0x32, 0x75,
+ 0xaf, 0xaa, 0x3e, 0xd4, 0xe6, 0xb5, 0x89, 0x70, 0xad, 0x5e,
+ 0x79, 0xaf, 0x4f, 0xb2, 0x39, 0xf, 0xb1, 0xae, 0xdf, 0x5a,
+ 0x9b, 0x86, 0xc1, 0xaf, 0x33, 0xf1, 0x6d, 0xd0, 0x8a, 0xce,
+ 0x62, 0x4e, 0x38, 0xa9, 0x93, 0xb2, 0x6c, 0x99, 0xbe, 0x58,
+ 0xb6, 0x78, 0x47, 0xc4, 0xad, 0x43, 0x26, 0x73, 0xdf, 0x27,
+ 0xfa, 0xd7, 0xce, 0xda, 0xf4, 0xe5, 0xee, 0x24, 0x3e, 0xf5,
+ 0xec, 0xbf, 0x12, 0x2f, 0xfe, 0x69, 0x7e, 0x6e, 0xe7, 0xbf,
+ 0xb9, 0xaf, 0xc, 0xd5, 0x25, 0xc9, 0x73, 0xef, 0x5f, 0x5,
+ 0x8c, 0x97, 0x3d, 0x53, 0xf3, 0x2c, 0x7c, 0xfd, 0xa5, 0x6b,
+ 0x1c, 0xe6, 0xa7, 0x27, 0x7, 0x9e, 0xf5, 0xcd, 0xdc, 0xb7,
+ 0x26, 0xb6, 0xb5, 0x39, 0x39, 0x35, 0x83, 0x70, 0x7a, 0xd7,
+ 0x76, 0x1d, 0x68, 0x8f, 0x4b, 0xb, 0x1b, 0x45, 0x1a, 0x1e,
+ 0xa, 0xd2, 0xce, 0xbb, 0xe3, 0x5d, 0xa, 0xc0, 0x2e, 0xe1,
+ 0x71, 0x7d, 0xc, 0x6c, 0x3f, 0xd9, 0x32, 0xc, 0xfe, 0x99,
+ 0xaf, 0xd9, 0x4f, 0x82, 0x3a, 0x3a, 0xe9, 0x5e, 0x14, 0x50,
+ 0x31, 0x80, 0xc2, 0x35, 0x3f, 0xec, 0xaa, 0x28, 0x15, 0xf9,
+ 0x39, 0xfb, 0x35, 0xdb, 0x47, 0x79, 0xf1, 0xaf, 0xc3, 0xd1,
+ 0xc8, 0x3, 00, 0xee, 0xc0, 0x11, 0x9e, 0x42, 0x12, 0x3f,
+ 0x5a, 0xfd, 0x8a, 0xf0, 0x45, 0x81, 0xb0, 0xf0, 0xd5, 0x84,
+ 0x4c, 0xe, 0xed, 0x81, 0x8e, 0x47, 0xaf, 0x3f, 0xd6, 0xbe,
+ 0x97, 0xc, 0xbd, 0xdb, 0x9f, 0x5d, 0x83, 0x56, 0x8d, 0xce,
+ 0xa2, 0x11, 0x5a, 0x36, 0xe3, 0xa5, 0x50, 0xb7, 0x18, 0xab,
+ 0xf0, 0xe, 0x5, 0x76, 0x1d, 0xe5, 0xf8, 0x57, 0xa5, 0x5e,
+ 0x84, 0x74, 0xaa, 0x56, 0xea, 0x2b, 0x42, 0x11, 0xc8, 0x34,
+ 0x1, 0x76, 0xdc, 0x75, 0xab, 0xb1, 0x8e, 0x95, 0x4e, 0xe,
+ 0xb5, 0x7a, 0x31, 0x40, 0x13, 0xc6, 0x2a, 0xca, 0x54, 0x9,
+ 0x56, 0x13, 0xb5, 00, 0x48, 0xbd, 0x69, 0xeb, 0xd2, 0x98,
+ 0xb5, 0x20, 0x14, 00, 0xf5, 0xed, 0x52, 0x2d, 0x31, 0x69,
+ 0xe3, 0xa5, 00, 0x2d, 0x28, 0xeb, 0x49, 0x4a, 0xb4, 00,
+ 0xea, 0x28, 0xa2, 0x80, 0x28, 0xb7, 0x7a, 0x89, 0xcd, 0x48,
+ 0xd5, 0x14, 0x87, 0x14, 0x1, 0x4, 0x86, 0xab, 0x48, 0x6a,
+ 0x79, 0xd, 0x56, 0x94, 0xf1, 0x40, 0x1e, 0x17, 0xfb, 0x5f,
+ 0x78, 0x95, 0x74, 0x1f, 0x83, 0x7a, 0x9c, 0x23, 0x6, 0x6d,
+ 0x41, 0x85, 0xa2, 0xa9, 0xf4, 0x6e, 0x18, 0xfe, 00, 0x9a,
+ 0xf3, 0x4f, 0xd8, 0xb3, 0xc3, 0x86, 0x1b, 0x7b, 0xbd, 0x41,
+ 0xb2, 0x37, 0x8d, 0x83, 0x8e, 0xdc, 0x1f, 0xf0, 0xaa, 0x3f,
+ 0xb7, 0x47, 0x8a, 0x85, 0xe6, 0xb7, 0xe1, 0xbf, 0xb, 0x45,
+ 0x20, 0x63, 0x1e, 0x2f, 0xa4, 0x54, 0xed, 0x92, 0xc9, 0x83,
+ 0xcf, 0xa0, 0x7, 0x4, 0x57, 0xb2, 0xfe, 0xcd, 0x3e, 0x18,
+ 0x3a, 0x17, 0x83, 0x2c, 0x51, 0x94, 0x2b, 0x48, 0x81, 0xcf,
+ 0xe2, 0x7, 0xb5, 0x7c, 0x63, 0xff, 00, 0x6b, 0xce, 0xfc,
+ 0xa9, 0xaf, 0xc4, 0xfc, 0xfd, 0xff, 00, 0xb7, 0x71, 0x12,
+ 0xb6, 0xd4, 0xa3, 0xf8, 0xb3, 0xde, 0x34, 0xe8, 0xf0, 0x8a,
+ 0x2b, 0x54, 0x71, 0x54, 0xec, 0x93, 00, 0x54, 0x97, 0xf7,
+ 0xd1, 0x69, 0xf6, 0xcf, 0x3c, 0xcc, 0x11, 0x14, 0x75, 0x35,
+ 0xf6, 0x67, 0xe8, 0x5, 0x9a, 0x2b, 0xe7, 0x3f, 0x88, 0x1f,
+ 0xb5, 0xbe, 0x8f, 0xe1, 0x3d, 0x51, 0xac, 0xa3, 0x96, 0x22,
+ 0xe3, 0x83, 0x9c, 0x13, 0xff, 00, 0xa1, 0x56, 0x57, 0x87,
+ 0xff, 00, 0x6b, 0xeb, 0x3d, 0x72, 0xf6, 0x38, 0x11, 0xe3,
+ 0xcb, 0x7a, 0x2f, 0xff, 00, 0x65, 0x40, 0x1f, 0x50, 0xd7,
+ 0xb, 0xf1, 0x63, 0x56, 0xfe, 0xcc, 0xf0, 0xdd, 0xc4, 0x80,
+ 0x67, 0x6a, 0x13, 0x8c, 0xf5, 0xad, 0xdf, 0x8, 0x78, 0x83,
+ 0xfe, 0x12, 0x3d, 0x29, 0x2e, 0xf1, 0x80, 0xc0, 0x63, 0x1d,
+ 0xeb, 0x37, 0xe2, 0x3f, 0x83, 0x9f, 0xc6, 0x1a, 0xd, 0xc5,
+ 0x94, 0x6d, 0xb5, 0xa5, 0x5d, 0xbd, 0x71, 0x40, 0x1f, 0xcf,
+ 0xc7, 0xed, 0x2a, 0x6f, 0xfc, 0x63, 0xf1, 0x43, 0x53, 0xba,
+ 0xc6, 0x55, 0x5f, 0x3, 0x6a, 0x92, 0x31, 0x81, 0xfe, 0x15,
+ 0xe4, 0xaf, 0xe1, 0x6b, 0xd5, 0xfe, 0x6, 0x3f, 0xf0, 0x3,
+ 0x5f, 0xb0, 0x3a, 0xff, 00, 0xfc, 0x13, 0x7e, 0xe3, 0x53,
+ 0xbd, 0xb8, 0xb9, 0x3b, 0x59, 0xe4, 0x62, 0xc4, 0x99, 0x87,
+ 0xff, 00, 0x1b, 0xae, 0x6e, 0xef, 0xfe, 0x9, 0xa1, 0xa8,
+ 0x63, 0xe5, 0x88, 0x9f, 0xf7, 0x66, 0xff, 00, 0xed, 0x74,
+ 0x1, 0xf9, 0x3c, 0x7c, 0x39, 0x7a, 0x3f, 0xe5, 0x93, 0x7f,
+ 0xdf, 0x27, 0xfc, 0x2a, 0x36, 0xd0, 0xaf, 0x17, 0xfe, 0x58,
+ 0xb1, 0xfa, 0x29, 0xff, 00, 0xa, 0xfd, 0x4b, 0xbb, 0xff,
+ 00, 0x82, 0x6b, 0xeb, 0x28, 0x4e, 0xcb, 0x79, 0x4f, 0x5e,
+ 0xac, 0x7f, 0xf8, 0xdd, 0x63, 0x5d, 0x7f, 0xc1, 0x38, 0xbc,
+ 0x44, 0x84, 0xe2, 0xd5, 0xff, 00, 0x33, 0xff, 00, 0xc6,
+ 0xe8, 0x3, 0xf3, 0x21, 0xb4, 0x9b, 0xa5, 0x1c, 0xc2, 0xff,
+ 00, 0xf7, 0xc9, 0xff, 00, 0xa, 0x61, 0xb0, 0xb8, 0x1f,
+ 0xf2, 0xc6, 0x4f, 0xfb, 0xe4, 0xd7, 0xe8, 0xf5, 0xdf, 0xfc,
+ 0x13, 0xc7, 0xc4, 0xd1, 0xe7, 0x16, 0x6e, 0x7f, 0x3, 0xff,
+ 00, 0xc6, 0xeb, 0x9f, 0xbb, 0xfd, 0x81, 0xbc, 0x57, 0x11,
+ 0x20, 0x59, 0x3, 0xed, 0xf3, 0x7f, 0xf1, 0xba, 00, 0xfc,
+ 0xfe, 0xfb, 0x24, 0xff, 00, 0xf3, 0xc6, 0x41, 0xff, 00,
+ 00, 0x35, 0xea, 0xff, 00, 00, 0x7c, 0x3b, 0x2e, 0xa1,
+ 0xe2, 0x8b, 0x72, 0x62, 0x93, 0x99, 0x55, 0x47, 0xc8, 0x7d,
+ 0x45, 0x7d, 0x25, 0x75, 0xfb, 0xb, 0xf8, 0xba, 0x1d, 0xdf,
+ 0xf1, 0x2f, 0x7, 0x3, 0xb6, 0xe3, 0xff, 00, 0xb4, 0xeb,
+ 0xd8, 0xff, 00, 0x67, 0x5f, 0xd8, 0xfb, 0x5b, 0xd0, 0xb5,
+ 0xcb, 0x19, 0x6f, 0xac, 0x95, 0x15, 0x66, 0x56, 0x62, 0x41,
+ 0xe3, 0x91, 0xea, 0x94, 0x1, 0xf7, 0xcf, 0xec, 0xc3, 0xe1,
+ 0xaf, 0xf8, 0x47, 0x3e, 0x17, 0xd8, 0xa1, 0x52, 0x8d, 0x20,
+ 0xc, 0x41, 0x18, 0x3f, 0x74, 0x75, 0xaf, 0x5c, 0x3d, 0x45,
+ 0x66, 0xf8, 0x6b, 0x49, 0x4d, 0x17, 0x43, 0xb3, 0xb3, 0x55,
+ 0xb, 0xe5, 0x46, 0x14, 0xe3, 0xe9, 0x5a, 0x67, 0xa6, 0x28,
+ 0x3, 0x84, 0xf8, 0x97, 0x7e, 0x20, 0xb0, 0xc7, 0xb1, 0xeb,
+ 0xf8, 0x57, 0x89, 0xac, 0x9b, 0x89, 0x27, 0xa9, 0x35, 0xeb,
+ 0xff, 00, 0x12, 0x6c, 0x26, 0xbe, 0x8d, 0x11, 0x10, 0xb7,
+ 0x27, 0xa7, 0xe1, 0x5e, 0x7f, 0xff, 00, 0x8, 0xbc, 0xca,
+ 0x7, 0xee, 0xcd, 0x7e, 0x55, 0x9e, 0xd3, 0xad, 0x5f, 0x16,
+ 0xdc, 0x56, 0x88, 0xfc, 0x4f, 0x89, 0xa8, 0xd7, 0xc4, 0xe3,
+ 0x9b, 0x8a, 0xd1, 0x23, 0x7, 0x75, 0x1b, 0xab, 0x6d, 0xbc,
+ 0x39, 0x28, 0xff, 00, 0x96, 0x7f, 0xa5, 0x44, 0xde, 0x1f,
+ 0x95, 0x7f, 0x80, 0xfe, 0x55, 0xf3, 0x4f, 0xb, 0x59, 0x74,
+ 0x3e, 0x45, 0xe0, 0xeb, 0xaf, 0xb2, 0x65, 0x66, 0x8c, 0x8a,
+ 0xd2, 0x6d, 0xa, 0x51, 0xfc, 0x7, 0xf2, 0xa8, 0xdb, 0x46,
+ 0x90, 0xe, 0x8d, 0x50, 0xe8, 0x55, 0x5d, 0xc, 0xde, 0x1e,
+ 0xb2, 0xfb, 0x26, 0x9f, 0x82, 0x2d, 0x3e, 0xd3, 0xab, 0x29,
+ 0xe7, 00, 0x8a, 0xf7, 0xad, 0x3e, 0x2d, 0x96, 0xc8, 0x3d,
+ 0xab, 0xcb, 0x3e, 0x1b, 0xe8, 0x6c, 0x92, 0x19, 0x18, 0x1e,
+ 0x4f, 0x7f, 0xad, 0x7a, 0xda, 0x2e, 0xd4, 00, 0x76, 0x15,
+ 0xfa, 0x7f, 0xe, 0x61, 0xdd, 0x2c, 0x37, 0x34, 0xb7, 0x67,
+ 0xec, 0x7c, 0x27, 0x85, 0x74, 0x30, 0xae, 0x72, 0x5a, 0xb1,
+ 0xf4, 0x51, 0x45, 0x7d, 0x71, 0xf7, 0x61, 0x45, 0x14, 0x50,
+ 0x2, 0x1a, 0xf3, 0xff, 00, 0x89, 0x29, 0xe5, 0xd9, 0x33,
+ 0x13, 0xc9, 0x15, 0xe8, 0xd, 0xd2, 0xbc, 0xf3, 0xe2, 0x73,
+ 0x34, 0xb1, 0x4, 0x3, 0xa0, 0xaf, 0x17, 0x37, 0x76, 0xc1,
+ 0xcc, 0xf9, 0xec, 0xf6, 0xdf, 0x51, 0x9b, 0x3c, 0x77, 0x6e,
+ 0xde, 0x28, 0xa1, 0xe3, 0x7f, 0x30, 0xf1, 0x46, 0xd7, 0x1d,
+ 0x8d, 0x7e, 0x2d, 0xf2, 0x3f, 0x9e, 0xb6, 0xe8, 0x14, 0x51,
+ 0xb5, 0xbf, 0xba, 0x69, 0x39, 0xf4, 0xa2, 0xe1, 0x71, 0x6b,
+ 0x43, 0x42, 0x6d, 0x97, 0x80, 0xf7, 0xcd, 0x67, 0x64, 0xf7,
+ 0x1f, 0xa5, 0x5a, 0xd2, 0x58, 0x9d, 0x42, 0x35, 0xf7, 0xcd,
+ 0x6b, 0x45, 0xfe, 0xf6, 0x26, 0xf4, 0x25, 0x6a, 0xb1, 0x7e,
+ 0x67, 0xd0, 0xbe, 0x1b, 0x18, 0xd3, 0xd4, 0xf5, 0xcd, 0x6b,
+ 0x8a, 0xc6, 0xf0, 0xd3, 0xee, 0xb1, 0x51, 0xe8, 0x2b, 0x66,
+ 0xbf, 0x74, 0xc3, 0x7f, 0x6, 0x3e, 0x87, 0xf4, 0x9e, 0xf,
+ 0x5a, 0x10, 0xf4, 0x16, 0x8a, 0x28, 0xae, 0xa3, 0xb0, 0x28,
+ 0xa2, 0x8a, 00, 0x2a, 0x2b, 0x96, 0xd9, 0xb, 0x1f, 0x6a,
+ 0x96, 0xb3, 0xb5, 0xab, 0x81, 0x5, 0x94, 0x8d, 0xe8, 0xd,
+ 0x67, 0x52, 0x5c, 0xb0, 0x72, 0x66, 0x55, 0x65, 0xc9, 0x7,
+ 0x26, 0x78, 0xdf, 0xc4, 0x7b, 0xef, 0x3e, 0xfc, 0x47, 0xd8,
+ 0x1f, 0x5a, 0xe3, 0xab, 0x4f, 0xc4, 0xb7, 0x7f, 0x6b, 0xd5,
+ 0xa5, 0x3d, 0x70, 0x48, 0xac, 0xca, 0xfc, 0x3b, 0x1b, 0x57,
+ 0xdb, 0x62, 0x27, 0x3f, 0x33, 0xf9, 0xc3, 0x31, 0xad, 0xf5,
+ 0x8c, 0x5d, 0x49, 0xf9, 0x85, 0x14, 0x51, 0x5c, 0x27, 0x9c,
+ 0x14, 0x8f, 0xf7, 0x4d, 0x2d, 0x26, 0xdf, 0x32, 0x45, 0x5f,
+ 0x53, 0x43, 0xf2, 0x13, 0xd7, 0x43, 0xd3, 0x3e, 0x16, 0x59,
+ 0x64, 0xee, 0xaf, 0x5a, 0x3, 0x18, 0xae, 0xf, 0xe1, 0xad,
+ 0x9f, 0x93, 0x6f, 0xbb, 0x1f, 0xc3, 0x5d, 0xed, 0x7e, 0xcb,
+ 0x92, 0xd2, 0xf6, 0x58, 0x38, 0xa3, 0xfa, 0x3, 0x87, 0xa8,
+ 0x7b, 0x1c, 0xbe, 0x8, 0x28, 0xa2, 0x8a, 0xf7, 0x8f, 0xa6,
+ 0xa, 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2, 0x80, 0xa, 0x28,
+ 0xa2, 0x80, 0x28, 0x6a, 0xd6, 0x82, 0xee, 0xd1, 0x93, 0x19,
+ 0x35, 0xe2, 0x1e, 0x31, 0xd0, 0xde, 0xd6, 0xed, 0xe4, 0xe4,
+ 0x28, 0xf6, 0xaf, 0x7c, 0x20, 0x10, 0x7d, 0x2b, 0x8c, 0xf1,
+ 0xaf, 0x87, 0x45, 0xe5, 0xa4, 0x8e, 0x6, 0x78, 0x26, 0xbe,
+ 0x67, 0x3b, 0xc0, 0xfd, 0x6a, 0x8b, 0x92, 0x5a, 0xa3, 0xe3,
+ 0xf8, 0x8b, 0x2d, 0x58, 0xda, 0xe, 0x71, 0x5a, 0xa3, 0xc3,
+ 0x81, 0xc8, 0xa2, 0xac, 0x5f, 0xda, 0x35, 0xac, 0xac, 0x36,
+ 0x10, 0x33, 0x8e, 0x95, 0x5c, 0x57, 0xe4, 0x6e, 0x2e, 0xf,
+ 0x96, 0x47, 0xe1, 0x72, 0x8b, 0x83, 0xe5, 0x90, 0x51, 0x45,
+ 0x14, 0x8, 0x28, 0xa2, 0x8a, 0x40, 0x14, 0x51, 0x45, 00,
+ 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51,
+ 0x45, 00, 0x14, 0x13, 0x8a, 0xe, 0x7b, 0x55, 0xdd, 0x37,
+ 0x4b, 0x97, 0x51, 0x9d, 0x54, 0x21, 0xe7, 0xbd, 0x54, 0x63,
+ 0x2a, 0x92, 0xe5, 0x8e, 0xe5, 0xc2, 0x12, 0xab, 0x2e, 0x48,
+ 0x2b, 0xb1, 0x9a, 0x66, 0x9d, 0x26, 0xa1, 0x74, 0xb1, 0xa0,
+ 0x27, 0x24, 0x3, 0x81, 0x5e, 0xe3, 0xe1, 0x1f, 0xc, 0xc7,
+ 0x61, 0x69, 0x1b, 0x38, 0x3b, 0xb8, 0xea, 0x2b, 0x27, 0xc1,
+ 0x9e, 0x8, 0x5d, 0x39, 0x96, 0x59, 0x17, 0x9e, 0xbf, 0xe7,
+ 0x8a, 0xef, 0xd1, 0x42, 00, 00, 0xc0, 0xaf, 0xd3, 0x72,
+ 0x3c, 0xa3, 0xea, 0xf1, 0xf6, 0xd5, 0x97, 0xbc, 0xcf, 0xd8,
+ 0x78, 0x6f, 0x23, 0xfa, 0xac, 0x3d, 0xbd, 0x75, 0xef, 0x31,
+ 0x40, 0x2, 0x96, 0x8a, 0x2b, 0xed, 0xf, 0xd0, 0x42, 0x8a,
+ 0x29, 0x9, 0xc0, 0xcd, 00, 0x71, 0xdf, 0x12, 0x2f, 0xbe,
+ 0xcb, 0xa5, 0x6d, 0xcf, 0xde, 0xaf, 0xe, 0x9d, 0xb7, 0xca,
+ 0x4d, 0x7a, 0x5f, 0xc5, 0xbd, 0x50, 0x17, 0x86, 0x10, 0x7b,
+ 0x74, 0xaf, 0x32, 0x3c, 0x92, 0x6b, 0xf2, 0x3e, 0x21, 0xaf,
+ 0xed, 0x71, 0x8e, 0x2b, 0x64, 0x7e, 0x19, 0xc5, 0x58, 0x8f,
+ 0x6d, 0x8f, 0x94, 0x13, 0xd2, 0x21, 0x48, 0x46, 0x68, 0xa2,
+ 0xbe, 0x60, 0xf8, 0xd1, 0xb8, 0x23, 0xbd, 0x1, 0xa4, 0x5e,
+ 0x8c, 0x45, 0x3a, 0x8a, 0x5b, 0x6c, 0x4e, 0xdb, 0x31, 0xeb,
+ 0x79, 0x3a, 0xc, 0x9, 0xd, 0x4c, 0x9a, 0xad, 0xca, 0xc,
+ 0x79, 0x86, 0xab, 0x51, 0x54, 0xaa, 0x4d, 0x6c, 0xcb, 0x55,
+ 0x6a, 0x47, 0x69, 0x32, 0xd9, 0xd6, 0x6e, 0xb1, 0xc3, 0xd4,
+ 0x4f, 0xa9, 0xdc, 0xc9, 0xc3, 0x1c, 0xd4, 0x34, 0x55, 0x3a,
+ 0xb3, 0x7f, 0x68, 0xa7, 0x5a, 0xab, 0xde, 0x4c, 0x53, 0x23,
+ 0x49, 0xd6, 0x93, 0x14, 0x51, 0x59, 0x19, 0x36, 0xde, 0xe1,
+ 0x45, 0x14, 0x50, 0x20, 0xa2, 0x8a, 0xf, 0x2, 0x80, 0x19,
+ 0x23, 0x71, 0x5b, 0x9e, 0x11, 0xd2, 0x7e, 0xdb, 0x7a, 0x92,
+ 0x1c, 0xe0, 0x1f, 0x4a, 0xc8, 0xb6, 0xb4, 0x92, 0xf1, 0x82,
+ 0xa2, 0xe7, 0x9a, 0xf5, 0xbf, 0x7, 0xf8, 0x7f, 0xec, 0x16,
+ 0x6a, 0xf2, 0x28, 0xd, 0xe9, 0x5e, 0xf6, 0x4f, 0x81, 0x96,
+ 0x2f, 0x10, 0x9b, 0x5a, 0x23, 0xe9, 0xb8, 0x7f, 0x2e, 0x96,
+ 0x37, 0x14, 0xa4, 0xd7, 0xba, 0x8d, 0x41, 0x6e, 0xb6, 0xf1,
+ 0xa8, 0x3, 0x18, 0x15, 0x97, 0x7a, 0xf8, 0x53, 0x5a, 0xf7,
+ 0x8f, 0xc9, 0xac, 0xd, 0x42, 0x4c, 0x29, 0xaf, 0xd9, 0x21,
+ 0x15, 0x5, 0x64, 0x7e, 0xff, 00, 0x8, 0x2a, 0x71, 0x51,
+ 0x89, 0x81, 0xa8, 0xbf, 0x27, 0x9a, 0xe5, 0xf5, 0x17, 0x18,
+ 0x35, 0xbf, 0xa8, 0xc9, 0xd6, 0xb9, 0x6d, 0x4e, 0x4c, 0x2b,
+ 0x55, 0x96, 0x72, 0x9a, 0xcc, 0x83, 0xe6, 0xaf, 0x24, 0xf8,
+ 0x85, 0x7b, 0xe5, 0xda, 0xb2, 0xff, 00, 0x5a, 0xf4, 0xfd,
+ 0x5e, 0x6e, 0x5a, 0xbc, 0x47, 0xe2, 0x5d, 0xfe, 0xdd, 0xe3,
+ 0xb0, 0xae, 0x6c, 0x44, 0xb9, 0x69, 0xb6, 0x71, 0xe2, 0xe7,
+ 0xc9, 0x49, 0xb3, 0xe7, 0x9f, 0x88, 0x77, 0xa1, 0xa6, 0x94,
+ 0x7b, 0x9f, 0xe6, 0x6b, 0xc9, 0xf5, 0x39, 0x38, 0x35, 0xde,
+ 0x78, 0xde, 0xeb, 0xcd, 0xba, 0x70, 0x3f, 0xbc, 0x7f, 0xad,
+ 0x79, 0xde, 0xa5, 0x27, 0x5a, 0xf8, 0x26, 0xf9, 0xaa, 0xb6,
+ 0x7e, 0x65, 0x27, 0xcf, 0x5d, 0xb3, 0x9c, 0xd4, 0x5f, 0x2e,
+ 0x6b, 0x1e, 0x63, 0x9e, 0x33, 0x8a, 0xd1, 0xbd, 0x7c, 0xb9,
+ 0xac, 0xa9, 0xcf, 0xcd, 0x5e, 0xed, 0x15, 0x64, 0x7d, 0x2d,
+ 0x8, 0xd9, 0x23, 0xde, 0xbf, 0x62, 0x2f, 0xa, 0x37, 0x89,
+ 0x3e, 0x36, 0xdb, 0x4c, 0x54, 0xec, 0xb2, 0x8b, 0xcd, 0xdd,
+ 0x83, 0xdd, 0xd5, 0x48, 0xfc, 0x98, 0xd7, 0xeb, 0x9d, 0x9c,
+ 0x22, 0x18, 0xa3, 0x8c, 0x74, 0x45, 0xb, 0xf9, 0x57, 0xe7,
+ 0x5f, 0xfc, 0x13, 0x8f, 0xc3, 0x2a, 0x2f, 0xee, 0x75, 0x89,
+ 0x41, 0xdf, 0x3d, 0xc9, 0x86, 0x3c, 0x74, 0xda, 0x17, 0x27,
+ 0xb7, 0x5c, 0xad, 0x7e, 0x8d, 0x40, 0xb5, 0xf4, 0x54, 0x63,
+ 0x68, 0x23, 0xea, 0xf0, 0xf1, 0xe5, 0xa6, 0x8b, 0x90, 0x2f,
+ 0x35, 0xa3, 0xa, 0xf0, 0x2a, 0x8c, 0x2, 0xb4, 0x61, 0x1d,
+ 0x2b, 0x73, 0xa4, 0xb7, 0x8, 0xc9, 0xad, 0x18, 0x47, 0x19,
+ 0xaa, 0x30, 0xe, 0x6a, 0xfc, 0x27, 0x20, 0x50, 0x5, 0xd8,
+ 0x5, 0x5c, 0x8e, 0xaa, 0xc1, 0xc5, 0x5b, 0x8e, 0x80, 0x27,
+ 0x8c, 0x66, 0xac, 0x20, 0xa8, 0x63, 0xc5, 0x4e, 0x94, 0x1,
+ 0x20, 0xe8, 0x2a, 0x41, 0xd6, 0x98, 0x3a, 0xd4, 0x8b, 0x40,
+ 0xf, 0x5a, 0x7d, 0x31, 0x7b, 0x53, 0xe8, 00, 0xa7, 0x1,
+ 0xc5, 0x36, 0x9c, 0x3a, 0x50, 0x2, 0xd1, 0x45, 0x14, 0x1,
+ 0x9e, 0xd5, 0xc, 0x86, 0xa6, 0x7a, 0x82, 0x4a, 00, 0xaf,
+ 0x21, 0xaa, 0xb2, 0x9a, 0xb3, 0x21, 0xae, 0x7b, 0xc6, 0x3a,
+ 0xbc, 0x7a, 0x17, 0x86, 0xb5, 0x4b, 0xf9, 0x66, 0xf2, 0x16,
+ 0xde, 0xd9, 0xdf, 0xcc, 0xe7, 0xe5, 0x3b, 0x4e, 0x3f, 0x5c,
+ 0x54, 0xc9, 0xa8, 0xa7, 0x27, 0xd0, 0x99, 0x49, 0x42, 0x2e,
+ 0x4f, 0xa1, 0xf0, 0x77, 0xc5, 0xeb, 0xf3, 0xf1, 0x17, 0xf6,
+ 0x93, 0xba, 0x48, 0xff, 00, 0xd4, 0xc3, 0x75, 0x15, 0x9a,
+ 0x86, 0x39, 0xc6, 0xd6, 0xa, 0xdf, 0xf8, 0xf6, 0x4d, 0x7d,
+ 0xd3, 0xf0, 0xf3, 0x4c, 0x5d, 0x3f, 0x4c, 0xb7, 0x89, 0x40,
+ 0x1, 0x23, 0x3, 0x81, 0xec, 0x2b, 0xe1, 0x4f, 0xd9, 0xab,
+ 0x4b, 0x93, 0xc5, 0x9f, 0x13, 0x66, 0xd5, 0x6e, 0x3f, 0x7a,
+ 0xef, 0x33, 0xdd, 0xc8, 0xcf, 0x8c, 0x97, 0x67, 0xdc, 0x49,
+ 0xf7, 0xc9, 0x35, 0xfa, 0x17, 0xe1, 0xbb, 0x7f, 0x2e, 0x34,
+ 0x1e, 0xd5, 0xf2, 0x1c, 0x3e, 0xbd, 0xb4, 0xab, 0x62, 0xe5,
+ 0xbc, 0xe4, 0x7c, 0x1f, 0xb, 0x45, 0xe2, 0x25, 0x88, 0xc7,
+ 0x4b, 0x79, 0xc9, 0xdb, 0xd0, 0xe8, 0xad, 0x97, 0x9, 0x5e,
+ 0x47, 0xfb, 0x4b, 0xf8, 0xec, 0xf8, 0x2f, 0xc1, 0x6f, 0x22,
+ 0x6e, 0xde, 0xc1, 0x8e, 0x54, 0xe3, 0xd3, 0x1d, 0xfd, 0xeb,
+ 0xd8, 0x54, 0x61, 0x45, 0x7c, 0x3b, 0xff, 00, 0x5, 0x9,
+ 0xf1, 0xe2, 0x69, 0x1e, 0x1c, 0xb9, 0x8c, 0x31, 0x3b, 0x10,
+ 0x82, 0x1, 0xc7, 0xf7, 0x6b, 0xec, 0x4f, 0xbe, 0x3f, 0x2c,
+ 0xfe, 0x2e, 0x7e, 0xd0, 0x7a, 0xde, 0xaf, 0xe3, 0x7d, 0x42,
+ 0x58, 0xee, 0x25, 0x8, 0xb2, 0x15, 0x3, 0xcc, 0x6f, 0xfe,
+ 0x2a, 0xbb, 0x9f, 0xd9, 0xa3, 0xc7, 0x7e, 0x21, 0xf1, 0x47,
+ 0x8a, 0x23, 0xd, 0x72, 0xc1, 0xc, 0x8a, 0x80, 0xb3, 0xb7,
+ 0xa8, 0xf7, 0x35, 0xf2, 0xbe, 0xa3, 0x72, 0x6f, 0x2f, 0xa6,
+ 0x98, 0xe7, 0x2e, 0xc4, 0xf3, 0x5f, 0x76, 0x7f, 0xc1, 0x3f,
+ 0x7c, 0x3, 0xfd, 0xa3, 0xaf, 0x58, 0x48, 0x63, 0xf, 0xb9,
+ 0xd5, 0xce, 0x47, 0xba, 0xd0, 0x7, 0xeb, 0xef, 0xc1, 0xed,
+ 0x3e, 0x4d, 0x3f, 0xc0, 0x5a, 0x62, 0xca, 0xc5, 0xe4, 0x68,
+ 0x95, 0x8b, 0x1e, 0xff, 00, 0x28, 0xae, 0xca, 0x59, 0xd2,
+ 0x11, 0x97, 0x6c, 0x55, 0x4d, 0x3a, 0x5, 0xd3, 0x34, 0x9b,
+ 0x78, 0xf0, 0x2, 0xc5, 0x12, 0x8e, 0x3d, 0x85, 0x7c, 0x83,
+ 0xfb, 0x44, 0xfe, 0xda, 0xda, 0x3f, 0xc3, 0x4f, 0x1a, 0xc9,
+ 0xa1, 0xc8, 0x24, 0x67, 0x88, 0xe1, 0xb6, 0x92, 0x7, 0x40,
+ 0x7f, 0xba, 0x7d, 0x68, 0x3, 0xec, 0x65, 0xbd, 0x89, 0x8f,
+ 0xe, 0x2a, 0x65, 0x21, 0x86, 0x41, 0xcd, 0x7c, 0x1, 0xe1,
+ 0x4f, 0xdb, 0xdb, 0x46, 0xd7, 0xb5, 0x4b, 0x7b, 0x44, 0x8e,
+ 0x66, 0x79, 0xe, 0x7, 0xce, 0x47, 0xfe, 0xc9, 0x5f, 0x66,
+ 0xfc, 0x35, 0xf1, 0xa4, 0x7e, 0x30, 0xd2, 0x56, 0xe2, 0x35,
+ 0x2a, 0xa4, 0x67, 0x93, 0x9f, 0xe9, 0x40, 0x1d, 0x91, 00,
+ 0xf5, 0xa6, 0x98, 0x90, 0xf5, 0x45, 0x3f, 0x85, 0x3e, 0x8a,
+ 00, 0x85, 0xad, 0x21, 0x6e, 0xb1, 0x21, 0xff, 00, 0x80,
+ 0x8a, 0x8d, 0xb4, 0xcb, 0x46, 0xeb, 0x6b, 0x1, 0xfa, 0xc6,
+ 0x2a, 0xd5, 0x14, 0x1, 0x41, 0xb4, 0x2d, 0x39, 0xba, 0xd8,
+ 0xdb, 0x9f, 0xac, 0x4b, 0xfe, 0x14, 0xf8, 0x34, 0x7b, 0x1b,
+ 0x66, 0x6, 0x2b, 0x38, 0x62, 0x23, 0xba, 0xc6, 0x5, 0x5c,
+ 0xa2, 0x80, 0x10, 0x51, 0x8c, 0xa, 0x5a, 0x42, 0x33, 0x40,
+ 0x15, 0xe7, 0xb2, 0x86, 0xeb, 0x1e, 0x64, 0x6a, 0xf8, 0xf5,
+ 0x15, 0x5d, 0xb4, 0x3b, 0x46, 0xff, 00, 0x96, 0x4a, 0x3f,
+ 0xa, 0xd0, 0xdb, 0x46, 0x2b, 0x39, 0x53, 0x84, 0xb5, 0x68,
+ 0xca, 0x54, 0xa9, 0xc9, 0xde, 0x51, 0x4c, 0xcb, 0x6f, 0xe,
+ 0xd9, 0x37, 0xfc, 0xb2, 0x1f, 0x90, 0xa8, 0xdb, 0xc2, 0xf6,
+ 0x4c, 0x7f, 0xd5, 0x8f, 0xc8, 0x56, 0xc6, 0x28, 0xc5, 0x66,
+ 0xf0, 0xf4, 0x9e, 0xf1, 0x46, 0x4f, 0xb, 0x41, 0xef, 0x5,
+ 0xf7, 0x18, 0x4f, 0xe1, 0x1b, 0x36, 0xfe, 0x1, 0xf9, 0xa,
+ 0x85, 0xfc, 0x17, 0x66, 0xdf, 0xc2, 0xbf, 0x95, 0x74, 0x78,
+ 0xa3, 0x15, 0x93, 0xc1, 0xd0, 0x7f, 0x61, 0x19, 0x3c, 0x6,
+ 0x19, 0xef, 0x4, 0x66, 0xe9, 0x9a, 0x2c, 0x1a, 0x64, 0x61,
+ 0x63, 0x3, 0xeb, 0x8a, 0xd1, 0x14, 0xb8, 0xe2, 0x8a, 0xe9,
+ 0x84, 0x23, 0x4e, 0x3c, 0xb1, 0x56, 0x3a, 0xe9, 0xd3, 0x8d,
+ 0x28, 0xf2, 0xc1, 0x59, 0xb, 0x45, 0x14, 0x56, 0x86, 0x81,
+ 0x45, 0x14, 0x50, 0x2, 0x1a, 0xe6, 0x7c, 0x51, 0xa1, 0xb6,
+ 0xa6, 0xa7, 0x68, 0x1c, 0xfa, 0x8a, 0xe9, 0x8f, 0x34, 0x9b,
+ 0x6b, 0xa, 0xf4, 0x63, 0x5e, 0xe, 0x13, 0xd8, 0xe6, 0xc4,
+ 0x61, 0xe1, 0x89, 0xa6, 0xe9, 0xcf, 0x66, 0x79, 0x1, 0xf8,
+ 0x7f, 0x38, 0x24, 0xf1, 0xf9, 0x7f, 0xf5, 0xaa, 0x17, 0xf0,
+ 0x1c, 0xe3, 0xb0, 0xfc, 0xab, 0xd9, 0x4a, 0xa, 0x4f, 0x2c,
+ 0x7a, 0xf, 0xca, 0xbe, 0x7d, 0xe4, 0x18, 0x56, 0x7c, 0xbc,
+ 0xb8, 0x63, 0x6, 0xf6, 0x3c, 0x55, 0xbc, 0xf, 0x70, 0x3a,
+ 0x28, 0xfc, 0x8d, 0x44, 0xfe, 0xc, 0x9c, 0x7f, 0xa, 0xfe,
+ 00, 0xd7, 0xb7, 0x18, 0x50, 0xff, 00, 0x8, 0xfc, 0xa9,
+ 0xd, 0xb4, 0x47, 0xf8, 0x17, 0xf2, 0xac, 0x5f, 0xe, 0xe1,
+ 0xde, 0xcc, 0xc2, 0x5c, 0x29, 0x85, 0x7b, 0x33, 0xc2, 0x9f,
+ 0xc2, 0x13, 0xaf, 0xf0, 0xf, 0xca, 0xa4, 0xd3, 0x3c, 0x2b,
+ 0x34, 0x57, 0x61, 0xfc, 0xb1, 0xf9, 0x57, 0xb7, 0x9b, 0x28,
+ 0x5b, 0xfe, 0x59, 0xaf, 0xe5, 0x48, 0x2c, 0x20, 0x7, 0x88,
+ 0xd7, 0xf2, 0xac, 0xd7, 0xe, 0x52, 0x52, 0x52, 0x52, 0xd8,
+ 0xc5, 0x70, 0x9d, 0x18, 0xc9, 0x49, 0x4b, 0x62, 0x96, 0x83,
+ 0x6c, 0xd6, 0xd6, 0x40, 0x30, 0xc1, 0xad, 0x41, 0x48, 0x14,
+ 0x1, 0x81, 0xc0, 0xa5, 0xaf, 0xad, 0xa7, 0x5, 0x4e, 0xa,
+ 0x2b, 0xa1, 0xf7, 0x34, 0xa9, 0xaa, 0x50, 0x50, 0x5d, 0x5,
+ 0xa2, 0x8a, 0x2b, 0x43, 0x50, 0xa2, 0x8a, 0x28, 0x1, 0xa7,
+ 0xa5, 0x73, 0x9e, 0x32, 0x95, 0x93, 0x4d, 0x94, 0x3, 0x82,
+ 0x54, 0x81, 0x5d, 0x21, 0x15, 0x9f, 0xab, 0x69, 0x4b, 0xa9,
+ 0x44, 0x50, 0x90, 0x33, 0xea, 0x2b, 0x97, 0x13, 0x9, 0x54,
+ 0xa5, 0x28, 0x47, 0x76, 0x71, 0x63, 0x29, 0xce, 0xad, 0x9,
+ 0x42, 0x1b, 0xb3, 0xe7, 0x5b, 0x8b, 0x29, 0x26, 0xb9, 0x91,
+ 0xf3, 0xd4, 0x9e, 0x4d, 0x44, 0x6c, 0x64, 0x1d, 0xeb, 0xda,
+ 0x5f, 0xe1, 0xec, 0x47, 0x3c, 0xa1, 0x3f, 0xee, 0xd4, 0xf,
+ 0xf0, 0xed, 0x4f, 0x42, 0xbf, 0xf7, 0xcf, 0xff, 00, 0x5e,
+ 0xbf, 0x35, 0x97, 0xe, 0xe2, 0x2f, 0x7b, 0x1f, 0x91, 0x4f,
+ 0x85, 0x31, 0x57, 0x6e, 0xc7, 0x8e, 0x1b, 0x39, 0x7, 0x7a,
+ 0x6f, 0xd9, 0x64, 0xcf, 0x5a, 0xf5, 0xf6, 0xf8, 0x77, 0xd7,
+ 0x5, 0x7f, 0x2a, 0x81, 0xfe, 0x1d, 0x37, 0xb7, 0xe5, 0x5c,
+ 0xef, 0x20, 0xc4, 0xae, 0x87, 0x2c, 0xb8, 0x5f, 0x16, 0xb6,
+ 0x89, 0xe4, 0xc6, 0x9, 0x5, 0x4f, 0xa5, 0xda, 0x3c, 0xda,
+ 0x84, 0x63, 0x1d, 0xd, 0x7a, 0x5c, 0x9f, 0xf, 0x24, 0xec,
+ 0x7f, 0x4f, 0xfe, 0xbd, 0x4b, 0xa4, 0xf8, 0xa, 0x4b, 0x6b,
+ 0xb0, 0xec, 0x47, 0x1f, 0xec, 0xd4, 0xc3, 0x22, 0xc4, 0x7b,
+ 0x48, 0xde, 0x3a, 0x11, 0x4f, 0x86, 0xf1, 0x7e, 0xd6, 0x37,
+ 0x8e, 0x87, 0x53, 0xe0, 0xeb, 0x43, 0x6f, 0x62, 0xe, 0x31,
+ 0xc5, 0x74, 0x95, 0x56, 0xc2, 0xd8, 0x5a, 0xdb, 0xaa, 0x77,
+ 0xab, 0x55, 0xfa, 0xae, 0x1e, 0x9f, 0xb2, 0xa5, 0x18, 0x76,
+ 0x3f, 0x6c, 0xc2, 0x52, 0xf6, 0x14, 0x63, 0x4f, 0xb0, 0x51,
+ 0x45, 0x15, 0xd2, 0x75, 0x85, 0x14, 0x51, 0x40, 0x5, 0x14,
+ 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x41, 0x75, 0x6e,
+ 0xb7, 0x31, 0x14, 0x6e, 0x84, 0x54, 0xf4, 0x94, 0x9a, 0x4d,
+ 0x59, 0x89, 0xa5, 0x25, 0x66, 0x79, 0x77, 0x8b, 0xfc, 0x2a,
+ 0xa3, 0x7b, 0x46, 0x83, 0xf2, 0xaf, 0x35, 0xbc, 0xd3, 0x67,
+ 0xb7, 0x90, 0xee, 0x50, 0x2b, 0xe9, 0x5b, 0x8b, 0x54, 0xb8,
+ 0x8c, 0xab, 0x28, 0x3f, 0x85, 0x71, 0x1e, 0x22, 0xf0, 0x93,
+ 0x5c, 0xee, 0x31, 0xa8, 0x1f, 0x85, 0x7c, 0x26, 0x6d, 0x91,
+ 0xfb, 0x4b, 0xd4, 0xa4, 0x7e, 0x6b, 0x9d, 0xf0, 0xef, 0xb5,
+ 0x6e, 0xb5, 0xf, 0xb8, 0xf1, 0x7c, 0x63, 0x83, 0x46, 0x6b,
+ 0xa5, 0xd5, 0x3c, 0x1d, 0x73, 0x3, 0x13, 0xbb, 0x1f, 0x87,
+ 0xff, 00, 0x5e, 0xb0, 0x66, 0xd3, 0xe4, 0xb7, 0x38, 0x63,
+ 0x9f, 0xc2, 0xbe, 0x6, 0xae, 0x1a, 0xad, 0x17, 0x69, 0xc6,
+ 0xc7, 0xe6, 0x15, 0xf0, 0x95, 0xf0, 0xee, 0xd3, 0x8d, 0x88,
+ 0x28, 0xa5, 0xc1, 0x1c, 0x1a, 0x4c, 0x8a, 0xe6, 0xbf, 0x73,
+ 0x8e, 0xfd, 0xc2, 0x8a, 0x37, 0xa, 0x37, 0xf, 0x5a, 0x2e,
+ 0x17, 0x41, 0x45, 0x14, 0x50, 0x30, 0xa2, 0x82, 0x71, 0xdb,
+ 0x34, 0xaa, 0x8c, 0xe7, 0x85, 0x34, 0x6a, 0x24, 0xdb, 0x76,
+ 0x42, 0x12, 0x5, 0x2c, 0x68, 0x66, 0x20, 0x28, 0xe6, 0xb5,
+ 0x74, 0xed, 0x2, 0x4b, 0xf6, 0xc6, 0x31, 0xee, 0x6b, 0xb5,
+ 0xd0, 0x7e, 0x1d, 0xb0, 0x91, 0x5d, 0xb1, 0xff, 00, 0x7c,
+ 0xd7, 0xa7, 0x85, 0xcb, 0xb1, 0x18, 0xa6, 0xb9, 0x56, 0x87,
+ 0xb5, 0x83, 0xca, 0x71, 0x58, 0xc9, 0x2e, 0x48, 0xe8, 0x72,
+ 0x5a, 0x37, 0x85, 0xae, 0x2f, 0xa4, 0x19, 0x1c, 0x67, 0xd2,
+ 0xbd, 0x63, 0xc3, 0x9e, 0xd, 0x82, 0xca, 0x15, 0x77, 0x40,
+ 0x5b, 0xe9, 0x5b, 0x9a, 0x56, 0x89, 0x15, 0x84, 0x40, 0x6d,
+ 0x5c, 0x8f, 0x6a, 0xd2, 0xb, 0x81, 0x8e, 0xd5, 0xfa, 0x4e,
+ 0x5d, 0x92, 0xd2, 0xc2, 0x25, 0x39, 0x2b, 0xb3, 0xf5, 0xac,
+ 0xa7, 0x87, 0xa8, 0xe0, 0x57, 0x3d, 0x45, 0x79, 0xc, 0x8e,
+ 0x31, 0x1a, 0xed, 0x51, 0x52, 0xa, 0x31, 0x4b, 0x5f, 0x4c,
+ 0x95, 0x8f, 0xb1, 0x4a, 0xda, 0x20, 0xa2, 0x8a, 0x29, 0x8c,
+ 0x2a, 0xb5, 0xe4, 0xc2, 0x18, 0x1d, 0x8d, 0x58, 0xac, 0x3f,
+ 0x14, 0xdd, 0x1b, 0x7b, 0x33, 0x8f, 0x4a, 0xc2, 0xbc, 0xfd,
+ 0x9d, 0x39, 0x4c, 0xe6, 0xc4, 0x55, 0x54, 0x69, 0x4a, 0x7d,
+ 0x8f, 0x1e, 0xf8, 0x87, 0x7d, 0xf6, 0xbd, 0x61, 0x70, 0x4e,
+ 00, 0x3f, 0xce, 0xb9, 0x7a, 0xbd, 0xae, 0x5c, 0x35, 0xce,
+ 0xa4, 0xec, 0x7b, 0x13, 0x54, 0x6b, 0xf0, 0xec, 0x65, 0x57,
+ 0x5a, 0xbc, 0xe6, 0xfa, 0xb3, 0xf9, 0xc3, 0x1d, 0x59, 0xd7,
+ 0xc4, 0xd4, 0xa8, 0xfa, 0xb0, 0xa2, 0x8a, 0x2b, 0x8e, 0xc7,
+ 0xd, 0x82, 0x8a, 0x28, 0xa7, 0x60, 0xb0, 0x51, 0x45, 0x14,
+ 0x58, 0x2c, 0x14, 0x51, 0x45, 0x2b, 0x5, 0x82, 0x8a, 0x28,
+ 0xa7, 0x60, 0xb0, 0x51, 0x45, 0x3, 0xe6, 0xe0, 0x52, 0x10,
+ 0x84, 0xe2, 0xa4, 0xb5, 0xb7, 0x6b, 0xc9, 0x76, 0x28, 0x39,
+ 0x35, 0x6f, 0x4f, 0xd2, 0x27, 0xbb, 0x95, 0x40, 0x5e, 0x9,
+ 0xaf, 0x4e, 0xf0, 0xaf, 0x82, 0x95, 0x4a, 0xbb, 0x81, 0x9f,
+ 0xa5, 0x7a, 0xd8, 0x2c, 0xb6, 0xae, 0x36, 0x76, 0x4b, 0x43,
+ 0xdc, 0xcb, 0x72, 0x8a, 0xf9, 0x84, 0xd2, 0x4a, 0xc8, 0xcf,
+ 0xf0, 0x67, 0x83, 0xf6, 0x44, 0x24, 0x91, 0x43, 0x7b, 0x91,
+ 0x5d, 0xe4, 0x90, 0xad, 0xac, 0xa, 0x80, 0x1, 0x5a, 0x96,
+ 0xb6, 0x89, 0x67, 0xe, 0xc5, 0x3, 0x8f, 0x41, 0x54, 0x75,
+ 0x7, 0xe3, 0x15, 0xfa, 0xd6, 0x3, 0x3, 0x4f, 0x5, 0x4d,
+ 0x46, 0x2b, 0x53, 0xf7, 0x2c, 0xb7, 0x2d, 0xa7, 0x97, 0xd2,
+ 0x50, 0x8a, 0xd4, 0xe7, 0xef, 0x1a, 0xb9, 0xed, 0x49, 0xf8,
+ 0x35, 0xd0, 0x5e, 0xbf, 0x5a, 0xe7, 0x75, 0x27, 0xeb, 0x5e,
+ 0xa1, 0xec, 0x9c, 0xce, 0xa2, 0xfd, 0x6b, 0x94, 0xd5, 0xe5,
+ 0xc2, 0x9a, 0xe9, 0xf5, 0x29, 0x3a, 0xd7, 0x23, 0xab, 0xcb,
+ 0xc1, 0xe6, 0x80, 0x38, 0xcd, 0x5e, 0x4f, 0xbf, 0x5f, 0x3d,
+ 0x7c, 0x4e, 0xd4, 0xe, 0xf9, 0xb9, 0x38, 0xc9, 0xaf, 0x7e,
+ 0xd6, 0xe6, 0xda, 0xae, 0x7d, 0xab, 0xe6, 0x3f, 0x89, 0x97,
+ 0xf8, 0x79, 0xb9, 0x27, 0x93, 0xde, 0xbc, 0xac, 0xc2, 0x7c,
+ 0xb4, 0x8f, 0x17, 0x34, 0x9f, 0x25, 0x13, 0xc2, 0x3c, 0x4d,
+ 0x70, 0x64, 0xbd, 0x90, 0x92, 0x7a, 0x9f, 0xe6, 0x6b, 0x88,
+ 0xd4, 0xe4, 0xeb, 0x5d, 0x56, 0xb9, 0x36, 0xf9, 0xe4, 0x3e,
+ 0xe6, 0xb8, 0xed, 0x4d, 0xf8, 0x6a, 0xf8, 0xea, 0x3e, 0xf4,
+ 0xee, 0x7c, 0x6, 0x19, 0x73, 0x4e, 0xe6, 0x5, 0xd3, 0x65,
+ 0x8d, 0x66, 0x4e, 0x72, 0x4f, 0xbd, 0x68, 0x5c, 0xb7, 0x26,
+ 0xaa, 0xda, 0xc2, 0x6e, 0xaf, 0xed, 0xa1, 00, 0x93, 0x24,
+ 0x8a, 0xb8, 0x3, 0x3d, 0x4d, 0x7d, 0x1d, 0x25, 0xb1, 0xf5,
+ 0xb4, 0x23, 0xb2, 0x3f, 0x4b, 0x7f, 0x61, 0x2f, 0x9, 0x47,
+ 0xa2, 0xf8, 0x1f, 0x45, 0x65, 0xc3, 0xbc, 0x91, 0x35, 0xeb,
+ 0x3e, 0x39, 0xfd, 0xe6, 0xe, 0x9, 0xe3, 0xa6, 0xea, 0xfb,
+ 0x16, 0x1c, 0xe0, 0x67, 0xad, 0x78, 0xdf, 0xec, 0xeb, 0xe1,
+ 0xf1, 0xa1, 0xf8, 0x5a, 0xde, 00, 0xaa, 0xab, 0x6f, 0x6f,
+ 0x15, 0xb2, 0x6d, 00, 0xc, 0x2a, 0x81, 0xc0, 0x1d, 0x3a,
+ 0x57, 0xb3, 0x42, 0xb5, 0xf4, 0x31, 0x56, 0x49, 0x1f, 0x55,
+ 0x15, 0x68, 0xa4, 0x5e, 0xb7, 0x7, 0xd6, 0xb4, 0x21, 0xaa,
+ 0x56, 0xeb, 0x57, 0xe0, 0x1c, 0xa, 0xa2, 0x8b, 0xb0, 0xe,
+ 0x5, 0x5f, 0x8b, 0x8c, 0x55, 0x4b, 0x75, 0xe9, 0x57, 0x63,
+ 0x1d, 0x28, 0x2, 0xe4, 0x3c, 0xd5, 0xb8, 0xc5, 0x56, 0xb7,
+ 0x18, 0x15, 0x6e, 0x3a, 00, 0x9e, 0x31, 0x53, 0xaf, 0x41,
+ 0x51, 0x46, 0x2a, 0x75, 0x14, 00, 0xf5, 0xa7, 0x81, 0xc5,
+ 0x31, 0x7a, 0x54, 0x8b, 0xc5, 00, 0x3d, 0x69, 0xd4, 0x8b,
+ 0x4b, 0x40, 0x5, 0x3e, 0x9a, 0x3a, 0xd3, 0xa8, 00, 0xa2,
+ 0x8a, 0x28, 0x3, 0x39, 0xfa, 0xd5, 0x79, 0xd, 0x4e, 0xf5,
+ 0x5a, 0x43, 0x40, 0x15, 0xe4, 0x35, 0xe0, 0x9f, 0xb6, 0x37,
+ 0x8b, 0xcf, 0x86, 0xbe, 0xf, 0x5d, 0xda, 0xa2, 0x2b, 0xbe,
+ 0xaf, 0x32, 0x59, 0x6e, 0x24, 0xe5, 0x41, 0xf9, 0xf7, 0xf,
+ 0xfb, 0xe3, 0x1f, 0x8d, 0x7b, 0xcc, 0xb5, 0xf1, 0x27, 0xed,
+ 0xb7, 0xe2, 0xe8, 0xbc, 0x41, 0xe3, 0x9d, 0x7, 0xc2, 0x96,
+ 0xbb, 0x9a, 0x5d, 0x3d, 0x4c, 0xf3, 0xff, 00, 0x74, 0xb4,
+ 0x98, 0x8, 0x38, 0xee, 0x30, 0x7f, 0x3a, 0xf0, 0xf3, 0xac,
+ 0x47, 0xd5, 0xb0, 0x35, 0x25, 0x7d, 0x5a, 0xb2, 0xf9, 0x9f,
+ 0x39, 0xc4, 0x18, 0xaf, 0xaa, 0x65, 0xb5, 0x67, 0x7d, 0x5a,
+ 0xb2, 0xf5, 0x66, 0xe7, 0xec, 0x73, 0xe1, 0x63, 0x6, 0x93,
+ 0x36, 0xa2, 0xd9, 0xcc, 0x8f, 0xb4, 0xf, 0x6c, 0x2d, 0x7d,
+ 0x97, 0xa3, 0xc3, 0xb1, 0x17, 0x35, 0xe2, 0x7f, 0xb3, 0xe7,
+ 0x85, 0xf, 0x87, 0xfc, 0x13, 0xa6, 0xc2, 0xc8, 0xaa, 0xec,
+ 0x81, 0xdb, 0x69, 0x3d, 0x48, 0x15, 0xee, 0xd6, 0x11, 0xed,
+ 0x1f, 0x85, 0x5e, 0x51, 0x87, 0xfa, 0xb6, 0xa, 0x9c, 0x1e,
+ 0xf6, 0xbb, 0xf9, 0x9a, 0x64, 0x38, 0x6f, 0xaa, 0x65, 0xf4,
+ 0xa9, 0xdb, 0x5b, 0x5d, 0xfc, 0xcb, 0x57, 0x12, 0x8b, 0x7b,
+ 0x79, 0x24, 0x6e, 0x15, 0x14, 0x93, 0x5f, 0x90, 0x1f, 0xf0,
+ 0x52, 0x9f, 0x88, 0xbf, 0x69, 0x96, 0x4b, 0x34, 0x70, 0x1e,
+ 0x42, 0x47, 0x4e, 0xbf, 0x77, 0xda, 0xbf, 0x57, 0xfe, 0x20,
+ 0xea, 0xa3, 0x48, 0xf0, 0xad, 0xec, 0xb9, 0x21, 0x8a, 0x60,
+ 0x62, 0xbf, 0x4, 0x7f, 0x6d, 0xef, 0x1b, 0x7f, 0xc2, 0x43,
+ 0xf1, 0x15, 0xed, 0x56, 0x46, 0x91, 0x61, 0xcf, 0xc, 00,
+ 0xc7, 0xdd, 0xff, 00, 0xa, 0xf6, 0x4f, 0x7c, 0xf9, 0xd7,
+ 0x4b, 0xb5, 0x37, 0x97, 0xf6, 0xf0, 0x81, 0xf7, 0xe4, 0x51,
+ 0xf8, 0x67, 0x9a, 0xfd, 0x7f, 0xff, 00, 0x82, 0x71, 0xf8,
+ 0x22, 0x12, 0x22, 0xb9, 0xc9, 0x6f, 0x29, 0x57, 0x20, 0xe,
+ 0x6, 0x36, 0xfb, 0xd7, 0xe4, 0x37, 0x87, 0xef, 0x22, 0xb0,
+ 0xd4, 0xe1, 0x9e, 0x5c, 0xed, 0x46, 0x7, 0x8a, 0xfd, 0x48,
+ 0xfd, 0x88, 0xbf, 0x6a, 0x8f, 0xb, 0xfc, 0x3a, 0xf0, 0xff,
+ 00, 0xd9, 0xef, 0x96, 0xe1, 0xa6, 0x90, 0x1, 0xfb, 0xb8,
+ 0xd4, 0x8e, 0x8b, 0xea, 0x7d, 0xa8, 0x3, 0xf4, 0xd3, 0xc5,
+ 0x97, 0xc3, 0x4f, 0xd1, 0x2e, 0x25, 0xec, 0xa8, 0x49, 0xfa,
+ 0x62, 0xbf, 0x9e, 0xdf, 0xdb, 0x5f, 0xc5, 0xb2, 0xf8, 0x9f,
+ 0xf6, 0x86, 0xf1, 0x44, 0xc6, 0x42, 0x56, 0x39, 0xc2, 0x2e,
+ 0x38, 0x3, 0xa, 0xb5, 0xfa, 0xb9, 0xf1, 0x87, 0xf6, 0xe6,
+ 0xf0, 0x99, 0xf0, 0x8e, 0xa0, 0x90, 0x47, 0x77, 0xbc, 0xc4,
+ 0x55, 0x7e, 0x45, 0xea, 0x47, 0xfb, 0xd5, 0xf8, 0x9f, 0xf1,
+ 0x3b, 0xc4, 0x43, 0xc5, 0x9e, 0x3e, 0xd6, 0xf5, 0x65, 0xdd,
+ 0xb6, 0xea, 0xe0, 0xb8, 0xdd, 0xd7, 0xb0, 0xfe, 0x94, 0x1,
+ 0xe8, 0xbf, 0xb2, 0xdf, 0x86, 0xe5, 0xf1, 0x17, 0xc4, 0x1b,
+ 0x43, 0x96, 0x65, 0x47, 0x1d, 0xfa, 0xf5, 0xaf, 0xde, 0x8f,
+ 0xd9, 0xef, 0xc3, 0xc3, 0x45, 0xf0, 0x4d, 0xbb, 0x75, 0x67,
+ 0x18, 0xcf, 0xb0, 0xaf, 0xc6, 0x5f, 0xd8, 0x9e, 0xeb, 0x49,
+ 0xf0, 0xfe, 0xb3, 0x15, 0xde, 0xa6, 0x33, 0x96, 0xc9, 0xda,
+ 0x32, 0x4f, 0x5c, 0xe, 0xa2, 0xbf, 0x5f, 0x7c, 0x1d, 0xfb,
+ 0x45, 0x78, 0x27, 0x4e, 0xd0, 0x6d, 0x2d, 0xbe, 0xd1, 0x3a,
+ 0xb2, 0xa7, 0x41, 0x18, 0xff, 00, 0xe2, 0xa8, 0x3, 0xdc,
+ 0x68, 0xaf, 0x31, 0x8f, 0xf6, 0x89, 0xf0, 0x6c, 0xa3, 0x8b,
+ 0xa9, 0xff, 00, 0xef, 0x81, 0xff, 00, 0xc5, 0x55, 0xb8,
+ 0xfe, 0x3c, 0x78, 0x46, 0x4e, 0x97, 0xb2, 0xf, 0xaa, 0xf,
+ 0xf1, 0xa0, 0xf, 0x43, 0xa2, 0xb8, 0x68, 0xbe, 0x33, 0x78,
+ 0x5e, 0x53, 0xc5, 0xf1, 0x1f, 0x55, 0xff, 00, 0xeb, 0xd5,
+ 0xc8, 0xfe, 0x29, 0x78, 0x72, 0x5e, 0x97, 0xe0, 0x7f, 0xc0,
+ 0x4d, 00, 0x75, 0xb4, 0x56, 0x5e, 0x99, 0xe2, 0x5d, 0x3b,
+ 0x57, 0x20, 0x5a, 0xdc, 0xac, 0xa4, 0xf4, 0x2, 0xb5, 0x28,
+ 00, 0xa2, 0x8a, 0x8a, 0x5b, 0xa8, 0x60, 0x19, 0x92, 0x45,
+ 0x4f, 0xa9, 0xa0, 0x9, 0x68, 0xa8, 0x16, 0xfa, 0xdd, 0xba,
+ 0x4f, 0x19, 0xff, 00, 0x81, 0xa, 0x78, 0x9e, 0x33, 0xd2,
+ 0x45, 0x3f, 0x46, 0x14, 0x1, 0x25, 0x14, 0xdd, 0xea, 0x7f,
+ 0x88, 0x7e, 0x74, 0xbb, 0x87, 0xa8, 0xa0, 0x5, 0xa2, 0x8a,
+ 0x4a, 00, 0x5a, 0x28, 0xa4, 0xcd, 00, 0x2d, 0x14, 0x51,
+ 0x40, 0x5, 0x14, 0x99, 0x14, 0xb4, 00, 0x51, 0x45, 0x14,
+ 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51,
+ 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14,
+ 00, 0x51, 0x45, 0x14, 00, 0x52, 0x1a, 0x5a, 0x28, 0x1,
+ 0xb8, 0xa3, 0x8a, 0x75, 0x14, 00, 0xde, 0x28, 0xcd, 0x3a,
+ 0x8a, 00, 0x6e, 0x1, 0xa5, 0xc0, 0x14, 0xb4, 0x50, 0x3,
+ 0x69, 0xd4, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14,
+ 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40,
+ 0x5, 0x14, 0x51, 0x40, 0x5, 0x34, 0x80, 0x69, 0xd4, 0x50,
+ 0x6, 0x5e, 0xa1, 0xa3, 0x25, 0xe0, 0x23, 0x81, 0x9a, 0xe4,
+ 0xb5, 0x3f, 0x87, 0x9f, 0x69, 0x25, 0x87, 0x5f, 0x63, 0x5e,
+ 0x83, 0x48, 0x46, 0x6b, 0xcf, 0xc4, 0x60, 0x28, 0x62, 0x7f,
+ 0x88, 0x8f, 0x2b, 0x13, 0x96, 0x61, 0xb1, 0x7f, 0xc5, 0x89,
+ 0xe3, 0x97, 0x3f, 0xd, 0x1d, 0x49, 0xc6, 0x7f, 0x3f, 0xfe,
+ 0xbd, 0x64, 0x5d, 0xf8, 0xa, 0x58, 0xf, 0x53, 0x5e, 0xec,
+ 0xd0, 0xab, 0xf5, 0x5a, 0xab, 0x3e, 0x95, 0x14, 0xfd, 0xbf,
+ 0x3a, 0xf0, 0x2b, 0x70, 0xee, 0x1a, 0x4b, 0xdc, 0x47, 0xcc,
+ 0xd7, 0xe1, 0x4c, 0x2c, 0xd7, 0xb8, 0x8f, 0x2, 0x7f, 0x8,
+ 0xce, 0x3b, 0x9a, 0x8f, 0xfe, 0x11, 0x4b, 0x8c, 0xf5, 0x35,
+ 0xee, 0xcf, 0xe1, 0xb8, 0x5b, 0xb0, 0xa6, 0x8f, 0xc, 0xc2,
+ 0xe, 0x70, 0xb5, 0xe6, 0x3e, 0x19, 0x8d, 0xcf, 0x1d, 0xf0,
+ 0x7c, 0x6f, 0xa1, 0xe2, 0x49, 0xe0, 0xeb, 0xb6, 0x1c, 0x67,
+ 0xf4, 0xa9, 0x53, 0xc1, 0x77, 0x9e, 0x87, 0xfc, 0xfe, 0x35,
+ 0xee, 0x31, 0xe8, 0x91, 0x20, 0x3, 0x2, 0xac, 0x26, 0x9d,
+ 0x12, 0x7f, 0x8, 0x35, 0xbc, 0x38, 0x66, 0x97, 0x56, 0x75,
+ 0x43, 0x83, 0xa8, 0xfd, 0xa6, 0x78, 0xc5, 0x8f, 0x81, 0xee,
+ 0x59, 0x86, 0xe1, 0x91, 0xf4, 0xff, 00, 0xeb, 0xd7, 0x67,
+ 0xa4, 0xf8, 0xa, 0x2d, 0x8a, 0x64, 0x18, 0x38, 0xae, 0xe8,
+ 0x40, 0x8b, 0xd1, 0x45, 0x48, 0xa0, 0x1, 0xc5, 0x7b, 0x18,
+ 0x6c, 0x8f, 0xd, 0x87, 0x7a, 0xab, 0x9e, 0xee, 0x13, 0x87,
+ 0x30, 0x98, 0x67, 0x76, 0xae, 0x62, 0xd9, 0xf8, 0x5e, 0xd6,
+ 0xd3, 0x5, 0x46, 0x6b, 0x5e, 0x38, 0x96, 0x31, 0x80, 0x31,
+ 0xf4, 0xa9, 0x28, 0xaf, 0x7a, 0x9d, 0x28, 0x52, 0x56, 0x82,
+ 0xb1, 0xf4, 0xb4, 0xa8, 0xd3, 0xa2, 0xad, 0x4e, 0x36, 0x10,
+ 0x63, 0xb5, 0x2d, 0x14, 0x56, 0xa6, 0xe1, 0x45, 0x14, 0x50,
+ 0x1, 0x45, 0x14, 0x50, 0x2, 0x56, 0x3f, 0x88, 0x74, 0xd6,
+ 0xbf, 0xb7, 0x21, 0x73, 0xd3, 0x15, 0xb3, 0x45, 0x65, 0x52,
+ 0x9a, 0xab, 0x17, 0x9, 0x75, 0x31, 0xad, 0x4a, 0x35, 0xa0,
+ 0xe9, 0xcb, 0x66, 0x78, 0x66, 0xaf, 0xe0, 0x6b, 0x95, 0x99,
+ 0x98, 0x67, 0x93, 0x9a, 0xe7, 0x6e, 0xfc, 0x3d, 0x71, 0x6e,
+ 0xc7, 0x35, 0xf4, 0x65, 0xcd, 0x9a, 0xdc, 0xae, 0x8, 0x19,
+ 0xae, 0x7f, 0x51, 0xf0, 0x72, 0x5d, 0x93, 0x8d, 0xa3, 0xeb,
+ 0x5f, 0xd, 0x8b, 0xe1, 0xb8, 0xc9, 0xb7, 0x48, 0xfc, 0xe3,
+ 0x1d, 0xc2, 0x70, 0x95, 0xe5, 0x40, 0xf0, 0x56, 0xb6, 0x78,
+ 0xcf, 0x34, 0xdc, 0x62, 0xbd, 0x66, 0xf7, 0xe1, 0x93, 0xc8,
+ 0x49, 0x5d, 0x9f, 0x99, 0xac, 0x9b, 0x8f, 0x86, 0x13, 0x8c,
+ 0xe0, 0x2f, 0xfd, 0xf4, 0x6b, 0xe6, 0xaa, 0xe4, 0x78, 0xb8,
+ 0x3d, 0x22, 0x7c, 0x7d, 0x5e, 0x1b, 0xc7, 0x52, 0x7a, 0x40,
+ 0xf3, 0xbc, 0xe2, 0x8c, 0x8a, 0xec, 0xe7, 0xf8, 0x6d, 0x76,
+ 0x99, 0xc6, 0xdf, 0xcc, 0xd6, 0x74, 0xfe, 0x5, 0xbc, 0x8c,
+ 0xf6, 0xfc, 0xcd, 0x79, 0xf3, 0xcb, 0xb1, 0x54, 0xf7, 0x81,
+ 0xe6, 0x4f, 0x2a, 0xc7, 0x53, 0xde, 0x9b, 0x39, 0xdc, 0x8a,
+ 0x33, 0x9a, 0xd9, 0x6f, 0x6, 0xde, 0xaf, 0xa7, 0xe6, 0x69,
+ 0x17, 0xc1, 0xfa, 0x81, 0x3c, 0x5, 0x3f, 0x89, 0xac, 0x3e,
+ 0xab, 0x88, 0xfe, 0x46, 0x73, 0x7d, 0x4b, 0x15, 0xff, 00,
+ 0x3e, 0xd9, 0x8f, 0x45, 0x6e, 0xaf, 0x82, 0x35, 0x36, 0xe8,
+ 0x8b, 0xf9, 0x9a, 0x90, 0x78, 0x1f, 0x53, 0xff, 00, 0x9e,
+ 0x6b, 0xf9, 0x9a, 0xd1, 0x60, 0xb1, 0x2f, 0xec, 0x32, 0xd6,
+ 0x5f, 0x8b, 0x7f, 0xf2, 0xed, 0x9c, 0xf1, 0x34, 0x81, 0xb2,
+ 0x71, 0x8a, 0xec, 0x2d, 0x3c, 0x1, 0xa8, 0x39, 0x1b, 0xa3,
+ 0x5c, 0x7d, 0x4d, 0x74, 0xfa, 0x5f, 0xc3, 0x82, 0xd8, 0xf3,
+ 0x51, 0x3f, 0x33, 0x5d, 0xb4, 0x32, 0x7c, 0x5d, 0x77, 0xa4,
+ 0x6c, 0x7a, 0x58, 0x7c, 0x83, 0x1d, 0x88, 0x76, 0xe5, 0x68,
+ 0xf3, 0x4b, 0x3d, 0x32, 0x4b, 0xd6, 0x1, 0x41, 0xe6, 0xba,
+ 0x8d, 0x17, 0xe1, 0xf4, 0xf7, 0x32, 0x6, 0xc9, 0xc5, 0x7a,
+ 0x55, 0x87, 0x81, 0xad, 0xad, 0x8, 0x25, 0x57, 0xf0, 0xae,
+ 0x82, 0xd2, 0xce, 0x3b, 0x45, 0xc2, 0x2e, 0x2b, 0xea, 0xf0,
+ 0x7c, 0x37, 0x18, 0xb4, 0xeb, 0x9f, 0x6d, 0x97, 0xf0, 0x8c,
+ 0x62, 0xd4, 0xb1, 0x46, 0x6, 0x83, 0xe1, 0x18, 0xb4, 0xf8,
+ 0xd7, 0xcc, 0x5c, 0x9a, 0xe9, 0x63, 0x85, 0x63, 0x18, 0x51,
+ 0x8f, 0xa5, 0x3e, 0x8a, 0xfb, 0x6a, 0x34, 0x29, 0xd0, 0x8f,
+ 0x2d, 0x35, 0x63, 0xf4, 0x4c, 0x3e, 0x16, 0x96, 0x1a, 0xa,
+ 0x14, 0x95, 0x91, 0x14, 0xa7, 0x2, 0xb1, 0xb5, 0x6, 0xe7,
+ 0xf0, 0xad, 0x6b, 0x86, 0xc0, 0x35, 0x85, 0xa8, 0xbf, 0xf5,
+ 0xae, 0x83, 0xa8, 0xc5, 0xbc, 0x7e, 0x4d, 0x73, 0x5a, 0x94,
+ 0x9d, 0x6b, 0x7a, 0xf6, 0x4e, 0xb5, 0xcb, 0xea, 0x52, 0xf5,
+ 0xa0, 0xe, 0x7f, 0x52, 0x93, 0xad, 0x71, 0xda, 0xc4, 0xbd,
+ 0x6b, 0xa8, 0xd4, 0xe5, 0xc6, 0xea, 0xe2, 0xf5, 0x79, 0xb3,
+ 0x9e, 0x68, 0x3, 0x8c, 0xf1, 0x35, 0xcf, 0x95, 0x6b, 0x2b,
+ 0xf, 0x4a, 0xf9, 0x47, 0xe2, 0x56, 0xa1, 0xba, 0x49, 0xb1,
+ 0xea, 0x6b, 0xe9, 0x4f, 0x1b, 0xdf, 0x8, 0x6c, 0xdf, 0x9e,
+ 0xd5, 0xf2, 0x37, 0xc4, 0x2d, 0x47, 0xcc, 0x9e, 0x45, 0xc9,
+ 0xe4, 0xd7, 0xcd, 0xe6, 0xd5, 0x2d, 0x14, 0x8f, 0x92, 0xcf,
+ 0x2a, 0xa5, 0x15, 0x13, 0xcd, 0xb5, 0x49, 0x32, 0x58, 0xfa,
+ 0x9a, 0xe4, 0xb5, 0x29, 0x32, 0x4d, 0x74, 0x5a, 0x94, 0xbd,
+ 0x6b, 0x95, 0xd4, 0x65, 0xc9, 0x35, 0xe1, 0xe1, 0x62, 0x7c,
+ 0xde, 0xa, 0x26, 0x4d, 0xcb, 0x75, 0xae, 0xaf, 0xe0, 0x96,
+ 0x84, 0xde, 0x24, 0xf8, 0xab, 0xe1, 0xeb, 0x4d, 0xa1, 0xa2,
+ 0x17, 0x4a, 0xf2, 0xf3, 0x8c, 0x20, 0x3c, 0x9a, 0xe4, 0x6e,
+ 0x1b, 0x93, 0x5e, 0xf9, 0xfb, 0x14, 0x78, 0x62, 0x4d, 0x67,
+ 0xe2, 0x36, 0xa1, 0xa9, 0x85, 0xd, 0x1d, 0x8d, 0xb0, 0x8c,
+ 0x82, 0x70, 0x4b, 0x48, 0x78, 0x3f, 0xf8, 0xe1, 0xfc, 0xeb,
+ 0xe9, 0x30, 0xf1, 0xbc, 0x91, 0xf5, 0xb8, 0x58, 0xde, 0x49,
+ 0x1f, 0xa8, 0x5f, 0xc, 0x74, 0xf3, 0x63, 0xe1, 0x8b, 0x7c,
+ 0xf5, 0x90, 0xef, 0xfc, 0xf, 0x4a, 0xed, 0xe1, 0x1c, 0xd6,
+ 0x4e, 0x89, 0x67, 0xf6, 0x1d, 0x3e, 0xd6, 0xdf, 0x8f, 0xdd,
+ 0x46, 0xa9, 0xc7, 0xb0, 0x15, 0xb5, 00, 0xe6, 0xbd, 0xc3,
+ 0xe9, 0xb, 0xb0, 0xae, 0x5, 0x5f, 0x81, 0x72, 0x5, 0x54,
+ 0x89, 0x6a, 0xf4, 0x2b, 0xd2, 0x80, 0x2f, 0x40, 0x3a, 0x55,
+ 0xc8, 0x85, 0x56, 0x85, 0x71, 0x8a, 0xb9, 0x8, 0xa0, 0xb,
+ 0x71, 0xe, 0x5, 0x5b, 0x8c, 0x55, 0x78, 0x85, 0x5a, 0x8c,
+ 0x50, 0x4, 0xd1, 0x8a, 0x99, 0x6a, 0x34, 0x15, 0x2a, 0xf6,
+ 0xa0, 0x7, 0x8e, 0xd5, 0x22, 0xf5, 0xa6, 0x2d, 0x3d, 0x7a,
+ 0x50, 0x4, 0x83, 0xa5, 0x14, 0xa, 0x28, 0x1, 0xcb, 0x4b,
+ 0x48, 0x3a, 0x52, 0xd0, 0x1, 0x45, 0x14, 0x50, 0x6, 0x5c,
+ 0x86, 0xab, 0x48, 0x6a, 0xc4, 0x9d, 0x6a, 0xac, 0x94, 0x1,
+ 0x5e, 0x53, 0x5f, 0x9c, 0xda, 0xc5, 0xdf, 0xfc, 0x2c, 0xbf,
+ 0xda, 0x33, 0x50, 0xbc, 0x4f, 0xde, 0x5b, 0xc9, 0x7c, 0x16,
+ 0x20, 0x79, 0xf9, 0x17, 0xb1, 0xc6, 0x47, 0xad, 0x7d, 0xd9,
+ 0xf1, 0x6b, 0xc4, 0xcb, 0xe0, 0xef, 0x87, 0x7a, 0xf6, 0xb0,
+ 0xd2, 0xb4, 0x4d, 0x6b, 0x6a, 0xee, 0x85, 0x5b, 0x6b, 0x16,
+ 0xc7, 0xca, 0x1, 0xf5, 0x27, 0x8a, 0xf8, 0xab, 0xf6, 0x4d,
+ 0xf0, 0xe3, 0xea, 0xde, 0x30, 0x96, 0xfd, 0xd3, 0x72, 0xc4,
+ 0x37, 0x12, 0xc3, 0x27, 0x24, 0x8a, 0xf8, 0xcc, 0xf9, 0xfb,
+ 0x7a, 0xd8, 0x7c, 0x22, 0xea, 0xee, 0xfe, 0x47, 0xe7, 0xfc,
+ 0x4d, 0x2f, 0xac, 0xe2, 0x30, 0xb8, 0x15, 0xf6, 0xa5, 0x77,
+ 0xe8, 0x8f, 0xb9, 0xfc, 0x17, 0xa7, 0xad, 0x96, 0x9f, 0x6f,
+ 0x1a, 0xae, 0xd0, 0x88, 0x6, 0x31, 0xe8, 0x5, 0x77, 0x56,
+ 0xab, 0x85, 0xcd, 0x73, 0xfa, 0x15, 0xbf, 0x97, 0xa, 0xc,
+ 0x76, 0xae, 0x96, 0x21, 0x84, 0xaf, 0xb1, 0x8a, 0xe5, 0x49,
+ 0x1f, 0x7b, 0x8, 0xf2, 0xc5, 0x44, 0xf3, 0xff, 00, 0x8d,
+ 0xf2, 0xfd, 0x9f, 0xc0, 0xd7, 0xf3, 0x31, 0x21, 0x23, 0x89,
+ 0x98, 0xe3, 0xd6, 0xbf, 0x9d, 0xcf, 0x8e, 0xba, 0xab, 0xeb,
+ 0x5f, 0x11, 0x75, 0x5b, 0xa6, 0x24, 0x83, 0x26, 0x1, 0x35,
+ 0xfd, 0x9, 0x7e, 0xd2, 0x30, 0xdc, 0x5d, 0x7c, 0x2e, 0xd5,
+ 0x6d, 0xad, 0x43, 0x19, 0xa6, 0x4d, 0xa3, 0x68, 0x24, 0xf5,
+ 0x1e, 0x95, 0xfc, 0xf9, 0xfc, 0x6f, 0xf0, 0xfc, 0xda, 0x7,
+ 0x8b, 0xee, 0x6d, 0xa6, 0x3b, 0xa4, 0xc, 0x4b, 0x1c, 0x7d,
+ 0x2a, 0x8b, 0x3c, 0xdc, 0x70, 0x6b, 0xaf, 0xf0, 0xff, 00,
+ 0xc4, 0x3b, 0xcd, 0x1, 0x54, 0x40, 0xec, 0x9b, 0x7f, 0xbb,
+ 0x9f, 0xf1, 0xae, 0x42, 0x8a, 00, 0xef, 0xb5, 0xef, 0x8b,
+ 0x7a, 0x9e, 0xb9, 0x64, 0xd0, 0x49, 0x73, 0x31, 0xd, 0xd4,
+ 0x12, 0x71, 0xfc, 0xeb, 0x82, 0x76, 0x2e, 0xc5, 0x8f, 0x24,
+ 0x9c, 0xd2, 0x51, 0x40, 0x1d, 0xef, 0x82, 0xfe, 0x23, 0x3f,
+ 0x85, 0xca, 0x79, 0x72, 0x48, 0x9b, 0x7f, 0xbb, 0xff, 00,
+ 0xeb, 0xaf, 0x4e, 0xb6, 0xfd, 0xa8, 0x6f, 0xa2, 0x1, 0x7e,
+ 0xdd, 0x70, 00, 0xe3, 0x4, 0x9f, 0xfe, 0x2a, 0xbe, 0x74,
+ 0xa2, 0x80, 0x3e, 0x9e, 0xb6, 0xfd, 0xab, 0x2f, 0x53, 0x1f,
+ 0xf1, 0x30, 0xb8, 0x5f, 0xa3, 0x1f, 0xfe, 0x2a, 0xb4, 0xed,
+ 0xff, 00, 0x6b, 0x5b, 0xd1, 0x8f, 0xf8, 0x9a, 0x5c, 0xaf,
+ 0xfc, 0xf, 0xff, 00, 0xb2, 0xaf, 0x93, 0xa8, 0xdc, 0x7d,
+ 0x4d, 00, 0x7d, 0x8f, 0x6b, 0xfb, 0x5d, 0xde, 0x86, 0x4,
+ 0x6a, 0xd2, 0xe7, 0xfe, 0xba, 0x7f, 0xf6, 0x75, 0xbb, 0xa7,
+ 0x7e, 0xd7, 0x77, 0xf3, 0xcf, 0x14, 0x6b, 0xab, 0xcf, 0x96,
+ 0x20, 0x7f, 0xac, 0xff, 00, 0xec, 0xab, 0xe1, 0xcd, 0xec,
+ 0x3f, 0x88, 0xfe, 0x75, 0xd2, 0x78, 0xe, 0xc2, 0x5d, 0x53,
+ 0xc4, 0x36, 0xf1, 0x82, 0xcc, 0x1, 0xfa, 0x8a, 00, 0xfd,
+ 0xb4, 0xfd, 0x8e, 0xfe, 0x22, 0x5e, 0xf8, 0xee, 0xf9, 0xc,
+ 0xb7, 0x4f, 0x3a, 0x2a, 0x2, 0x77, 0x36, 0x73, 0xd3, 0xdc,
+ 0xd7, 0xd9, 0xc2, 0xbe, 0x36, 0xff, 00, 0x82, 0x7b, 0x78,
+ 0x11, 0xb4, 0x4f, 0xa, 0x49, 0x7d, 0x2a, 0x6d, 0x2e, 0x83,
+ 0xef, 0x2f, 0x3f, 0xfd, 0x6e, 0x95, 0xf6, 0x4d, 00, 0x67,
+ 0xeb, 0xba, 0xa2, 0x69, 0x1a, 0x6c, 0xd7, 0x2e, 0xdb, 0x42,
+ 0xf, 0x51, 0x5f, 0xb, 0x7e, 0xd0, 0xbf, 0xb5, 0xa4, 0xbe,
+ 0x17, 0xd6, 0xd, 0xa5, 0xae, 0xa0, 0xf1, 0x90, 0xf8, 0xf9,
+ 0x5f, 0xff, 00, 0xb3, 0xaf, 0xa8, 0xbf, 0x68, 0x6f, 0x10,
+ 0xd, 0x1b, 0xc1, 0xf3, 0x8f, 0x30, 0xa1, 0x2a, 0x5b, 0xe5,
+ 0x6c, 0x1e, 0x86, 0xbf, 0x6, 0x3f, 0x69, 0x8f, 0x1d, 0x5d,
+ 0x6b, 0x7f, 0x11, 0xaf, 0x7c, 0xab, 0xb9, 0x8a, 0x46, 0xe7,
+ 0xee, 0xca, 0x71, 0xf8, 0x73, 0x40, 0x1f, 0x78, 0xd9, 0x7e,
+ 0xdb, 0x7a, 0x8a, 0xf5, 0xd5, 0x25, 0xff, 00, 0xbe, 0xff,
+ 00, 0xfb, 0x3a, 0xdd, 0xb4, 0xfd, 0xb8, 0x2f, 0x94, 0x8f,
+ 0xf8, 0x99, 0xca, 0x7e, 0x92, 0x7f, 0xf6, 0x75, 0xf9, 0x32,
+ 0x9e, 0x21, 0xd4, 0x53, 0xa5, 0xe4, 0xff, 00, 0xf7, 0xf5,
+ 0xbf, 0xc6, 0xa7, 0x5f, 0x16, 0xea, 0x89, 0xd2, 0xf2, 0x5f,
+ 0xfb, 0xf8, 0xdf, 0xe3, 0x40, 0x1f, 0xae, 0xf6, 0x9f, 0xb7,
+ 0x1d, 0xe7, 00, 0xea, 0x73, 0x7f, 0xdf, 0x63, 0xff, 00,
+ 0x8b, 0xad, 0x8b, 0x4f, 0xdb, 0x8e, 0xe3, 0x1c, 0xea, 0xe,
+ 0x7f, 0xe0, 0x43, 0xff, 00, 0x8b, 0xaf, 0xc7, 0x88, 0xfc,
+ 0x73, 0xab, 0xc6, 0x78, 0xbb, 0x97, 0xfe, 0xfe, 0xb7, 0xf8,
+ 0xd5, 0x94, 0xf8, 0x8d, 0xac, 0x46, 0x31, 0xf6, 0x87, 0x3f,
+ 0xf6, 0xd5, 0xbf, 0xc6, 0x80, 0x3f, 0x65, 0xad, 0xff, 00,
+ 0x6e, 0x6, 0x38, 0xdd, 0x7b, 0x27, 0xe8, 0x7f, 0xf6, 0x7a,
+ 0xd6, 0xb4, 0xfd, 0xb6, 0xe3, 0x6c, 0x66, 0xeb, 0x3c, 0x7f,
+ 0x10, 0x1f, 0xfc, 0x5d, 0x7e, 0x2e, 0x47, 0xf1, 0x4f, 0x59,
+ 0x8f, 0xfe, 0x5b, 0x49, 0xff, 00, 0x7f, 0x9b, 0xfc, 0x6a,
+ 0xdc, 0x5f, 0x18, 0x75, 0x88, 0xcf, 0xdf, 0x90, 0xff, 00,
+ 0xdb, 0x66, 0xff, 00, 0x1a, 00, 0xfd, 0xb2, 0xb5, 0xfd,
+ 0xb4, 0x6c, 0xca, 0x82, 0xd3, 0x29, 0xff, 00, 0xbe, 0x7f,
+ 0xf8, 0xba, 0xd6, 0xb5, 0xfd, 0xb2, 0x74, 0xc7, 0x3, 0x74,
+ 0xb1, 0xf3, 0xeb, 0xb4, 0x7f, 0xec, 0xf5, 0xf8, 0x89, 0xf,
+ 0xc6, 0xfd, 0x5a, 0x30, 0x32, 0x66, 0x3f, 0x49, 0x9b, 0xfc,
+ 0x6a, 0xec, 0x3f, 0x1f, 0x35, 0x48, 0xcf, 0x26, 0x73, 0xff,
+ 00, 0x6d, 0xda, 0x80, 0x3f, 0x70, 0xed, 0xbf, 0x6b, 0xbd,
+ 0x22, 0x4f, 0xbc, 0xf1, 0xfe, 0x6b, 0xff, 00, 0xc5, 0xd6,
+ 0x9d, 0xbf, 0xed, 0x5d, 0xa1, 0x49, 0xf7, 0x9d, 0x7f, 0x35,
+ 0xff, 00, 0xe2, 0xeb, 0xf0, 0xde, 0x1f, 0xda, 0x23, 0x51,
+ 0x8c, 0xf3, 0xf6, 0x8f, 0xc2, 0x73, 0xfe, 0x35, 0x7a, 0x1f,
+ 0xda, 0x4a, 0xf9, 0x47, 0x2f, 0x74, 0x3f, 0xed, 0xb1, 0xff,
+ 00, 0x1a, 00, 0xfd, 0xcc, 0xb7, 0xfd, 0xa7, 0x7c, 0x3d,
+ 0x2e, 0x9, 0x75, 0xfc, 0x19, 0x3f, 0xf8, 0xba, 0xd1, 0x87,
+ 0xf6, 0x8b, 0xf0, 0xd4, 0xa4, 0x66, 0x42, 0x33, 0xfe, 0xd2,
+ 0x7f, 0xf1, 0x55, 0xf8, 0x67, 0x7, 0xed, 0x39, 0x76, 0xa1,
+ 0x73, 0x25, 0xc0, 0xff, 00, 0xb6, 0xe7, 0xfc, 0x6b, 0x46,
+ 0xdb, 0xf6, 0xa6, 0x9d, 0x59, 0x77, 0x4f, 0x72, 0xa3, 0xfe,
+ 0xbe, 0xf, 0xf8, 0xd0, 0x7, 0xee, 0x5c, 0x1f, 0x1d, 0xbc,
+ 0x37, 0x2e, 0x3f, 0x7f, 0xd7, 0xfd, 0xb4, 0xff, 00, 0xe2,
+ 0xaa, 0xec, 0x5f, 0x19, 0xbc, 0x39, 0x20, 0xcf, 0xda, 0x31,
+ 0xff, 00, 0x2, 0x4f, 0xf1, 0xaf, 0xc3, 0xcb, 0x7f, 0xda,
+ 0xba, 0x54, 0xe7, 0xed, 0x93, 0xf, 0xad, 0xc1, 0xff, 00,
+ 0x1a, 0xd2, 0xb7, 0xfd, 0xad, 0xdd, 0x71, 0xfe, 0x9f, 0x38,
+ 0x3f, 0xf5, 0xf4, 0x7f, 0xc6, 0x80, 0x3f, 0x6e, 0xa2, 0xf8,
+ 0xaf, 0xe1, 0xf9, 0x7a, 0x5d, 0x1, 0xf5, 0x65, 0xff, 00,
+ 0x1a, 0xb9, 0x17, 0xc4, 0x5d, 0xe, 0x53, 0xc5, 0xe4, 0x7f,
+ 0xf7, 0xda, 0xff, 00, 0x8d, 0x7e, 0x25, 0x5b, 0x7e, 0xd7,
+ 0xae, 0x98, 0xff, 00, 0x89, 0x8c, 0xff, 00, 0x8d, 0xd1,
+ 0xff, 00, 0x1a, 0xd5, 0xb6, 0xfd, 0xb1, 0x48, 0x23, 0x3a,
+ 0x9c, 0x83, 0xfe, 0xde, 0xcf, 0xf8, 0xd0, 0x7, 0xed, 0x4a,
+ 0x78, 0xd7, 0x47, 0x7e, 0x97, 0x91, 0x7f, 0xdf, 0xc5, 0xff,
+ 00, 0x1a, 0xb3, 0x1f, 0x89, 0xb4, 0xc9, 0x7e, 0xed, 0xe4,
+ 0x27, 0xfe, 0xda, 0x2f, 0xf8, 0xd7, 0xe3, 0x1d, 0xa7, 0xed,
+ 0x96, 0xca, 0x72, 0x35, 0x49, 0x7f, 0xf0, 0x2c, 0xff, 00,
+ 0xf1, 0x55, 0xb1, 0x69, 0xfb, 0x68, 0xb0, 0xff, 00, 0x98,
+ 0x9b, 0xff, 00, 0xe0, 0x51, 0xff, 00, 0xe2, 0xa8, 0x3,
+ 0xf6, 0x2d, 0x35, 0x9b, 0x27, 0xe9, 0x73, 0xf, 0xfd, 0xfc,
+ 0x1f, 0xe3, 0x52, 0xad, 0xfd, 0xb3, 0xf4, 0x9e, 0x3f, 0xfb,
+ 0xec, 0x57, 0xe4, 0x4d, 0xa7, 0xed, 0xaa, 0xc0, 0x8f, 0xf8,
+ 0x99, 0x4b, 0xff, 00, 0x81, 0x67, 0xff, 00, 0x8a, 0xad,
+ 0x9b, 0x4f, 0xdb, 0x71, 0xd7, 0xfe, 0x62, 0x4f, 0x8f, 0x7b,
+ 0xa3, 0xfe, 0x34, 0x1, 0xfa, 0xc2, 0x2e, 0x22, 0x23, 0x89,
+ 0x10, 0xff, 00, 0xc0, 0x85, 0x38, 0x48, 0xa7, 0xa3, 0x3,
+ 0xf4, 0x35, 0xf9, 0x67, 0x6b, 0xfb, 0x70, 0x9c, 0x1, 0xf6,
+ 0xf7, 0xfc, 0x2f, 0xf, 0xf8, 0xd6, 0xcd, 0xa7, 0xed, 0xc6,
+ 0x1, 0x1f, 0xe9, 0xf2, 0x7e, 0x37, 0x47, 0xfc, 0x68, 0x3,
+ 0xf4, 0xd3, 0x34, 0x66, 0xbf, 0x39, 0x2d, 0x7f, 0x6e, 0x74,
+ 0x7, 0x9b, 0xd7, 0x3f, 0xf6, 0xf5, 0xff, 00, 0xd7, 0xad,
+ 0xab, 0x2f, 0xdb, 0xa6, 0xd, 0xa3, 0x75, 0xe3, 0xf5, 0xfe,
+ 0x2b, 0x9f, 0xfe, 0xbd, 00, 0x7e, 0x80, 0xe6, 0x8c, 0xd7,
+ 0xc3, 0x16, 0xdf, 0xb7, 0x45, 0x9f, 0x19, 0xba, 0xcf, 0xfd,
+ 0xbc, 0x7f, 0xf5, 0xeb, 0x62, 0xd3, 0xf6, 0xe4, 0xd3, 0x9b,
+ 0x1b, 0xa7, 0x1f, 0x8c, 0xe3, 0xfc, 0x68, 0x3, 0xec, 0xfa,
+ 0x33, 0x5f, 0x23, 0x5a, 0xfe, 0xdb, 0xfa, 0x43, 0x81, 0xba,
+ 0x58, 0xcf, 0xfd, 0xb6, 0x1f, 0xe3, 0x5a, 0xd6, 0xff, 00,
+ 0xb6, 0xae, 0x84, 0xf8, 0xcc, 0x91, 0x1f, 0xfb, 0x6c, 0xb4,
+ 0x1, 0xf5, 0x25, 0x15, 0xf3, 0x7d, 0xb7, 0xed, 0x95, 0xe1,
+ 0xb7, 0x20, 0x34, 0x90, 0x8f, 0xac, 0xcb, 0x5a, 0x96, 0xff,
+ 00, 0xb5, 0xdf, 0x85, 0xa5, 0x3, 0x32, 0xc4, 0x3e, 0x93,
+ 0xad, 00, 0x7b, 0xe5, 0x15, 0xe2, 0xb0, 0x7e, 0xd5, 0x3e,
+ 0x13, 0x97, 0x19, 0xb8, 0x45, 0xcf, 0xfd, 0x36, 0x4f, 0xf1,
+ 0xab, 0xf0, 0xfe, 0xd2, 0xfe, 0x11, 0x94, 0x81, 0xf6, 0xb8,
+ 0xc7, 0xfd, 0xb6, 0x4f, 0xf1, 0xa0, 0xf, 0x5b, 0xa2, 0xbc,
+ 0xca, 0x2f, 0xda, 0x13, 0xc2, 0x32, 0xe3, 0xfd, 0x39, 0x7,
+ 0xfd, 0xb4, 0x4f, 0xf1, 0xab, 0xb1, 0x7c, 0x71, 0xf0, 0x9c,
+ 0xbd, 0x35, 0x28, 0x87, 0xfc, 0xd, 0x7f, 0xc6, 0x80, 0x3d,
+ 0x2, 0x8a, 0xe2, 0xe2, 0xf8, 0xbd, 0xe1, 0x79, 0xba, 0x6a,
+ 0x70, 0x8f, 0xab, 0xaf, 0xf8, 0xd5, 0xb8, 0xfe, 0x26, 0x78,
+ 0x6a, 0x51, 0xc6, 0xad, 0x6e, 0x3e, 0xb2, 0xf, 0xf1, 0xa0,
+ 0xe, 0xa6, 0x8a, 0xe7, 0xe3, 0xf1, 0xee, 0x81, 0x27, 0xdd,
+ 0xd5, 0x6d, 0x4f, 0xfd, 0xb4, 0x1f, 0xe3, 0x56, 0x17, 0xc5,
+ 0xfa, 0x2b, 0xf4, 0xd4, 0xed, 0x8f, 0xfd, 0xb4, 0x14, 0x1,
+ 0xb1, 0x45, 0x66, 0xaf, 0x89, 0x34, 0xa7, 0xfb, 0xba, 0x8d,
+ 0xb1, 0xff, 00, 0xb6, 0xa2, 0xa5, 0x5d, 0x66, 0xc5, 0x87,
+ 0x17, 0x90, 0x1f, 0xa4, 0x82, 0x80, 0x2e, 0xd1, 0x55, 0x86,
+ 0xa1, 0x6c, 0xdd, 0x2e, 0x22, 0x3f, 0x47, 0x15, 0x22, 0xdc,
+ 0xc4, 0xdd, 0x25, 0x46, 0xfa, 0x30, 0xa0, 0x9, 0x68, 0xa6,
+ 0x9, 0x50, 0xf4, 0x60, 0x7f, 0x1a, 0x70, 0x60, 0x7a, 0x1a,
+ 00, 0x5a, 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2, 0x80, 0xa,
+ 0x28, 0xa2, 0x80, 0x10, 0x52, 0xd1, 0x45, 00, 0x21, 0xa2,
+ 0x96, 0x8a, 00, 0x29, 0x3f, 0x1a, 0x5a, 0x28, 0x1, 0x31,
+ 0x40, 0x18, 0xa5, 0xa2, 0x80, 0xa, 0x28, 0xa2, 0x80, 0xa,
+ 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2, 0x80, 0xa, 0x28, 0xa2,
+ 0x80, 0xa, 0x28, 0xa2, 0x80, 0xa, 0x4c, 0x52, 0xd1, 0x40,
+ 0x9, 0x8a, 0x6b, 0x44, 0xad, 0xd4, 0xa, 0x7d, 0x14, 0x1,
+ 0x3, 0xd9, 0xc6, 0xfd, 0x56, 0xaa, 0x4b, 0xa2, 0xc1, 0x26,
+ 0x72, 0xa2, 0xb4, 0xa8, 0xac, 0xe5, 0x4e, 0x12, 0xdd, 0x19,
+ 0x4a, 0x94, 0x27, 0xf1, 0x23, 0x1c, 0xf8, 0x7a, 0x3, 0xfc,
+ 0x23, 0xf2, 0xa5, 0x5d, 0x2, 0x15, 0x39, 0xa, 0x3f, 0x2a,
+ 0xd6, 0xc5, 0x18, 0xac, 0xfe, 0xaf, 0x4f, 0xb1, 0x8f, 0xd5,
+ 0x68, 0xff, 00, 0x29, 0x45, 0x34, 0xa8, 0x93, 0xf8, 0x47,
+ 0xe5, 0x52, 0xa6, 0x9f, 0xa, 0xff, 00, 0xcb, 0x35, 0xfc,
+ 0xaa, 0xce, 0x29, 0x6b, 0x45, 0x4e, 0x2b, 0xa1, 0xb2, 0xa5,
+ 0x5, 0xb2, 0x23, 0x5b, 0x78, 0x97, 0xa4, 0x6a, 0x3f, 0xa,
+ 0x78, 0x50, 0xbd, 00, 0x1f, 0x4a, 0x5a, 0x2a, 0xec, 0x69,
+ 0x64, 0x84, 0xa2, 0x96, 0x8a, 0x63, 0xa, 0x28, 0xa4, 0x63,
+ 0x80, 0x68, 0x2, 0x9d, 0xd3, 0x70, 0x79, 0xae, 0x7f, 0x51,
+ 0x7a, 0xda, 0xbc, 0x6e, 0x2b, 0x9e, 0xd4, 0x1e, 0x80, 0x31,
+ 0x6f, 0x9f, 0x83, 0x5c, 0xae, 0xa5, 0x27, 0x5a, 0xe8, 0xb5,
+ 0x19, 0x38, 0x35, 0xca, 0x6a, 0x32, 0x75, 0xa0, 0xe, 0x7b,
+ 0x54, 0x93, 00, 0xd7, 0x13, 0xab, 0xc9, 0xd6, 0xba, 0xbd,
+ 0x5a, 0x5c, 0x3, 0x5c, 0x46, 0xb1, 0x2e, 0x33, 0x40, 0x1e,
+ 0x57, 0xf1, 0x22, 0xf7, 0x64, 0x2e, 0xb9, 0xed, 0x5f, 0x24,
+ 0xf8, 0xd2, 0xe7, 0xcd, 0xbc, 0x71, 0x9c, 0xf3, 0x5f, 0x49,
+ 0x7c, 0x4d, 0xbf, 0x4, 0xcb, 0x86, 0xe3, 0xeb, 0x5f, 0x2c,
+ 0xf8, 0x92, 0xe3, 0xcc, 0xbc, 0x90, 0xe7, 0xbd, 0x7c, 0x56,
+ 0x69, 0x3e, 0x6a, 0x89, 0x23, 0xf3, 0xcc, 0xea, 0xa7, 0x3d,
+ 0x44, 0x8e, 0x4b, 0x52, 0x7e, 0xd, 0x72, 0xf7, 0xad, 0x96,
+ 0x35, 0xbf, 0xa9, 0xc9, 0xc3, 0x57, 0x35, 0x74, 0xf9, 0x26,
+ 0xa7, 0xd, 0x1d, 0x9, 0xc1, 0xc7, 0x43, 0x3e, 0x76, 0xeb,
+ 0x5f, 0x73, 0xff, 00, 0xc1, 0x3e, 0xfc, 0x19, 0x9d, 0x25,
+ 0xb5, 0x27, 0x41, 0xba, 0xf6, 0xec, 0x2, 0x71, 0xd6, 0x34,
+ 0xe9, 0xce, 0x3f, 0xda, 0x35, 0xf0, 0xad, 0xc1, 0xeb, 0x5f,
+ 0xaa, 0x3f, 0xb1, 0x6f, 0x84, 0x3f, 0xb0, 0x3c, 0xb, 0xa3,
+ 0xc4, 0xe3, 0x32, 0x41, 0x6b, 0xb9, 0xce, 0x31, 0x96, 0x76,
+ 0x38, 0x3f, 0x96, 0x2b, 0xe8, 0xf0, 0xab, 0x5b, 0x9f, 0x59,
+ 0x82, 0x8d, 0xe5, 0x73, 0xea, 0x38, 0x17, 0xa7, 0xb7, 0x15,
+ 0xa1, 0x6e, 0x7, 0x15, 0x4a, 0x5, 0xe9, 0x5a, 0x56, 0xe3,
+ 0x81, 0xc5, 0x7a, 0x87, 0xb2, 0x5c, 0x85, 0x79, 0xab, 0xf0,
+ 0x2f, 0x4a, 0xa7, 0x8, 0xe6, 0xaf, 0xdb, 0xaf, 0x2, 0x80,
+ 0x2e, 0xc4, 0x3a, 0x55, 0xc8, 0x47, 0x22, 0xab, 0x44, 0xb5,
+ 0x72, 0x11, 0x40, 0x16, 0xa3, 0x15, 0x66, 0x31, 0xc8, 0xa8,
+ 0x22, 0x1d, 0x2a, 0xcc, 0x74, 0x1, 0x3a, 0x8e, 0x2a, 0x45,
+ 0xa6, 0x28, 0xc1, 0xa9, 0x16, 0x80, 0x1c, 0xb5, 0x22, 0x8e,
+ 0x29, 0x8b, 0x52, 0x2f, 0x5a, 00, 0x75, 0x14, 0x50, 0x28,
+ 0x1, 0xc3, 0x8a, 0x5a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0,
+ 0xc, 0x89, 0xd, 0x56, 0x91, 0xaa, 0x79, 0xd, 0x55, 0x90,
+ 0xe6, 0x80, 0x3e, 0x72, 0xfd, 0xb7, 0x7c, 0x58, 0xda, 0x37,
+ 0xc2, 0xe8, 0x74, 0x88, 0xe5, 0x54, 0x93, 0x57, 0xb8, 0x11,
+ 0x8c, 0x83, 0xb8, 0x84, 0x65, 0x66, 0x3, 0xb7, 0x4e, 0xb9,
+ 0xae, 0x7f, 0xf6, 0x40, 0xf0, 0xb7, 0xd8, 0xbc, 0x3b, 0x25,
+ 0xf3, 0x46, 0x43, 0x4c, 0xc0, 0x6, 0x3d, 0xc5, 0x70, 0xdf,
+ 0xb6, 0xd6, 0xb6, 0x35, 0xbf, 0x89, 0xba, 0x36, 0x89, 0xf,
+ 0xce, 0x6c, 0x2d, 0xf2, 0xe0, 0x8e, 0x3, 0xbe, 0xf, 0xfe,
+ 0x82, 0x45, 0x7d, 0x23, 0xf0, 0x37, 0xc3, 0xa3, 0x44, 0xf0,
+ 0x86, 0x9d, 00, 0x50, 0xa4, 0x46, 0xa4, 0xfd, 0x6b, 0xe2,
+ 0xa9, 0x7f, 0xb5, 0x67, 0x73, 0x93, 0xda, 0x9a, 0xb1, 0xf9,
+ 0xed, 0x1f, 0xf6, 0xee, 0x22, 0xa9, 0x37, 0xb5, 0x25, 0x6f,
+ 0x9b, 0x3d, 0x7f, 0x4c, 0x8b, 0x6c, 0x6a, 0x2b, 0x60, 0xc,
+ 0xa, 0xa1, 0x63, 0x1e, 00, 0xf6, 0xad, 0xa, 0xfb, 0x53,
+ 0xf4, 0x23, 0xb, 0xc6, 0x5a, 0x22, 0xeb, 0xba, 0x1d, 0xc5,
+ 0xb9, 0x1b, 0x89, 0x43, 0x81, 0x5f, 0x8f, 0x3f, 0xb6, 0x37,
+ 0xec, 0xec, 0xda, 0x3e, 0xb5, 0x73, 0x77, 0x67, 0x61, 0x2c,
+ 0xf3, 0x48, 0xc7, 0x24, 0x30, 0xe3, 0xa7, 0xbd, 0x7e, 0xd1,
+ 0x32, 0x86, 0x4, 0x11, 0x90, 0x6b, 0x8a, 0xf1, 0x87, 0xc2,
+ 0x9d, 0x7, 0xc5, 0x50, 0x48, 0x6e, 0xac, 0xc4, 0x92, 0x63,
+ 0x8f, 0x9d, 0x87, 0xf2, 0x34, 0x1, 0xfc, 0xda, 0x6a, 0x9e,
+ 00, 0xd7, 0x2d, 0x2e, 0x1c, 0x1d, 0x3a, 0x44, 0x50, 0x71,
+ 0x92, 0x47, 0xf8, 0xd6, 0x54, 0xde, 0x1c, 0xd4, 0xad, 0xc6,
+ 0x64, 0xb4, 0x75, 0x1e, 0xf8, 0xaf, 0xdb, 0xef, 0x88, 0x9f,
+ 0xb2, 0x65, 0x96, 0xa1, 0x73, 0x21, 0xb4, 0xb0, 0x50, 0xe,
+ 0x4e, 0x37, 0x1f, 0xfe, 0x2a, 0xbe, 0x59, 0xf8, 0xe7, 0xfb,
+ 0x34, 0x8f, 0x7, 0xe8, 0x17, 0x97, 0xaf, 0x6a, 0x91, 0xa2,
+ 0x21, 0x39, 0xc9, 0xf4, 0x3f, 0xed, 0x7b, 0x50, 0x7, 0xe6,
+ 0xbc, 0x91, 0xb4, 0x4c, 0x55, 0x86, 0x8, 0xed, 0x42, 0xc6,
+ 0xcf, 0xd0, 0x66, 0xaf, 0xf8, 0x80, 0x8f, 0xed, 0x7b, 0x95,
+ 0x5f, 0xba, 0xb2, 0x30, 0x1c, 0xfb, 0xd7, 0xa9, 0xfc, 0x16,
+ 0xf8, 0x47, 0x7b, 0xe3, 0x85, 0x49, 0x21, 0x80, 0x4a, 0x8c,
+ 0x78, 0xc9, 0xc6, 0x7a, 0xfb, 0xd0, 0x7, 0x8f, 0x79, 0x2e,
+ 0x7, 0xdd, 0x34, 0xd2, 0xa4, 0x76, 0xaf, 0xbe, 0xe0, 0xfd,
+ 0x8e, 0x6f, 0xcd, 0x94, 0x6c, 0x74, 0xf4, 0xc9, 00, 0xfd,
+ 0xfc, 0xff, 00, 0xec, 0xd5, 0x9d, 0x77, 0xfb, 0x1f, 0x5e,
+ 0xc, 0xff, 00, 0xa0, 0x27, 0xe2, 0xdf, 0xfd, 0x95, 00,
+ 0x7c, 0x29, 0x45, 0x7d, 0xab, 0x71, 0xfb, 0x21, 0x5d, 0xae,
+ 0x7f, 0xe2, 0x5e, 0x87, 0xe8, 0xdf, 0xfd, 0x95, 0x64, 0xdd,
+ 0x7e, 0xc9, 0x37, 0x6b, 0xd6, 0xc5, 0x47, 0xe3, 0xff, 00,
+ 0xd9, 0x50, 0x7, 0xc8, 0x15, 0xeb, 0x7f, 0xb3, 0xf6, 0x87,
+ 0xfd, 0xa7, 0xe2, 0x38, 0x49, 0x5d, 0xd9, 0x90, 0x1, 0x5e,
+ 0x9f, 0x71, 0xfb, 0x27, 0x5d, 0xa9, 0xff, 00, 0x8f, 0x18,
+ 0xff, 00, 0xef, 0xaf, 0xfe, 0xca, 0xbd, 0xd7, 0xf6, 0x63,
+ 0xfd, 0x95, 0xe7, 0xb4, 0xf1, 0x5, 0x8c, 0x8f, 0x6c, 0xa8,
+ 0x4, 0x9b, 0x89, 0xdd, 0xd3, 0x93, 0xfe, 0xd5, 00, 0x7e,
+ 0x97, 0xfe, 0xcd, 0x3e, 0x18, 0x5f, 0xe, 0x7c, 0x35, 0xb1,
+ 0x51, 0x19, 0x8d, 0xa4, 0x50, 0xc4, 0x1e, 0xa7, 0x8e, 0xf5,
+ 0xeb, 0x27, 0xa5, 0x66, 0x78, 0x67, 0x49, 0x4d, 0xf, 0x43,
+ 0xb4, 0xb2, 0x45, 0xda, 0x22, 0x40, 0xb8, 0xad, 0x27, 0x3b,
+ 0x54, 0x9f, 0x41, 0x40, 0x1f, 0x26, 0x7e, 0xdb, 0x7e, 0x33,
+ 0x5d, 0x1f, 0xc3, 0x37, 0x88, 0x25, 0xb, 0xb6, 0x12, 0x30,
+ 0x3f, 0x1a, 0xfc, 0x29, 0xf1, 0xae, 0xaa, 0xda, 0xcf, 0x89,
+ 0xb5, 0xb, 0xa6, 0x70, 0xe5, 0xe4, 0x38, 0x23, 0xa1, 0xe7,
+ 0xb5, 0x7e, 0xbd, 0x7e, 0xdf, 0x50, 0x5f, 0x6a, 0xda, 0x5d,
+ 0xe4, 0x30, 0x37, 0xdf, 0xc, 0x36, 0xfe, 0x75, 0xf9, 0x6f,
+ 0x73, 0xf0, 0x47, 0x59, 0x2c, 0xce, 0xc0, 0x64, 0xf2, 0x4e,
+ 0x47, 0xf8, 0xd0, 0x7, 0x98, 0x51, 0x5e, 0x81, 0x37, 0xc1,
+ 0x9d, 0x6a, 0x3e, 0x8a, 0xf, 0xe2, 0x3f, 0xc6, 0xaa, 0x3f,
+ 0xc2, 0x6d, 0x6d, 0x3f, 0xe5, 0x9a, 0xff, 00, 0xdf, 0x42,
+ 0x80, 0x38, 0xaa, 0x2b, 0xac, 0x93, 0xe1, 0x96, 0xb7, 0x1f,
+ 0x58, 0x57, 0xfe, 0xfa, 0x15, 0x5d, 0xfe, 0x1f, 0x6b, 0x28,
+ 0x70, 0x6d, 0xc7, 0xfd, 0xf4, 0x28, 0x3, 0x9b, 0xa2, 0xb7,
+ 0x1f, 0xc1, 0x5a, 0xb2, 0x75, 0xb6, 0xff, 00, 0xc7, 0x85,
+ 0x42, 0xde, 0x15, 0xd4, 0xd3, 0xad, 0xb1, 0xfc, 0xc5, 00,
+ 0x64, 0xd1, 0x5a, 0xf, 0xa0, 0x5f, 0xa1, 0xe6, 0xdd, 0xbf,
+ 0x30, 0x6a, 0x26, 0xd2, 0xae, 0xd7, 0xac, 0xd, 0x40, 0x15,
+ 0x28, 0xa9, 0xda, 0xc2, 0xe1, 0x7a, 0xc2, 0xc3, 0xf0, 0xa8,
+ 0xcd, 0xbc, 0xa3, 0xac, 0x6e, 0x3f, 0xe0, 0x26, 0x80, 0x19,
+ 0x45, 0x3b, 0xca, 0x7f, 0xee, 0x37, 0xe5, 0x49, 0xb4, 0x8e,
+ 0xc7, 0xf2, 0xa0, 0x4, 0xa2, 0x8c, 0x71, 0x46, 0x3d, 0xe8,
+ 0x1, 0x77, 0x1f, 0x53, 0xf9, 0xd1, 0xbd, 0xbf, 0xbc, 0x7f,
+ 0x3a, 0x4a, 0x28, 0x1, 0xe2, 0x79, 0x7, 0x49, 0x1c, 0x7f,
+ 0xc0, 0x8d, 0x3d, 0x6f, 0x27, 0x5e, 0x93, 0x38, 0xff, 00,
+ 0x81, 0x54, 0x34, 0x50, 0x5, 0x95, 0xd4, 0xee, 0xd3, 0xa5,
+ 0xc4, 0x83, 0xfe, 0x5, 0x52, 0xae, 0xb9, 0x7e, 0xa3, 0x2,
+ 0xea, 0x4f, 0xce, 0xa8, 0xd1, 0x40, 0x1a, 0x6b, 0xe2, 0x5d,
+ 0x4d, 0x3a, 0x5d, 0xc9, 0xf9, 0xd4, 0xc9, 0xe3, 0xd, 0x5e,
+ 0x3e, 0x97, 0x8f, 0xf8, 0xd6, 0x35, 0x14, 0x1, 0xd0, 0x27,
+ 0x8e, 0xf5, 0x94, 0xff, 00, 0x97, 0xb2, 0x7f, 0xa, 0xb3,
+ 0x17, 0xc4, 0x9d, 0x72, 0x2c, 0x62, 0xec, 0x90, 0x3d, 0xab,
+ 0x96, 0xa2, 0x80, 0x3b, 0x28, 0xfe, 0x2b, 0x6b, 0xb1, 0x9f,
+ 0xf8, 0xf9, 0xcf, 0xfc, 0x7, 0xff, 00, 0xaf, 0x57, 0x22,
+ 0xf8, 0xc7, 0xae, 0x46, 0x3f, 0xd7, 0x9f, 0xcb, 0xff, 00,
+ 0xaf, 0x5c, 0xd, 0x14, 0x1, 0xe9, 0x51, 0xfc, 0x6f, 0xd6,
+ 0xd0, 0xf, 0xdf, 0xff, 00, 0xe3, 0xb5, 0x6e, 0x1f, 0x8f,
+ 0x7a, 0xc4, 0x67, 0x99, 0x4f, 0xe0, 0x2b, 0xca, 0xa8, 0xa0,
+ 0xf, 0x64, 0x87, 0xf6, 0x87, 0xd5, 0x53, 0x19, 0x9c, 0x8f,
+ 0xaa, 0x9a, 0xd2, 0x87, 0xf6, 0x91, 0xd4, 0x53, 00, 0xdc,
+ 0x63, 0xe8, 0xd, 0x78, 0x4d, 0x14, 0x1, 0xf4, 0x3d, 0xbf,
+ 0xed, 0x39, 0x7c, 0x98, 0xcd, 0xe9, 0x5c, 0x7f, 0xb2, 0x7f,
+ 0xc2, 0xb4, 0x20, 0xfd, 0xa8, 0xef, 0x14, 0xf3, 0x7e, 0x3f,
+ 0x22, 0x2b, 0xe6, 0x8a, 0x28, 0x3, 0xea, 0xab, 0x6f, 0xda,
+ 0xae, 0xe5, 0x40, 0x1f, 0xda, 0x58, 0x3f, 0xf0, 0x2a, 0xd5,
+ 0xb6, 0xfd, 0xac, 0xee, 0x86, 0x3f, 0xe2, 0x68, 0x9f, 0x91,
+ 0xaf, 0x90, 0x28, 0xa0, 0xf, 0xb5, 0x6d, 0x3f, 0x6b, 0x8b,
+ 0xa4, 0x39, 0xfe, 0xd5, 0x5f, 0xc3, 0x35, 0xb1, 0x6d, 0xfb,
+ 0x5f, 0x5d, 0xa8, 00, 0x6a, 0xe8, 0x7f, 0x3, 0xfe, 0x15,
+ 0xf0, 0x90, 0x38, 0xa5, 0xe, 0xc3, 0xa1, 0xa0, 0xf, 0xd0,
+ 0x3b, 0x5f, 0xdb, 0xe, 0xf4, 0x63, 0xfe, 0x26, 0xa9, 0xf8,
+ 0x3, 0xfe, 0x15, 0xb1, 0x6b, 0xfb, 0x64, 0xdf, 0x29, 0xe3,
+ 0x56, 0x4f, 0xc5, 0x49, 0xfe, 0x95, 0xf9, 0xcc, 0x25, 0x61,
+ 0xd0, 0xfe, 0x95, 0x22, 0xde, 0xcc, 0x9f, 0x75, 0xf1, 0xf8,
+ 0xa, 00, 0xfd, 0x2b, 0xb5, 0xfd, 0xb3, 0xaf, 0xd7, 0x9f,
+ 0xed, 0x58, 0xbf, 0x23, 0x5b, 0x36, 0x9f, 0xb6, 0x9d, 0xf2,
+ 0xff, 00, 0xcc, 0x55, 0x7, 0xe0, 0x7f, 0xc2, 0xbf, 0x2f,
+ 0xd7, 0x56, 0xba, 0x5e, 0x92, 0xfe, 0x82, 0xa6, 0x4f, 0x10,
+ 0x5f, 0x47, 0xf7, 0x67, 0xc7, 0xe0, 0x28, 0x3, 0xf5, 0x5a,
+ 0xd3, 0xf6, 0xd9, 0xbd, 0x18, 0xce, 0xa9, 0x11, 0xfc, 0xd,
+ 0x6c, 0x5a, 0x7e, 0xdb, 0xb7, 0x8a, 0x3f, 0xe4, 0x23, 0x1f,
+ 0xe4, 0x7f, 0xc2, 0xbf, 0x25, 0xd3, 0xc5, 0x7a, 0x9c, 0x7d,
+ 0x27, 0xff, 00, 0xc7, 0x45, 0x58, 0x4f, 0x1c, 0x6a, 0xc9,
+ 0xd2, 0x7e, 0x3f, 0xdd, 0x1f, 0xe1, 0x40, 0x1f, 0xaf, 0x36,
+ 0x9f, 0xb7, 0xd, 0xc8, 0xb, 0x9d, 0x4a, 0x23, 0xed, 0xb4,
+ 0xff, 00, 0x85, 0x6d, 0xda, 0xfe, 0xdb, 0xf3, 0x1c, 0x67,
+ 0x50, 0x84, 0xfd, 0x10, 0xff, 00, 0x85, 0x7e, 0x38, 0xaf,
+ 0xc4, 0x2d, 0x61, 0x31, 0x89, 0x87, 0xfd, 0xf2, 0x3f, 0xc2,
+ 0xac, 0xc7, 0xf1, 0x3b, 0x59, 0x4f, 0xf9, 0x68, 0xf, 0xe0,
+ 0x3f, 0xc2, 0x80, 0x3f, 0x67, 0x6d, 0xbf, 0x6d, 0xdf, 0x5d,
+ 0x46, 0xc, 0x7b, 0xc6, 0x7f, 0xc2, 0xb5, 0xac, 0xff, 00,
+ 0x6d, 0x98, 0x58, 0x82, 0xf7, 0xb6, 0xc7, 0xdb, 0xcb, 0x3f,
+ 0xe1, 0x5f, 0x8a, 0xf1, 0x7c, 0x5c, 0xd6, 0x63, 0x1f, 0xeb,
+ 0x7, 0xe4, 0x3f, 0xc2, 0xad, 0x43, 0xf1, 0x9f, 0x57, 0x8c,
+ 0x8c, 0xb6, 0x7f, 0x2f, 0xfe, 0x26, 0x80, 0x3f, 0x6e, 0x6d,
+ 0x7f, 0x6c, 0xfb, 0x17, 0xfb, 0xd7, 0x76, 0xbf, 0xf7, 0xc3,
+ 0x7f, 0x85, 0x69, 0xdb, 0x7e, 0xd8, 0x9a, 0x5c, 0x9f, 0x7a,
+ 0xea, 0xd0, 0x8f, 0xf7, 0x5b, 0xfc, 0x2b, 0xf1, 0x12, 0x1f,
+ 0x8e, 0xba, 0xaa, 0x1, 0x97, 0x23, 0xf0, 0x1f, 0xfc, 0x4d,
+ 0x5c, 0x87, 0xf6, 0x80, 0xd4, 0x10, 0x60, 0xb1, 0xfc, 0x87,
+ 0xff, 00, 0x13, 0x40, 0x1f, 0xb8, 0x56, 0xdf, 0xb5, 0xb6,
+ 0x8b, 0x20, 0x1b, 0xae, 0x2d, 0x87, 0xe0, 0xdf, 0xe1, 0x5a,
+ 0x70, 0x7e, 0xd4, 0xde, 0x1f, 0x97, 0x19, 0xb9, 0xb7, 0xff,
+ 00, 0xc7, 0xbf, 0xc2, 0xbf, 0xe, 0x6d, 0xff, 00, 0x68,
+ 0x9b, 0xd4, 0xff, 00, 0x96, 0x8e, 0xb8, 0xff, 00, 0x64,
+ 0x1f, 0xfd, 0x96, 0xaf, 0xc5, 0xfb, 0x4b, 0x5c, 0xc6, 0x79,
+ 0x99, 0xff, 00, 0xef, 0x81, 0xff, 00, 0xc4, 0xd0, 0x7,
+ 0xee, 0x54, 0x1f, 0xb4, 0x97, 0x87, 0x25, 0xeb, 0x73, 0xf,
+ 0xd4, 0x16, 0xff, 00, 0xa, 0xd0, 0xb7, 0xfd, 0xa0, 0x7c,
+ 0x33, 0x30, 0xff, 00, 0x8f, 0xc8, 0x87, 0x3f, 0xed, 0x7f,
+ 0x85, 0x7e, 0x1a, 0xdb, 0xfe, 0xd3, 0xd3, 0x27, 0x59, 0x98,
+ 0x1f, 0x5d, 0x9f, 0xfd, 0x8d, 0x69, 0xdb, 0x7e, 0xd5, 0x12,
+ 0xa6, 0x7, 0xda, 0x9c, 0x7f, 0xdb, 0x2c, 0xff, 00, 0xec,
+ 0xb4, 0x1, 0xfb, 0x8f, 0xf, 0xc6, 0xcf, 0xc, 0xcb, 0xff,
+ 00, 0x2f, 0xf1, 0x73, 0xfe, 0xf7, 0xf8, 0x55, 0xc8, 0xbe,
+ 0x2d, 0xf8, 0x6a, 0x5f, 0xf9, 0x89, 0x46, 0x3f, 0x6, 0xff,
+ 00, 0xa, 0xfc, 0x41, 0xb6, 0xfd, 0xab, 0xe4, 0x5f, 0xf9,
+ 0x7a, 0x7f, 0xfb, 0xf7, 0xff, 00, 0xd8, 0x56, 0xbd, 0xb7,
+ 0xed, 0x6f, 0x2a, 0xe3, 0xfd, 0x39, 0xc7, 0xfd, 0xb3, 0xff,
+ 00, 0xec, 0x68, 0x3, 0xf6, 0xca, 0x3f, 0x89, 0x7e, 0x1d,
+ 0x97, 0xa6, 0xa5, 0x11, 0xfc, 0xff, 00, 0xc2, 0xad, 0x27,
+ 0x8e, 0xf4, 0x29, 0x3a, 0x6a, 0x31, 0x7e, 0xbf, 0xe1, 0x5f,
+ 0x8a, 0xf6, 0xbf, 0xb5, 0xdc, 0xdc, 0x1, 0x7a, 0xc7, 0xfe,
+ 0xd9, 0x8f, 0xfe, 0x26, 0xb6, 0x2d, 0x7f, 0x6b, 0xf9, 0x90,
+ 0x8c, 0x5f, 0x30, 0xc7, 0xfb, 0x3, 0xff, 00, 0x89, 0xa0,
+ 0xf, 0xd9, 0x74, 0xf1, 0x76, 0x8d, 0x27, 0xdd, 0xd4, 0x21,
+ 0x3f, 0x89, 0xab, 0x9, 0xaf, 0xe9, 0xce, 0x32, 0xb7, 0x91,
+ 0x1f, 0xc6, 0xbf, 0x1d, 0xad, 0x7f, 0x6c, 0x6b, 0x80, 0x47,
+ 0xfa, 0x7b, 0x7f, 0xdf, 0xaf, 0xfe, 0xc6, 0xb6, 0xed, 0x3f,
+ 0x6c, 0xcb, 0x80, 0x7, 0xfa, 0x6b, 0x8c, 0xfa, 0x20, 0xff,
+ 00, 0xe2, 0x28, 0x3, 0xf5, 0xcd, 0x75, 0x6b, 0x36, 0xe9,
+ 0x70, 0x87, 0xf1, 0xa9, 0x56, 0xf2, 0x6, 0xe9, 0x2a, 0x9f,
+ 0xc6, 0xbf, 0x27, 0xad, 0xbf, 0x6d, 0x1b, 0x85, 0x23, 0xfd,
+ 0x39, 0x8f, 0xd6, 0x31, 0xff, 00, 0xc4, 0x56, 0xd5, 0xa7,
+ 0xed, 0xad, 0x30, 0x23, 0x37, 0x4c, 0x7f, 0xe0, 0x23, 0xff,
+ 00, 0x88, 0xa0, 0xf, 0xd4, 0xa1, 0x32, 0x1e, 0x8c, 0x29,
+ 0x43, 0x83, 0xd0, 0xd7, 0xe6, 0x6d, 0xa7, 0xed, 0xb9, 0x22,
+ 0xa8, 0xcd, 0xe3, 0x8f, 0xfb, 0x66, 0x3f, 0xf8, 0x8a, 0xd8,
+ 0xb4, 0xfd, 0xb7, 0xe4, 0xe3, 0xfd, 0x31, 0xcf, 0xd1, 00,
+ 0xff, 00, 0xd9, 0x28, 0x3, 0xf4, 0x72, 0x8a, 0xfc, 0xfd,
+ 0xb3, 0xfd, 0xb8, 0xa, 0x91, 0xfe, 0x98, 0xe3, 0xfe, 00,
+ 0xf, 0xfe, 0xc9, 0x5b, 0x56, 0x9f, 0xb7, 0xa, 0x7f, 0xcf,
+ 0xdb, 0x1f, 0xfb, 0x67, 0x8f, 0xfd, 0x92, 0x80, 0x3e, 0xe8,
+ 0xa4, 0xaf, 0x8c, 0x6d, 0xbf, 0x6d, 0xf8, 0x30, 0x37, 0x5c,
+ 0x37, 0xe0, 0x9f, 0xfd, 0x85, 0x6b, 0xdb, 0x7e, 0xdb, 0x3a,
+ 0x7b, 0x91, 0xba, 0xe1, 0xbf, 0xef, 0xdf, 0xff, 00, 0x61,
+ 0x40, 0x1f, 0x5c, 0x52, 0x66, 0xbe, 0x5f, 0xb6, 0xfd, 0xb2,
+ 0xb4, 0x99, 00, 0xdd, 0x29, 0xe7, 0xfd, 0x93, 0xff, 00,
+ 0xc4, 0xd6, 0x9d, 0xbf, 0xed, 0x7d, 0xa1, 0xbe, 0x37, 0x48,
+ 0xdf, 0xf7, 0xc9, 0xff, 00, 0xe2, 0x68, 0x3, 0xe8, 0xdc,
+ 0x8a, 0x5a, 0xf0, 0x6b, 0x5f, 0xda, 0xb7, 0xc3, 0xd3, 0xe,
+ 0x5c, 0xb7, 0xe7, 0xff, 00, 0xc4, 0xd6, 0x94, 0x1f, 0xb4,
+ 0xf7, 0x86, 0x64, 0x19, 0x2e, 0xe3, 0xfe, 0x2, 0x7f, 0xf8,
+ 0x9a, 00, 0xf6, 0x7a, 0x2b, 0xca, 0x6d, 0xff, 00, 0x68,
+ 0xbf, 0xb, 0xcd, 0x8f, 0xdf, 0x3f, 0x3f, 0xec, 0xb7, 0xff,
+ 00, 0x13, 0x57, 0xe1, 0xf8, 0xf1, 0xe1, 0x79, 0xbf, 0xe5,
+ 0xe1, 0xc7, 0xfc, 0x1, 0xbf, 0xc2, 0x80, 0x3d, 0x1e, 0x8a,
+ 0xe1, 0x62, 0xf8, 0xcd, 0xe1, 0x99, 0x47, 0x17, 0x6d, 0xff,
+ 00, 0x7e, 0xdb, 0xfc, 0x2a, 0xe4, 0x5f, 0x14, 0xfc, 0x3b,
+ 0x2f, 0x4b, 0xd3, 0xff, 00, 0x7e, 0xdb, 0xfc, 0x28, 0x3,
+ 0xae, 0xa2, 0xb9, 0xc8, 0xbe, 0x21, 0x68, 0x53, 0x7d, 0xdb,
+ 0xd1, 0xf8, 0xa3, 0x7f, 0x85, 0x5a, 0x4f, 0x18, 0x69, 0x32,
+ 0x7d, 0xdb, 0xb5, 0x3f, 0xf0, 0x13, 0x40, 0x1b, 0x34, 0x56,
+ 0x6a, 0xf8, 0x8f, 0x4e, 0x7e, 0x97, 0x4b, 0xf9, 0x1a, 0x99,
+ 0x35, 0x7b, 0x39, 0x3e, 0xec, 0xe8, 0x68, 0x2, 0xe5, 0x15,
+ 0x2, 0xdf, 0x40, 0xc3, 0x89, 0x54, 0xfe, 0x34, 0xf5, 0xb8,
+ 0x8d, 0xba, 0x3a, 0x9f, 0xc6, 0x80, 0x24, 0xa2, 0x9a, 0x1d,
+ 0x4f, 0x46, 0x7, 0xf1, 0xa5, 0xdc, 0x3d, 0x68, 0x1, 0x69,
+ 0x92, 0x9c, 0x2d, 0x3b, 0x35, 0x14, 0xed, 0xc5, 00, 0x66,
+ 0x5e, 0xbe, 0x3f, 0x2a, 0xe7, 0x6f, 0xde, 0xb6, 0xef, 0xde,
+ 0xb9, 0xeb, 0xf6, 0xa0, 0xc, 0x2d, 0x4a, 0x4e, 0xb5, 0xca,
+ 0x6a, 0x52, 0x75, 0xae, 0x8b, 0x53, 0x93, 0xad, 0x72, 0x9a,
+ 0x8c, 0x9c, 0x1a, 00, 0xe6, 0x75, 0x89, 0x71, 0xba, 0xb8,
+ 0x4d, 0x76, 0x7d, 0x91, 0x48, 0x49, 0xe9, 0x5d, 0x86, 0xb1,
+ 0x2e, 0x37, 0x57, 0x9d, 0xf8, 0xae, 0xeb, 0xcb, 0xb3, 0x90,
+ 0x83, 0x8a, 0x99, 0x3b, 0x26, 0xc9, 0x93, 0xe5, 0x8b, 0x67,
+ 0x82, 0x7c, 0x4a, 0xd4, 0x32, 0xd3, 0x1d, 0xd5, 0xf3, 0x86,
+ 0xb3, 0x36, 0xe9, 0xa4, 0x39, 0xee, 0x6b, 0xdb, 0x7e, 0x23,
+ 0x5f, 0xe7, 0xcd, 0xe6, 0xbc, 0x1b, 0x56, 0x97, 0x2c, 0xe7,
+ 0xdc, 0xd7, 0xc0, 0xe2, 0x9f, 0x3d, 0x63, 0xf3, 0xc, 0x6c,
+ 0xbd, 0xa5, 0x73, 0x9b, 0xd4, 0xe4, 0xeb, 0x5c, 0xfd, 0xc3,
+ 0x75, 0xad, 0x8d, 0x4a, 0x4c, 0x93, 0x58, 0x57, 0xd, 0xd6,
+ 0xbd, 0x1a, 0x11, 0xb2, 0x47, 0xad, 0x86, 0x8d, 0x91, 0x37,
+ 0x87, 0xb4, 0xd1, 0xad, 0xf8, 0x8b, 0x4c, 0xd3, 0xdc, 0x16,
+ 0x5b, 0xab, 0x98, 0xe1, 0x20, 0x75, 0x3b, 0x98, 0xa, 0xfd,
+ 0x97, 0xf8, 0x1d, 0xa3, 0xae, 0x97, 0xe1, 0x81, 0xb6, 0x3d,
+ 0x98, 0xb, 0x10, 0xe3, 0x1c, 0x28, 0xff, 00, 0x12, 0x6b,
+ 0xf2, 0x8f, 0xf6, 0x6d, 0xd0, 0xdf, 0x5f, 0xf8, 0xcb, 0xe1,
+ 0xf4, 0xd9, 0xbe, 0x8, 0x5e, 0x49, 0xa4, 0x39, 0xc6, 0x36,
+ 0xc4, 0xe5, 0x4f, 0x5e, 0x7e, 0x60, 0x2b, 0xf6, 0xf, 0xe1,
+ 0xfd, 0x91, 0xb1, 0xf0, 0xb5, 0x9a, 0x30, 0xc3, 0xb0, 0x2c,
+ 0xd8, 0xfa, 0x9a, 0xfa, 0x3c, 0x32, 0xb4, 0x6e, 0x7d, 0x66,
+ 0x12, 0x36, 0x8b, 0x67, 0x59, 00, 0xe9, 0x5a, 0x50, 0xa,
+ 0xa1, 00, 0xf9, 0x85, 0x69, 0x42, 0x38, 0xae, 0xc3, 0xbc,
+ 0xb9, 0x8, 0xad, 0xb, 0x71, 0xd2, 0xa9, 0x42, 0xbd, 0x2b,
+ 0x42, 0x5, 0xc0, 0x6, 0x80, 0x2d, 0xc6, 0x39, 0xab, 0xb0,
+ 0x81, 0x81, 0x55, 0x22, 0x1d, 0x2a, 0xec, 0x43, 0xa5, 00,
+ 0x58, 0x88, 0x55, 0xa4, 0x1c, 0xd5, 0x78, 0x85, 0x5a, 0x8c,
+ 0x50, 0x4, 0xab, 0x4f, 0x5a, 0x62, 0xf4, 0xa9, 0x7, 0x6a,
+ 00, 0x78, 0xeb, 0x52, 0x2d, 0x31, 0x69, 0xeb, 0xd2, 0x80,
+ 0x16, 0x95, 0x69, 0x29, 0x56, 0x80, 0x1d, 0x45, 0x14, 0x50,
+ 0x1, 0x45, 0x14, 0x50, 0x6, 0x24, 0x95, 0x52, 0x77, 0x54,
+ 0x46, 0x67, 0x21, 0x55, 0x41, 0x25, 0x8f, 0x40, 0x2a, 0xd4,
+ 0x95, 0xe7, 0x3f, 0x1d, 0xfc, 0x5e, 0x7c, 0xf, 0xf0, 0xab,
+ 0xc4, 0x5a, 0xaa, 0x18, 0x4c, 0xc9, 0x7, 0x95, 0x1a, 0xce,
+ 0xd8, 0xc, 0x64, 0x60, 0x87, 0xf1, 0xc3, 0x13, 0xf8, 0x56,
+ 0x55, 0x6a, 0x2a, 0x54, 0xe5, 0x37, 0xb2, 0x46, 0x35, 0xaa,
+ 0xaa, 0x34, 0xe5, 0x52, 0x5d, 0x15, 0xcf, 0x89, 0x35, 0x6b,
+ 0xa9, 0x3e, 0x29, 0x7e, 0xd1, 0xda, 0xb5, 0xd8, 0x73, 0x73,
+ 0x1c, 0x97, 0xc2, 0x25, 0x2d, 0xc2, 0xed, 0x8d, 0x56, 0x3e,
+ 0x31, 0xc6, 0x3e, 0x4e, 0xdd, 0x7a, 0xd7, 0xdf, 0xbe, 0x12,
+ 0xb2, 0x5b, 0x4b, 0x38, 0x50, 00, 0xa1, 0x54, 0xc, 0xa,
+ 0xf8, 0x73, 0xf6, 0x48, 0xd0, 0xd6, 0xe3, 0xc4, 0x32, 0xdf,
+ 0xca, 0x37, 0x34, 0x43, 0x86, 0x3e, 0xa7, 0x3c, 0xd7, 0xdc,
+ 0xba, 0x4d, 0xc6, 0xd4, 00, 0x1e, 0x82, 0xbe, 0x57, 0x87,
+ 0x69, 0xb9, 0xd3, 0xa9, 0x8a, 0x96, 0xf3, 0x6c, 0xf8, 0x9e,
+ 0x14, 0xa6, 0xe7, 0x4a, 0xae, 0x36, 0x5b, 0xd4, 0x93, 0x67,
+ 0x69, 0x66, 0xc0, 0x28, 0x15, 0x6a, 0xb0, 0x6d, 0x6e, 0xba,
+ 0x73, 0x5a, 0x71, 0x5d, 0x64, 0xe, 0x6b, 0xeb, 0xcf, 0xbc,
+ 0x2d, 0xd1, 0x4c, 0x59, 0x3, 0x53, 0xb2, 0x28, 0x1, 0xaf,
+ 0x1a, 0x10, 0x4b, 0x20, 0x3f, 0x51, 0x5f, 0x8, 0xff, 00,
+ 0xc1, 0x47, 0x3c, 0x79, 0x69, 0xe1, 0xff, 00, 0x87, 0xd7,
+ 0x56, 0xd1, 0x22, 0x47, 0x34, 0x8a, 0xdc, 0x88, 0xc7, 0x1f,
+ 0x2b, 0x74, 0xf7, 0xaf, 0xba, 0xee, 0x9b, 0x10, 0x39, 0x1d,
+ 0x71, 0x5f, 0x15, 0x7e, 0xd7, 0x1f, 0x9, 0x6e, 0x3e, 0x25,
+ 0x5c, 0x47, 0xf, 0x90, 0xd3, 0x20, 0xe0, 0xfc, 0x9b, 0x87,
+ 0x7f, 0x63, 0xeb, 0x40, 0x1f, 0x87, 0x57, 0x1b, 0xe7, 0xb8,
+ 0x96, 0x42, 0xac, 0xcc, 0xec, 0x5b, 0x27, 0xaf, 0x26, 0xbf,
+ 0x56, 0x3f, 0xe0, 0x9c, 0xdf, 0xc, 0xac, 0x2f, 0xfc, 0x2b,
+ 0xa5, 0x3d, 0xe6, 0x9f, 0x1c, 0xcd, 0x26, 0x49, 0x2e, 0x32,
+ 0x4f, 0xcc, 0xdf, 0xa5, 0x70, 0xa9, 0xfb, 0x19, 0xab, 0x5d,
+ 0x46, 0xe, 0x94, 0x71, 0xb8, 0x64, 0x8b, 0x7f, 0x7f, 0xf7,
+ 0x6b, 0xf4, 0x2b, 0xf6, 0x64, 0xf8, 0x5b, 0x6b, 0xe0, 0xf,
+ 0xb, 0xda, 0x43, 0x1d, 0xb0, 0x81, 0xe3, 0x8f, 0x18, 0x9,
+ 0x8e, 0xe7, 0xd8, 0x7a, 0xd0, 0x7, 0xad, 0xf, 0x2, 0x68,
+ 0x1b, 0x15, 0x7f, 0xb2, 0xad, 0xc0, 0x3, 0x18, 0xdb, 0x55,
+ 0xe5, 0xf8, 0x73, 0xe1, 0xd9, 0x7e, 0xf6, 0x95, 0x6e, 0x7f,
+ 0xe0, 0x35, 0xd3, 0x51, 0x40, 0x1c, 0x74, 0xbf, 0x9, 0xfc,
+ 0x31, 0x2e, 0x73, 0xa5, 0xc2, 0x3e, 0x82, 0xa9, 0xcd, 0xf0,
+ 0x53, 0xc2, 0xd2, 0xf5, 0xd3, 0xa3, 0xc7, 0xfb, 0xb5, 0xde,
+ 0xd1, 0x40, 0x1e, 0x67, 0x37, 0xc0, 0x1f, 0xa, 0xcb, 0x9f,
+ 0xf8, 0x97, 0xc4, 0x3f, 0xe0, 0x35, 0xb5, 0xe1, 0xbf, 0x85,
+ 0xda, 0x2f, 0x86, 0x65, 0x49, 0x2d, 0x6d, 0x63, 0x57, 0x5f,
+ 0xbb, 0x81, 0xd2, 0xbb, 0x2a, 0x28, 0x1, 0x29, 0x1d, 0x77,
+ 0xa1, 0x5f, 0x51, 0x8a, 0x75, 0x14, 0x1, 0xe3, 0xbf, 0x14,
+ 0x3e, 0x2, 0x5a, 0xfc, 0x42, 0xe2, 0x58, 0xe0, 0x91, 0x49,
+ 0xe4, 0x48, 0xc4, 0x7f, 0x43, 0x5e, 0x55, 0x73, 0xfb, 0x10,
+ 0x69, 0xef, 0xf7, 0x6c, 0xec, 0xfa, 0xf6, 0x90, 0xff, 00,
+ 0x85, 0x7d, 0x6f, 0x45, 00, 0x7c, 0x5f, 0x79, 0xfb, 0xb,
+ 0x40, 0xe3, 0xf7, 0x76, 0x76, 0xa7, 0xfe, 0x6, 0x7f, 0xf8,
+ 0x9a, 0xc6, 0xba, 0xfd, 0x84, 0xe, 0xe, 0xdd, 0x3a, 0xdc,
+ 0xfd, 0x1d, 0xbf, 0xf8, 0x9a, 0xfb, 0xa6, 0x8a, 00, 0xfc,
+ 0xfe, 0xbb, 0xfd, 0x83, 0x67, 0x39, 0xb, 0xa7, 0x45, 0x9f,
+ 0x72, 0xdf, 0xfc, 0x4d, 0x62, 0xdd, 0x7e, 0xc1, 0xd7, 0xc0,
+ 0xb6, 0x34, 0xc8, 0xb1, 0xec, 0x5b, 0xff, 00, 0x89, 0xaf,
+ 0xd1, 0xba, 0x28, 0x3, 0xf3, 0x2a, 0xf3, 0xf6, 0x15, 0xd4,
+ 0x14, 0x1c, 0x69, 0x8b, 0xf8, 0x6e, 0xff, 00, 0xe2, 0x6b,
+ 0x12, 0xf3, 0xf6, 0x1b, 0xd4, 0xd7, 0xa6, 0x97, 0x19, 0xfc,
+ 0x1b, 0xff, 00, 0x89, 0xaf, 0xd5, 0xa, 0x42, 0xa0, 0xf5,
+ 0x14, 0x1, 0xf9, 0x29, 0x7b, 0xfb, 0x11, 0xea, 0x68, 0x5b,
+ 0xfe, 0x25, 0xb, 0xd7, 0xb0, 0x6f, 0xfe, 0x26, 0xb1, 0x2e,
+ 0xbf, 0x62, 0xad, 0x50, 0xf, 0xf9, 0x4, 0x45, 0xf8, 0xab,
+ 0x7f, 0xf1, 0x35, 0xfb, 0x4, 0xd6, 0xf1, 0xb7, 0x54, 0x53,
+ 0xf5, 0x14, 0xc6, 0xb0, 0xb7, 0x7f, 0xbd, 0xa, 0x1f, 0xa8,
+ 0xa0, 0xf, 0xc6, 0x9b, 0xbf, 0xd8, 0xc7, 0x52, 0x5f, 0xf9,
+ 0x83, 0xa1, 0x3e, 0xc1, 0xbf, 0xf8, 0x9a, 0xc7, 0xbb, 0xfd,
+ 0x8e, 0xf5, 0x4, 0xce, 0x74, 0x75, 0xfc, 0x55, 0xbf, 0xf8,
+ 0x9a, 0xfd, 0xa9, 0x6d, 0x16, 0xc5, 0xba, 0xda, 0xc4, 0x7e,
+ 0xab, 0x51, 0x37, 0x87, 0x74, 0xc7, 0xfb, 0xd6, 0x30, 0x1f,
+ 0xf8, 00, 0xa0, 0xf, 0xc4, 0x4b, 0x9f, 0xd9, 0x6, 0xf5,
+ 0x41, 0xce, 0x8c, 0xbf, 0x80, 0x6f, 0xfe, 0x26, 0xb2, 0x2f,
+ 0x3f, 0x64, 0x9b, 0xc4, 0x7, 0x3a, 0x40, 0x3, 0xfd, 0xd6,
+ 0xff, 00, 0xe2, 0x6b, 0xf7, 0x31, 0xfc, 0x23, 0xa2, 0xbf,
+ 0xde, 0xd3, 0x2d, 0x9b, 0xeb, 0x18, 0xa8, 0xa4, 0xf0, 0x3e,
+ 0x81, 0x27, 0xde, 0xd2, 0x2d, 0x3f, 0xef, 0xd0, 0xa0, 0xf,
+ 0xc2, 0x1b, 0x8f, 0xd9, 0x4a, 0xed, 0x73, 0xff, 00, 0x12,
+ 0xac, 0x7d, 0x3, 0x7f, 0xf1, 0x35, 0x99, 0x71, 0xfb, 0x2d,
+ 0xde, 0x20, 0xe3, 0x4d, 0x75, 0xfc, 0x1b, 0x1f, 0xfa, 0xd,
+ 0x7e, 0xf3, 0xc9, 0xf0, 0xd7, 0xc3, 0x32, 0x83, 0xbb, 0x46,
+ 0xb4, 0x39, 0xff, 00, 0xa6, 0x4b, 0xfe, 0x15, 0x56, 0x4f,
+ 0x84, 0xbe, 0x15, 0x97, 0xef, 0x69, 0x16, 0xdf, 0x84, 0x4b,
+ 0xfe, 0x14, 0x1, 0xf8, 0x23, 0x3f, 0xec, 0xcd, 0x79, 0x1e,
+ 0x7f, 0xd0, 0x58, 0xf, 0xf8, 0x17, 0xf8, 0x56, 0x74, 0xff,
+ 00, 0xb3, 0x75, 0xf2, 0x1e, 0x2d, 0x1c, 0x7f, 0xdf, 0x5f,
+ 0xe1, 0x5f, 0xbe, 0x72, 0xfc, 0x11, 0xf0, 0x8c, 0xc4, 0x96,
+ 0xd2, 0xa1, 0xff, 00, 0xbf, 0x69, 0xff, 00, 0xc4, 0xd5,
+ 0x39, 0x7f, 0x67, 0xef, 0x6, 0xc9, 0x9f, 0xf8, 0x95, 0xc4,
+ 0x33, 0xe9, 0x12, 0x7f, 0xf1, 0x34, 0x1, 0xf8, 0x11, 0x3f,
+ 0xec, 0xf5, 0xa8, 0xc7, 0x9c, 0x40, 0xc3, 0xea, 0x5b, 0xff,
+ 00, 0x89, 0xaa, 0x33, 0x7c, 0x3, 0xd5, 0x23, 0x3c, 0x44,
+ 0xff, 00, 0x81, 0x3f, 0xfc, 0x4d, 0x7e, 0xfc, 0x4f, 0xfb,
+ 0x35, 0x78, 0x2e, 0x71, 0x83, 0x60, 0xa0, 0x7a, 0x79, 0x49,
+ 0xff, 00, 0xc4, 0xd6, 0x7d, 0xc7, 0xec, 0xab, 0xe0, 0xa9,
+ 0xf2, 0x7e, 0xc6, 0x80, 0x9f, 0xfa, 0x63, 0x1f, 0xff, 00,
+ 0x13, 0x40, 0x1f, 0x81, 0x32, 0xfc, 0xf, 0xd5, 0xd0, 0xf1,
+ 0x1b, 0x7e, 0x39, 0xff, 00, 0xe2, 0x6a, 0x9c, 0xbf, 0x6,
+ 0xb5, 0xa4, 0xe9, 0x17, 0xea, 0x7f, 0xf8, 0x9a, 0xfd, 0xf0,
+ 0xb8, 0xfd, 0x90, 0x3c, 0x1d, 0x30, 0xe2, 0x4, 0x5f, 0xfb,
+ 0x65, 0x1f, 0xff, 00, 0x13, 0x59, 0xb3, 0xfe, 0xc5, 0xbe,
+ 0x11, 0x90, 0x8d, 0xb1, 0x45, 0xf8, 0xc4, 0x9f, 0xfc, 0x4d,
+ 00, 0x7e, 0xb, 0xcb, 0xf0, 0x97, 0x5b, 0x8f, 0xfe, 0x58,
+ 0x8f, 0xfc, 0x7b, 0xff, 00, 0x89, 0xaa, 0xaf, 0xf0, 0xcb,
+ 0x5b, 0x4f, 0xf9, 0x62, 0xf, 0xd3, 0x3f, 0xe1, 0x5f, 0xbc,
+ 0x17, 0x1f, 0xb1, 0x7, 0x86, 0x24, 0xe0, 0x24, 0x23, 0xe9,
+ 0x1a, 0xff, 00, 0xf1, 0x15, 0x93, 0x73, 0xfb, 0x9, 0xf8,
+ 0x7e, 0x4c, 0xe1, 0x62, 0xe7, 0xfe, 0x99, 0xaf, 0xff, 00,
+ 0x11, 0x40, 0x1f, 0x85, 0xcf, 0xf0, 0xf3, 0x59, 0x4e, 0xb6,
+ 0xe4, 0xfd, 0x14, 0xff, 00, 0x85, 0x57, 0x7f, 0x4, 0xea,
+ 0xc9, 0xd6, 0xdd, 0xbf, 0x23, 0xfe, 0x15, 0xfb, 0x87, 0x75,
+ 0xfb, 0x6, 0x69, 0xd, 0xf7, 0x62, 0x8b, 0xf0, 0x8c, 0x7f,
+ 0xf1, 0x15, 0x8b, 0x79, 0xfb, 0x3, 0x69, 0xee, 0xcd, 0xb6,
+ 0x11, 0xff, 00, 0x7e, 0xc7, 0xff, 00, 0x11, 0x40, 0x1f,
+ 0x8a, 0xf, 0xe1, 0x4d, 0x4d, 0x3a, 0xdb, 0x3f, 0xe0, 0xa7,
+ 0xfc, 0x2a, 0x6, 0xf0, 0xfd, 0xfa, 0xe, 0x6d, 0xe4, 0xff,
+ 00, 0xbe, 0xf, 0xf8, 0x57, 0xec, 0xe5, 0xd7, 0xec, 0x5,
+ 0x6, 0xe, 0xdb, 0x60, 0x7e, 0x91, 0xf, 0xfe, 0x22, 0xb1,
+ 0xae, 0xbf, 0x60, 0x35, 0xe4, 0xb, 0x39, 0x31, 0xff, 00,
+ 0x5c, 0x47, 0xff, 00, 0x11, 0x40, 0x1f, 0x8e, 0xed, 0xa4,
+ 0xdd, 0xaf, 0x5b, 0x79, 0x7, 0xfc, 00, 0xd4, 0x6d, 0x61,
+ 0x70, 0x9d, 0x60, 0x93, 0xfe, 0xf9, 0x35, 0xfa, 0xe7, 0x77,
+ 0xfb, 0x2, 0x38, 0x24, 0xad, 0x8c, 0x87, 0xeb, 0x7, 0xff,
+ 00, 0x61, 0x58, 0xd7, 0x7f, 0xb0, 0x5c, 0xeb, 0x9c, 0x69,
+ 0xd2, 0x1f, 0xa5, 0xbf, 0xff, 00, 0x61, 0x40, 0x1f, 0x94,
+ 0x5f, 0x66, 0x94, 0xe, 0x62, 0x7f, 0xfb, 0xe4, 0xd3, 0x4c,
+ 0x4e, 0x3a, 0xa3, 0xf, 0xc2, 0xbf, 0x51, 0xaf, 0x3f, 0x61,
+ 0x9, 0xd1, 0x4f, 0xfc, 0x4b, 0x24, 0x3f, 0x5b, 0x73, 0xff,
+ 00, 0xc4, 0x56, 0x1d, 0xdf, 0xec, 0x37, 0x74, 0x80, 0xff,
+ 00, 0xc4, 0xad, 0xcf, 0xd2, 0xdb, 0xff, 00, 0xb0, 0xa0,
+ 0xf, 0xcd, 0x4d, 0xa4, 0x76, 0x34, 0x98, 0x3e, 0x86, 0xbf,
+ 0x44, 0xee, 0xbf, 0x62, 0x3b, 0x90, 0x32, 0x74, 0xa7, 0xfc,
+ 0x6d, 0xbf, 0xfb, 0xa, 0xc7, 0xba, 0xfd, 0x8b, 0x2e, 0x54,
+ 0x1f, 0xf8, 0x94, 0x93, 0xec, 0x2d, 0xff, 00, 0xfb, 0xa,
+ 00, 0xf8, 0x12, 0x8a, 0xfb, 0x92, 0xe3, 0xf6, 0x34, 0xb9,
+ 0x52, 0x73, 0xa4, 0x49, 0xff, 00, 0x80, 0xdf, 0xfd, 0x85,
+ 0x65, 0x5c, 0x7e, 0xc7, 0xd7, 0x8, 0x73, 0xfd, 0x93, 0x20,
+ 0xff, 00, 0xb7, 0x7f, 0xfe, 0xc2, 0x80, 0x3e, 0x30, 0xa2,
+ 0xbe, 0xba, 0xba, 0xfd, 0x92, 0x6e, 0x53, 0xfe, 0x61, 0x93,
+ 0xaf, 0xd2, 0xdf, 0xff, 00, 0xb0, 0xac, 0xbb, 0x8f, 0xd9,
+ 0x52, 0xe5, 0x33, 0xfe, 0x81, 0x38, 0xfa, 0xc1, 0xff, 00,
+ 0xd8, 0xd0, 0x7, 0xcb, 0x34, 0x57, 0xd2, 0x97, 0x1f, 0xb2,
+ 0xed, 0xda, 0xff, 00, 0xcb, 0xa5, 0xc0, 0xfa, 0x44, 0x7f,
+ 0xf8, 0x9a, 0xcf, 0x9f, 0xf6, 0x65, 0xbc, 0x51, 0xc4, 0x17,
+ 0x23, 0xfe, 0xd9, 0x1f, 0xfe, 0x26, 0x80, 0x3e, 0x7b, 0xa2,
+ 0xbd, 0xce, 0x7f, 0xd9, 0xbe, 0xf9, 0x3f, 0xe5, 0x95, 0xcf,
+ 0xfd, 0xfb, 0xff, 00, 0xec, 0x6a, 0x8c, 0xbf, 0xb3, 0xcd,
+ 0xfa, 0x67, 0xf7, 0x77, 0x3f, 0xf7, 0xc1, 0xff, 00, 0xe2,
+ 0x68, 0x3, 0xc6, 0xa8, 0xaf, 0x56, 0x9b, 0xe0, 0x3e, 0xa4,
+ 0x84, 0xed, 0x49, 0x8f, 0xfc, 0x4, 0xff, 00, 0xf1, 0x35,
+ 0x4e, 0x4f, 0x82, 0x7a, 0xa2, 0x7f, 0xcb, 0x39, 0xbf, 0xef,
+ 0x83, 0xfe, 0x14, 0x1, 0xe6, 0xb4, 0x57, 0x7f, 0x2f, 0xc1,
+ 0xed, 0x59, 0x3a, 0x45, 0x21, 0xfa, 0xa9, 0xff, 00, 0xa,
+ 0xa9, 0x2f, 0xc2, 0xbd, 0x62, 0x3f, 0xf9, 0x77, 0x93, 0xfe,
+ 0xf9, 0x6f, 0xf0, 0xa0, 0xe, 0x2e, 0x8a, 0xea, 0xe4, 0xf8,
+ 0x6f, 0xac, 0xa1, 0xff, 00, 0x8f, 0x77, 0x3f, 0xf0, 0x16,
+ 0xff, 00, 0xa, 0xab, 0x27, 0x80, 0xb5, 0x98, 0xc9, 0xff,
+ 00, 0x44, 0x73, 0xff, 00, 0x1, 0x6f, 0xf0, 0xa0, 0xe,
+ 0x7a, 0x8a, 0xda, 0x7f, 0x7, 0x6a, 0xc9, 0xff, 00, 0x2e,
+ 0x72, 0xff, 00, 0xdf, 0x6, 0xa1, 0x6f, 0xc, 0x6a, 0x8b,
+ 0xff, 00, 0x2e, 0x72, 0xff, 00, 0xdf, 0x26, 0x80, 0x32,
+ 0xe8, 0xab, 0xed, 0xa0, 0xea, 0x9, 0xd6, 0xce, 0x6f, 0xfb,
+ 0xe4, 0xd4, 0x67, 0x49, 0xbd, 0x5e, 0xb6, 0xb2, 0x8f, 0xf8,
+ 0x9, 0xa0, 0xa, 0x94, 0x55, 0x83, 0xa7, 0x5d, 0x2f, 0x5b,
+ 0x79, 0x47, 0xfc, 00, 0xd4, 0x6d, 0x6b, 0x32, 0x9e, 0x62,
+ 0x71, 0xf5, 0x53, 0x40, 0x11, 0xd2, 0xee, 0x3e, 0xa6, 0x9c,
+ 0x61, 0x90, 0x7f, 0x3, 0x7e, 0x54, 0xd2, 0x8c, 0xbd, 0x54,
+ 0x8f, 0xa8, 0xa0, 0x3, 0x7b, 0x7f, 0x78, 0xfe, 0x74, 0xe1,
+ 0x71, 0x2a, 0xf4, 0x91, 0x87, 0xe3, 0x4c, 0xa2, 0x80, 0x26,
+ 0x17, 0xb7, 0xb, 0xd2, 0x69, 0x7, 0xfc, 0x8, 0xd4, 0x8b,
+ 0xaa, 0xde, 0x27, 0xdd, 0xba, 0x94, 0x7d, 0x1c, 0xd5, 0x5c,
+ 0x1f, 0x4a, 0x28, 0x2, 0xf2, 0xeb, 0xda, 0x8a, 0x74, 0xbc,
+ 0x9b, 0xfe, 0xfa, 0xa9, 0x93, 0xc4, 0xfa, 0xa2, 0x74, 0xbd,
+ 0x97, 0xfe, 0xfa, 0xac, 0xba, 0x28, 0x3, 0x69, 0x7c, 0x65,
+ 0xac, 0x27, 0x4b, 0xe9, 0x7f, 0xef, 0xaa, 0xb0, 0x9e, 0x3e,
+ 0xd6, 0x50, 0xff, 00, 0xc7, 0xe4, 0x87, 0xf1, 0xae, 0x76,
+ 0x8a, 00, 0xeb, 0x62, 0xf8, 0x97, 0xad, 0x47, 0x8f, 0xf4,
+ 0xc9, 0x7f, 0x3a, 0xb5, 0x1f, 0xc5, 0xad, 0x6d, 0xf, 0x37,
+ 0x32, 0x1f, 0xc6, 0xb8, 0x8a, 0x28, 0x3, 0xd0, 0xa2, 0xf8,
+ 0xcb, 0xac, 0x47, 0x83, 0xf6, 0x89, 0x47, 0xd1, 0xaa, 0xec,
+ 0x3f, 0x1c, 0xb5, 0x78, 0xfa, 0xdc, 0x4c, 0x7f, 0x2a, 0xf3,
+ 0xa, 0x28, 0x3, 0xd7, 0x21, 0xf8, 0xfd, 0xa9, 0xc7, 0x8c,
+ 0xcf, 0x70, 0x3e, 0x98, 0xff, 00, 0x1a, 0xbf, 0xf, 0xed,
+ 0x15, 0xa8, 0x21, 0x7, 0xed, 0x57, 0x3f, 0x8f, 0xff, 00,
+ 0xae, 0xbc, 0x52, 0x8a, 00, 0xf7, 0xcb, 0x7f, 0xda, 0x56,
+ 0xf1, 0x3a, 0xdd, 0xdc, 0x3, 0xf4, 0xff, 00, 0xeb, 0xd6,
+ 0x8c, 0x3f, 0xb5, 0x5, 0xca, 0x60, 0x7d, 0xba, 0xe4, 0x7e,
+ 0x1f, 0xfd, 0x7a, 0xf9, 0xca, 0x8a, 00, 0xfa, 0x7e, 0xdb,
+ 0xf6, 0xa9, 0x9d, 0x4f, 0x3a, 0x8d, 0xc6, 0x7f, 0xcf, 0xbd,
+ 0x6a, 0x5b, 0x7e, 0xd6, 0x33, 0x2f, 0xfc, 0xc5, 0x6e, 0x41,
+ 0xf7, 0x3f, 0xfd, 0x7a, 0xf9, 0x32, 0x8a, 00, 0xfb, 0x26,
+ 0xdf, 0xf6, 0xb9, 0x98, 0x60, 0x7f, 0x6c, 0x4c, 0x7f, 0x11,
+ 0xfe, 0x35, 0xaf, 0x69, 0xfb, 0x5f, 0x4c, 0xbf, 0xf3, 0x18,
+ 0x9c, 0xf, 0xf7, 0x87, 0xf8, 0xd7, 0xc3, 0xf4, 0x50, 0x7,
+ 0xdf, 0x36, 0x7f, 0xb6, 0x25, 0xc0, 0x3, 0xfe, 0x27, 0x32,
+ 0x9f, 0xab, 0xf, 0xf1, 0xad, 0xab, 0x5f, 0xdb, 0x22, 0xe0,
+ 0x63, 0xfe, 0x27, 0x13, 0x7e, 0xc, 0x3f, 0xc6, 0xbf, 0x3b,
+ 0x43, 0x91, 0xde, 0x9c, 0x26, 0x75, 0x3c, 0x31, 0x14, 0x1,
+ 0xfa, 0x4f, 0x6b, 0xfb, 0x67, 0x5c, 0xa9, 0x1f, 0xf1, 0x39,
+ 0x9b, 0xf1, 0x2b, 0xfe, 0x35, 0xaf, 0x69, 0xfb, 0x69, 0xdc,
+ 0x8e, 0xba, 0xbc, 0xa4, 0xfb, 0x30, 0xff, 00, 0x1a, 0xfc,
+ 0xc4, 0x17, 0xb3, 0x28, 0xc0, 0x90, 0x8a, 0x7a, 0xea, 0x77,
+ 0x4b, 0xd2, 0x66, 0x14, 0x1, 0xfa, 0xa3, 0x6d, 0xfb, 0x6b,
+ 0xdc, 0xa8, 0x1f, 0xf1, 0x37, 0x9c, 0x7d, 0x48, 0xff, 00,
+ 0x1a, 0xd8, 0xb2, 0xfd, 0xb7, 0x6e, 0x1, 0x1f, 0xf1, 0x36,
+ 0x9b, 0xf3, 0x5f, 0xf1, 0xaf, 0xc9, 0xb5, 0xd7, 0x2f, 0x93,
+ 0xee, 0xdc, 0xb8, 0xfc, 0xaa, 0x41, 0xe2, 0x3d, 0x49, 0x7a,
+ 0x5d, 0xb8, 0xfc, 0xa8, 0x3, 0xf5, 0xf2, 0xd3, 0xf6, 0xe0,
+ 0x91, 0x79, 0x3a, 0xac, 0xff, 00, 0x9a, 0xff, 00, 0xf1,
+ 0x55, 0xb3, 0x67, 0xfb, 0x71, 0x31, 0x23, 0x3a, 0xac, 0xc7,
+ 0xdb, 0xe5, 0xff, 00, 0x1a, 0xfc, 0x70, 0x4f, 0x17, 0x6a,
+ 0xc9, 0xd2, 0xf1, 0xc7, 0xd3, 0x15, 0x2a, 0x78, 0xe3, 0x5a,
+ 0x43, 0x91, 0x7d, 0x27, 0xe3, 0x40, 0x1f, 0xb5, 0x96, 0x3f,
+ 0xb6, 0xec, 0x4d, 0x80, 0xda, 0x94, 0xa7, 0xea, 0xab, 0xfe,
+ 0x35, 0xd2, 0xe9, 0x9f, 0xb6, 0x55, 0x95, 0xdc, 0x8a, 0xaf,
+ 0x79, 0x9c, 0xfa, 0xa2, 0x7f, 0x8d, 0x7e, 0x1c, 0xc3, 0xf1,
+ 0x2b, 0x5e, 0x84, 0xc, 0x5e, 0x31, 0xae, 0x83, 0xc3, 0xdf,
+ 0x15, 0xfc, 0x44, 0xd7, 0xd0, 0xa2, 0xce, 0x5f, 0x73, 0x81,
+ 0xd4, 0xff, 00, 0x8d, 00, 0x7f, 0x40, 0x5e, 0xb, 0xf8,
+ 0x95, 0x6f, 0xe3, 0xab, 0x31, 0x34, 0x27, 0x70, 0xf5, 0xc0,
+ 0x1f, 0xc8, 0xd6, 0xb6, 0xa1, 0x27, 0x19, 0xaf, 0x9c, 0xff,
+ 00, 0x63, 0x1f, 0xb5, 0xc9, 0xf0, 0xee, 0x1b, 0x9b, 0xb5,
+ 0x75, 0x77, 0x3, 0x5, 0xc1, 0xc9, 0xeb, 0x5f, 0x41, 0xdf,
+ 0xb9, 0x9, 0xf8, 0x50, 0x7, 0x3f, 0xa9, 0x49, 0xd6, 0xb9,
+ 0x5d, 0x4a, 0x4c, 0x6, 0xae, 0x83, 0x53, 0x97, 0xad, 0x72,
+ 0x7a, 0xac, 0xbf, 0x29, 0xa0, 0xe, 0x5b, 0x58, 0x97, 0xef,
+ 0x57, 0x97, 0xf8, 0xf2, 0xef, 0xca, 0xb3, 0x60, 0xe, 0x2b,
+ 0xd0, 0xb5, 0x99, 0x7e, 0xf7, 0x35, 0xe3, 0x1f, 0x12, 0xf5,
+ 0x12, 0xaa, 0xeb, 0x9e, 0x5, 0x73, 0x62, 0x65, 0xc9, 0x4d,
+ 0xb3, 0x8f, 0x17, 0x3e, 0x4a, 0x4d, 0x9f, 0x3f, 0xfc, 0x42,
+ 0xbd, 0xdc, 0xd2, 0xc, 0x9a, 0xf1, 0xed, 0x52, 0x4e, 0x5a,
+ 0xbd, 0x7, 0xc6, 0xd7, 0x66, 0x59, 0x9c, 0x67, 0xbd, 0x79,
+ 0x9e, 0xa9, 0x2f, 0x27, 0x9a, 0xf8, 0x2f, 0x8e, 0xab, 0x3f,
+ 0x33, 0xbf, 0xb4, 0xae, 0xd9, 0xcf, 0xea, 0xf, 0x92, 0x6b,
+ 0x1a, 0x76, 0xad, 0x1b, 0xd7, 0xcb, 0x1a, 0xca, 0xb8, 0x6e,
+ 0xb5, 0xef, 0x52, 0x47, 0xd3, 0x50, 0x8d, 0x92, 0x3e, 0x93,
+ 0xfd, 0x86, 0xbc, 0x36, 0x75, 0x3f, 0x19, 0xea, 0xb7, 0xec,
+ 0x80, 0xac, 0x51, 0xa4, 0x11, 0xbe, 0x39, 0xe, 0xc7, 0x7,
+ 0x1f, 0x81, 0xaf, 0xd5, 0x6d, 0x36, 0xdc, 0x5b, 0x5a, 0x41,
+ 0x1e, 0x31, 0xb5, 00, 0xfd, 0x2b, 0xe1, 0xaf, 0xd8, 0x7,
+ 0xc1, 0x42, 0xdf, 0xc2, 0x5a, 0x7d, 0xf3, 0xa0, 0x7, 0x50,
+ 0x9e, 0x4b, 0x89, 0x6, 0x39, 0xfd, 0xd9, 0x91, 0x54, 0x9f,
+ 0xc8, 0x57, 0xdd, 0xb0, 0x1e, 0x73, 0x8c, 0x57, 0xd1, 0x52,
+ 0x8f, 0x2c, 0x11, 0xf5, 0x74, 0x23, 0xcb, 0x4d, 0x22, 0xed,
+ 0xba, 0xf2, 0x2b, 0x4e, 0x11, 0xd2, 0xb3, 0xed, 0xfa, 0x8a,
+ 0xd1, 0x83, 0xb5, 0x6c, 0x6e, 0x5d, 0x84, 0x64, 0xd6, 0x84,
+ 0x2b, 0xf2, 0x8a, 0xa5, 0x6, 0x3d, 0x2b, 0x42, 0x1e, 0x82,
+ 0x80, 0x2d, 0x44, 0x33, 0x8a, 0xb9, 0x18, 0xaa, 0xd0, 0x81,
+ 0x9a, 0xb7, 0x18, 0xa0, 0xb, 0x11, 0xe, 0x95, 0x65, 0x2a,
+ 0x8, 0x85, 0x59, 0x51, 0xc5, 00, 0x3d, 0x47, 0x6a, 0x90,
+ 0x75, 0xa6, 0x2f, 0x5a, 0x91, 0x68, 0x1, 0xcb, 0x52, 0xe,
+ 0x94, 0xc5, 0xed, 0x4f, 0xa0, 0x2, 0x9c, 0x3a, 0x53, 0x69,
+ 0xc2, 0x80, 0x16, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0,
+ 0xc, 0x19, 0xd, 0x7c, 0xaf, 0xfb, 0x7b, 0x78, 0x9d, 0x2c,
+ 0x7e, 0x1f, 0x69, 0x3a, 0x32, 0xb9, 0x5b, 0x8b, 0xeb, 0xc1,
+ 0x21, 0x50, 0x7a, 0xc6, 0x80, 0xe7, 0xf5, 0x2b, 0x5f, 0x54,
+ 0x49, 0x8c, 0xd7, 0xe7, 0xff, 00, 0xed, 0xfd, 0xae, 0x3d,
+ 0xdf, 0xc4, 0xed, 0x3, 0x4d, 0x2f, 0xfb, 0xbb, 0x3b, 0x47,
+ 0x75, 0x4f, 0x4f, 0x30, 0xa9, 0xfc, 0x7e, 0xed, 0x78, 0x39,
+ 0xe5, 0x57, 0x4b, 0x1, 0x51, 0xad, 0xde, 0x9f, 0x79, 0xf3,
+ 0x3c, 0x47, 0x59, 0xd1, 0xcb, 0x2a, 0x35, 0xbb, 0xd3, 0xef,
+ 0x3a, 0x6f, 0xd9, 0x3e, 0xd0, 0x5b, 0x68, 0x53, 0x5c, 0x63,
+ 0x6, 0x47, 0xc6, 0x7f, 0x12, 0x2b, 0xea, 0x3d, 0x32, 0xef,
+ 0xa, 0x39, 0x15, 0xf3, 0x57, 0xec, 0xe7, 0x8b, 0x3f, 0x7,
+ 0x5b, 0x8e, 0x85, 0x8b, 0x1f, 0xfc, 0x78, 0xd7, 0xbb, 0x69,
+ 0xf7, 0xf8, 0xc7, 0x3c, 0x56, 0xd9, 0x45, 0x2f, 0x65, 0x82,
+ 0xa7, 0x1f, 0x23, 0x7c, 0x8a, 0x8a, 0xa1, 0x97, 0x52, 0x8a,
+ 0xec, 0x77, 0xb6, 0xd7, 0x9e, 0xf5, 0xa5, 0xd, 0xef, 0x1d,
+ 0x45, 0x71, 0xb0, 0x5f, 0x71, 0xd7, 0xf4, 0xad, 0x18, 0x2f,
+ 0xc7, 0x73, 0x5e, 0xc1, 0xef, 0x9d, 0x64, 0x77, 0xbe, 0xf5,
+ 0x38, 0xbf, 0xf7, 0xae, 0x5d, 0x6f, 0xf1, 0xfc, 0x54, 0xe1,
+ 0xa8, 0xfb, 0xd0, 0x7, 0x48, 0xf7, 0xa1, 0x87, 0x27, 0x8a,
+ 0xcf, 0xba, 0xd3, 0xf4, 0xfb, 0xe6, 0xdd, 0x3d, 0xbc, 0x72,
+ 0xb7, 0xab, 0x28, 0x26, 0xb2, 0x9b, 0x51, 0xe3, 0xad, 0x20,
+ 0xd4, 0xbd, 0xff, 00, 0x4a, 00, 0xbb, 0xff, 00, 0x8,
+ 0xd6, 0x8f, 0xb8, 0x30, 0xb4, 0x8c, 0x1f, 0xa0, 0xad, 0x5b,
+ 0x4f, 0x26, 0xc6, 0x30, 0x90, 0xa8, 0x45, 0x1d, 0x85, 0x73,
+ 0xe3, 0x52, 0x3e, 0xbf, 0xa5, 0x3c, 0x6a, 0x5e, 0xf4, 0x1,
+ 0xd3, 0xfd, 0xbb, 0xde, 0x94, 0x5e, 0xfb, 0xd7, 0x32, 0x35,
+ 0x2f, 0x7a, 0x7a, 0xea, 0x78, 0xef, 0x40, 0x1d, 0x20, 0xbc,
+ 0xcf, 0x7a, 0x77, 0xdb, 0x7d, 0xeb, 0x9a, 0x1a, 0x96, 0x7b,
+ 0xd3, 0xff, 00, 0xb4, 0xb8, 0xeb, 0xfa, 0x50, 0x7, 0x46,
+ 0x2f, 0x5, 0x2f, 0xda, 0x81, 0xae, 0x74, 0x6a, 0x5e, 0xf4,
+ 0xe1, 0xa8, 0xfb, 0xd0, 0x7, 0x43, 0xf6, 0xa1, 0xeb, 0x47,
+ 0xda, 0x47, 0xad, 0x60, 0x7f, 0x68, 0x7b, 0x8a, 0x70, 0xd4,
+ 0x7, 0xad, 00, 0x6f, 0xfd, 0xa0, 0x7a, 0xd2, 0x89, 0xd7,
+ 0xd6, 0xb0, 0x7e, 0xde, 0x3d, 0x7f, 0x4a, 0x51, 0x7e, 0x3d,
+ 0x68, 0x3, 0x7b, 0xce, 0x5f, 0x5a, 0x5f, 0x35, 0x7d, 0x6b,
+ 0xc, 0x5f, 0x83, 0xde, 0x94, 0x5f, 0x8c, 0xf5, 0xfd, 0x28,
+ 0x3, 0x6f, 0xcc, 0x5f, 0x5a, 0x50, 0xe0, 0xf7, 0xac, 0x5f,
+ 0xb6, 0x8f, 0x51, 0x4f, 0x17, 0xdc, 0x75, 0xa0, 0xd, 0x7d,
+ 0xc3, 0xd6, 0x97, 0x22, 0xb2, 0x3e, 0xdb, 0xcf, 0xde, 0xa7,
+ 0x7d, 0xbb, 0xfd, 0xaa, 00, 0xd5, 0xcd, 0x19, 0xac, 0xc1,
+ 0x7d, 0xef, 0x4e, 0x17, 0xbc, 0xf5, 0x14, 0x1, 0xa5, 0x45,
+ 0x67, 0x7d, 0xb7, 0xde, 0x97, 0xed, 0xbe, 0xff, 00, 0xa5,
+ 00, 0x68, 0x51, 0x54, 0x45, 0xe7, 0xa9, 0xfd, 0x29, 0xdf,
+ 0x6d, 0xf7, 0x14, 0x1, 0x72, 0x8a, 0xa8, 0x2f, 0x33, 0xdc,
+ 0x53, 0xbe, 0xd6, 0x3d, 0x68, 0x2, 0xcd, 0x15, 0x5c, 0x5d,
+ 0x8c, 0x76, 0xa3, 0xed, 0x62, 0x80, 0x2c, 0x51, 0x50, 0xfd,
+ 0xa5, 0x73, 0x4a, 0x2e, 0x14, 0xd0, 0x4, 0xb4, 0x54, 0x7e,
+ 0x7a, 0xfa, 0xd2, 0x89, 0x94, 0xf7, 0xa0, 0x7, 0xd1, 0x4c,
+ 0xf3, 0x54, 0xf7, 0xa5, 0xde, 0x3d, 0x68, 0x1, 0x71, 0x46,
+ 0x7, 0xa5, 0x20, 0x71, 0xeb, 0x46, 0xe1, 0xeb, 0x40, 0xb,
+ 0x8a, 0x31, 0x46, 0x45, 0x2d, 00, 0x21, 0x50, 0x7a, 0x8c,
+ 0xfd, 0x69, 0x86, 0x8, 0xc8, 0xc1, 0x45, 0x3f, 0xf0, 0x1a,
+ 0x92, 0x8a, 00, 0x81, 0xac, 0x6d, 0xdf, 0xef, 0x5b, 0xc4,
+ 0xdf, 0x54, 0x6, 0xa2, 0x6d, 0x1e, 0xc5, 0xf3, 0x9b, 0x48,
+ 0x3f, 0xef, 0xd8, 0xab, 0x94, 0x50, 0x6, 0x63, 0xf8, 0x6f,
+ 0x4c, 0x90, 0x61, 0xac, 0x60, 0x3f, 0xf6, 0xcc, 0x7f, 0x85,
+ 0x56, 0x93, 0xc1, 0x7a, 0x2c, 0xbd, 0x74, 0xe8, 0x3f, 0x8,
+ 0xc7, 0xf8, 0x56, 0xe5, 0x14, 0x1, 0xcd, 0x3f, 0xc3, 0xbd,
+ 0x2, 0x4c, 0xee, 0xd3, 0xa2, 0x39, 0xff, 00, 0x64, 0x7f,
+ 0x85, 0x55, 0x93, 0xe1, 0x47, 0x86, 0x65, 0xfb, 0xda, 0x6c,
+ 0x5f, 0x82, 0x8f, 0xf0, 0xae, 0xbe, 0x8a, 00, 0xe1, 0x25,
+ 0xf8, 0x29, 0xe1, 0x49, 0xb3, 0x9d, 0x3c, 0xc, 0xfa, 0x6d,
+ 0xff, 00, 0xa, 0xa3, 0x37, 0xc0, 0x1f, 0x8, 0xcd, 0xd6,
+ 0xc4, 0xff, 00, 0xe3, 0xbf, 0xfc, 0x4d, 0x7a, 0x4d, 0x27,
+ 0x4a, 00, 0xf2, 0x69, 0xff, 00, 0x66, 0xaf, 0x8, 0x4c,
+ 0x78, 0xb4, 0x23, 0xf1, 0x5f, 0xfe, 0x26, 0xb3, 0xee, 0x7f,
+ 0x65, 0xaf, 0x9, 0xcb, 0xd2, 0xdf, 0xf3, 0xda, 0x7f, 0xf6,
+ 0x5a, 0xf6, 0x9a, 0x5a, 00, 0xf0, 0x1b, 0x9f, 0xd9, 0x1b,
+ 0xc2, 0xd3, 0x67, 0x16, 0xeb, 0xf9, 0xaf, 0xff, 00, 0x13,
+ 0x59, 0x97, 0x1f, 0xb1, 0xb7, 0x87, 0x1c, 0x7c, 0x90, 0xf,
+ 0xcd, 0x7f, 0xf8, 0x9a, 0xfa, 0x46, 0x92, 0x80, 0x3e, 0x56,
+ 0xbb, 0xfd, 0x89, 0x74, 0x49, 0x18, 0xec, 0xb5, 0x52, 0x3d,
+ 0x9d, 0x7, 0xf4, 0xac, 0x8b, 0x9f, 0xd8, 0x73, 0x4d, 0x6c,
+ 0x95, 0xb4, 0x39, 0x3c, 0xf1, 0x22, 0x7f, 0x85, 0x7d, 0x81,
+ 0x45, 00, 0x7c, 0x4f, 0x77, 0xfb, 0xa, 0x5a, 0x91, 0xf2,
+ 0x58, 0x96, 0xfa, 0x3a, 0x7f, 0x85, 0x63, 0xdd, 0x7e, 0xc2,
+ 0xb, 0xce, 0x34, 0xd9, 0x8e, 0x3d, 0x1d, 0x4f, 0xf4, 0xaf,
+ 0xbc, 0x68, 0xa0, 0xf, 0xcf, 0x6b, 0xbf, 0xd8, 0x3d, 0xf9,
+ 0x2b, 0xa6, 0x4d, 0xf8, 0xed, 0xff, 00, 0xa, 0xc4, 0xbc,
+ 0xfd, 0x84, 0xee, 0x50, 0x1c, 0x69, 0x13, 0xfe, 0x1b, 0x7f,
+ 0xc2, 0xbf, 0x48, 0xf0, 0x3d, 0x29, 0x36, 0x29, 0xec, 0x3f,
+ 0x2a, 00, 0xfc, 0xc0, 0xbb, 0xfd, 0x86, 0xee, 0xc1, 0x3f,
+ 0xf1, 0x2a, 0x9f, 0x3, 0xd4, 0x2f, 0xf8, 0x56, 0x2d, 0xdf,
+ 0xec, 0x45, 0x7c, 0xb9, 0xff, 00, 0x89, 0x3c, 0xdf, 0x92,
+ 0xff, 00, 0x85, 0x7e, 0xac, 0x18, 0x90, 0xf5, 0x45, 0x3f,
+ 0x85, 0x31, 0xac, 0xe0, 0x71, 0x83, 0x12, 0x91, 0xf4, 0xa0,
+ 0xf, 0xc9, 0xb, 0xbf, 0xd8, 0xaa, 0xf9, 0x3f, 0xe6, 0xf,
+ 0x3f, 0xfd, 0xf2, 0x3f, 0xc2, 0xb1, 0xee, 0xff, 00, 0x63,
+ 0x1b, 0xe5, 0x27, 0xfe, 0x24, 0xf2, 0x91, 0xec, 0xa3, 0xfc,
+ 0x2b, 0xf6, 0x9, 0xb4, 0xab, 0x47, 0xeb, 0x2, 0x9a, 0x82,
+ 0x4f, 0xe, 0x69, 0xb2, 0xe7, 0x75, 0xa2, 0x1c, 0xfb, 0x9f,
+ 0xf1, 0xa0, 0xf, 0xc6, 0xbb, 0xaf, 0xd8, 0xea, 0xf5, 0x3f,
+ 0xe6, 0xd, 0x3f, 0xfd, 0xf2, 0x3f, 0xc2, 0xb1, 0xaf, 0x3f,
+ 0x64, 0x2b, 0xc5, 0x3f, 0xf2, 0x6, 0x98, 0xe7, 0xd5, 0x47,
+ 0xf8, 0x57, 0xed, 0x23, 0xf8, 0x3b, 0x47, 0x90, 0x73, 0x64,
+ 0xa7, 0xfe, 0x4, 0xdf, 0xe3, 0x55, 0x66, 0xf8, 0x79, 0xa0,
+ 0x4d, 0xf7, 0xec, 0x47, 0xa7, 0xe, 0xc3, 0xfa, 0xd0, 0x7,
+ 0xe2, 0x75, 0xcf, 0xec, 0x93, 0x74, 0x3a, 0xe8, 0xb3, 0xff,
+ 00, 0xdf, 0x23, 0xfc, 0x2b, 0x26, 0xe7, 0xf6, 0x51, 0xb8,
+ 0x4c, 0xff, 00, 0xc4, 0x9e, 0x71, 0xff, 00, 0x1, 0x1f,
+ 0xe1, 0x5f, 0xb7, 0x92, 0x7c, 0x28, 0xf0, 0xd4, 0xbd, 0x6c,
+ 0x4f, 0xe1, 0x23, 0x7f, 0x8d, 0x54, 0x9b, 0xe0, 0xbf, 0x85,
+ 0xe6, 0x4, 0x1b, 0x16, 0xff, 00, 0xbf, 0x8d, 0xfe, 0x34,
+ 0x1, 0xf8, 0x77, 0x71, 0xfb, 0x2c, 0x5c, 0x27, 0xfc, 0xc2,
+ 0x6e, 0x3f, 00, 0x3f, 0xc2, 0xb3, 0x6e, 0x3f, 0x66, 0x19,
+ 0xd3, 0xfe, 0x61, 0xb7, 0x4b, 0xf8, 0x7f, 0xf5, 0xab, 0xf7,
+ 0x22, 0x6f, 0x80, 0x1e, 0x13, 0x98, 0x93, 0xf6, 0x47, 0x19,
+ 0xff, 00, 0xa6, 0x8d, 0xfe, 0x35, 0x42, 0x7f, 0xd9, 0xbb,
+ 0xc2, 0x92, 0xe7, 0x10, 0xb8, 0xcf, 0xfb, 0x4c, 0x7f, 0xf6,
+ 0x6a, 00, 0xfc, 0x34, 0x9b, 0xf6, 0x6a, 0xb8, 0x5c, 0xe2,
+ 0xc6, 0xe3, 0x8f, 0x43, 0xff, 00, 0xd6, 0xac, 0xdb, 0x8f,
+ 0xd9, 0xd2, 0xea, 0x3c, 0xe2, 0xd6, 0xe4, 0x7e, 0x35, 0xfb,
+ 0x99, 0x71, 0xfb, 0x2d, 0xf8, 0x56, 0x50, 0x7f, 0x76, 0xd9,
+ 0xfa, 0xb7, 0xff, 00, 0x15, 0x59, 0x37, 0x1f, 0xb2, 0x3f,
+ 0x86, 0xa5, 0x27, 0x6a, 0xb8, 0xfa, 0x93, 0xff, 00, 0xc5,
+ 0x50, 0x7, 0xe1, 0xd4, 0xbf, 0xb3, 0xfd, 0xea, 0xf4, 0x82,
+ 0x7f, 0xce, 0xa9, 0x4b, 0xf0, 0x27, 0x51, 0x4f, 0xf9, 0x61,
+ 0x38, 0xff, 00, 0x3f, 0x4a, 0xfd, 0xbd, 0xba, 0xfd, 0x8e,
+ 0x34, 0x29, 0x33, 0xb5, 0x9, 0xff, 00, 0x81, 0x1f, 0xfe,
+ 0x2a, 0xb2, 0x6e, 0x7f, 0x62, 0x8d, 0x1e, 0x40, 0x76, 0xa3,
+ 0x73, 0xfe, 0xd1, 0xff, 00, 0xe2, 0xe8, 0x3, 0xf1, 0x2e,
+ 0x5f, 0x82, 0x9a, 0xa2, 0x74, 0x8a, 0x6f, 0xc4, 0xf, 0xf0,
+ 0xaa, 0x92, 0xfc, 0x1f, 0xd5, 0xd3, 0xa5, 0xbc, 0xbf, 0x90,
+ 0xaf, 0xda, 0x9b, 0xaf, 0xd8, 0x76, 0xc1, 0xb3, 0xb6, 0x22,
+ 0xc0, 0xff, 00, 0xb6, 0x7f, 0xf8, 0xba, 0xc9, 0xb9, 0xfd,
+ 0x85, 0x2d, 0xdb, 0x25, 0x6d, 0x5b, 0xf0, 0x93, 0xff, 00,
+ 0xb3, 0xa0, 0xf, 0xc6, 0x29, 0x7e, 0x15, 0x6a, 0xe9, 0x9f,
+ 0xdc, 0x48, 0x3e, 0xab, 0x54, 0xe4, 0xf8, 0x6f, 0xad, 0x27,
+ 0xfc, 0xba, 0xc8, 0x47, 0xfb, 0xbf, 0xfd, 0x7a, 0xfd, 0x91,
+ 0xbc, 0xfd, 0x84, 0x41, 0xc9, 0x5b, 0x66, 0xfa, 0x6f, 0x1f,
+ 0xfc, 0x5d, 0x60, 0xdd, 0x7e, 0xc2, 0x52, 0xe4, 0xe2, 0xcd,
+ 0xb1, 0xea, 0x1c, 0x1f, 0xfd, 0x9e, 0x80, 0x3f, 0x21, 0x1f,
+ 0xc0, 0x9a, 0xc4, 0x7d, 0x6c, 0xe5, 0xff, 00, 0xbe, 0x6a,
+ 0xbb, 0xf8, 0x3f, 0x56, 0x4e, 0xb6, 0x52, 0xfe, 0x55, 0xfa,
+ 0xd5, 0x77, 0xfb, 0xc, 0xce, 0x9, 0xff, 00, 0x45, 0x71,
+ 0xf5, 0x60, 0x7f, 0xf6, 0x7a, 0xc4, 0xbb, 0xfd, 0x87, 0xae,
+ 0xc0, 0xff, 00, 0x8f, 0x46, 0x3f, 0xf0, 0x30, 0x3f, 0xf6,
+ 0x7a, 00, 0xfc, 0xaa, 0x7f, 0xd, 0x6a, 0x69, 0xd6, 0xca,
+ 0x5f, 0xca, 0xa2, 0x6d, 0xe, 0xfd, 0x3a, 0xda, 0x4a, 0x3f,
+ 0xe0, 0x35, 0xfa, 0x83, 0x79, 0xfb, 0x12, 0xde, 0x27, 0xfc,
+ 0xb9, 0xb0, 0xfa, 0xb8, 0xff, 00, 0xe2, 0xeb, 0x16, 0xeb,
+ 0xf6, 0x2e, 0xbd, 00, 0xe2, 0xd0, 0xb7, 0xfc, 0x8, 0xf,
+ 0xfd, 0x9e, 0x80, 0x3f, 0x35, 0x1b, 0x4b, 0xbb, 0x5e, 0xb6,
+ 0xd2, 0x8f, 0xf8, 0x1, 0xa8, 0xcd, 0x94, 0xeb, 0xd6, 0x17,
+ 0x1f, 0x55, 0xaf, 0xd1, 0x4b, 0xdf, 0xd8, 0xda, 0xf6, 0x3c,
+ 0x9f, 0xb1, 0x30, 0xfa, 0x48, 0x3f, 0xf8, 0xaa, 0xc5, 0xb9,
+ 0xfd, 0x90, 0x6f, 0x39, 0xff, 00, 0x42, 0x27, 0xeb, 0x20,
+ 0xff, 00, 0xe2, 0xa8, 0x3, 0xe0, 0x33, 0x6f, 0x28, 0xeb,
+ 0x1b, 0xf, 0xc2, 0x98, 0x51, 0x87, 0x55, 0x23, 0xf0, 0xaf,
+ 0xba, 0xae, 0x3f, 0x64, 0x5b, 0xb5, 0xce, 0x6c, 0x1b, 0xf0,
+ 0x90, 0x7f, 0xf1, 0x55, 0x8f, 0x75, 0xfb, 0x28, 0x5c, 0x26,
+ 0x7f, 0xd0, 0x5b, 0xfe, 0xfb, 0x1f, 0xfc, 0x55, 00, 0x7c,
+ 0x5b, 0xb4, 0xd2, 0x60, 0x8a, 0xfa, 0xfa, 0xe3, 0xf6, 0x53,
+ 0xb8, 0xc9, 0xcd, 0x8b, 0x1f, 0xfb, 0x68, 0x3f, 0xf8, 0xaa,
+ 0xcb, 0xb9, 0xfd, 0x96, 0xe5, 0x4e, 0xb6, 0x6e, 0x31, 0xff,
+ 00, 0x4d, 0x7, 0xff, 00, 0x15, 0x40, 0x1f, 0x2a, 0xd1,
+ 0x5f, 0x4a, 0x5d, 0x7e, 0xcc, 0x92, 0xa1, 0x23, 0xec, 0xad,
+ 0x9f, 0xfa, 0xe9, 0xff, 00, 0xd9, 0x56, 0x74, 0xff, 00,
+ 0xb3, 0x6c, 0xb1, 0xe7, 0x36, 0xee, 0x3d, 0xf7, 0xf, 0xfe,
+ 0x2a, 0x80, 0x3e, 0x7c, 0xa2, 0xbd, 0xce, 0x5f, 0xd9, 0xde,
+ 0x75, 0xce, 0xd8, 0xdb, 0xf3, 0xff, 00, 0xec, 0xaa, 0x94,
+ 0xbf, 00, 0x6e, 0xd0, 0x1c, 0x46, 0xdf, 0x98, 0xff, 00,
+ 0xe2, 0xa8, 0x3, 0xc6, 0x68, 0xaf, 0x58, 0x9b, 0xe0, 0x5d,
+ 0xfa, 0x7d, 0xd5, 0x3f, 0xa7, 0xff, 00, 0x15, 0x54, 0x66,
+ 0xf8, 0x29, 0xaa, 0x2e, 0x76, 0xaf, 0x4f, 0x71, 0xfe, 0x34,
+ 0x1, 0xe6, 0xb4, 0x57, 0x7b, 0x27, 0xc2, 0x1d, 0x55, 0x7,
+ 0x4f, 0xe5, 0xfe, 0x35, 0x9d, 0x71, 0xf0, 0xd3, 0x57, 0x83,
+ 0xfe, 0x59, 0x83, 0xf8, 0x8f, 0xf1, 0xa0, 0xe, 0x4e, 0xbb,
+ 0xef, 0x84, 0x9a, 0x1f, 0xf6, 0xd7, 0x8b, 0xf4, 0xbb, 0x6f,
+ 0x2c, 0xcb, 0xbe, 0x50, 0x76, 0x8e, 0xf5, 0xce, 0xcd, 0xe0,
+ 0xcd, 0x52, 0xf, 0xbd, 00, 0xc7, 0xfb, 0xc2, 0xbd, 0xaf,
+ 0xf6, 0x4d, 0xf0, 0x8d, 0xd6, 0xa5, 0xf1, 0x4b, 0x4f, 0x8e,
+ 0x58, 0x76, 0xa2, 0x37, 0x2d, 0x91, 0xc7, 0xeb, 0x40, 0x1f,
+ 0xb1, 0xbf, 00, 0xfc, 0x3e, 0x34, 0x2f, 00, 0x69, 0xb0,
+ 0xec, 0xd8, 0xc5, 0x32, 0x47, 0xe7, 0x5d, 0xee, 0xa8, 0xf8,
+ 0x1f, 0x85, 0x55, 0xf0, 0x95, 0x8a, 0xe9, 0xfa, 0x25, 0x9c,
+ 0x28, 0xbb, 0x55, 0x23, 0x3, 0x14, 0xed, 0x59, 0xe8, 0x3,
+ 0x99, 0xd4, 0xa4, 0xeb, 0x5c, 0x96, 0xaf, 0x2e, 0x14, 0xd7,
+ 0x49, 0xa9, 0xc9, 0xc9, 0xae, 0x43, 0x58, 0x97, 0xad, 00,
+ 0x72, 0x5a, 0xd4, 0xd8, 0xd, 0xcd, 0x78, 0x7, 0xc4, 0xbd,
+ 0x43, 0x2f, 0x27, 0x22, 0xbd, 0xbf, 0xc4, 0x37, 0x1e, 0x5c,
+ 0x52, 0x12, 0x71, 0xc1, 0xaf, 0x9a, 0xfe, 0x24, 0x5f, 0xe5,
+ 0xa5, 0x3b, 0xab, 0xc8, 0xcc, 0x67, 0xcb, 0x4e, 0xc7, 0x87,
+ 0x9a, 0xd4, 0xe5, 0xa5, 0x63, 0xc4, 0x7c, 0x4f, 0x71, 0xe6,
+ 0x5c, 0xbf, 0x22, 0xb8, 0xd, 0x52, 0x4e, 0x5a, 0xba, 0xed,
+ 0x6e, 0x6d, 0xf3, 0x48, 0x73, 0x9a, 0xe2, 0x35, 0x49, 0x39,
+ 0x6a, 0xf9, 0x2c, 0x3a, 0xe6, 0x9d, 0xcf, 0x84, 0xc2, 0xae,
+ 0x69, 0xb6, 0x62, 0x5c, 0xb7, 0x26, 0xb3, 0x9d, 0x4c, 0x92,
+ 0x2a, 0xaf, 0x25, 0x8e, 00, 0xfc, 0x6a, 0xe5, 0xc3, 0x67,
+ 0x35, 0xa1, 0xe0, 0x4d, 0x14, 0x78, 0x93, 0xc6, 0xba, 0x4e,
+ 0x9a, 0xd9, 0x2b, 0x71, 0x38, 0x52, 0x1, 0xc7, 0x41, 0x9f,
+ 0xe9, 0x5f, 0x45, 0x46, 0x3a, 0xd8, 0xfa, 0xda, 0x11, 0xbb,
+ 0x48, 0xfd, 0x50, 0xfd, 0x92, 0xbc, 0x26, 0xbe, 0x1c, 0xf0,
+ 0x46, 0x99, 0x6e, 0x51, 0x92, 0x4b, 0x7b, 0x34, 0xc, 0xad,
+ 0xd9, 0xdb, 0x96, 0xfe, 0x66, 0xbe, 0x88, 0x84, 0x71, 0x5e,
+ 0x7f, 0xf0, 0x8b, 0x4b, 0x8e, 0xc3, 0xc3, 0x61, 0xe3, 0x5d,
+ 0x8b, 0x23, 0x10, 0x3e, 0x8a, 0x48, 0x1f, 0xca, 0xbd, 0xe,
+ 0x11, 0xd3, 0x15, 0xf4, 0x2b, 0x45, 0x63, 0xea, 0x56, 0x8a,
+ 0xc5, 0xdb, 0x61, 0x92, 0x31, 0x5a, 0x50, 0x8a, 0xa3, 0x6e,
+ 0x3a, 0x56, 0x84, 0x23, 0xa5, 0x31, 0x97, 0x60, 0x5a, 0xd0,
+ 0x8b, 0x8c, 0x55, 0x38, 00, 0xc5, 0x5e, 0x88, 0x50, 0x5,
+ 0xa8, 0xbd, 0x6a, 0xec, 0x63, 0xa5, 0x55, 0x88, 0x70, 0x2a,
+ 0xd4, 0x62, 0x80, 0x2d, 0x45, 0x56, 0x16, 0xab, 0xc4, 0x3a,
+ 0x55, 0x95, 0xa0, 0x7, 0xad, 0x3c, 0x76, 0xa6, 0xe, 0x95,
+ 0x20, 0xeb, 0x40, 0xf, 0x1d, 0x69, 0xd4, 0x8b, 0x4b, 0x40,
+ 0xa, 0x3a, 0xd3, 0xa9, 0xab, 0x4e, 0xa0, 0x2, 0x8a, 0x28,
+ 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0xe, 0x7e, 0x43, 0x8a, 0xfc,
+ 0xd7, 0xfd, 0xb8, 0xaf, 0x4d, 0xcf, 0xed, 0x4, 0xe9, 0x9c,
+ 0xa4, 0x56, 0x10, 0x20, 0x19, 0xcf, 0x3f, 0x36, 0x7f, 0xa5,
+ 0x7e, 0x94, 0x4d, 0x93, 0x5f, 0x98, 0x9f, 0xb6, 0x89, 0xc7,
+ 0xed, 0xd, 0x7f, 0x81, 0x8f, 0xdc, 0xc5, 0xfc, 0xda, 0xbe,
+ 0x67, 0x88, 0x3f, 0xdc, 0xd2, 0xee, 0xd1, 0xf1, 0xfc, 0x51,
+ 0xae, 0x5, 0x47, 0xbc, 0x91, 0xec, 0xff, 00, 0x6, 0xee,
+ 0x45, 0xa7, 0x85, 0x6c, 0x50, 0x1f, 0xe1, 0x3f, 0xcc, 0xd7,
+ 0xac, 0x58, 0xea, 0x20, 0x1, 0xcf, 0xeb, 0x5e, 0x19, 0xf0,
+ 0xce, 0xf3, 0xc9, 0xd0, 0x6c, 0xd7, 0x3d, 0x13, 0xfa, 0x9a,
+ 0xf4, 0x7b, 0x4d, 0x4f, 0x81, 0xcd, 0x7b, 0xb8, 0x68, 0xf2,
+ 0xd1, 0x82, 0xf2, 0x47, 0xd2, 0x60, 0xe3, 0xc9, 0x87, 0x84,
+ 0x7c, 0x91, 0xe9, 0x16, 0xda, 0x96, 0x40, 0xff, 00, 0x1a,
+ 0xd0, 0x8f, 0x51, 0xc7, 0xff, 00, 0xae, 0xbc, 0xfe, 0xdb,
+ 0x56, 0xc6, 0x39, 0x1f, 0x9d, 0x68, 0x47, 0xab, 0xae, 0x39,
+ 0x75, 0x1f, 0x8d, 0x74, 0x9d, 0x87, 0x72, 0xba, 0x98, 0x1d,
+ 0xea, 0x41, 0xa9, 0x3, 0xde, 0xb8, 0x71, 0xae, 0x44, 0x3f,
+ 0xe5, 0xa2, 0xfe, 0x62, 0x9d, 0xfd, 0xbf, 0x8, 0x1f, 0xeb,
+ 0x17, 0xfe, 0xfa, 0xa9, 0xe6, 0x5d, 0xc9, 0xe6, 0x8a, 0xea,
+ 0x76, 0xaf, 0xa8, 0x8c, 0x75, 0xa8, 0xff, 00, 0xb4, 0x7d,
+ 0xff, 00, 0x5a, 0xe3, 0x5b, 0x5f, 0x87, 0x1f, 0xeb, 0x17,
+ 0xfe, 0xfa, 0x14, 0xc5, 0xd7, 0xa3, 0xcf, 0xdf, 0x5f, 0xfb,
+ 0xea, 0x8e, 0x65, 0xdc, 0x39, 0xa3, 0xdc, 0xed, 0xc6, 0xa5,
+ 0xef, 0x4f, 0x1a, 0x8f, 0xbd, 0x71, 0x43, 0x5b, 0x42, 0x7f,
+ 0xd6, 0x2f, 0xfd, 0xf4, 0x2a, 0x45, 0xd6, 0x54, 0xff, 00,
+ 0x1a, 0x9f, 0xf8, 0x15, 0x3b, 0xa1, 0xdd, 0x77, 0x3b, 0x41,
+ 0xa9, 0x7b, 0xd3, 0x86, 0xa3, 0xef, 0x5c, 0x62, 0xeb, 0x2b,
+ 0x9f, 0xbc, 0xbf, 0x9d, 0x48, 0xba, 0xb8, 0x3d, 0xc7, 0xe7,
+ 0x45, 0xc2, 0xe8, 0xec, 0x46, 0xa5, 0xef, 0x4f, 0x1a, 0x8f,
+ 0xbd, 0x71, 0xa3, 0x56, 0x19, 0xea, 0x3f, 0x3a, 0x72, 0xea,
+ 0xd9, 0xee, 0x3f, 0x3a, 0x63, 0x3b, 0x2f, 0xed, 0x2f, 0x7a,
+ 0x70, 0xd4, 0x7d, 0xeb, 0x8f, 0x1a, 0xaf, 0xb8, 0xfc, 0xe9,
+ 0xeb, 0xaa, 0xfb, 0x8f, 0xce, 0x80, 0x3b, 0x1, 0xa8, 0xe3,
+ 0xbd, 0x38, 0x6a, 0x5e, 0xf5, 0xc8, 0x2e, 0xab, 0xc7, 0x51,
+ 0xf9, 0xd3, 0x97, 0x55, 0xe3, 0xa8, 0xfc, 0xe8, 0x3, 0xaf,
+ 0x1a, 0x8f, 0xbd, 0x38, 0x6a, 0x3e, 0xf5, 0xc8, 0x8d, 0x50,
+ 0x7a, 0x8f, 0xce, 0x9c, 0x35, 0x4c, 0xf7, 0x1f, 0x9d, 00,
+ 0x75, 0xcb, 0xa8, 0x8f, 0xf2, 0x69, 0xe3, 0x51, 0xf7, 0xae,
+ 0x45, 0x75, 0x41, 0xea, 0x3f, 0x3a, 0x70, 0xd4, 0xc7, 0x5c,
+ 0x8f, 0xce, 0x80, 0x3a, 0xe1, 0xa8, 0xfb, 0xd3, 0x86, 0xa3,
+ 0xef, 0x5c, 0x90, 0xd5, 0x3d, 0xc7, 0xe7, 0x4f, 0x1a, 0x98,
+ 0xf5, 0x1f, 0x9d, 00, 0x75, 0xa3, 0x51, 0xf7, 0xa7, 0xd,
+ 0x47, 0xdf, 0xf5, 0xae, 0x48, 0x6a, 0x63, 0xd4, 0x7e, 0x74,
+ 0xe1, 0xa9, 0x7b, 0xfe, 0xb4, 0x1, 0xd6, 0x8d, 0x47, 0xde,
+ 0x9d, 0xfd, 0xa3, 0xef, 0x5c, 0x98, 0xd4, 0xbd, 0xc7, 0xe7,
+ 0x4e, 0x1a, 0x9f, 0xb8, 0xfc, 0xe8, 0x3, 0xad, 0xfe, 0xd1,
+ 0xf7, 0xa7, 0xd, 0x4a, 0xb9, 0x2f, 0xed, 0x2f, 0x71, 0xf9,
+ 0xd3, 0x86, 0xa5, 0xee, 0x7, 0xe3, 0x40, 0x1d, 0x68, 0xd4,
+ 0x47, 0xaf, 0xeb, 0x4f, 0x1a, 0x97, 0x3d, 0x6b, 0x92, 0xfe,
+ 0xd2, 0xf7, 0x1f, 0x9d, 0x38, 0x6a, 0x5e, 0xe3, 0xf3, 0xa0,
+ 0xe, 0xb4, 0x6a, 0x3e, 0xf4, 0xe1, 0xa8, 0x8f, 0x5a, 0xe4,
+ 0x86, 0xa5, 0xee, 0xf, 0xe3, 0x4e, 0xfe, 0xd1, 0xf7, 0xfd,
+ 0x68, 0x3, 0xad, 0xfe, 0xd1, 0x14, 0xe1, 0xa8, 0xa, 0xe4,
+ 0xc6, 0xa4, 0x3d, 0x45, 0x38, 0x6a, 0x7e, 0xe2, 0x80, 0x3a,
+ 0xc5, 0xd4, 0x7, 0xad, 0x38, 0x6a, 0x3, 0xd7, 0xf5, 0xae,
+ 0x4c, 0x6a, 0x5e, 0xe2, 0x9c, 0x35, 0x3f, 0x7f, 0xd6, 0x80,
+ 0x3a, 0xd1, 0xa8, 0xf, 0x5a, 0x51, 0x7e, 0xf, 0x53, 0x5c,
+ 0xa0, 0xd4, 0xfd, 0xe9, 0xcb, 0xa9, 0x67, 0xb8, 0xa0, 0xe,
+ 0xaf, 0xed, 0xc0, 0xff, 00, 0xfa, 0xe9, 0xdf, 0x6d, 0x1d,
+ 0x8d, 0x72, 0x83, 0x52, 0x1e, 0xbf, 0xad, 0x3c, 0x6a, 0x7e,
+ 0xe2, 0x80, 0x3a, 0xa1, 0x7a, 0x3d, 0x69, 0xc2, 0xf7, 0xde,
+ 0xb9, 0x51, 0xa9, 0xf3, 0xd4, 0x53, 0x97, 0x52, 0xf7, 0x1f,
+ 0x9d, 00, 0x75, 0x3f, 0x6d, 0x1e, 0xb9, 0xa7, 0xb, 0xce,
+ 0x3a, 0xd7, 0x2e, 0x35, 0x2f, 0x71, 0xf9, 0xd3, 0x86, 0xa5,
+ 0xee, 0x28, 0x3, 0xa8, 0x17, 0x83, 0xb7, 0xf3, 0xa5, 0x17,
+ 0xbc, 0xd7, 0x30, 0x35, 0x2f, 0x7f, 0xd6, 0x9c, 0x35, 0x2f,
+ 0x71, 0x40, 0x1d, 0x38, 0xbc, 0xf7, 0xa5, 0x17, 0x9e, 0xff,
+ 00, 0xad, 0x73, 0x23, 0x52, 0xe7, 0xa8, 0xa7, 0x8d, 0x48,
+ 0x7a, 0x8a, 00, 0xe9, 0x85, 0xed, 0x28, 0xbc, 0x15, 0xcd,
+ 0xd, 0x47, 0xdc, 0x53, 0x86, 0xa3, 0x8e, 0xe3, 0xf3, 0xa0,
+ 0xe, 0x97, 0xed, 0x82, 0x8f, 0xb5, 0x8a, 0xe7, 0x6, 0xa3,
+ 0xee, 0x29, 0xdf, 0xda, 0x3, 0xdb, 0xf3, 0xa0, 0xe, 0x8b,
+ 0xed, 0x6b, 0x4e, 0xfb, 0x4a, 0xf7, 0xae, 0x74, 0x6a, 0x23,
+ 0xdb, 0xf3, 0xa7, 0x8d, 0x40, 0x63, 0xa8, 0xa0, 0xd, 0xff,
+ 00, 0xb4, 0x25, 0x28, 0x9d, 0x6b, 00, 0x6a, 0x3e, 0xe2,
+ 0x9e, 0x35, 0x1, 0xea, 0x28, 0x3, 0x74, 0x4e, 0xa6, 0x97,
+ 0xcd, 0x5f, 0x5a, 0xc2, 0x1a, 0x80, 0xf5, 0xfd, 0x69, 0xdf,
+ 0x6f, 0x1e, 0xb4, 0x1, 0xb8, 0x24, 0x53, 0xde, 0x8d, 0xe3,
+ 0xd6, 0xb1, 0x45, 0xf8, 0xf5, 0xfd, 0x69, 0xc2, 0xfb, 0xfd,
+ 0xaf, 0xd6, 0x80, 0x36, 0x77, 0xf, 0x5a, 0x32, 0x3d, 0x6b,
+ 0x23, 0xed, 0xde, 0xff, 00, 0xad, 0x38, 0x5f, 0xf, 0x5f,
+ 0xd6, 0x80, 0x35, 0x73, 0x46, 0x6b, 0x33, 0xed, 0xc0, 0xf7,
+ 0xa5, 0xfb, 0x6f, 0xbf, 0xeb, 0x40, 0x1a, 0x74, 0x56, 0x70,
+ 0xbd, 0xf7, 0xa7, 0xb, 0xdf, 0x7a, 00, 0xbf, 0x45, 0x52,
+ 0x17, 0xb9, 0xef, 0x4b, 0xf6, 0xcc, 0xf7, 0xa0, 0xb, 0x94,
+ 0x55, 0x4f, 0xb6, 0x53, 0x85, 0xd8, 0xf6, 0xa0, 0xb, 0x34,
+ 0x55, 0x71, 0x74, 0xd, 0x28, 0xba, 0x6, 0x80, 0x27, 0xa2,
+ 0xa1, 0x17, 0x22, 0x8f, 0xb4, 0xad, 00, 0x4d, 0x45, 0x46,
+ 0x27, 0x53, 0x47, 0x9c, 0xb4, 0x1, 0x25, 0x14, 0xcf, 0x35,
+ 0x7d, 0x68, 0xf3, 0x17, 0xd6, 0x80, 0x1f, 0x45, 0x37, 0x70,
+ 0x3d, 0xe9, 0x77, 0xf, 0x5a, 00, 0x5a, 0x29, 0x32, 0x28,
+ 0xcd, 00, 0x18, 0xcd, 0x21, 0x40, 0x7a, 0x80, 0x69, 0x73,
+ 0x4b, 0x40, 0x11, 0x98, 0x50, 0xff, 00, 0x2, 0xfe, 0x42,
+ 0x9a, 0xd6, 0x90, 0xb7, 0x58, 0x63, 0x3f, 0x55, 0x15, 0x35,
+ 0x14, 0x1, 0x51, 0xf4, 0xab, 0x37, 0x3f, 0x35, 0xb4, 0x47,
+ 0xfe, 0x2, 0x2a, 0x17, 0xf0, 0xfe, 0x9d, 0x27, 0xde, 0xb3,
+ 0x88, 0xff, 00, 0xc0, 0x6b, 0x46, 0x8a, 00, 0xc6, 0x93,
+ 0xc1, 0xfa, 0x34, 0xa3, 0xe6, 0xd3, 0xe2, 0x3f, 0x9f, 0xf8,
+ 0xd5, 0x69, 0x7c, 0x1, 0xa1, 0xca, 0x72, 0x6c, 0x22, 0xfa,
+ 0x60, 0xff, 00, 0x8d, 0x74, 0x54, 0x50, 0x7, 0x21, 0x37,
+ 0xc2, 0xcf, 0xf, 0x4d, 0xf7, 0xac, 0x23, 0x19, 0xf4, 0x7,
+ 0xfc, 0x6a, 0x8c, 0xff, 00, 0x6, 0x3c, 0x3b, 0x36, 0x7f,
+ 0xd1, 0x51, 0x7f, 0x3, 0xfe, 0x35, 0xde, 0xd1, 0x40, 0x1e,
+ 0x65, 0x71, 0xf0, 0xf, 0xc3, 0x93, 0xff, 00, 0xcb, 0xbc,
+ 0x63, 0xfe, 0x2, 0x7f, 0xf8, 0xaa, 0xce, 0x9f, 0xf6, 0x6c,
+ 0xf0, 0xe4, 0xc4, 0xe1, 0x11, 0x33, 0xfe, 0xc1, 0x3f, 0xfb,
+ 0x35, 0x7a, 0xf5, 0x14, 0x1, 0xe2, 0x33, 0xfe, 0xcb, 0x5e,
+ 0x1e, 0x94, 0x70, 0x63, 0xfc, 0x63, 0x3f, 0xfc, 0x55, 0x66,
+ 0x5d, 0x7e, 0xc8, 0xfa, 0xc, 0xdf, 0x74, 0xc6, 0x3f, 0xed,
+ 0x99, 0xff, 00, 0xe2, 0xab, 0xe8, 0x1a, 0x28, 0x3, 0xe6,
+ 0x9b, 0x9f, 0xd8, 0xdf, 0x48, 0x93, 0x38, 0x68, 0xcf, 0x6f,
+ 0xf5, 0x7f, 0xfd, 0x9d, 0x63, 0xdd, 0xfe, 0xc5, 0x56, 0x12,
+ 0x29, 0xc2, 0xc7, 0x93, 0xdc, 0x2f, 0xff, 00, 0x67, 0x5f,
+ 0x57, 0x51, 0x40, 0x1f, 0x1b, 0x5e, 0xfe, 0xc4, 0x36, 0xec,
+ 0xa7, 0x6c, 0x6a, 0x7e, 0x8b, 0xff, 00, 0xd9, 0xd7, 0x15,
+ 0xad, 0xfe, 0xc4, 0x2e, 0xa4, 0xec, 0xb6, 0x61, 0xf4, 0x4c,
+ 0xff, 00, 0xec, 0xf5, 0xf7, 0xee, 0x2a, 0x39, 0x24, 0x8,
+ 0x3d, 0x68, 0x3, 0xf3, 0x1f, 0x5a, 0xfd, 0x8c, 0x2e, 0x60,
+ 0x66, 0xc5, 0xb3, 0x8c, 0x67, 0xfe, 0x59, 0x7f, 0xf6, 0x55,
+ 0xd9, 0x7e, 0xcf, 0x7f, 0xb3, 0x87, 0xfc, 0x22, 0x3e, 0x2a,
+ 0x17, 0x93, 0x5b, 0xe1, 0x94, 0x9c, 0x12, 0x98, 0xc7, 0xfe,
+ 0x3c, 0x6b, 0xef, 0x5b, 0xb9, 0x51, 0x94, 0x83, 0x83, 0x5c,
+ 0xfd, 0xda, 0x44, 0x8e, 0x59, 0x54, 0x6, 0xf5, 0xcd, 00,
+ 0x66, 0x8, 0x44, 0x11, 0x6d, 0x1c, 0x60, 0x57, 0x3f, 0xab,
+ 0xc9, 0x5b, 0x77, 0x97, 0x38, 0xcd, 0x73, 0x3a, 0xad, 0xc0,
+ 0x39, 0xa0, 0xe, 0x73, 0x52, 0x93, 0x93, 0x5c, 0x6e, 0xb1,
+ 0x27, 0xde, 0xae, 0xa7, 0x52, 0x90, 0x73, 0xcd, 0x71, 0x5a,
+ 0xcc, 0xb8, 0xdd, 0x40, 0x1c, 0x1f, 0x8c, 0xae, 0xbc, 0xab,
+ 0x39, 0x7d, 0xeb, 0xe5, 0xef, 0x88, 0x97, 0xd9, 0x32, 0x57,
+ 0xd0, 0xbf, 0x10, 0xaf, 0x76, 0x5b, 0x30, 0x4, 0x67, 0x15,
+ 0xf2, 0xdf, 0x8f, 0xaf, 0xb, 0x3b, 0x8e, 0x39, 0x3d, 0xab,
+ 0xe6, 0x73, 0x5a, 0x9d, 0xf, 0x8f, 0xce, 0xea, 0x7d, 0x93,
+ 0xcd, 0x75, 0x39, 0x32, 0x58, 0xe6, 0xb8, 0xed, 0x49, 0xf2,
+ 0xed, 0x5d, 0x46, 0xa7, 0x27, 0x6, 0xb8, 0xfb, 0xf7, 0xcb,
+ 0x9a, 0xf1, 0xf0, 0xb1, 0x3c, 0xc, 0xc, 0x7a, 0x99, 0x93,
+ 0xb5, 0x7a, 0xbf, 0xec, 0x9b, 0xa3, 0x36, 0xaf, 0xf1, 0x96,
+ 0xc9, 0xf6, 0x16, 0x4b, 0x48, 0x64, 0x9f, 0x76, 0xde, 0x1,
+ 0x18, 0x3, 0x9e, 0xdd, 0x4d, 0x79, 0x25, 0xc3, 0x72, 0x6b,
+ 0xea, 0xcf, 0xd8, 0x33, 0xc3, 0xd, 0x7b, 0xa9, 0x6b, 0x7a,
+ 0x83, 0xc, 0x16, 0x92, 0x18, 0x22, 0x60, 0x33, 0x9f, 0xbd,
+ 0xbb, 0xfa, 0x57, 0xd2, 0xe1, 0xa3, 0x79, 0x23, 0xeb, 0xf0,
+ 0xb1, 0xbc, 0xd1, 0xfa, 0x49, 0xe0, 0xfb, 0x53, 0x69, 0xe1,
+ 0xeb, 0x8, 0xca, 0xed, 0x6f, 0x28, 0x12, 0x3d, 0xcf, 0x26,
+ 0xba, 0x58, 0x6b, 0x3e, 0xda, 0x31, 0x1a, 0xaa, 0x8e, 0x2,
+ 0x8c, 0xa, 0xd1, 0x80, 0x66, 0xbd, 0x93, 0xe8, 0xb, 0xf6,
+ 0xfd, 0x45, 0x69, 0x42, 0x2b, 0x3e, 0x1, 0xd2, 0xb4, 0x21,
+ 0x1c, 0xd0, 0x5, 0xf8, 0x32, 0x2a, 0xec, 0x43, 0xa5, 0x54,
+ 0x84, 0x55, 0xd8, 0x86, 00, 0xa0, 0xb, 0x91, 0xc, 0x62,
+ 0xad, 0x47, 0x55, 0xa2, 0x19, 0xab, 0x51, 0x8e, 0x5, 00,
+ 0x59, 0x88, 0xd4, 0xeb, 0x50, 0xc5, 0x53, 0xaf, 0x6a, 00,
+ 0x90, 0x75, 0xa7, 0xad, 0x30, 0x75, 0xa9, 0x7, 0x4a, 00,
+ 0x70, 0xe9, 0x4b, 0x45, 0x14, 00, 0xab, 0x4e, 0xa4, 0x1d,
+ 0x29, 0x68, 00, 0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a, 0x28,
+ 0x3, 0x9e, 0x92, 0xbf, 0x33, 0x3f, 0x6e, 0x2b, 0x17, 0xb0,
+ 0xfd, 0xa1, 0x26, 0x76, 0xce, 0xc9, 0xec, 0xe1, 0x90, 0x12,
+ 0x38, 0xe7, 0x76, 0x47, 0xe1, 0x5f, 0xa6, 0xb2, 0x62, 0xbf,
+ 0x3e, 0x7f, 0xe0, 0xa1, 0x1a, 0xb, 0x43, 0xe3, 0xed, 0x27,
+ 0x59, 0x4, 0x5, 0x68, 0x4, 0xd, 0x8e, 0xa4, 0x80, 0x2b,
+ 0xc1, 0xce, 0xe9, 0xb9, 0xe1, 0x1b, 0x5d, 0x1a, 0x67, 0xcc,
+ 0xf1, 0x15, 0x27, 0x53, 0x2, 0xe4, 0xbe, 0xcb, 0x4c, 0xab,
+ 0xe0, 0x8d, 0x41, 0x61, 0xd1, 0x6d, 0xe, 0xe0, 0x6, 0xce,
+ 0xb9, 0xae, 0xc3, 0xfe, 0x12, 0x48, 0x20, 0x4f, 0xf5, 0xc9,
+ 0x9f, 0xf7, 0xab, 0xc6, 0xbc, 0x37, 0xad, 0x81, 0xa0, 0x5b,
+ 0xa0, 0x27, 0x85, 0xeb, 0x9f, 0x7a, 0xa5, 0xa9, 0x78, 0xbc,
+ 0xdb, 0xe5, 0x72, 0x49, 0x1d, 0xf3, 0xff, 00, 0xd7, 0xad,
+ 0x16, 0x36, 0x34, 0xe8, 0xc5, 0xf9, 0x1a, 0xc7, 0x31, 0x85,
+ 0x3c, 0x34, 0x1a, 0xec, 0x8f, 0x6b, 0x6f, 0x1d, 0xc7, 0x1f,
+ 0x1e, 0x7c, 0x60, 0x7f, 0xbd, 0xff, 00, 0xd7, 0xaa, 0xf2,
+ 0xfc, 0x43, 0x84, 0x7f, 0xcb, 0xd4, 0x7f, 0xf7, 0xdf, 0xff,
+ 00, 0x5e, 0xbe, 0x73, 0xd4, 0x7c, 0x70, 0x70, 0x70, 0xcd,
+ 0xff, 00, 0x7d, 0x7f, 0xf5, 0xeb, 0x9f, 0xba, 0xf1, 0xbc,
+ 0xc4, 0x9d, 0xac, 0xe7, 0xfe, 0x4, 0x7f, 0xc6, 0xbc, 0x3a,
+ 0xf9, 0xbd, 0xb6, 0x3e, 0x73, 0x13, 0x9f, 0x59, 0xd9, 0x1f,
+ 0x52, 0x37, 0xc4, 0x6b, 0x71, 0xff, 00, 0x2f, 0x71, 0x7f,
+ 0xdf, 0x7f, 0xfd, 0x7a, 0x89, 0xbe, 0x24, 0xdb, 0xff, 00,
+ 0xcf, 0xdc, 0x7f, 0xf7, 0xdf, 0xff, 00, 0x5e, 0xbe, 0x54,
+ 0x6f, 0x18, 0xdc, 0x1f, 0xe2, 0x71, 0xf5, 0x63, 0xfe, 0x34,
+ 0xd3, 0xe2, 0xbb, 0x82, 0x7e, 0xfb, 0xf, 0xf8, 0x11, 0xff,
+ 00, 0x1a, 0xf2, 0xe5, 0x9b, 0xce, 0xe7, 0x8d, 0x2c, 0xfa,
+ 0xa7, 0x43, 0xea, 0xb3, 0xf1, 0x2a, 0xdf, 0x1f, 0xf1, 0xf7,
+ 0x1f, 0xfd, 0xf7, 0xff, 00, 0xd7, 0xa7, 0xc7, 0xf1, 0x22,
+ 0xdc, 0xe3, 0xfd, 0x2e, 0x3f, 0xfb, 0xe8, 0x7f, 0x8d, 0x7c,
+ 0x9e, 0x7c, 0x55, 0x71, 0x9f, 0xbe, 0xdf, 0xf7, 0xd1, 0xff,
+ 00, 0x1a, 0x72, 0xf8, 0xbe, 0xe0, 0x7f, 0x13, 0x7f, 0xdf,
+ 0x47, 0xfc, 0x68, 0x59, 0xbc, 0xc1, 0x67, 0xd5, 0x3b, 0x1f,
+ 0x5b, 0x2f, 0xc4, 0x7b, 0x73, 0xff, 00, 0x2f, 0x71, 0xff,
+ 00, 0xdf, 0x7f, 0xfd, 0x7a, 0xb1, 0x1f, 0xc4, 0x78, 0x30,
+ 0x3f, 0xd2, 0xe2, 0xff, 00, 0xbf, 0x9f, 0xfd, 0x7a, 0xf9,
+ 0x19, 0x7c, 0x65, 0x70, 0x3f, 0x89, 0xbf, 0x33, 0xfe, 0x35,
+ 0x61, 0x7c, 0x6f, 0x32, 0xf7, 0x7f, 0xfb, 0xe8, 0xff, 00,
+ 0x8d, 0x68, 0xb3, 0x99, 0x1a, 0xac, 0xfe, 0x7d, 0x4f, 0xae,
+ 0x63, 0xf8, 0x8d, 0xf, 0xfc, 0xfd, 0xc5, 0xff, 00, 0x7f,
+ 0x3f, 0xfa, 0xf5, 0x61, 0x3e, 0x23, 0x43, 0xc7, 0xfa, 0x5c,
+ 0x5f, 0xf7, 0xdf, 0xff, 00, 0x5e, 0xbe, 0x44, 0x4f, 0x1e,
+ 0x4c, 0x3b, 0xbf, 0xfd, 0xf5, 0xff, 00, 0xd7, 0xa9, 0x93,
+ 0xc7, 0xf2, 0xff, 00, 0x79, 0xff, 00, 0xef, 0xa3, 0xfe,
+ 0x35, 0xb2, 0xce, 0xa4, 0x6c, 0xb8, 0x86, 0x48, 0xfa, 0xf1,
+ 0x7e, 0x23, 0x43, 0x9f, 0xf8, 0xfb, 0x8b, 0xfe, 0xfb, 0xff,
+ 00, 0xeb, 0xd5, 0x84, 0xf8, 0x8b, 0x17, 0xfc, 0xfd, 0x45,
+ 0xff, 00, 0x7d, 0xff, 00, 0xf5, 0xeb, 0xe4, 0x34, 0xf8,
+ 0x81, 0x20, 0x3f, 0x79, 0xff, 00, 0xef, 0xa3, 0xfe, 0x35,
+ 0x62, 0x3f, 0x88, 0x8f, 0xfd, 0xf6, 0xff, 00, 0xbe, 0xbf,
+ 0xfa, 0xf5, 0xa2, 0xce, 0x9f, 0x73, 0x65, 0xc4, 0x4c, 0xfa,
+ 0xf1, 0x3e, 0x22, 0x42, 0x7f, 0xe5, 0xe6, 0x33, 0xff, 00,
+ 0x2, 0xff, 00, 0xeb, 0xd5, 0x84, 0xf8, 0x85, 0xf, 0xfc,
+ 0xfc, 0x27, 0xfd, 0xf5, 0xff, 00, 0xd7, 0xaf, 0x90, 0xd3,
+ 0xe2, 0x33, 0x9f, 0xe3, 0x71, 0xff, 00, 0x2, 0xff, 00,
+ 0xeb, 0xd5, 0x98, 0xfe, 0x23, 0x38, 0xff, 00, 0x96, 0x8f,
+ 0xff, 00, 0x7d, 0x7f, 0xf5, 0xeb, 0x58, 0xe7, 0x7e, 0x66,
+ 0xf1, 0xe2, 0x23, 0xeb, 0xa4, 0xf1, 0xfc, 0x1f, 0xf3, 0xf1,
+ 0x1f, 0xfd, 0xf5, 0xff, 00, 0xd7, 0xa9, 0xe3, 0xf1, 0xfd,
+ 0xbf, 0xfc, 0xf7, 0x8f, 0xfe, 0xfa, 0xff, 00, 0xeb, 0xd7,
+ 0xc8, 0xc9, 0xf1, 0x21, 0x87, 0xfc, 0xb4, 0x6f, 0xfb, 0xeb,
+ 0xff, 00, 0xaf, 0x56, 0x63, 0xf8, 0x92, 0xc7, 0xf8, 0xdb,
+ 0xfe, 0xfa, 0xff, 00, 0xeb, 0xd6, 0xeb, 0x3b, 0x46, 0xf1,
+ 0xe2, 0x24, 0x7d, 0x6c, 0xbe, 0x3b, 0xb5, 0x3f, 0xf2, 0xde,
+ 0x3f, 0xfb, 0xe8, 0x7f, 0x8d, 0x4a, 0x9e, 0x39, 0xb5, 0x3f,
+ 0xf2, 0xde, 0x3f, 0xfb, 0xe8, 0x7f, 0x8d, 0x7c, 0x9a, 0x9f,
+ 0x12, 0x1b, 0xfb, 0xed, 0xff, 00, 0x7d, 0x7f, 0xf5, 0xea,
+ 0xca, 0x7c, 0x49, 0x3c, 0x65, 0xd8, 0x7f, 0xc0, 0xbf, 0xfa,
+ 0xf5, 0xa2, 0xce, 0x93, 0x36, 0x5c, 0x40, 0x99, 0xf5, 0x7a,
+ 0x78, 0xd6, 0xd0, 0x8f, 0xf5, 0xe9, 0xf8, 0x11, 0xfe, 0x35,
+ 0x30, 0xf1, 0x8d, 0xa1, 0xff, 00, 0x97, 0x84, 0xfc, 0xc7,
+ 0xf8, 0xd7, 0xca, 0x71, 0xfc, 0x4a, 0x27, 0xa3, 0x37, 0xfd,
+ 0xf5, 0xff, 00, 0xd7, 0xab, 0x31, 0xfc, 0x48, 0x3d, 0xd9,
+ 0xbf, 0xef, 0xaf, 0xfe, 0xbd, 0x6a, 0xb3, 0x88, 0xb3, 0x75,
+ 0x9f, 0xc0, 0xfa, 0xa5, 0x3c, 0x61, 0x66, 0xc3, 0xfe, 0x3e,
+ 0x13, 0xfe, 0xfa, 0x1f, 0xe3, 0x52, 0xaf, 0x8b, 0x2d, 0x1b,
+ 0xfe, 0x5e, 0x63, 0xff, 00, 0xbe, 0x87, 0xf8, 0xd7, 0xcb,
+ 0x51, 0xfc, 0x46, 0xc8, 0xfb, 0xcf, 0xff, 00, 0x7d, 0x7f,
+ 0xf5, 0xea, 0xcc, 0x7f, 0x11, 0xf1, 0x8e, 0x58, 0xff, 00,
+ 0xc0, 0xbf, 0xfa, 0xf5, 0xaa, 0xcd, 0xe0, 0xcd, 0x96, 0x7b,
+ 0x4c, 0xfa, 0x80, 0x78, 0xa6, 0xd4, 0xff, 00, 0xcb, 0xcc,
+ 0x7f, 0xf7, 0xd0, 0xa9, 0x57, 0xc4, 0xf6, 0xa4, 0xf, 0xf4,
+ 0x98, 0xff, 00, 0xef, 0xb1, 0x5f, 0x31, 0x47, 0xf1, 0x14,
+ 0x67, 0xef, 0x37, 0xe7, 0xff, 00, 0xd7, 0xab, 0x9, 0xf1,
+ 0x10, 0x1f, 0xe2, 0x6f, 0xfb, 0xeb, 0xff, 00, 0xaf, 0x5a,
+ 0x2c, 0xd6, 0xc, 0xd5, 0x67, 0x74, 0xd9, 0xf4, 0xc8, 0xf1,
+ 0x25, 0xb7, 0xfc, 0xfd, 0x47, 0xff, 00, 0x7d, 0x8f, 0xf1,
+ 0xa9, 0x7, 0x88, 0xed, 0xcf, 0xfc, 0xbc, 0x45, 0xff, 00,
+ 0x7d, 0xf, 0xf1, 0xaf, 0x9b, 0x23, 0xf8, 0x86, 0x8, 0xfb,
+ 0xcd, 0xff, 00, 0x7d, 0x7f, 0xf5, 0xea, 0xc4, 0x7f, 0x10,
+ 0x47, 0xf7, 0x9b, 0xfe, 0xfa, 0xff, 00, 0xeb, 0xd6, 0x8b,
+ 0x33, 0x81, 0xaa, 0xce, 0x29, 0xb3, 0xe8, 0xf1, 0xe2, 0x18,
+ 0x3b, 0x5c, 0x47, 0xff, 00, 0x7d, 0xf, 0xf1, 0xa7, 0x8d,
+ 0x7e, 0x1f, 0xf9, 0xef, 0x1f, 0xfd, 0xf4, 0x3f, 0xc6, 0xbe,
+ 0x75, 0x8f, 0xe2, 0x6, 0x7f, 0x89, 0xbf, 0xef, 0xaf, 0xfe,
+ 0xbd, 0x58, 0x4f, 0x88, 0x1f, 0xed, 0xb7, 0xfd, 0xf5, 0xff,
+ 00, 0xd7, 0xab, 0x59, 0x95, 0x36, 0x6a, 0xb3, 0x6a, 0x4c,
+ 0xfa, 0x17, 0xfb, 0x76, 0x23, 0xff, 00, 0x2d, 0x93, 0xfe,
+ 0xfa, 0xa9, 0x6, 0xb9, 0x19, 0xe9, 0x22, 0xff, 00, 0xdf,
+ 0x55, 0xf3, 0xf2, 0x78, 0xf8, 0x90, 0x3e, 0x76, 0xff, 00,
+ 0xbe, 0xbf, 0xfa, 0xf5, 0x61, 0x3c, 0x7c, 0x7f, 0xbe, 0xdf,
+ 0xf7, 0xd7, 0xff, 00, 0x5e, 0xad, 0x66, 0x14, 0xd9, 0x6b,
+ 0x33, 0xa4, 0xcf, 0x7d, 0x1a, 0xd4, 0x64, 0xff, 00, 0xac,
+ 0x5f, 0xfb, 0xea, 0x9e, 0x35, 0x94, 0x3f, 0xf2, 0xd1, 0x4f,
+ 0xe3, 0x5e, 0x10, 0x9e, 0x3d, 0x38, 0xfb, 0xed, 0xff, 00,
+ 0x7d, 0x7f, 0xf5, 0xea, 0xc2, 0x78, 0xf4, 0x9f, 0xe2, 0x6f,
+ 0xfb, 0xeb, 0xff, 00, 0xaf, 0x5a, 0x2c, 0x6d, 0x36, 0x6a,
+ 0xb3, 0xa, 0x4c, 0xf7, 0x21, 0xac, 0x27, 0xf7, 0xd7, 0xf3,
+ 0xa7, 0xd, 0x5d, 0x73, 0xf7, 0xd7, 0xf3, 0xaf, 0x13, 0x4f,
+ 0x1e, 0xb6, 0x7e, 0xf1, 0xfc, 0xff, 00, 0xfa, 0xf5, 0x3a,
+ 0xf8, 0xf1, 0x8f, 0xf1, 0x37, 0xe7, 0xff, 00, 0xd7, 0xab,
+ 0x58, 0xba, 0x6f, 0xa9, 0xa2, 0xc7, 0x52, 0x7d, 0x4f, 0x68,
+ 0x1a, 0xc2, 0xff, 00, 0x79, 0x7f, 0x3a, 0x72, 0xea, 0xc9,
+ 0xfd, 0xf5, 0xfc, 0xeb, 0xc7, 0x13, 0xc7, 0x7c, 0x8e, 0x5b,
+ 0xf3, 0xff, 00, 0xeb, 0xd5, 0x88, 0xfc, 0x75, 0x8f, 0x5f,
+ 0xcf, 0xff, 00, 0xaf, 0x56, 0xb1, 0x34, 0xdf, 0x52, 0xfe,
+ 0xb9, 0x49, 0xf5, 0x3d, 0x79, 0x75, 0x65, 0xfe, 0xfa, 0xfe,
+ 0x74, 0xe1, 0xab, 0x2e, 0x7e, 0xfa, 0xfe, 0x75, 0xe4, 0xcb,
+ 0xe3, 0x91, 0xef, 0xf9, 0xff, 00, 0xf5, 0xea, 0x65, 0xf1,
+ 0xba, 0xf7, 0xce, 0x3e, 0xbf, 0xfd, 0x7a, 0xaf, 0x6f, 0x4f,
+ 0xb9, 0x6b, 0x13, 0x49, 0xf5, 0x3d, 0x58, 0x6a, 0xa9, 0xfd,
+ 0xf5, 0xfc, 0xe9, 0xc3, 0x56, 0x4f, 0xef, 0xaf, 0xe7, 0x5e,
+ 0x5a, 0x9e, 0x36, 0x8c, 0xf6, 0x3f, 0x9f, 0xff, 00, 0x5e,
+ 0xa6, 0x4f, 0x19, 0x46, 0x7b, 0x1f, 0xce, 0xab, 0xdb, 0x41,
+ 0xf5, 0x2f, 0xdb, 0xd3, 0xee, 0x7a, 0x78, 0xd5, 0x53, 0xfb,
+ 0xeb, 0xf9, 0xd3, 0x86, 0xa8, 0xb8, 0xfb, 0xeb, 0xf9, 0xd7,
+ 0x99, 0xaf, 0x8b, 0xe2, 0x27, 0xf8, 0xbf, 0x3a, 0x99, 0x7c,
+ 0x59, 0x17, 0xab, 0x7e, 0x62, 0xab, 0xda, 0x43, 0xb8, 0xd5,
+ 0x58, 0x3e, 0xa7, 0xa4, 0xd, 0x55, 0x7f, 0xbe, 0xbf, 0x9d,
+ 0x3c, 0x6a, 0xab, 0xfd, 0xf5, 0xfc, 0xeb, 0xce, 0x57, 0xc5,
+ 0x31, 0x1e, 0x85, 0xbf, 0x31, 0x53, 0x27, 0x89, 0xa3, 0x3c,
+ 0x64, 0x8f, 0xc6, 0x9f, 0x3c, 0x7b, 0x95, 0xed, 0x23, 0xdc,
+ 0xf4, 0x21, 0xaa, 0xa0, 0xfe, 0x35, 0xfc, 0xe9, 0xc3, 0x55,
+ 0x5f, 0xef, 0xaf, 0xe7, 0x5e, 0x7e, 0x9e, 0x21, 0x8d, 0xba,
+ 0x31, 0xfc, 0xea, 0x45, 0xd7, 0x93, 0xfb, 0xe7, 0xf3, 0xa7,
+ 0xcc, 0xbb, 0x95, 0xcd, 0x1e, 0xe7, 0x7e, 0x35, 0x55, 0xfe,
+ 0xf2, 0xfe, 0x74, 0xf1, 0xaa, 0x2f, 0xf7, 0x87, 0xe7, 0x5c,
+ 0x12, 0x6b, 0x88, 0x7a, 0x37, 0xeb, 0x52, 0xae, 0xb2, 0xb8,
+ 0xfb, 0xc7, 0xf3, 0xaa, 0xba, 0x1d, 0xd1, 0xdd, 0x7f, 0x6a,
+ 0xf, 0xef, 0xf, 0xce, 0x9c, 0x35, 0x45, 0xfe, 0xf0, 0xfc,
+ 0xeb, 0x86, 0x1a, 0xc0, 0x3f, 0xc4, 0x7f, 0x3a, 0x7a, 0xea,
+ 0xf9, 0x1d, 0x4f, 0xe7, 0x40, 0xce, 0xe0, 0x6a, 0x8b, 0x8f,
+ 0xbc, 0x3f, 0x3a, 0x70, 0xd5, 0x17, 0xfb, 0xc3, 0xf3, 0xae,
+ 0x24, 0x6a, 0xbc, 0x75, 0x3f, 0x9d, 0x38, 0x6a, 0xa4, 0xe,
+ 0xa7, 0xf3, 0xa0, 0xe, 0xdd, 0x75, 0x41, 0xfd, 0xe1, 0xf9,
+ 0xd3, 0x86, 0xa8, 0x3f, 0xbc, 0x3f, 0x3a, 0xe2, 0x6, 0xac,
+ 0x71, 0xd4, 0xd4, 0x83, 0x55, 0xc7, 0x52, 0x7f, 0x3a, 00,
+ 0xed, 0x46, 0xa8, 0xbf, 0xde, 0x1f, 0x9d, 0x3f, 0xfb, 0x50,
+ 0x7f, 0x78, 0x7e, 0x75, 0xc4, 0x8d, 0x54, 0x9e, 0xe7, 0xf3,
+ 0xa7, 0x8d, 0x57, 0x8e, 0xf4, 0x1, 0xda, 0x8d, 0x50, 0x63,
+ 0xef, 0xf, 0xce, 0x9c, 0x35, 0x41, 0xfd, 0xe1, 0xf9, 0xd7,
+ 0x14, 0x35, 0x43, 0x8e, 0xf4, 0xe5, 0xd5, 0x7e, 0xbf, 0x9d,
+ 00, 0x76, 0xa3, 0x54, 0x5f, 0xef, 0xf, 0xce, 0x9e, 0x35,
+ 0x41, 0xfd, 0xe5, 0xfc, 0xeb, 0x8a, 0x1a, 0xaf, 0xd7, 0xf3,
+ 0xa7, 0x8d, 0x4f, 0x9e, 0xa6, 0x80, 0x3b, 0x41, 0xaa, 0x2f,
+ 0xf7, 0x87, 0xe7, 0x4e, 0x1a, 0xa0, 0xfe, 0xf0, 0xfc, 0xeb,
+ 0x8c, 0x1a, 0xa7, 0xb9, 0xa7, 0xd, 0x53, 0x9e, 0xa7, 0xf3,
+ 0xa0, 0xe, 0xcc, 0x6a, 0x83, 0xfb, 0xc3, 0xf3, 0xa7, 0x8d,
+ 0x50, 0x7f, 0x78, 0x7e, 0x75, 0xc5, 0x8d, 0x4b, 0xdc, 0xd3,
+ 0x86, 0xa5, 0xd3, 0x93, 0x40, 0x1d, 0xa0, 0xd5, 0x7, 0xf7,
+ 0x87, 0xe7, 0x4f, 0x1a, 0xa2, 0xff, 00, 0x79, 0x7f, 0x3a,
+ 0xe2, 0xc6, 0xa5, 0xcf, 0x53, 0x4f, 0x1a, 0x97, 0xb9, 0xa0,
+ 0xe, 0xc8, 0x6a, 0x8a, 0x3f, 0x8c, 0x7e, 0x74, 0xf1, 0xaa,
+ 0x2f, 0xf7, 0x87, 0xe7, 0x5c, 0x5f, 0xf6, 0x97, 0xb9, 0xa7,
+ 0x8d, 0x48, 0x9e, 0xe6, 0x80, 0x3b, 0x31, 0xaa, 0x3, 0xfc,
+ 0x43, 0xf3, 0xa7, 0xd, 0x51, 0x7f, 0xbc, 0xbf, 0x9d, 0x71,
+ 0x83, 0x52, 0xe3, 0xa9, 0xa7, 0xd, 0x47, 0xdc, 0xd0, 0x7,
+ 0x66, 0x35, 0x35, 0xcf, 0xde, 0x5f, 0xce, 0x9c, 0x35, 0x35,
+ 0xcf, 0xde, 0x5f, 0xce, 0xb8, 0xd1, 0xa9, 0x7b, 0x9f, 0xce,
+ 0x9c, 0x35, 0x2f, 0x73, 0x40, 0x1d, 0x97, 0xf6, 0x92, 0xff,
+ 00, 0x7c, 0x7e, 0x74, 0xe1, 0xa9, 0x2f, 0xf7, 0x97, 0xf3,
+ 0xae, 0x34, 0x6a, 0x5e, 0xe7, 0xf3, 0xa7, 0x8d, 0x4b, 0xde,
+ 0x80, 0x3b, 0x11, 0xa9, 0x2f, 0xf7, 0x97, 0xf3, 0xa7, 0xd,
+ 0x41, 0x3f, 0xbc, 0x3f, 0x3a, 0xe3, 0x46, 0xa5, 0xc7, 0x53,
+ 0xf9, 0xd3, 0xd7, 0x53, 0xf7, 0xa0, 0xe, 0xc7, 0xfb, 0x45,
+ 0x7f, 0xbe, 0xbf, 0x9d, 0x2a, 0xea, 0x9, 0xfd, 0xe1, 0xf9,
+ 0xd7, 0x1e, 0x35, 0x2f, 0x7f, 0xd6, 0x9c, 0x35, 0x2f, 0x73,
+ 0xf9, 0xd0, 0x7, 0x60, 0x35, 0x5, 0xfe, 0xf0, 0x1f, 0x8d,
+ 0x38, 0x6a, 0xa, 0x3f, 0x88, 0x7e, 0x75, 0xc7, 0x8d, 0x4b,
+ 0x3d, 0xcd, 0x3c, 0x6a, 0x5e, 0xe7, 0xf3, 0xa0, 0xe, 0xbf,
+ 0xed, 0xeb, 0xfd, 0xf1, 0xf9, 0xd3, 0xbe, 0xde, 0xf, 0xf1,
+ 0xf, 0xce, 0xb9, 0xf, 0xed, 0x2f, 0x73, 0xf9, 0xd3, 0x86,
+ 0xa5, 0xee, 0x7f, 0x3a, 00, 0xeb, 0x85, 0xfa, 0xff, 00,
+ 0x78, 0x7e, 0x74, 0xe1, 0x7e, 0x3f, 0xbc, 0x3f, 0x3a, 0xe4,
+ 0x86, 0xa5, 0xee, 0x7f, 0x3a, 0x70, 0xd4, 0x7d, 0xce, 0x3e,
+ 0xb4, 0x1, 0xd6, 0x7d, 0xbc, 0x7f, 0x78, 0x7e, 0x74, 0xe1,
+ 0x7c, 0xbf, 0xde, 0x1f, 0x9d, 0x72, 0x5f, 0xda, 0x5e, 0xe6,
+ 0x9e, 0x35, 0x1c, 0xf7, 0x3f, 0x9d, 00, 0x75, 0x82, 0xf5,
+ 0x7f, 0xbc, 0x29, 0x45, 0xea, 0x8e, 0xe2, 0xb9, 0x41, 0xa9,
+ 0x7b, 0x9f, 0xce, 0x9e, 0x35, 0x2f, 0x7a, 00, 0xea, 0x85,
+ 0xea, 0x9e, 0xe2, 0x97, 0xed, 0x8b, 0xea, 0x2b, 0x96, 0x1a,
+ 0x8f, 0x3d, 0x4f, 0xe7, 0x4e, 0x1a, 0x91, 0xf5, 0x3f, 0x9d,
+ 00, 0x75, 0x2, 0xed, 0x7d, 0x47, 0xe7, 0x4a, 0x2e, 0x90,
+ 0xf7, 0x1f, 0x9d, 0x73, 0x3, 0x52, 0xf7, 0x34, 0xf1, 0xa8,
+ 0xfb, 0x9a, 00, 0xe9, 0x7e, 0xd2, 0x9e, 0xa3, 0xf3, 0xa5,
+ 0x17, 0x9, 0xfd, 0xe1, 0xf9, 0xd7, 0x36, 0x35, 0x1f, 0xad,
+ 0x3b, 0xfb, 0x47, 0xeb, 0xf9, 0xd0, 0x7, 0x47, 0xe7, 0xa7,
+ 0xf7, 0xa8, 0xf3, 0x93, 0xfb, 0xc2, 0xb9, 0xe1, 0xa8, 0x7d,
+ 0x7f, 0x3a, 0x51, 0xa8, 0x7d, 0x7f, 0x3a, 00, 0xe8, 0x44,
+ 0xc8, 0x7f, 0x88, 0x7e, 0x74, 0x86, 0x74, 0x1f, 0xc4, 0x3f,
+ 0x3a, 0xc2, 0xfe, 0xd0, 0xe3, 0xa9, 0xa8, 0x5f, 0x50, 0xeb,
+ 0xc9, 0xfc, 0xe8, 0x3, 0x72, 0x5b, 0xd5, 0x3, 0xa8, 0xac,
+ 0xeb, 0x8b, 0xe5, 0x19, 0xcb, 0xa, 0xc9, 0x9b, 0x51, 0xe3,
+ 0x82, 0x6b, 0x32, 0xeb, 0x51, 0x3c, 0xf2, 0x68, 0x3, 0x4e,
+ 0xeb, 0x50, 0x1c, 0xfc, 0xc2, 0xb1, 0x6e, 0xf5, 0x1, 0xcf,
+ 0xcc, 0x2a, 0x85, 0xd6, 0xa1, 0xd7, 0x9a, 0xc7, 0xbb, 0xd4,
+ 0x31, 0x9e, 0x4d, 00, 0x5a, 0xbe, 0xbf, 0x5c, 0x1f, 0x98,
+ 0x7e, 0x75, 0xcd, 0x6a, 0x97, 0xcb, 0xfd, 0xe1, 0x51, 0x5f,
+ 0x6a, 0x39, 0xee, 0x6b, 0x9c, 0xd4, 0x75, 0xc, 0x77, 0x34,
+ 00, 0xdd, 0x46, 0xfc, 0x60, 0xfc, 0xc2, 0xb9, 0xd, 0x52,
+ 0xf5, 0x4e, 0xec, 0xb0, 0xfc, 0xea, 0xc6, 0xa7, 0xa8, 0xf5,
+ 0xe4, 0xd7, 0x23, 0xaa, 0xea, 0x4, 0x2b, 0x73, 0x40, 0x1e,
+ 0x7d, 0xf1, 0x2f, 0x50, 0x4f, 0xde, 00, 0xe3, 0xa7, 0xad,
+ 0x7c, 0xc5, 0xe3, 0x2b, 0xa1, 0x2d, 0xc3, 0x61, 0xb3, 0x5e,
+ 0xd5, 0xf1, 0x1b, 0x54, 0x2c, 0xf2, 0xf2, 0x7b, 0xd7, 0xcf,
+ 0x5e, 0x21, 0xbb, 0xf3, 0x2e, 0x5f, 0xae, 0x2b, 0xe2, 0x73,
+ 0x29, 0x39, 0x54, 0xb1, 0xf9, 0xd6, 0x6f, 0x37, 0x3a, 0x96,
+ 0x39, 0x8d, 0x4a, 0x4c, 0x67, 0xa5, 0x72, 0x57, 0x8d, 0x97,
+ 0x6f, 0xad, 0x74, 0x5a, 0x9c, 0x83, 0xd, 0x5c, 0xbd, 0xcb,
+ 0x64, 0xb7, 0xd6, 0x8c, 0x2c, 0x74, 0x1e, 0xe, 0x36, 0x45,
+ 0x9, 0xdb, 0x93, 0x5f, 0xa2, 0x3f, 0xb0, 0x37, 0x84, 0x65,
+ 0xb0, 0xf0, 0x6e, 0x9f, 0x71, 0x2c, 0x2e, 0xbf, 0x68, 0x99,
+ 0xee, 0xc3, 0x38, 0xfe, 0x1c, 00, 0x3b, 0x74, 0xeb, 0x5f,
+ 0x9e, 0x11, 0xc0, 0xf7, 0xb7, 0x90, 0x5b, 0xc7, 0xcc, 0x92,
+ 0xc8, 0xb1, 0xaf, 0xd4, 0x9c, 0xa, 0xfd, 0x82, 0xfd, 0x9b,
+ 0x7c, 0x31, 0x1e, 0x81, 0xe1, 0x2b, 0x68, 0x13, 0x5, 0x6d,
+ 0xe0, 0x8e, 0x24, 0xe3, 0x18, 0xe3, 0x27, 0xf9, 0xd7, 0xd2,
+ 0xe1, 0x57, 0x53, 0xeb, 0xb0, 0x51, 0xdd, 0x9e, 0xd5, 0xa,
+ 0xfb, 0x55, 0xf8, 0x6, 0x2a, 0x9c, 0x23, 0x8a, 0xbf, 0xa,
+ 0xe0, 0xd7, 0xa2, 0x7a, 0xc5, 0xeb, 0x7e, 0xd5, 0xa3, 00,
+ 0xe9, 0x54, 0x6d, 0xd7, 0xa5, 0x68, 0x42, 0xbd, 0x28, 0x2,
+ 0xf4, 0x42, 0xae, 0xc5, 0xda, 0xa9, 0xc2, 0x39, 0xab, 0xd0,
+ 0x8e, 0x28, 0x2, 0xd4, 0x42, 0xac, 0xc7, 0xd0, 0x54, 0x11,
+ 0x8e, 0x95, 0x66, 0x31, 0x40, 0x16, 0x23, 0xe2, 0xa7, 0x5e,
+ 0xd5, 0x4, 0x62, 0xa5, 0x5a, 00, 0x99, 0x69, 0xe3, 0xb5,
+ 0x44, 0x5, 0x48, 0xbd, 0x68, 0x2, 0x4a, 0x29, 0x7, 0x4a,
+ 0x5a, 00, 0x70, 0xe9, 0x4b, 0x4d, 0x5e, 0xf4, 0xea, 00,
+ 0x28, 0xa2, 0x8a, 00, 0x28, 0xa2, 0x8a, 00, 0xc1, 0x7a,
+ 0xf9, 0x4b, 0xf6, 0xe9, 0xf0, 0x7c, 0x9a, 0xdf, 0x84, 0x20,
+ 0xbd, 0x89, 0x3, 0x32, 0x29, 0x51, 0x90, 0x32, 0x1b, 0x72,
+ 0x9e, 0xe7, 0xfb, 0xa1, 0xab, 0xea, 0xf7, 0xe6, 0xbc, 0xfb,
+ 0xe3, 0x4f, 0x85, 0xff, 00, 0xe1, 0x2b, 0xf0, 0xe, 0xa1,
+ 0x6c, 0xab, 0x99, 0x63, 0x2, 0x44, 0xfc, 0x8, 0xcf, 0xfe,
+ 0x3b, 0x9a, 0xc6, 0xb5, 0x35, 0x56, 0x9c, 0xa0, 0xfa, 0xa3,
+ 0x9f, 0x11, 0x49, 0x57, 0xa5, 0x2a, 0x6f, 0xaa, 0x3f, 0x2c,
+ 0xf4, 0x4d, 0x65, 0xa0, 0xd3, 0x17, 0x93, 0x80, 0x8, 0x3c,
+ 0xf4, 0xe6, 0xb9, 0xbd, 0x73, 0x59, 0x6b, 0x99, 0x98, 0x29,
+ 0x20, 0xfa, 0x83, 0x5d, 0x1f, 0x8b, 0xf4, 0x47, 0xf0, 0xce,
+ 0xb1, 0xa8, 0x58, 0xed, 0x6f, 0x2b, 0x7e, 0xf8, 0xd9, 0x86,
+ 0x32, 0x8, 0x7, 0xf4, 0xce, 0x3f, 0xa, 0xe2, 0x5a, 0x2,
+ 0xb2, 0x73, 0xfa, 0xd7, 0xe5, 0x15, 0xeb, 0xce, 0x1f, 0xb9,
+ 0x96, 0xeb, 0x43, 0xf1, 0x2c, 0x4e, 0x2a, 0xa5, 0x3f, 0xf6,
+ 0x69, 0xef, 0x1d, 0xa, 0x12, 0x5c, 0x3e, 0x7e, 0x66, 0x39,
+ 0xfa, 0xd3, 0x7c, 0xdc, 0x9e, 0xb5, 0x62, 0xe6, 0xdb, 0x3d,
+ 0xaa, 0x93, 0x42, 0xd1, 0xf3, 0x5c, 0xc9, 0xa9, 0x6e, 0x71,
+ 0x45, 0xc6, 0x5a, 0x93, 0x96, 0xc8, 0xeb, 0x4d, 0x2c, 0x47,
+ 0x7a, 0x8b, 0x79, 0xe8, 0x69, 0xc0, 0xe4, 0x51, 0x61, 0xd8,
+ 0x46, 0x99, 0x80, 0xa6, 0x89, 0x98, 0x52, 0x3f, 0x7a, 0x65,
+ 0x55, 0x8d, 0x12, 0x56, 0x25, 0xfb, 0x41, 0xa5, 0xfb, 0x53,
+ 0x7f, 0x93, 0x50, 0xd1, 0x45, 0x90, 0x72, 0xa2, 0x7f, 0xb4,
+ 0x9a, 0x70, 0xba, 0x35, 0x5a, 0x8a, 0x39, 0x50, 0x72, 0x22,
+ 0xcf, 0xda, 0x8e, 0x69, 0xc2, 0xee, 0xaa, 0x52, 0xe6, 0x8e,
+ 0x54, 0x27, 0x4e, 0x25, 0xb1, 0x77, 0xf5, 0xfc, 0xe9, 0xdf,
+ 0x6c, 0xf7, 0x3f, 0x9d, 0x51, 0xa2, 0x97, 0x22, 0x17, 0xb3,
+ 0x45, 0xff, 00, 0xb6, 0x1f, 0x53, 0xf9, 0xd3, 0xc5, 0xf3,
+ 0x2f, 0xf1, 0x1f, 0xce, 0xb3, 0x68, 0xcd, 0x2e, 0x44, 0x2f,
+ 0x66, 0x8d, 0x41, 0xa8, 0x3f, 0xf7, 0x9b, 0xf3, 0xa7, 0x8d,
+ 0x45, 0xc7, 0xf1, 0xb7, 0xe7, 0x59, 0x19, 0xa5, 0xc9, 0xa3,
+ 0x95, 0x7, 0xb3, 0xf3, 0x36, 0x57, 0x56, 0x95, 0x7a, 0x3b,
+ 0x7e, 0x75, 0x20, 0xd6, 0x66, 0x3, 0xfd, 0x61, 0xfc, 0xeb,
+ 0xb, 0x71, 0xf5, 0xa5, 0xde, 0xde, 0xb4, 0x72, 0x8b, 0xd9,
+ 0xbe, 0xe6, 0xfa, 0xeb, 0x93, 0xc, 0xf, 0x31, 0xbf, 0x3a,
+ 0x99, 0x7c, 0x41, 0x30, 0xea, 0xc7, 0xfe, 0xfa, 0xae, 0x6b,
+ 0x7b, 0x52, 0xf9, 0x8d, 0x47, 0x2b, 0xee, 0x3e, 0x49, 0x77,
+ 0x3a, 0x81, 0xe2, 0x49, 0xc1, 0xfb, 0xcd, 0xf9, 0xd4, 0x8b,
+ 0xe2, 0xa9, 0xc0, 0xfb, 0xcd, 0xff, 00, 0x7d, 0x57, 0x26,
+ 0x25, 0x61, 0xde, 0x97, 0xce, 0x34, 0xfd, 0xee, 0xe1, 0x69,
+ 0xf7, 0x3b, 0x24, 0xf1, 0x74, 0xaa, 0x3a, 0xbf, 0xfd, 0xf5,
+ 0x53, 0x27, 0x8d, 0x25, 0x5e, 0xed, 0xff, 00, 0x7d, 0x57,
+ 0xf, 0xe7, 0xb5, 0x38, 0x5c, 0x1a, 0x77, 0x9a, 0xea, 0x3b,
+ 0xd4, 0x5d, 0x4e, 0xed, 0x7c, 0x6d, 0x2f, 0xab, 0x8f, 0xf8,
+ 0x15, 0x58, 0x8f, 0xc7, 0x4e, 0xa3, 0xab, 0xfe, 0x75, 0xe7,
+ 0xbf, 0x69, 0x3e, 0xb4, 0xbf, 0x6a, 0x6a, 0x7c, 0xf5, 0x57,
+ 0x52, 0x95, 0x4a, 0xab, 0xa9, 0xe9, 0x11, 0xf8, 0xfd, 0xc7,
+ 0xf1, 0x3f, 0xe7, 0xff, 00, 0xd6, 0xab, 0x9, 0xf1, 0x1,
+ 0xbd, 0x5c, 0xf, 0xa9, 0xff, 00, 0xa, 0xf3, 0x1, 0x74,
+ 0xd9, 0xe6, 0x9c, 0x2e, 0xc8, 0x1c, 0xd5, 0x7b, 0x5a, 0xab,
+ 0xa8, 0xfd, 0xb5, 0x75, 0xd4, 0xf5, 0x54, 0xf8, 0x82, 0x47,
+ 0xf1, 0x3f, 0xe7, 0xff, 00, 0xd6, 0xab, 0x31, 0xfc, 0x43,
+ 0x3f, 0xde, 0x7c, 0xfd, 0x7f, 0xfa, 0xd5, 0xe4, 0x3f, 0x6c,
+ 0xfc, 0x69, 0xe2, 0xef, 0xd0, 0xe2, 0xab, 0xdb, 0xd6, 0x5d,
+ 0x4b, 0x58, 0x9a, 0xeb, 0xa9, 0xec, 0x89, 0xf1, 0x1b, 0x3f,
+ 0xc4, 0xdf, 0x9f, 0xff, 00, 0x5a, 0xac, 0x47, 0xf1, 0x13,
+ 0x9f, 0xbe, 0xff, 00, 0x9f, 0xff, 00, 0x5a, 0xbc, 0x57,
+ 0xed, 0x67, 0xd7, 0xf5, 0xa5, 0xfb, 0x71, 0xf5, 0xfd, 0x6a,
+ 0x96, 0x26, 0xb1, 0x4b, 0x1b, 0x5d, 0x75, 0x3d, 0xc9, 0x3e,
+ 0x22, 0xff, 00, 0xb4, 0xdf, 0x9f, 0xff, 00, 0x5a, 0xac,
+ 0xc7, 0xf1, 0x1f, 0xfd, 0xa6, 0xfc, 0xff, 00, 0xfa, 0xd5,
+ 0xe0, 0xc2, 0xf9, 0xbb, 0x37, 0xeb, 0x52, 0x2e, 0xa2, 0xe3,
+ 0xa3, 0x1a, 0xa5, 0x8c, 0xaa, 0x8b, 0x58, 0xfa, 0xe8, 0xf7,
+ 0xe8, 0xfe, 0x23, 0x67, 0xf8, 0x9b, 0xf3, 0xff, 00, 0xeb,
+ 0x55, 0xa8, 0xfe, 0x22, 0x83, 0xfc, 0x4d, 0xf9, 0xff, 00,
+ 0xf5, 0xab, 0xe7, 0xa1, 0xaa, 0x48, 0x31, 0x87, 0xa7, 0x2e,
+ 0xaf, 0x28, 0x3f, 0x7c, 0xd5, 0xac, 0x75, 0x54, 0x6a, 0xb3,
+ 0x3a, 0xc8, 0xfa, 0x2d, 0x3e, 0x23, 0x2f, 0xab, 0x7e, 0x7f,
+ 0xfd, 0x6a, 0xb1, 0x1f, 0xc4, 0x55, 0x38, 0xe5, 0xbf, 0x3f,
+ 0xfe, 0xb5, 0x7c, 0xe2, 0xba, 0xdc, 0xcb, 0xfc, 0x62, 0xa4,
+ 0x5d, 0x7e, 0x75, 0xe8, 0xc2, 0xb4, 0x59, 0x8d, 0x43, 0x45,
+ 0x9b, 0x55, 0x47, 0xd2, 0x69, 0xf1, 0x9, 0x4f, 0x42, 0xdf,
+ 0x9f, 0xff, 00, 0x5a, 0xac, 0xa7, 0xc4, 0x34, 0x3f, 0xc4,
+ 0xdf, 0x9d, 0x7c, 0xce, 0xbe, 0x24, 0xb8, 0x1f, 0xc4, 0x2a,
+ 0x55, 0xf1, 0x44, 0xeb, 0xe9, 0xf9, 0xd5, 0xac, 0xce, 0x68,
+ 0xd5, 0x67, 0x15, 0x11, 0xf4, 0xda, 0x7c, 0x41, 0x4f, 0xef,
+ 0x37, 0xe7, 0xff, 00, 0xd6, 0xab, 0x31, 0xf8, 0xfd, 0xe,
+ 0x3e, 0x76, 0xfc, 0xff, 00, 0xfa, 0xd5, 0xf3, 0xa, 0xf8,
+ 0xb6, 0x71, 0xe9, 0x52, 0xa7, 0x8c, 0xee, 0x7, 0xff, 00,
+ 0xae, 0xb5, 0x59, 0xa4, 0x91, 0xb2, 0xce, 0xa6, 0x8f, 0xa8,
+ 0x53, 0xc7, 0xe9, 0xfd, 0xf3, 0xf9, 0xff, 00, 0xf5, 0xaa,
+ 0xc4, 0x7e, 0x3f, 0x4f, 0xef, 0xb7, 0xe7, 0xff, 00, 0xd6,
+ 0xaf, 0x97, 0x53, 0xc6, 0xb3, 0xe, 0xa6, 0xa6, 0x5f, 0x1d,
+ 0x4a, 0x3b, 0xfe, 0xbf, 0xfd, 0x6a, 0xd1, 0x66, 0xcc, 0xd5,
+ 0x67, 0x92, 0x3e, 0xa4, 0x4f, 0x1f, 0x2f, 0x1f, 0x3b, 0x3,
+ 0xf5, 0x3f, 0xe1, 0x56, 0x93, 0xc7, 0x83, 0xfb, 0xec, 0x3f,
+ 0x13, 0x5f, 0x2c, 0x47, 0xe3, 0xd9, 0x3d, 0x47, 0xe7, 0xff,
+ 00, 0xd6, 0xab, 0x11, 0xf8, 0xfd, 0xc6, 0x3e, 0x65, 0xff,
+ 00, 0xbe, 0xbf, 0xfa, 0xd5, 0xb2, 0xcd, 0xdf, 0x73, 0x78,
+ 0xe7, 0xaf, 0xb9, 0xf5, 0x34, 0x7e, 0x3d, 0x18, 0xfb, 0xe7,
+ 0xf3, 0x35, 0x61, 0x3c, 0x78, 0xf, 0xf1, 0x9f, 0xcf, 0xff,
+ 00, 0xad, 0x5f, 0x2c, 0xc7, 0xf1, 0xd, 0x81, 0xfb, 0xcb,
+ 0xff, 00, 0x7d, 0x7f, 0xf5, 0xaa, 0xc2, 0x7c, 0x46, 0x7f,
+ 0x55, 0xff, 00, 0xbe, 0xbf, 0xfa, 0xd5, 0xaa, 0xce, 0x3c,
+ 0xcd, 0xd6, 0x7d, 0xe6, 0x7d, 0x4a, 0x9e, 0x3c, 0xe3, 0xef,
+ 0xb7, 0xe6, 0x6a, 0x75, 0xf1, 0xd0, 0xfe, 0xf3, 0x7e, 0x7f,
+ 0xfd, 0x6a, 0xf9, 0x6d, 0x3e, 0x22, 0x37, 0xf7, 0xd7, 0xfe,
+ 0xfa, 0xff, 00, 0xeb, 0x55, 0x98, 0xfe, 0x22, 0xb7, 0xf7,
+ 0x97, 0xfe, 0xfa, 0xff, 00, 0xeb, 0x56, 0xab, 0x37, 0xf3,
+ 0x37, 0x59, 0xf2, 0x7d, 0x4f, 0xa8, 0xe3, 0xf1, 0xc8, 0x3,
+ 0xef, 0x1f, 0xcf, 0xff, 00, 0xad, 0x56, 0x17, 0xc7, 0x60,
+ 0xf7, 0x3f, 0xe7, 0xf0, 0xaf, 0x97, 0x63, 0xf8, 0x8e, 0x47,
+ 0xf1, 0x29, 0x3f, 0xef, 0x7f, 0xf5, 0xaa, 0xd4, 0x7f, 0x11,
+ 0x8e, 0x7e, 0xf2, 0xff, 00, 0xdf, 0x5f, 0xfd, 0x6a, 0xda,
+ 0x39, 0xba, 0xee, 0x6f, 0x1c, 0xf9, 0x77, 0x3e, 0x9f, 0x4f,
+ 0x1c, 0x29, 0xc7, 0x27, 0xf3, 0xff, 00, 0xeb, 0x54, 0xc9,
+ 0xe3, 0x74, 0xf7, 0xfc, 0xff, 00, 0xfa, 0xd5, 0xf3, 0x1c,
+ 0x7f, 0x11, 0x4f, 0xf7, 0x93, 0xf1, 0x6f, 0xfe, 0xb5, 0x58,
+ 0x4f, 0x88, 0xff, 00, 0xed, 0x21, 0xff, 00, 0x81, 0x7f,
+ 0xf5, 0xab, 0x65, 0x9b, 0xae, 0xe6, 0xf1, 0xcf, 0x63, 0xdc,
+ 0xfa, 0x6d, 0x7c, 0x6b, 0x1f, 0x52, 0xf, 0xe7, 0xff, 00,
+ 0xd6, 0xa9, 0x57, 0xc6, 0x51, 0x1f, 0x5f, 0xcf, 0xff, 00,
+ 0xad, 0x5f, 0x33, 0xc7, 0xf1, 0x1b, 0x3f, 0xc4, 0x9f, 0xf7,
+ 0xd7, 0xff, 00, 0x5a, 0xac, 0xa7, 0xc4, 0x5c, 0xff, 00,
+ 0x12, 0x67, 0xfd, 0xef, 0xfe, 0xb5, 0x68, 0xb3, 0x68, 0xf7,
+ 0x36, 0x59, 0xe4, 0x7b, 0x9f, 0x4b, 0x27, 0x8c, 0x21, 0xe3,
+ 0x39, 0xfc, 0xff, 00, 0xfa, 0xd5, 0x2a, 0x78, 0xb2, 0x3,
+ 0xeb, 0xf9, 0xff, 00, 0xf5, 0xab, 0xe6, 0xe8, 0xfe, 0x22,
+ 0x8c, 0xc, 0xb2, 0xff, 00, 0xdf, 0x5f, 0xfd, 0x6a, 0x9d,
+ 0x3e, 0x22, 0x3, 0xdd, 0x7f, 0xef, 0xaf, 0xfe, 0xb5, 0x6c,
+ 0xb3, 0x58, 0xbe, 0xa6, 0xf1, 0xce, 0xa0, 0xfa, 0x9f, 0x48,
+ 0x2f, 0x8a, 0x21, 0xcf, 0x53, 0xfe, 0x7f, 0xa, 0x91, 0x3c,
+ 0x4b, 0x9, 0xfe, 0x23, 0xfe, 0x7f, 0xa, 0xf9, 0xd2, 0x3f,
+ 0x88, 0x20, 0x91, 0xf3, 0x2f, 0xd3, 0x77, 0xff, 00, 0x5a,
+ 0xac, 0xa7, 0xc4, 0x5, 0xfe, 0xfa, 0xf, 0xf8, 0x17, 0xff,
+ 00, 0x5a, 0xb4, 0x59, 0x9c, 0x4d, 0x96, 0x71, 0x4c, 0xfa,
+ 0x20, 0x78, 0x8a, 0xf, 0xef, 0x1a, 0x7a, 0xeb, 0xf1, 0x13,
+ 0xf7, 0x8f, 0xf9, 0xfc, 0x2b, 0xe7, 0xc4, 0xf8, 0x82, 0x9,
+ 0xfb, 0xeb, 0xff, 00, 0x7d, 0x7f, 0xf5, 0xaa, 0xc4, 0x7e,
+ 0x3e, 0x1c, 0x7c, 0xe9, 0xff, 00, 0x7d, 0x7f, 0xf5, 0xab,
+ 0x45, 0x99, 0x41, 0x9b, 0x2c, 0xda, 0x9b, 0x3e, 0x81, 0x5d,
+ 0x6e, 0x32, 0x7e, 0xf7, 0xeb, 0x52, 0x2e, 0xb2, 0x9f, 0xde,
+ 0xfd, 0x6b, 0xc0, 0xe3, 0xf1, 0xea, 0x8f, 0xe3, 0x4f, 0xfb,
+ 0xe8, 0x7f, 0x85, 0x58, 0x4f, 0x1e, 0x82, 0x71, 0xbd, 0x3f,
+ 0xef, 0xaf, 0xfe, 0xb5, 0x6a, 0xb3, 0xa, 0x66, 0x8b, 0x34,
+ 0xa6, 0xcf, 0x77, 0x5d, 0x61, 0x4f, 0x46, 0xfd, 0x6a, 0x41,
+ 0xab, 0xf, 0x5f, 0xd6, 0xbc, 0x32, 0x3f, 0x1e, 0x67, 0xfe,
+ 0x5a, 0x20, 0xff, 00, 0x81, 0x7f, 0xf5, 0xaa, 0xc2, 0x78,
+ 0xef, 0x27, 0xef, 0x28, 0xff, 00, 0x81, 0xf, 0xf0, 0xab,
+ 0x58, 0xea, 0x66, 0xab, 0x32, 0xa4, 0xcf, 0x6e, 0x5d, 0x59,
+ 0x7a, 0xe4, 0xfe, 0x74, 0xf5, 0xd5, 0xb3, 0xdc, 0xd7, 0x8a,
+ 0x27, 0x8e, 0xce, 0x7e, 0xfa, 0xff, 00, 0xdf, 0x5f, 0xfd,
+ 0x6a, 0xb3, 0x17, 0x8e, 0x8e, 0x3e, 0xf2, 0x7e, 0x7f, 0xfd,
+ 0x6a, 0xb5, 0x8c, 0xa6, 0x68, 0xb1, 0xf4, 0x99, 0xec, 0xab,
+ 0xaa, 0xfb, 0x9a, 0x7a, 0xea, 0x9e, 0xe6, 0xbc, 0x7e, 0x3f,
+ 0x1d, 0x9f, 0x54, 0xfc, 0xff, 00, 0xfa, 0xd5, 0x3a, 0xf8,
+ 0xe8, 0x9e, 0x72, 0x9f, 0x9f, 0xff, 00, 0x5a, 0xaf, 0xeb,
+ 0x54, 0xfb, 0x9a, 0x2c, 0x6d, 0x17, 0xd4, 0xf5, 0xb5, 0xd5,
+ 0x7d, 0xcf, 0xe7, 0x4f, 0x5d, 0x53, 0x9e, 0xbf, 0xad, 0x79,
+ 0x3a, 0x78, 0xe7, 0xdd, 0x3f, 0x3f, 0xfe, 0xb5, 0x58, 0x5f,
+ 0x1c, 0xfb, 0xa7, 0xfd, 0xf5, 0xff, 00, 0xd6, 0xab, 0x58,
+ 0x8a, 0x6f, 0xa9, 0x6b, 0x15, 0x4b, 0xb9, 0xea, 0x4b, 0xaa,
+ 0x7b, 0xfe, 0xb4, 0xf5, 0xd5, 0x6, 0x3a, 0xfe, 0xb5, 0xe6,
+ 0x9, 0xe3, 0x75, 0x3c, 0xfc, 0x9f, 0xf7, 0xd7, 0xff, 00,
+ 0x5a, 0xa7, 0x4f, 0x1a, 0x27, 0xfb, 0x3f, 0xf7, 0xd5, 0x57,
+ 0xb6, 0x87, 0x72, 0x96, 0x22, 0x9b, 0xea, 0x7a, 0x50, 0xd5,
+ 0x3f, 0xce, 0x69, 0xe3, 0x54, 0xff, 00, 0x39, 0xaf, 0x38,
+ 0x1e, 0x30, 0x8c, 0xff, 00, 0x77, 0xfe, 0xfa, 0xa9, 0x57,
+ 0xc5, 0xd1, 0x9e, 0x85, 0x7f, 0xef, 0xaa, 0xaf, 0x6b, 0xe,
+ 0xe5, 0xfb, 0x6a, 0x7d, 0xcf, 0x44, 0x5d, 0x4c, 0x77, 0x3f,
+ 0xad, 0x38, 0x6a, 0x59, 0xee, 0x7f, 0x3a, 0xf3, 0xf5, 0xf1,
+ 0x5c, 0x47, 0xab, 0x28, 0xff, 00, 0x81, 0x54, 0xab, 0xe2,
+ 0x88, 0x4f, 0xf1, 0xaf, 0xfd, 0xf5, 0x4d, 0x54, 0x8f, 0x72,
+ 0xbd, 0xa4, 0x3b, 0x9d, 0xf0, 0xd4, 0xbd, 0xff, 00, 0x5a,
+ 0x78, 0xd4, 0xbd, 0xcf, 0xe7, 0x5c, 0x1a, 0xf8, 0x92, 0x23,
+ 0xfc, 0x6b, 0xff, 00, 0x7d, 0x54, 0xab, 0xe2, 0x8, 0xcf,
+ 0xf1, 0xaf, 0xe7, 0x55, 0xcd, 0x1e, 0xe3, 0x53, 0x8b, 0xea,
+ 0x77, 0x23, 0x52, 0xf7, 0x3f, 0x9d, 0x38, 0x6a, 0x5c, 0x75,
+ 0xfd, 0x6b, 0x88, 0x5d, 0x76, 0x3e, 0xd2, 0x2f, 0xe7, 0x52,
+ 0xd, 0x71, 0x3f, 0xe7, 0xa0, 0xa7, 0x74, 0x57, 0x32, 0xee,
+ 0x76, 0xc3, 0x52, 0xf7, 0xfd, 0x69, 0x46, 0xa5, 0xef, 0xfa,
+ 0xd7, 0x18, 0xba, 0xca, 0x9c, 0x61, 0xd7, 0xf3, 0xa9, 0x6,
+ 0xae, 0x3f, 0xbc, 0x3f, 0x3a, 0x63, 0xba, 0x3b, 0x25, 0xd4,
+ 0x7d, 0xff, 00, 0x5a, 0x70, 0xd4, 0x7d, 0xcf, 0xe7, 0x5c,
+ 0x72, 0xea, 0xc3, 0xb3, 0x3, 0xf8, 0xd4, 0x8b, 0xaa, 0xfb,
+ 0xfe, 0xb4, 0x1, 0xd8, 0xd, 0x47, 0xdc, 0xfe, 0x74, 0xef,
+ 0xed, 0x1f, 0x7f, 0xd6, 0xb8, 0xf1, 0xaa, 0xf3, 0xf7, 0xbf,
+ 0x5a, 0x78, 0xd5, 0x79, 0xed, 0xf9, 0xd0, 0x7, 0x5e, 0x35,
+ 0x2f, 0x7f, 0xd6, 0x9e, 0x35, 0x1f, 0x73, 0xf9, 0xd7, 0x20,
+ 0x35, 0x5f, 0x71, 0xf9, 0xd3, 0xff, 00, 0xb5, 0x72, 0x7a,
+ 0xd0, 0x7, 0x5c, 0x35, 0x2f, 0x7f, 0xd6, 0x9c, 0x35, 0x2f,
+ 0x73, 0xf9, 0xd7, 0x22, 0x35, 0x4f, 0x71, 0xf9, 0xd3, 0xc6,
+ 0xa9, 0xee, 0x28, 0x3, 0xae, 0x1a, 0x97, 0xb9, 0xfc, 0xe9,
+ 0x46, 0xa5, 0xef, 0xfa, 0xd7, 0x26, 0x35, 0x41, 0xeb, 0xfa,
+ 0xd3, 0x86, 0xa9, 0xee, 0x3f, 0x3a, 00, 0xeb, 0x7f, 0xb4,
+ 0xb8, 0xeb, 0xfa, 0xd4, 0x32, 0x6a, 0x3e, 0xe7, 0xf3, 0xae,
+ 0x6b, 0xfb, 0x4f, 0x3d, 0xea, 0x39, 0x75, 0x31, 0xeb, 0x40,
+ 0x1b, 0xb3, 0xea, 0x5c, 0x75, 0x3f, 0x9d, 0x67, 0x5c, 0x6a,
+ 0x1d, 0x79, 0x3f, 0x9d, 0x62, 0xdc, 0x6a, 0x83, 0xb7, 0xf3,
+ 0xac, 0xcb, 0x9d, 0x53, 0xdc, 0x7e, 0x74, 0x1, 0xad, 0x75,
+ 0xa9, 0x63, 0x23, 0x35, 0x8d, 0x79, 0xaa, 0x67, 0x3c, 0xfe,
+ 0xb5, 0x97, 0x77, 0xa9, 0xf5, 0xe6, 0xb1, 0x6e, 0xf5, 0x3e,
+ 0xbc, 0x8a, 00, 0xd0, 0xbe, 0xd4, 0xbf, 0xce, 0x6b, 0x9c,
+ 0xd4, 0xf5, 0x3e, 0x3a, 0xfe, 0xb5, 0x5a, 0xfb, 0x53, 0xeb,
+ 0xcf, 0xeb, 0x5c, 0xce, 0xa5, 0xaa, 0x7b, 0xfe, 0xb4, 0x1,
+ 0x2e, 0xa5, 0xa9, 0x75, 0xe7, 0xf5, 0xae, 0x43, 0x5b, 0xd5,
+ 0x36, 0xc4, 0xfc, 0xfe, 0xb4, 0xfd, 0x43, 0x52, 0xce, 0x6b,
+ 0x90, 0xf1, 0x5, 0xf9, 0xfb, 0x2c, 0x86, 0x93, 0xd8, 0x99,
+ 0x6c, 0xcf, 0x31, 0xf1, 0xf6, 0xab, 0xb9, 0xa5, 0xeb, 0xdf,
+ 0xbd, 0x78, 0x96, 0xa9, 0x75, 0xbe, 0x67, 0x39, 0xaf, 0x40,
+ 0xf1, 0xc6, 0xa4, 0x4b, 0xcb, 0xcf, 0xad, 0x79, 0x65, 0xdc,
+ 0xbb, 0xd9, 0x8e, 0x7b, 0xd7, 0xc4, 0xe2, 0xe3, 0x7a, 0xa7,
+ 0xe7, 0x98, 0xd8, 0xf3, 0x55, 0x33, 0x75, 0x9, 0x38, 0x35,
+ 0xcf, 0x5c, 0x37, 0x5a, 0xda, 0xbc, 0x24, 0x9e, 0x4d, 0x62,
+ 0xdc, 0xaf, 0x5f, 0xad, 0x74, 0xd0, 0x56, 0xd0, 0xeb, 0xc3,
+ 0x2b, 0x2b, 0x1d, 0x17, 0xc1, 0xef, 0xf, 0xb7, 0x8a, 0x3e,
+ 0x28, 0x78, 0x76, 0xcc, 0x36, 0x2, 0xde, 0x45, 0x33, 0x8c,
+ 0x75, 0x54, 0x70, 0xc4, 0x75, 0x1d, 0x85, 0x7e, 0xc7, 0x7c,
+ 0x31, 0xb0, 0x4b, 0x1f, 0xc, 0x43, 0xb0, 0x60, 0x48, 0xdb,
+ 0xbf, 0x90, 0xfe, 0x95, 0xf9, 0x71, 0xfb, 0x1b, 0x68, 0x6b,
+ 0xa9, 0xfc, 0x55, 0x96, 0xec, 0xa1, 0x76, 0xb2, 0xb5, 0x67,
+ 0x5c, 0xc, 0xf2, 0xc7, 0x6f, 0xf5, 0xaf, 0xd6, 0x5f, 0xf,
+ 0x5b, 0x7d, 0x97, 0x4a, 0xb4, 0x8b, 0xa6, 0xd8, 0xd7, 0x8f,
+ 0xc2, 0xbe, 0x93, 0xe, 0xad, 0xb, 0x9f, 0x5b, 0x84, 0x8d,
+ 0xa1, 0x73, 0x66, 0x1e, 0xd5, 0xa1, 00, 0xef, 0x54, 0xa1,
+ 0x1c, 0xd5, 0xf8, 0x33, 0xeb, 0x5d, 0x47, 0x69, 0x7e, 0x3,
+ 0xd2, 0xb4, 0x60, 0x15, 0x9f, 00, 0xe4, 0x56, 0x94, 0x14,
+ 0x1, 0x72, 0x11, 0x57, 0x62, 0xe7, 0x2, 0xaa, 0xc4, 0x38,
+ 0xab, 0xb0, 0xe, 0x94, 0x1, 0x6a, 0x35, 0xe6, 0xac, 0xc6,
+ 0x2a, 0xbc, 0x62, 0xac, 0xc4, 0x3a, 0x50, 0x4, 0xe9, 0xc0,
+ 0xa9, 0x17, 0xa0, 0xa6, 0x20, 0xa9, 0x7, 0x5a, 00, 0x78,
+ 0xeb, 0x4f, 0x5a, 0x62, 0xd4, 0x83, 0xa5, 00, 0x3c, 0x74,
+ 0xa2, 0x8a, 0x28, 0x1, 0xcb, 0x4b, 0x48, 0x3a, 0x52, 0xd0,
+ 0x1, 0x45, 0x14, 0x50, 0x1, 0x45, 0x14, 0x50, 0x6, 0x34,
+ 0x83, 0xda, 0xaa, 0xca, 0x81, 0x83, 0x2, 0x32, 0xf, 0x15,
+ 0x71, 0xf3, 0x55, 0xdd, 0x68, 0x3, 0xe0, 0x8f, 0xda, 0xc7,
+ 0xe0, 0xec, 0xba, 0x76, 0xbb, 0x71, 0x7f, 0x6d, 00, 0xf2,
+ 0x9c, 0x99, 0x61, 0x29, 0x93, 0xbc, 0x1c, 0x16, 0x5e, 0x7b,
+ 0x83, 0xbb, 0x8a, 0xf9, 0x56, 0x7d, 0x38, 0x83, 0xc8, 0xaf,
+ 0xd6, 0xef, 0x89, 0x7e, 0x3, 0x83, 0xc7, 0x9e, 0x1e, 0x9a,
+ 0xc9, 0x96, 0x31, 0x74, 0xa0, 0x9b, 0x79, 0x9c, 0x7d, 0xc6,
+ 0xfa, 0xe0, 0x9c, 0x1c, 0x73, 0x5f, 0x9d, 0xbf, 0x13, 0x7e,
+ 0x1a, 0x4f, 0xe1, 0x5d, 0x5a, 0xe1, 0x56, 0x10, 0x91, 0xab,
+ 0xed, 0x78, 0xc2, 0x9f, 0x90, 0xfe, 0x5d, 0x2b, 0xf3, 0xce,
+ 0x24, 0xcb, 0xa7, 0x17, 0xf5, 0xda, 0x2b, 0xfc, 0x5f, 0xe6,
+ 0x7e, 0x57, 0xc5, 0xd9, 0x4c, 0xa2, 0xff, 00, 0xb4, 0x28,
+ 0x2b, 0xaf, 0xb4, 0x97, 0xe7, 0xfe, 0x67, 0x8b, 0xcb, 0x60,
+ 0x79, 0x18, 0xe2, 0xa9, 0xcd, 0x61, 0xed, 0x5d, 0x94, 0xda,
+ 0x6e, 0x72, 0x40, 0xaa, 0x32, 0xe9, 0xd8, 0xed, 0x5f, 0x1,
+ 0x1c, 0x4d, 0xcf, 0xcb, 0xe9, 0xe2, 0xee, 0x72, 0x12, 0x69,
+ 0xfe, 0xd5, 0x3, 0x58, 0x91, 0xd0, 0x57, 0x64, 0xba, 0x2b,
+ 0xcb, 0xdb, 0xf0, 0xc5, 0x2b, 0x78, 0x61, 0x9b, 0xb6, 0x4f,
+ 0xb0, 0xff, 00, 0xeb, 0x57, 0x7c, 0x2a, 0xb9, 0x6c, 0x7a,
+ 0x54, 0xeb, 0xca, 0x47, 0xc, 0xf6, 0x4c, 0x3a, 0x3, 0x51,
+ 0x9b, 0x57, 0x15, 0xdd, 0x3f, 0x85, 0x5f, 0xfb, 0x87, 0xf2,
+ 0x3f, 0xe1, 0x51, 0x37, 0x85, 0x9f, 0xfb, 0x87, 0xf2, 0xff,
+ 00, 0xeb, 0x57, 0x4a, 0x9c, 0xbb, 0x1d, 0x8a, 0xa4, 0xfb,
+ 0x1c, 0x4f, 0xd9, 0xdf, 0xd2, 0x93, 0xc8, 0x7c, 0xe3, 0x15,
+ 0xd8, 0xb7, 0x86, 0x1c, 0x7f, 0x9, 0xfc, 0xbf, 0xfa, 0xd5,
+ 0x13, 0x78, 0x69, 0xc7, 0x6f, 0xd3, 0xff, 00, 0xad, 0x4f,
+ 0x9d, 0xf6, 0x2b, 0xda, 0x4b, 0xaa, 0x39, 0x23, 0xb, 0xe,
+ 0xd4, 0xd3, 0x13, 0xe, 0xd5, 0xd4, 0xb7, 0x87, 0xe4, 0x1d,
+ 0x87, 0xe4, 0x7f, 0xc2, 0xa3, 0x3a, 0xc, 0x9e, 0x9f, 0xa1,
+ 0xff, 00, 0xa, 0x7e, 0xd3, 0xc8, 0x7e, 0xd5, 0xf6, 0x39,
+ 0xad, 0x8d, 0xe9, 0x49, 0xb4, 0xfa, 0x57, 0x49, 0xfd, 0x89,
+ 0x27, 0xf7, 0x3f, 0x43, 0x51, 0xbe, 0x8b, 0x20, 0xfe, 0x1f,
+ 0xd0, 0xd3, 0xf6, 0x81, 0xed, 0x7c, 0x8e, 0x7f, 0x69, 0xf4,
+ 0xa4, 0xc5, 0x6e, 0x9d, 0x21, 0xff, 00, 0xbb, 0xfa, 0x1a,
+ 0x8c, 0xe9, 0x4e, 0x3f, 0x80, 0xfe, 0x46, 0x8e, 0x74, 0x57,
+ 0xb5, 0x5d, 0x8c, 0x6c, 0x51, 0x5a, 0xe7, 0x4c, 0x61, 0xfc,
+ 0x7, 0xf2, 0xa6, 0x9d, 0x38, 0xf7, 0x43, 0xf9, 0x53, 0xf6,
+ 0x88, 0x3d, 0xac, 0x4c, 0xaa, 0x2b, 0x48, 0xe9, 0xdf, 0xec,
+ 0xe2, 0x98, 0x6c, 0x3d, 0xa9, 0xf3, 0xc4, 0x7e, 0xd6, 0x25,
+ 0xa, 0x2a, 0xef, 0xd8, 0x69, 0xd, 0x89, 0xa3, 0x9d, 0x15,
+ 0xed, 0x22, 0x53, 0xc5, 0x15, 0x6b, 0xec, 0x64, 0x53, 0x4d,
+ 0xa3, 0x53, 0xe6, 0x41, 0xed, 0x23, 0xdc, 0xaf, 0x45, 0x4e,
+ 0x6d, 0x5b, 0xd6, 0x93, 0xec, 0xaf, 0x45, 0xd0, 0xf9, 0x97,
+ 0x72, 0x1a, 0x2a, 0x5f, 0xb3, 0xb5, 0x27, 0x90, 0xd4, 0xee,
+ 0x87, 0x74, 0x47, 0x45, 0x49, 0xe4, 0x36, 0x29, 0xc, 0x4c,
+ 0x3b, 0x51, 0x70, 0xba, 0x19, 0x45, 0x3b, 0x63, 0x7a, 0x51,
+ 0xb0, 0xfa, 0x50, 0x31, 0xb4, 0x52, 0xed, 0x34, 0x6d, 0x34,
+ 00, 0x94, 0x52, 0xe2, 0x92, 0x80, 0x17, 0x3e, 0xf4, 0x67,
+ 0xde, 0x92, 0x8c, 0x53, 0x18, 0xbb, 0x88, 0xa5, 0xdc, 0x7d,
+ 0x69, 0xb4, 0x52, 0xd, 0x7, 0x6e, 0x6f, 0x53, 0x46, 0xf6,
+ 0x1d, 0xe9, 0xb4, 0x53, 0xb0, 0xac, 0x87, 0xf9, 0xad, 0x47,
+ 0x9a, 0x69, 0x94, 0x52, 0xb0, 0xb9, 0x51, 0x20, 0x99, 0x85,
+ 0x2f, 0x9e, 0x6a, 0x2a, 0x28, 0xb2, 0xe, 0x54, 0x4d, 0xf6,
+ 0x83, 0x4a, 0x2e, 0x4d, 0x41, 0x45, 0x2b, 0x21, 0x72, 0x22,
+ 0xc7, 0xda, 0x69, 0xdf, 0x6c, 0x3e, 0xa6, 0xaa, 0xd1, 0x45,
+ 0x90, 0xb9, 0x11, 0x68, 0x5d, 0x7b, 0xe2, 0x94, 0x5d, 0xff,
+ 00, 0xb5, 0xfa, 0x55, 0x4a, 0x29, 0x72, 0xa1, 0x7b, 0x38,
+ 0x97, 0x45, 0xef, 0xbd, 0x38, 0x5e, 0xe3, 0xb9, 0xaa, 0x14,
+ 0x66, 0x8e, 0x44, 0x1e, 0xce, 0x26, 0x90, 0xbe, 0x3f, 0xde,
+ 0xa7, 0xd, 0x41, 0xbf, 0xbe, 0x6b, 0x2f, 0x34, 0x66, 0x97,
+ 0x22, 0x17, 0xb3, 0x46, 0xb8, 0xd4, 0x9c, 0x7f, 0x19, 0xa7,
+ 0xae, 0xab, 0x28, 0xe9, 0x23, 0x56, 0x36, 0xe3, 0xeb, 0x46,
+ 0xe3, 0xeb, 0x47, 0x22, 0xf, 0x66, 0xbb, 0x9b, 0xa3, 0x57,
+ 0x9c, 0x7f, 0xcb, 0x53, 0x4e, 0x1a, 0xdc, 0xe3, 0xfe, 0x5a,
+ 0xb5, 0x60, 0x6e, 0x34, 0xa2, 0x46, 0x1d, 0xe8, 0xe5, 0xf3,
+ 0x17, 0x23, 0xee, 0x74, 0x69, 0xe2, 0x9, 0xc6, 0x3f, 0x78,
+ 0x4d, 0x4a, 0x3c, 0x49, 0x72, 0x3f, 0xe5, 0xa1, 0xae, 0x63,
+ 0xcd, 0x6f, 0x5a, 0x4, 0xcc, 0x3d, 0xe8, 0xe5, 0x6b, 0x66,
+ 0x3e, 0x59, 0x2e, 0xa7, 0x56, 0xbe, 0x29, 0xb9, 0x5f, 0xf9,
+ 0x6a, 0xc3, 0xf2, 0xff, 00, 0xa, 0x9a, 0x3f, 0x16, 0x4e,
+ 0x3a, 0xc8, 0xdf, 0xa5, 0x71, 0xfe, 0x79, 0xa5, 0xfb, 0x43,
+ 0xa, 0x3d, 0xee, 0xe1, 0xfb, 0xce, 0xe7, 0x68, 0xbe, 0x32,
+ 0x9d, 0x4f, 0xdf, 0x7f, 0xd2, 0xa6, 0x4f, 0x1b, 0x4e, 0x3f,
+ 0x8d, 0xff, 00, 0x4a, 0xe1, 0xc5, 0xc3, 0xe, 0xe6, 0x97,
+ 0xed, 0x27, 0xde, 0x9f, 0x35, 0x45, 0xb3, 0x2a, 0xf5, 0x57,
+ 0x53, 0xbe, 0x4f, 0x1c, 0xca, 0x3a, 0xca, 0xff, 00, 0x90,
+ 0xab, 0x9, 0xe3, 0xe7, 0x5f, 0xf9, 0x6a, 0xe3, 0xf0, 0x15,
+ 0xe7, 0x22, 0xe8, 0x8e, 0xc6, 0x97, 0xed, 0x59, 0xf5, 0xab,
+ 0x55, 0x2a, 0xae, 0xa3, 0xf6, 0x95, 0x97, 0x53, 0xd2, 0xd3,
+ 0xe2, 0xb, 0xff, 00, 0xcf, 0x57, 0xfc, 0x85, 0x58, 0x8f,
+ 0xe2, 0x13, 0x77, 0x99, 0xbf, 0x21, 0x5e, 0x5b, 0xf6, 0xa3,
+ 0x4e, 0x17, 0x98, 0xef, 0x4f, 0xdb, 0x56, 0x5d, 0x4a, 0x55,
+ 0xeb, 0xae, 0xa7, 0xac, 0x27, 0xc4, 0x42, 0x3f, 0xe5, 0xb3,
+ 0x7e, 0x42, 0xad, 0x47, 0xf1, 0x18, 0xf6, 0x99, 0xbf, 0x21,
+ 0x5e, 0x3d, 0xf6, 0xc3, 0xeb, 0x4e, 0x5b, 0xd2, 0x3b, 0x9a,
+ 0xa5, 0x88, 0xaa, 0x8a, 0x58, 0xaa, 0xeb, 0xa9, 0xec, 0xf1,
+ 0xfc, 0x46, 0x3f, 0xf3, 0xdd, 0xbf, 0x21, 0x56, 0x63, 0xf8,
+ 0x8d, 0xff, 00, 0x4d, 0xdb, 0xf2, 0x15, 0xe2, 0x42, 0xfc,
+ 0xff, 00, 0x78, 0xfe, 0x74, 0xa3, 0x50, 0x7f, 0xef, 0xb7,
+ 0xe7, 0x55, 0xf5, 0xaa, 0xa8, 0xd1, 0x63, 0xab, 0xa3, 0xdd,
+ 0x63, 0xf8, 0x90, 0x7, 0xfc, 0xb7, 0x6f, 0xc8, 0x54, 0xe9,
+ 0xf1, 0x1f, 0x3f, 0xf2, 0xdd, 0xbf, 0x21, 0x5e, 0xe, 0x35,
+ 0x29, 0x7, 0xfc, 0xb4, 0x6f, 0xce, 0x9c, 0x35, 0x59, 0x7f,
+ 0xe7, 0xab, 0x7e, 0x75, 0x6b, 0x1b, 0x59, 0x1a, 0x2c, 0xc6,
+ 0xb9, 0xf4, 0x4, 0x7f, 0x11, 0xbf, 0xe9, 0xb3, 0x7e, 0x42,
+ 0xad, 0x27, 0xc4, 0x70, 0x3a, 0xce, 0xdf, 0x90, 0xaf, 0x9e,
+ 0x6, 0xb1, 0x30, 0xff, 00, 0x96, 0xcd, 0xf9, 0xd4, 0x8b,
+ 0xad, 0xce, 0xbf, 0xf2, 0xd5, 0xbf, 0x3a, 0xb5, 0x8f, 0xa8,
+ 0x8b, 0x59, 0xa5, 0x64, 0x7d, 0x14, 0x9f, 0x11, 0x81, 0xff,
+ 00, 0x96, 0xcd, 0xf9, 0xa, 0xb3, 0x1f, 0xc4, 0x54, 0x3d,
+ 0x67, 0x3f, 0xa5, 0x7c, 0xe0, 0x3c, 0x43, 0x72, 0x3f, 0xe5,
+ 0xa9, 0xfc, 0xea, 0x51, 0xe2, 0x5b, 0xa1, 0xff, 00, 0x2d,
+ 0x8f, 0xe7, 0x56, 0xb3, 0x2a, 0x88, 0xd5, 0x66, 0xf5, 0x51,
+ 0xf4, 0x9a, 0x7c, 0x45, 0x4e, 0xf3, 0x11, 0xf8, 0xa, 0xb0,
+ 0x9f, 0x11, 0x10, 0xff, 00, 0xcb, 0x76, 0xfd, 0x2b, 0xe6,
+ 0x85, 0xf1, 0x45, 0xd0, 0xff, 00, 0x96, 0xa7, 0xf3, 0xff,
+ 00, 0xeb, 0xd4, 0xcb, 0xe2, 0xcb, 0x90, 0x3f, 0xd6, 0x37,
+ 0xf9, 0xfc, 0x6b, 0x55, 0x9a, 0x4d, 0x1a, 0xac, 0xe6, 0xa1,
+ 0xf4, 0xcc, 0x7f, 0x10, 0x93, 0x3f, 0xeb, 0x9b, 0xf2, 0x15,
+ 0x69, 0x3e, 0x20, 0xa7, 0xfc, 0xf7, 0x23, 0xf0, 0x15, 0xf3,
+ 0xa, 0xf8, 0xca, 0xe5, 0x7f, 0xe5, 0xa3, 0x7f, 0x9f, 0xc6,
+ 0xa6, 0x4f, 0x1a, 0xdc, 0x7f, 0xcf, 0x47, 0xfc, 0xff, 00,
+ 0xfa, 0xf5, 0xa2, 0xcd, 0x64, 0x6a, 0xb3, 0xb9, 0x1f, 0x4f,
+ 0xa7, 0xc4, 0x4, 0x3f, 0xf2, 0xdc, 0xfe, 0x95, 0x62, 0x3f,
+ 0x88, 0xa, 0x7f, 0xe5, 0xb9, 0xfc, 0x85, 0x7c, 0xbc, 0xbe,
+ 0x39, 0x9c, 0x7f, 0xcb, 0x47, 0xff, 00, 0x3f, 0x8d, 0x4e,
+ 0x9e, 0x3e, 0x98, 0x7f, 0xcb, 0x47, 0x3f, 0xe7, 0xeb, 0x5a,
+ 0xac, 0xd9, 0x9b, 0x2c, 0xf2, 0x47, 0xd4, 0x69, 0xe3, 0xe5,
+ 0xff, 00, 0x9e, 0xe4, 0x7e, 0x55, 0x3a, 0xf8, 0xf4, 0x1f,
+ 0xf9, 0x78, 0x3f, 0xa5, 0x7c, 0xb8, 0x9f, 0x10, 0x25, 0xe3,
+ 0x32, 0xb7, 0xf9, 0xfc, 0x6a, 0xc2, 0x7c, 0x41, 0x90, 0x7f,
+ 0xcb, 0x56, 0xfc, 0xff, 00, 0xfa, 0xf5, 0xaa, 0xcd, 0xcd,
+ 0xe3, 0x9e, 0xbe, 0xe7, 0xd4, 0x71, 0xf8, 0xf5, 0x7b, 0x4e,
+ 0x7f, 0x4a, 0xb2, 0x9e, 0x3c, 0xe9, 0xfb, 0xf3, 0xf9, 0xa,
+ 0xf9, 0x72, 0x3f, 0x88, 0xce, 0x3f, 0xe5, 0xb1, 0xfc, 0xff,
+ 00, 0xfa, 0xf5, 0x66, 0x3f, 0x88, 0xd2, 0x7f, 0xcf, 0x66,
+ 0xff, 00, 0xbe, 0xbf, 0xfa, 0xf5, 0xaa, 0xcd, 0xfc, 0xcd,
+ 0xe3, 0x9e, 0xf9, 0x9f, 0x50, 0xaf, 0x8f, 0x79, 0xc7, 0x9e,
+ 0xdf, 0xa5, 0x4e, 0x9e, 0x3b, 0x1f, 0xf3, 0xd9, 0xbf, 0x4a,
+ 0xf9, 0x7e, 0x3f, 0x88, 0xcf, 0xff, 00, 0x3d, 0xdb, 0xfe,
+ 0xfa, 0xff, 00, 0xeb, 0xd5, 0x98, 0xfe, 0x24, 0x37, 0xfc,
+ 0xf6, 0x6f, 0xfb, 0xeb, 0xff, 00, 0xaf, 0x5b, 0x47, 0x37,
+ 0xf3, 0x37, 0x59, 0xf2, 0xee, 0x7d, 0x3e, 0x9e, 0x3c, 0xcf,
+ 0xfc, 0xb6, 0x3f, 0x90, 0xa9, 0x97, 0xc7, 0x43, 0xbc, 0xa7,
+ 0xf2, 0x15, 0xf3, 0x12, 0x7c, 0x48, 0x7f, 0xf9, 0xec, 0x7f,
+ 0x3f, 0xfe, 0xbd, 0x59, 0x8b, 0xe2, 0x3b, 0xf1, 0xfb, 0xe6,
+ 0xfc, 0xff, 00, 0xfa, 0xf5, 0xb2, 0xcd, 0xd7, 0x73, 0x78,
+ 0xe7, 0xab, 0xb9, 0xf4, 0xdc, 0x7e, 0x38, 0x4c, 0x7f, 0xad,
+ 0x3f, 0x90, 0xa9, 0xd3, 0xc7, 0x11, 0xe7, 0xef, 0x9f, 0xd2,
+ 0xbe, 0x66, 0x8f, 0xe2, 0x43, 0xf, 0xf9, 0x6c, 0x7f, 0xef,
+ 0xaf, 0xfe, 0xbd, 0x5a, 0x4f, 0x89, 0xc, 0x7f, 0xe5, 0xa9,
+ 0xfc, 0xff, 00, 0xfa, 0xf5, 0xaa, 0xcd, 0x97, 0x73, 0x78,
+ 0xe7, 0x8b, 0xb9, 0xf4, 0xaa, 0xf8, 0xda, 0x23, 0xff, 00,
+ 0x2d, 0xd, 0x4c, 0x9e, 0x32, 0x84, 0xf2, 0x5c, 0xd7, 0xcd,
+ 0x71, 0xfc, 0x46, 0x3f, 0xf3, 0xd4, 0xff, 00, 0xdf, 0x5f,
+ 0xfd, 0x7a, 0xb2, 0x9f, 0x11, 0x4f, 0x79, 0x8f, 0xe7, 0xff,
+ 00, 0xd7, 0xad, 0x56, 0x6d, 0x13, 0x75, 0x9d, 0xc7, 0xb9,
+ 0xf4, 0x8a, 0x78, 0xc6, 0xf, 0xef, 0x9a, 0x6b, 0xf8, 0xb2,
+ 0x6, 0xfe, 0x32, 0x3e, 0xb5, 0xf3, 0xc2, 0x7c, 0x46, 0xed,
+ 0xe6, 0x9f, 0xfb, 0xeb, 0xff, 00, 0xaf, 0x4f, 0x1f, 0x10,
+ 0x43, 0x1f, 0xf5, 0xa7, 0xf3, 0x1f, 0xe3, 0x5b, 0x47, 0x34,
+ 0x8b, 0x37, 0x8e, 0x73, 0x16, 0x7b, 0xe4, 0x9e, 0x25, 0x85,
+ 0xc7, 0x12, 0x73, 0x54, 0xe6, 0xd6, 0xd1, 0x81, 0xc4, 0x95,
+ 0xe2, 0x2b, 0xe3, 0xdd, 0xdd, 0x26, 0x3f, 0x98, 0xff, 00,
+ 0x1a, 0x7f, 0xfc, 0x26, 0xe5, 0xbf, 0xe5, 0xa9, 0xff, 00,
+ 0xbe, 0x87, 0xf8, 0xd7, 0x64, 0x31, 0xd0, 0x91, 0xdd, 0x4f,
+ 0x32, 0x84, 0xcf, 0x58, 0xba, 0xd5, 0x86, 0xf, 0xcf, 0x58,
+ 0x97, 0xba, 0xb7, 0x5f, 0x9a, 0xb8, 0x13, 0xe3, 0x56, 0x3f,
+ 0xf2, 0xd4, 0xff, 00, 0xdf, 0x43, 0xfc, 0x6a, 0x9, 0x7c,
+ 0x58, 0x1c, 0x1c, 0xbe, 0x7f, 0x1f, 0xfe, 0xbd, 0x76, 0x46,
+ 0xbc, 0x65, 0xb1, 0xe8, 0x43, 0x11, 0x9, 0xec, 0x74, 0xd7,
+ 0xda, 0xbf, 0xfb, 0x75, 0xce, 0xdf, 0xea, 0xbb, 0xb8, 0xce,
+ 0x6b, 0x26, 0xe3, 0x5f, 0x59, 0x8f, 0xc, 0x7f, 0x3a, 0xa1,
+ 0x25, 0xd9, 0x73, 0x9c, 0xe6, 0xb7, 0x4d, 0x3d, 0x8e, 0x94,
+ 0xd3, 0xd8, 0xb3, 0x73, 0x79, 0xd7, 0x26, 0xb9, 0x3f, 0x11,
+ 0x5e, 0x62, 0xde, 0x41, 0x9a, 0xd4, 0xbc, 0xb8, 0xe3, 0xa9,
+ 0xae, 0x57, 0xc4, 0x13, 0x19, 0x2d, 0xd8, 0x52, 0x9f, 0xc2,
+ 0xc9, 0x9f, 0xc2, 0xcf, 0x21, 0xf1, 0x7c, 0xbe, 0x64, 0xd2,
+ 0x73, 0xdc, 0xd7, 0x3, 0x36, 0x77, 0x1e, 0x7b, 0xd7, 0x79,
+ 0xe2, 0x94, 0xe5, 0x8f, 0xbd, 0x70, 0xd2, 0x8e, 0x4d, 0x7c,
+ 0x66, 0x25, 0xfe, 0xf0, 0xfc, 0xff, 00, 0x16, 0xff, 00,
+ 0x7a, 0x66, 0xdc, 0x2e, 0x73, 0x59, 0x17, 0x69, 0x80, 0x6b,
+ 0x6e, 0xe0, 0x75, 0xac, 0xd9, 0x2d, 0x9a, 0xea, 0x78, 0xa1,
+ 0x8f, 0x97, 0x91, 0x82, 0x28, 0x3e, 0xa4, 0xe0, 0x56, 0x94,
+ 0x5e, 0xa6, 0xd4, 0x1e, 0xb6, 0x3e, 0xbe, 0xfd, 0x82, 0x3c,
+ 0x18, 0xd2, 0x59, 0xdc, 0xea, 0x6c, 0x83, 0xcc, 0xba, 0xbd,
+ 0x8, 0xa4, 0xe7, 0x98, 0x97, 0x69, 0x6f, 0xd4, 0x1a, 0xfd,
+ 0x10, 0xb5, 0x4d, 0xaa, 0x7, 0x40, 0x2b, 0xe7, 0xf, 0xd9,
+ 0x2b, 0xc0, 0x3, 0xc2, 0x5e, 0xe, 0xd2, 0x20, 0x31, 0xa8,
+ 0x78, 0x6d, 0x12, 0x49, 0x4e, 0x3f, 0xe5, 0xb3, 0xaa, 0x96,
+ 0xed, 0xee, 0x6b, 0xe9, 0x38, 0x17, 0x8a, 0xfa, 0xda, 0x71,
+ 0xe5, 0x82, 0x47, 0xdb, 0xd2, 0x8f, 0x2c, 0x12, 0x2e, 0x42,
+ 0x38, 0xab, 0xf0, 0x2d, 0x52, 0x84, 0x70, 0x2b, 0x46, 0x5,
+ 0xe2, 0xb4, 0x36, 0x2e, 0x40, 0x39, 0x15, 0xa5, 0x6e, 0x2a,
+ 0x84, 0xb, 0xcd, 0x69, 0x5b, 0x8c, 0x62, 0x80, 0x2e, 0x46,
+ 0x2a, 0xe4, 0x23, 0x8a, 0xab, 0x18, 0xe6, 0xae, 0x44, 0x38,
+ 0x14, 0x1, 0x66, 0x3e, 0xd5, 0x61, 0x3a, 0x54, 0x11, 0x8e,
+ 0x95, 0x61, 0x7, 0x14, 0x1, 0x32, 0x54, 0xab, 0x51, 0xa8,
+ 0xa9, 0x7, 0x4a, 00, 0x7a, 0xf4, 0xa9, 0x7, 0x6a, 0x60,
+ 0x1d, 0xa9, 0xeb, 0x40, 0xe, 0xa2, 0x8a, 0x28, 0x1, 0xc2,
+ 0x96, 0x8a, 0x28, 00, 0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a,
+ 0x28, 0x3, 0x31, 0x96, 0xa0, 0x91, 0x2a, 0xd3, 0xe, 0x6a,
+ 0x17, 0x5e, 0xb4, 0x1, 0x52, 0x45, 0xe6, 0xbc, 0xd3, 0xe2,
+ 0xa7, 0xc1, 0xdb, 0x1f, 0x88, 0x71, 0x46, 0xeb, 0x24, 0x56,
+ 0x37, 0x91, 0xe7, 0x73, 0x98, 0x3, 0xac, 0xab, 0x8f, 0xba,
+ 0xc3, 0x23, 0xb8, 0x1c, 0xf3, 0x8a, 0xf5, 0x6, 0x4a, 0xaf,
+ 0x22, 0x52, 0x69, 0x49, 0x59, 0x89, 0xa5, 0x25, 0x67, 0xb1,
+ 0xf9, 0xcb, 0xf1, 0x13, 0xe0, 0xb5, 0xef, 0x85, 0x35, 0x8b,
+ 0x8b, 0x52, 0x63, 0xf3, 0x14, 0x96, 0x11, 0x81, 0xc1, 0x5f,
+ 0x50, 0x7f, 0xe, 0xf8, 0xaf, 0x3d, 0x83, 0x41, 0xf3, 0x6e,
+ 0xbc, 0xb7, 0xc0, 0x23, 0xd4, 0x57, 0xe9, 0xf7, 0x89, 0x7c,
+ 0x29, 0xa6, 0x78, 0xa6, 0xc1, 0xed, 0x35, 0x2b, 0x55, 0x9e,
+ 0x36, 0x18, 0x7, 0x38, 0x65, 0x3e, 0xa0, 0x8e, 0x6b, 0xe6,
+ 0x7f, 0x8a, 0x1f, 00, 0xa7, 0xd0, 0x6e, 0x7e, 0xd9, 0xa7,
+ 0xc3, 0x2d, 0xee, 0x9e, 0xa0, 0x9f, 0x38, 0x6d, 0xdf, 0x1f,
+ 0xb3, 0x7a, 0xf4, 0xeb, 0x8c, 0x57, 0xe7, 0xd9, 0x9f, 0xb,
+ 0x46, 0xa3, 0xf6, 0xd8, 0x1d, 0x1f, 0x6e, 0x8f, 0xfc, 0x8f,
+ 0xca, 0xf3, 0x9e, 0xb, 0x85, 0x57, 0xf5, 0x8c, 0xb9, 0xf2,
+ 0xcb, 0xac, 0x7a, 0x3f, 0x4e, 0xdf, 0x91, 0xf3, 0xf5, 0x9f,
+ 0x83, 0x3, 0x81, 0xca, 0xff, 00, 0xdf, 0x35, 0xa9, 0xf,
+ 0x81, 0xf3, 0xdd, 0x49, 0xff, 00, 0x76, 0xbb, 0x8d, 0x2a,
+ 0xd6, 0x4, 0xa, 0xac, 0xc0, 0x30, 0x1c, 0x66, 0xba, 0xe8,
+ 0xb4, 0x55, 0x65, 0x52, 0x6, 0x46, 0x2b, 0xe7, 0xe9, 0xe1,
+ 0x2a, 0x50, 0xf7, 0x6b, 0x41, 0xc5, 0xf9, 0x9f, 0x2f, 0x4b,
+ 0x3, 0x57, 0xd, 0xee, 0xd7, 0x83, 0x8b, 0xf3, 0x3c, 0x71,
+ 0xfc, 0xa, 0x7f, 0xbc, 0x9f, 0xf7, 0xcd, 0x42, 0xfe, 0x7,
+ 0xc7, 0xf1, 0x27, 0xfd, 0xf3, 0x5e, 0xcd, 0x2e, 0x8c, 0x39,
+ 0xf9, 0x2a, 0xa4, 0x9a, 0x37, 0xfb, 0x6, 0xbb, 0x14, 0x20,
+ 0x77, 0xa8, 0x53, 0x3c, 0x75, 0xbc, 0x10, 0x7d, 0x53, 0xfe,
+ 0xf8, 0xa8, 0x9b, 0xc0, 0xf9, 0xfe, 0xe1, 0xff, 00, 0x80,
+ 0xa, 0xf6, 0x23, 0xa4, 0xf, 0xee, 0x1a, 0x63, 0x68, 0xe3,
+ 0xfb, 0x94, 0xf9, 0x20, 0x5f, 0xb3, 0x81, 0xe3, 0x4f, 0xe0,
+ 0x5c, 0xe7, 0x38, 0xfc, 0x14, 0x54, 0x2f, 0xe0, 0x51, 0xdf,
+ 0x1f, 0xf7, 0xc8, 0xaf, 0x67, 0x6d, 0x19, 0x4f, 0xf0, 0x53,
+ 0xe, 0x8a, 0xbf, 0xdc, 0x34, 0xbd, 0x9c, 0x9, 0xf6, 0x50,
+ 0x3c, 0x4d, 0xfc, 0xc, 0xbf, 0xec, 0xfe, 0x2b, 0x50, 0xbf,
+ 0x81, 0xd4, 0x9e, 0xa8, 0x3f, 0xe0, 0x35, 0xed, 0xc7, 0x44,
+ 0x5f, 0xee, 0x1a, 0x63, 0x68, 0x4a, 0x7f, 0x80, 0xd2, 0x74,
+ 0xa2, 0xc5, 0xec, 0x20, 0xcf, 0xe, 0x7f, 0x2, 0x83, 0xdd,
+ 0x3f, 0xef, 0x9a, 0x81, 0xfc, 0x8, 0x8, 0xea, 0xbf, 0xf7,
+ 0xc8, 0xaf, 0x75, 0x6d, 0x5, 0x71, 0xf7, 0xd, 0x44, 0x7c,
+ 0x3e, 0xb8, 0xfb, 0x87, 0xf4, 0xa5, 0xec, 0x62, 0x4f, 0xd5,
+ 0xe0, 0x78, 0x53, 0x78, 0xc, 0x7b, 0x7f, 0xdf, 0x22, 0xa1,
+ 0x6f, 0x1, 0x8f, 0x55, 0xfc, 0x50, 0x57, 0xbb, 0x37, 0x87,
+ 0x93, 0xfb, 0x95, 0x1b, 0x78, 0x71, 0xf, 0xf0, 0x52, 0xfa,
+ 0xbc, 0x49, 0xfa, 0xac, 0x4f, 0x6, 0x7f, 0x2, 0xf, 0xef,
+ 0x20, 0xff, 00, 0x80, 0x54, 0xd, 0xe0, 0x51, 0x9f, 0xbe,
+ 0xa3, 0xfe, 0x3, 0x5e, 0xf6, 0xde, 0x1a, 0x8c, 0x8c, 0x6c,
+ 0xa8, 0x8f, 0x86, 0x50, 0xff, 00, 0x7, 0xeb, 0x52, 0xf0,
+ 0xc8, 0x97, 0x84, 0x47, 0x81, 0xbf, 0x81, 0x1, 0xff, 00,
+ 0x96, 0x8a, 0x7f, 0xe0, 0x35, 0x13, 0xf8, 0xc, 0xff, 00,
+ 0x79, 0x7f, 0xef, 0x9a, 0xf7, 0xd7, 0xf0, 0xba, 0x7f, 0xcf,
+ 0x33, 0xf9, 0xd4, 0x2f, 0xe1, 0x65, 0xc1, 0xf9, 0xf, 0xe9,
+ 0x4b, 0xea, 0xc8, 0x5f, 0x54, 0x47, 0x81, 0x37, 0x81, 0x1b,
+ 0xb1, 0x5f, 0xfb, 0xe6, 0xa1, 0x6f, 0x2, 0xb8, 0xfe, 0x25,
+ 0x1f, 0xf0, 0x1a, 0xf7, 0xe6, 0xf0, 0xaa, 0x9f, 0xf9, 0x66,
+ 0x7f, 0x4a, 0x89, 0xbc, 0x24, 0xa4, 0xf0, 0x94, 0xbe, 0xac,
+ 0x4f, 0xd5, 0x17, 0x63, 0xc0, 0x5f, 0xc1, 0xe, 0x3a, 0xb2,
+ 0xfe, 0x55, 0x13, 0x78, 0x29, 0x87, 0x1b, 0xc7, 0xe5, 0x5e,
+ 0xfc, 0xde, 0x12, 0x5c, 0x1f, 0x93, 0xfc, 0xfe, 0x75, 0xb,
+ 0xf8, 0x45, 0x7f, 0xb8, 0x6a, 0x7e, 0xac, 0x4b, 0xc2, 0x1e,
+ 0x2, 0xde, 0xe, 0x90, 0x7f, 0x10, 0xfc, 0xaa, 0x26, 0xf0,
+ 0x7c, 0xbf, 0xde, 0x1f, 0x95, 0x7b, 0xe3, 0x78, 0x4c, 0x3,
+ 0xfe, 0xac, 0xfe, 0x75, 0x13, 0xf8, 0x48, 0x7f, 0xcf, 0x23,
+ 0xf9, 0x8a, 0x9f, 0xab, 0x13, 0xf5, 0x53, 0xc1, 0xf, 0x84,
+ 0xa5, 0x1f, 0xc4, 0x3f, 0x2a, 0x89, 0xbc, 0x2d, 0x22, 0xf5,
+ 0x65, 0xfc, 0xab, 0xde, 0x9b, 0xc2, 0x3f, 0xf4, 0xc8, 0xfe,
+ 0x95, 0x13, 0xf8, 0x3f, 0x3f, 0xf2, 0xcc, 0xd2, 0xf6, 0xc,
+ 0x9f, 0xab, 0x48, 0xf0, 0x66, 0xf0, 0xcb, 0xf6, 0x23, 0xf2,
+ 0xa6, 0x37, 0x87, 0x25, 0xc7, 0x5f, 0xd2, 0xbd, 0xd9, 0xbc,
+ 0x1c, 0xf, 0xfc, 0xb3, 0xa8, 0x24, 0xf0, 0x70, 0xff, 00,
+ 0x9e, 0x47, 0xfc, 0xfe, 0x34, 0xbd, 0x8c, 0x85, 0xf5, 0x79,
+ 0x9e, 0x16, 0x7c, 0x3b, 0x20, 0xf4, 0xfc, 0xa9, 0x87, 0x42,
+ 0x71, 0xe9, 0x5e, 0xe0, 0xfe, 0x10, 0x51, 0xff, 00, 0x2c,
+ 0xbf, 0x95, 0x40, 0xde, 0x11, 0x1f, 0xf3, 0xc8, 0xfe, 0x62,
+ 0x97, 0xb2, 0x90, 0xbd, 0x84, 0xcf, 0x12, 0x3a, 0x23, 0xf,
+ 0x4a, 0x61, 0xd1, 0x9f, 0xd0, 0x7e, 0x55, 0xed, 0x6f, 0xe0,
+ 0xf5, 0x3f, 0xf2, 0xc9, 0x87, 0xe2, 0x2a, 0x27, 0xf0, 0x6a,
+ 0xff, 00, 0xcf, 0x26, 0x3f, 0x8d, 0x2f, 0x67, 0x31, 0x7b,
+ 0x2a, 0x87, 0x8b, 0x1d, 0x1d, 0xc7, 0x6f, 0xd2, 0x9a, 0xda,
+ 0x53, 0xe, 0xd5, 0xec, 0xaf, 0xe0, 0xc1, 0xff, 00, 0x3c,
+ 0x8d, 0x42, 0xfe, 0xd, 00, 0xf0, 0x86, 0x97, 0x24, 0xd0,
+ 0xbd, 0x9d, 0x53, 0xc7, 0x1b, 0x4b, 0x34, 0xc3, 0xa6, 0x9f,
+ 0x7a, 0xf5, 0xf7, 0xf0, 0x70, 0xfe, 0xe3, 0x55, 0x77, 0xf0,
+ 0x70, 0xff, 00, 0x9e, 0x64, 0xfe, 0x34, 0xad, 0x34, 0x4f,
+ 0x2d, 0x54, 0x79, 0x41, 0xd3, 0x88, 0xa6, 0x9d, 0x3d, 0xbd,
+ 0xff, 00, 0x2a, 0xf5, 0x36, 0xf0, 0x76, 0x7f, 0xe5, 0x99,
+ 0xfc, 0xff, 00, 0xfa, 0xf5, 0x13, 0x78, 0x37, 0xaf, 0xee,
+ 0xcd, 0x1e, 0xf8, 0x7e, 0xf0, 0xf2, 0xf3, 0x62, 0x47, 0x7a,
+ 0x4f, 0xb1, 0x37, 0xad, 0x7a, 0x63, 0xf8, 0x39, 0xbf, 0xe7,
+ 0x91, 0x35, 0x5d, 0xfc, 0x1e, 0xc3, 0xfe, 0x59, 0x37, 0xe7,
+ 0x45, 0xe6, 0x17, 0xa8, 0x8f, 0x3a, 0xfb, 0x23, 0xa, 0x3e,
+ 0xca, 0x6b, 0xbf, 0x7f, 0x8, 0xb0, 0x3f, 0xea, 0xdb, 0xf3,
+ 0xa8, 0x9b, 0xc2, 0x6f, 0xfd, 0xc3, 0xf5, 0xa5, 0xcd, 0x3e,
+ 0xc1, 0xcd, 0x53, 0xb1, 0xc1, 0xfd, 0x95, 0xa9, 0xd, 0xbb,
+ 0xa, 0xee, 0x1b, 0xc2, 0xae, 0x3f, 0x84, 0xfe, 0x75, 0x1b,
+ 0x78, 0x5e, 0x41, 0xfc, 0xd, 0xf9, 0xd1, 0xcf, 0x2e, 0xc2,
+ 0xf6, 0x93, 0xea, 0x8e, 0x2c, 0xc0, 0xde, 0xd4, 0x86, 0x16,
+ 0xae, 0xbd, 0xfc, 0x35, 0x20, 0xfe, 0x6, 0xfc, 0xea, 0x13,
+ 0xe1, 0xe9, 0x7, 0xf0, 0xd1, 0xce, 0xfb, 0xf, 0xda, 0xbe,
+ 0xc7, 0x28, 0x63, 0x6f, 0x4a, 0x36, 0x37, 0xa1, 0xae, 0xa0,
+ 0xf8, 0x7e, 0x4f, 0xee, 0x54, 0x6d, 0xa1, 0x4b, 0xd9, 0xd,
+ 0x1c, 0xfe, 0x41, 0xed, 0x9f, 0x63, 0x9a, 0xda, 0x7d, 0x28,
+ 0xc7, 0xb5, 0x74, 0x2d, 0xa2, 0xc9, 0xfd, 0xc3, 0xf9, 0xd4,
+ 0x67, 0x47, 0x90, 0x75, 0x8f, 0xf5, 0x14, 0x7b, 0x44, 0x35,
+ 0x59, 0x76, 0x30, 0x68, 0xad, 0xb6, 0xd2, 0x1c, 0x1f, 0xb8,
+ 0x69, 0xad, 0xa5, 0x3f, 0xf7, 0xd, 0x3f, 0x68, 0x83, 0xda,
+ 0xa3, 0x1a, 0x8a, 0xd6, 0xfe, 0xca, 0x6e, 0xe8, 0x69, 0x87,
+ 0x4d, 0x6f, 0xee, 0x53, 0xe7, 0x43, 0xf6, 0xb1, 0x33, 0x28,
+ 0xad, 0x3, 0xa7, 0x1f, 0xee, 0x9a, 0x4f, 0xb0, 0xfb, 0x53,
+ 0xe7, 0x88, 0xfd, 0xa4, 0x4a, 0x14, 0x55, 0xd3, 0x60, 0x7f,
+ 0xc9, 0xa6, 0xfd, 0x85, 0xbd, 0xd, 0x1c, 0xc8, 0xaf, 0x69,
+ 0x12, 0xa5, 0x15, 0x6f, 0xec, 0x44, 0x76, 0x34, 0xcf, 0xb2,
+ 0x37, 0xa5, 0x3e, 0x64, 0x1c, 0xf1, 0x2b, 0xe6, 0x8a, 0x9c,
+ 0xda, 0xb0, 0xa3, 0xec, 0xcd, 0x8e, 0x94, 0x5d, 0x15, 0xcd,
+ 0x12, 0xa, 0x2a, 0x5f, 0x21, 0xbd, 0x39, 0xa4, 0xf2, 0x5f,
+ 0xd0, 0xd3, 0xb8, 0xf9, 0x91, 0x1d, 0x14, 0xf3, 0x13, 0x7a,
+ 0x1a, 0x4f, 0x2d, 0xb1, 0xd2, 0x9e, 0x81, 0x74, 0x36, 0x8a,
+ 0x76, 0xc6, 0xf4, 0xa4, 0xd8, 0x47, 0x63, 0x40, 0x5d, 0x9,
+ 0x46, 0x69, 0x76, 0x9f, 0x4a, 0x30, 0x68, 0x1, 0x32, 0x68,
+ 0xcd, 0x18, 0xa2, 0x80, 0x17, 0x79, 0xf5, 0xa5, 0xde, 0xde,
+ 0xb4, 0xda, 0x28, 0xb0, 0x58, 0x77, 0x98, 0xde, 0xa6, 0x94,
+ 0x48, 0xd9, 0xea, 0x7f, 0x3a, 0x65, 0x18, 0xa4, 0x16, 0x25,
+ 0xf3, 0x9b, 0xd7, 0xf5, 0xa3, 0xcf, 0x61, 0xde, 0xa2, 0xc5,
+ 0x18, 0xa0, 0x5c, 0xa8, 0x97, 0xed, 0x6, 0x97, 0xed, 0x2c,
+ 0x3d, 0x6a, 0x1a, 0x29, 0x59, 0xb, 0x95, 0x13, 0x8b, 0xa6,
+ 0xf7, 0xa7, 0x7d, 0xa9, 0xbd, 0x3f, 0x5a, 0xad, 0x45, 0x16,
+ 0x41, 0xca, 0xbb, 0x16, 0x4d, 0xdb, 0x7a, 0x52, 0x8b, 0xc3,
+ 0xe9, 0x55, 0x68, 0xa5, 0xca, 0x85, 0xc8, 0x8b, 0x82, 0xf4,
+ 0x8a, 0x51, 0x7e, 0x47, 0x73, 0xf9, 0xd5, 0x2a, 0x28, 0xe5,
+ 0x41, 0xc9, 0x1e, 0xc5, 0xf1, 0xa8, 0x1f, 0x56, 0xfc, 0xe9,
+ 0x45, 0xfb, 0xf, 0xe2, 0x6f, 0xce, 0xb3, 0xe8, 0xa3, 0x95,
+ 0xb, 0xd9, 0xc4, 0xd2, 0x1a, 0x9b, 0x8f, 0xe3, 0x61, 0xff,
+ 00, 0x2, 0xa7, 0x8d, 0x52, 0x41, 0xfc, 0x6d, 0xff, 00,
+ 0x7d, 0x1a, 0xca, 0xa2, 0x97, 0x2a, 0x17, 0xb3, 0x46, 0xc2,
+ 0xea, 0xd2, 0xaf, 0xf1, 0xb7, 0xfd, 0xf5, 0x52, 0x8d, 0x72,
+ 0x60, 0x3e, 0xfb, 0x7e, 0x66, 0xb0, 0xa9, 0x41, 0xc5, 0x1c,
+ 0xa1, 0xec, 0xd7, 0x73, 0x7d, 0x7c, 0x41, 0x38, 0xfe, 0x36,
+ 0xff, 00, 0xbe, 0x8d, 0x48, 0xbe, 0x23, 0x9d, 0x7f, 0x8d,
+ 0x8f, 0xfc, 0x8, 0xd7, 0x39, 0xb8, 0xfa, 0xd2, 0xef, 0x3e,
+ 0xa6, 0x8e, 0x57, 0xdc, 0x7c, 0x8f, 0xa3, 0x3a, 0x71, 0xe2,
+ 0x7b, 0x85, 0x1c, 0x33, 0x7f, 0xdf, 0x46, 0x90, 0xf8, 0xba,
+ 0xe5, 0x47, 0x56, 0xff, 00, 0xbe, 0xcd, 0x73, 0x25, 0xcf,
+ 0xa9, 0xa8, 0xe4, 0x90, 0x9a, 0xd2, 0x29, 0xf7, 0x2e, 0x2a,
+ 0x49, 0xee, 0x75, 0x63, 0xc7, 0x37, 0x9, 0xfc, 0x2d, 0xff,
+ 00, 0x7f, 0x2a, 0x44, 0xf8, 0x85, 0x2a, 0xf5, 0x57, 0x1f,
+ 0xf6, 0xd2, 0xb8, 0xa3, 0xcf, 0x7a, 0x6b, 0x29, 0x3d, 0xeb,
+ 0xaa, 0x15, 0x27, 0x1d, 0x99, 0xdb, 0xa, 0xd5, 0x21, 0xb3,
+ 0x3b, 0xe8, 0xfe, 0x21, 0xc8, 0xc7, 0xee, 0xb7, 0xfd, 0xf7,
+ 0x5a, 0x36, 0xfe, 0x34, 0x69, 0x7a, 0xee, 0xff, 00, 0xbe,
+ 0xab, 0xcb, 0xc2, 0x11, 0xde, 0x9e, 0x97, 0x12, 0x44, 0x7e,
+ 0x52, 0x6b, 0xbe, 0x9e, 0x3a, 0xa4, 0x77, 0x3d, 0x3a, 0x39,
+ 0x95, 0x58, 0x3d, 0x4f, 0x63, 0xb6, 0xf1, 0x26, 0xef, 0x5f,
+ 0xce, 0xb4, 0x21, 0xd7, 0x77, 0xe, 0x87, 0xf3, 0xaf, 0x1a,
+ 0xb6, 0xd6, 0xe5, 0x88, 0x8c, 0xb5, 0x6f, 0x69, 0xde, 0x20,
+ 0x27, 0xab, 0x8c, 0x7d, 0x2b, 0xdb, 0xc3, 0xe6, 0x57, 0x76,
+ 0x6c, 0xfa, 0x3c, 0x2e, 0x6d, 0x77, 0x66, 0xcf, 0x4d, 0x7d,
+ 0x44, 0x5c, 0xe, 0x41, 0x1f, 0x8d, 0x65, 0xeb, 0x3, 0x36,
+ 0xac, 0x7a, 0xd6, 0x2d, 0xae, 0xae, 0x1c, 0x7d, 0xea, 0x5b,
+ 0xcd, 0x57, 0x75, 0xbb, 0x2e, 0xe1, 0x5e, 0xea, 0xc5, 0x46,
+ 0x71, 0x67, 0xd2, 0x47, 0x17, 0x19, 0xc1, 0xea, 0x79, 0xff,
+ 00, 0x8a, 00, 0x66, 0x7f, 0xa9, 0xae, 0x12, 0x61, 0xc9,
+ 0xfa, 0xd7, 0x6d, 0xe2, 0x9, 0x3c, 0xc6, 0x93, 0x7, 0x3c,
+ 0xd7, 0x19, 0x30, 0xc9, 0x35, 0xf2, 0xd5, 0xdd, 0xe7, 0x73,
+ 0xe2, 0xf1, 0x32, 0xe6, 0xa9, 0x73, 0x3a, 0x75, 0xe2, 0xbd,
+ 0x2b, 0xf6, 0x71, 0xf8, 0x63, 0x2f, 0x8f, 0x7c, 0x73, 0xd,
+ 0xeb, 0x98, 0xd7, 0x4f, 0xd2, 0xa4, 0x59, 0xa5, 0x59, 0x17,
+ 0x77, 0x9a, 0xd9, 0xf9, 0x53, 0x1d, 0x7, 0x73, 0x9e, 0x7a,
+ 0x57, 0x9d, 0xb4, 0x4f, 0x71, 0x22, 0x45, 0x1a, 0x97, 0x91,
+ 0x88, 0x1, 0x47, 0x73, 0x5f, 0xa4, 0x7f, 0xb3, 0x1f, 0xc2,
+ 0x9b, 0x5f, 0xb, 0xf8, 0x6a, 0xc6, 0x3f, 0x24, 0x85, 0x8d,
+ 0x4, 0xb2, 0x48, 0x4f, 0xdf, 0x98, 0x81, 0x93, 0xf9, 0xe,
+ 0x95, 0xe9, 0xe5, 0xf4, 0xbd, 0xa4, 0xf9, 0x9e, 0xc8, 0xf6,
+ 0x32, 0xca, 0x3e, 0xd6, 0x7c, 0xcf, 0x64, 0x7b, 0x67, 0x82,
+ 0x74, 0x21, 0xa1, 0xe8, 0xb0, 0xc2, 0x76, 0x99, 0x5c, 0x7,
+ 0x7c, 0xc, 0x60, 0x91, 0xd3, 0xf0, 0xe9, 0x5d, 0x64, 0x2b,
+ 0xc0, 0xaa, 0x70, 0x20, 0x38, 0xad, 0x8, 0x90, 0x71, 0x5f,
+ 0x4e, 0x7d, 0x89, 0x6a, 0x11, 0xc8, 0xad, 0x8, 0x7, 0x15,
+ 0x52, 0x4, 0xe6, 0xb4, 0x21, 0x4e, 0x28, 0x2, 0xd4, 0xb,
+ 0xd2, 0xb4, 0xed, 0xc5, 0x51, 0x85, 0x3e, 0x61, 0x5a, 0x30,
+ 0xe, 0x28, 0x2, 0xd4, 0x62, 0xae, 0x46, 0xbd, 0x2a, 0xac,
+ 0x2b, 0xcd, 0x5d, 0x8c, 0x50, 0x4, 0xc8, 0x39, 0xa9, 0xd0,
+ 0x74, 0xa8, 0x90, 0x74, 0xa9, 0xd0, 0x50, 0x4, 0xab, 0x52,
+ 0x1, 0xd2, 0x98, 0xa2, 0xa4, 0x1d, 0x68, 0x1, 0xeb, 0xd6,
+ 0x9e, 0xb4, 0xc5, 0xe9, 0x52, 0xe, 0x94, 00, 0x52, 0xaf,
+ 0x26, 0x92, 0x95, 0x68, 0x1, 0xd4, 0x51, 0x45, 00, 0x14,
+ 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x51, 0x61, 0xed,
+ 0x51, 0xba, 0xe4, 0x54, 0xf8, 0xcd, 0x30, 0x8c, 0x9a, 00,
+ 0xac, 0xcb, 0x50, 0x32, 0x66, 0xae, 0x32, 0x8a, 0x85, 0xd4,
+ 0x50, 0x5, 0x27, 0x8f, 0x9a, 0x82, 0x48, 0x81, 0x7, 0x23,
+ 0xad, 0x5e, 0x64, 0xa8, 0x9e, 0x3e, 0x28, 0x3, 0x81, 0xf1,
+ 0x27, 0xc2, 0xaf, 0xe, 0xf8, 0x92, 0x49, 0x26, 0xb9, 0xb0,
+ 0x51, 0x72, 0xe7, 0x26, 0x64, 0x66, 0x4, 0x9f, 0xc0, 0xd7,
+ 0x9a, 0xea, 0x5f, 0x2, 0xf5, 0xbd, 0x2a, 0x69, 0x1b, 0x42,
+ 0xd5, 0x22, 0x78, 0x98, 0xf1, 0x1c, 0xab, 0xb3, 0x3, 0xd3,
+ 0x3f, 0x35, 0x7d, 00, 0xe9, 0xed, 0x50, 0xb4, 0x5c, 0x74,
+ 0xa8, 0x9c, 0x23, 0x35, 0x69, 0xab, 0xa3, 0x39, 0xd3, 0x85,
+ 0x45, 0xcb, 0x35, 0x75, 0xe6, 0x7c, 0xd3, 0x75, 0xe0, 0xcf,
+ 0x1c, 0x69, 0xd, 0x9b, 0x8d, 0x3a, 0x3b, 0xa8, 0xc7, 0x3b,
+ 0xa2, 0x96, 0x3f, 0xf1, 0xcf, 0xe9, 0x59, 0x13, 0xde, 0xea,
+ 0x56, 0x80, 0x8b, 0x9d, 0xe, 0x65, 0x20, 0xe0, 0x95, 0x6c,
+ 0xff, 00, 0x21, 0x5f, 0x53, 0x3c, 0x3c, 0x54, 0x12, 0x40,
+ 0x18, 0x10, 0x40, 0x20, 0xf1, 0x83, 0x5c, 0x33, 0xcb, 0xb0,
+ 0xb3, 0xde, 0x8, 0xf3, 0x2a, 0x65, 0x38, 0x2a, 0xba, 0xba,
+ 0x6b, 0xe5, 0xa7, 0xe4, 0x7c, 0xb3, 0xfd, 0xbb, 0x18, 0xff,
+ 00, 0x59, 0xa7, 0xdc, 0x2f, 0xfc, 00, 0xff, 00, 0x85,
+ 0x1f, 0xf0, 0x91, 0xe9, 0xe3, 0xef, 0xc7, 0x32, 0x7d, 0x52,
+ 0xbe, 0x97, 0x9f, 0x44, 0xb2, 0x9b, 0x3b, 0xec, 0xed, 0xdf,
+ 0x3c, 0x1d, 0xd1, 0x29, 0xfe, 0x95, 0x9f, 0x37, 0x83, 0xb4,
+ 0x69, 0x81, 0xf3, 0x34, 0x8b, 0x7, 0x7, 0xae, 0xeb, 0x64,
+ 0x3f, 0xd2, 0xb9, 0x5e, 0x4f, 0x85, 0x7b, 0x27, 0xf7, 0x9c,
+ 0x92, 0xc8, 0x70, 0x4f, 0xa3, 0x5f, 0x33, 0xe7, 0x7f, 0xf8,
+ 0x48, 0xf4, 0xb6, 0xfe, 0x29, 0x7, 0xd5, 0x29, 0x7f, 0xb7,
+ 0x74, 0x93, 0xd6, 0x62, 0x3f, 0xe0, 0x6, 0xbd, 0xf2, 0x5f,
+ 00, 0x78, 0x79, 0xba, 0xe8, 0x7a, 0x78, 0xff, 00, 0x76,
+ 0xd9, 0x7, 0xf2, 0x15, 0x4a, 0x5f, 0x86, 0x7e, 0x1b, 0x93,
+ 0xae, 0x8b, 0x6d, 0xff, 00, 0x1, 0x52, 0x3f, 0x95, 0x66,
+ 0xf2, 0x5c, 0x3f, 0x46, 0xcc, 0x9f, 0xf, 0x61, 0x1e, 0xcd,
+ 0xfd, 0xe7, 0x89, 0xd, 0x57, 0x4a, 0x7e, 0x97, 0x23, 0x3f,
+ 0xee, 0x37, 0xf8, 0x53, 0xd6, 0xf3, 0x4d, 0x90, 0xfc, 0xb3,
+ 0x83, 0xff, 00, 0x1, 0x6f, 0xf0, 0xaf, 0x5f, 0x93, 0xe1,
+ 0x37, 0x85, 0xe4, 0xe0, 0xe9, 0x8, 0x3f, 0xdd, 0x96, 0x41,
+ 0xfc, 0x9a, 0xa9, 0xcd, 0xf0, 0x73, 0xc3, 0x2f, 0xc2, 0xd8,
+ 0xb4, 0x67, 0xda, 0x69, 0xf, 0xf3, 0x6a, 0x87, 0x92, 0x51,
+ 0x7b, 0x49, 0x99, 0x3e, 0x1d, 0xa1, 0xd2, 0x6c, 0xf3, 0x15,
+ 0x16, 0x72, 0xf, 0x96, 0x54, 0xfd, 0x69, 0xff, 00, 0x61,
+ 0x88, 0xe3, 0xe, 0x87, 0xfe, 0x4, 0x2b, 0xbf, 0x9b, 0xe0,
+ 0x96, 0x82, 0xc7, 0xe4, 0x13, 0xa7, 0x18, 0xc0, 0x90, 0xff,
+ 00, 0x5a, 0xa3, 0x27, 0xc0, 0x9d, 0x33, 0x4, 0xc7, 0x7d,
+ 0x79, 0x19, 0xf4, 0xca, 0xe3, 0xf9, 0x56, 0x2f, 0x23, 0x8f,
+ 0x49, 0xbf, 0xb8, 0xc2, 0x5c, 0x39, 0x1f, 0xb3, 0x51, 0xfd,
+ 0xc7, 0x18, 0x74, 0xd4, 0x27, 0x82, 0xa7, 0xfe, 0x4, 0x29,
+ 0xe, 0x94, 0xf, 0x61, 0x5d, 0x5c, 0xbf, 0x4, 0x2, 0x7f,
+ 0xc7, 0xbe, 0xa9, 0x70, 0xf, 0xfb, 0x52, 0x63, 0xf9, 0x2d,
+ 0x54, 0x7f, 0x83, 0x9a, 0xba, 0x9f, 0xdc, 0xeb, 0x4, 0x7f,
+ 0xbd, 0x3b, 0x8f, 0xe4, 0xb5, 0x8b, 0xc8, 0xe7, 0xd2, 0xa1,
+ 0x84, 0xb8, 0x72, 0xa7, 0xd9, 0xa8, 0x73, 0xa7, 0x49, 0xf6,
+ 0xa6, 0x36, 0x93, 0x9f, 0xe1, 0xad, 0xb9, 0x3e, 0x12, 0xf8,
+ 0xa9, 0x7e, 0xe6, 0xaf, 0x1, 0x5f, 0xf6, 0xa7, 0x93, 0x3f,
+ 0xfa, 0xd, 0x30, 0xfc, 0x30, 0xf1, 0x7c, 0x67, 0x8b, 0xfb,
+ 0x66, 0xff, 00, 0xb6, 0xcd, 0xfd, 0x56, 0xb3, 0x79, 0x25,
+ 0x6e, 0x93, 0x46, 0x2f, 0x87, 0x71, 0x1d, 0x26, 0xbf, 0x13,
+ 0x15, 0xb4, 0x8c, 0xff, 00, 0xd, 0x46, 0xda, 0x47, 0xfb,
+ 0x35, 0xb6, 0x7e, 0x1f, 0xf8, 0xd2, 0x33, 0xc4, 0xf6, 0xed,
+ 0xff, 00, 0x3, 0x53, 0xfc, 0xd6, 0xa3, 0x7f, 0x7, 0xf8,
+ 0xce, 0x2c, 0xe6, 0x28, 0x64, 0xc7, 0xa1, 0x53, 0xfc, 0x85,
+ 0x43, 0xc9, 0x71, 0x3d, 0xd7, 0xe2, 0x43, 0xe1, 0xfc, 0x5a,
+ 0xda, 0x4b, 0xf1, 0x31, 0x8e, 0x91, 0x8f, 0xe1, 0xa6, 0x36,
+ 0x91, 0x9f, 0xe1, 0xad, 0x56, 0xd1, 0x7c, 0x59, 0x8, 0xf9,
+ 0xb4, 0xdf, 0x33, 0xfd, 0xd4, 0x27, 0xf9, 0xa, 0x88, 0xc3,
+ 0xe2, 0x58, 0x87, 0xcf, 0xa0, 0x4c, 0xe3, 0xd5, 0x60, 0x73,
+ 0xfc, 0xab, 0x27, 0x94, 0xe2, 0xd7, 0x44, 0xfe, 0x66, 0xf,
+ 0x23, 0xc7, 0x2d, 0x92, 0x7f, 0x33, 0x30, 0xe8, 0xff, 00,
+ 0xec, 0xd3, 0xe, 0x8f, 0x91, 0xf7, 0x6b, 0x41, 0xae, 0xb5,
+ 0x84, 0xff, 00, 0x59, 0xa0, 0x5d, 0xaf, 0xae, 0x6d, 0x9c,
+ 0x52, 0x1d, 0x62, 0x58, 0xc7, 0xef, 0x74, 0xbb, 0xb4, 0xcf,
+ 0xfd, 0x31, 0x3f, 0xe3, 0x59, 0x3c, 0xb7, 0x19, 0x1f, 0xb2,
+ 0x63, 0x2c, 0xa3, 0x1d, 0x1f, 0xb1, 0xf8, 0xa3, 0x35, 0xb4,
+ 0x8e, 0xbf, 0x2d, 0x46, 0xda, 0x3f, 0xfb, 0x35, 0xa4, 0xfe,
+ 0x27, 0xb1, 0x4e, 0x24, 0xb6, 0xb9, 0x46, 0xf7, 0x41, 0xfe,
+ 0x34, 0xd1, 0xe2, 0x7d, 0x30, 0xff, 00, 0xc, 0xab, 0xf5,
+ 0x41, 0xfe, 0x35, 0x93, 0xc1, 0x62, 0x97, 0xfc, 0xbb, 0x66,
+ 0x2f, 0x2e, 0xc7, 0x2f, 0xf9, 0x74, 0xff, 00, 0x3, 0x30,
+ 0xe8, 0xa3, 0xfb, 0xa2, 0x98, 0xda, 0x2f, 0xfb, 0x23, 0xf3,
+ 0xad, 0x81, 0xe2, 0x2d, 0x2c, 0xf7, 0x71, 0xff, 00, 00,
+ 0xa7, 0xd, 0x6f, 0x4b, 0x61, 0xfe, 0xb3, 0x1f, 0x55, 0x35,
+ 0xf, 0xb, 0x89, 0x5f, 0xf2, 0xed, 0xfd, 0xc4, 0x3c, 0x16,
+ 0x2d, 0x6f, 0x49, 0xfd, 0xc6, 0xb, 0x68, 0x80, 0xff, 00,
+ 00, 0x34, 0xd6, 0xd0, 0xc7, 0xf7, 0x5, 0x74, 0x43, 0x53,
+ 0xd3, 0x5c, 0xf1, 0x3a, 0xf, 0xaf, 0x15, 0x28, 0xb9, 0xd3,
+ 0x9f, 0xfe, 0x5e, 0xa0, 0x19, 0xe7, 0x99, 00, 0xac, 0xdd,
+ 0x2a, 0xcb, 0x78, 0x3f, 0xb8, 0xc6, 0x54, 0x2b, 0xc7, 0x7a,
+ 0x6f, 0xee, 0x39, 0x36, 0xd0, 0xc7, 0xf7, 0x29, 0x87, 0x42,
+ 0x7, 0xf8, 0x6b, 0xb1, 0xdb, 0x64, 0xdd, 0x2e, 0x6d, 0xcf,
+ 0xfd, 0xb5, 0x14, 0xa2, 0xca, 0xdd, 0xf9, 0x59, 0x22, 0x23,
+ 0xd9, 0xc1, 0xac, 0xda, 0x92, 0xde, 0x3f, 0x81, 0x93, 0x53,
+ 0x5b, 0xc5, 0xfd, 0xc7, 0xe, 0xde, 0x1f, 0x53, 0xdb, 0xfc,
+ 0xfe, 0x75, 0x1b, 0xf8, 0x71, 0xf, 0xf0, 0xf, 0xf3, 0xf8,
+ 0xd7, 0x7d, 0xfd, 0x96, 0xad, 0xd3, 0x69, 0xfa, 0x52, 0x1d,
+ 0x27, 0x3f, 0xc3, 0x51, 0x75, 0xd8, 0xca, 0xeb, 0xaa, 0x3c,
+ 0xf8, 0xf8, 0x69, 0x3f, 0xb8, 0x3f, 0x33, 0x51, 0xb7, 0x86,
+ 0x97, 0xfb, 0xa3, 0x1f, 0x53, 0x5e, 0x82, 0x74, 0x9e, 0x7e,
+ 0xed, 0x35, 0xb4, 0x8f, 0xf6, 0x5, 0x2b, 0xa0, 0xe6, 0x89,
+ 0xe7, 0x6d, 0xe1, 0x95, 0xfe, 0xe0, 0xfc, 0xea, 0x26, 0xf0,
+ 0xb8, 0x3f, 0xc0, 0x2b, 0xd1, 0x4e, 0x91, 0xfe, 0xc0, 0xa6,
+ 0x7f, 0x64, 0xff, 00, 0xb3, 0x47, 0xba, 0x17, 0x81, 0xe7,
+ 0xd, 0xe1, 0x40, 0x7f, 0x84, 0x7f, 0x9f, 0xc6, 0xa0, 0x7f,
+ 0x9, 0x3, 0xd8, 0x7e, 0x5f, 0xfd, 0x7a, 0xf4, 0xc3, 0xa4,
+ 0x7f, 0xb1, 0x51, 0xb6, 0x91, 0xfe, 0xc5, 0x1e, 0xe8, 0x7b,
+ 0x87, 0x98, 0xb7, 0x84, 0x47, 0xf7, 0x7f, 0xcf, 0xe7, 0x51,
+ 0x37, 0x84, 0xbf, 0xd8, 0x5f, 0xd6, 0xbd, 0x44, 0xe9, 0x1c,
+ 0x7d, 0xca, 0x61, 0xd1, 0xff, 00, 0xd9, 0xa2, 0xd1, 0x17,
+ 0x2c, 0xf, 0x2b, 0x6f, 0x9, 0x1f, 0xf9, 0xe6, 0x3f, 0x3,
+ 0x51, 0x37, 0x84, 0x8f, 0xf7, 0x7, 0xe7, 0x5e, 0xaa, 0x74,
+ 0x61, 0xfd, 0xca, 0x63, 0x68, 0xc3, 0xfe, 0x79, 0x8f, 0xca,
+ 0x97, 0x2c, 0x45, 0xc9, 0x3, 0xca, 0x1b, 0xc2, 0xd, 0xfd,
+ 0xdf, 0xd4, 0x7f, 0x8d, 0x42, 0xfe, 0xe, 0x63, 0xd5, 0x7f,
+ 0x5f, 0xfe, 0xbd, 0x7a, 0xd1, 0xd1, 0x47, 0xf7, 0x17, 0xf2,
+ 0xa8, 0xce, 0x88, 0xa4, 0xff, 00, 0xab, 0x14, 0x38, 0x40,
+ 0x5e, 0xce, 0x7, 0x91, 0x3f, 0x83, 0x88, 0xfe, 0x11, 0xfe,
+ 0x7f, 0x1a, 0x85, 0xbc, 0x24, 0x7f, 0xb9, 0xfc, 0xeb, 0xd8,
+ 0x5b, 0x43, 0x5f, 0xf9, 0xe6, 0x2a, 0x36, 0xd1, 0x17, 0xfb,
+ 0x95, 0x3e, 0xca, 0x2, 0xf6, 0x50, 0x67, 0x8d, 0xbf, 0x84,
+ 0x49, 0xff, 00, 0x96, 0x79, 0xfc, 0x4d, 0x42, 0xde, 0xf,
+ 0x7, 0xfe, 0x59, 0xf, 0xcc, 0xd7, 0xb2, 0xb6, 0x84, 0xa7,
+ 0xf8, 0x2a, 0x36, 0xf0, 0xfa, 0x1f, 0xf9, 0x66, 0x3f, 0x2a,
+ 0x4e, 0x8c, 0x45, 0xec, 0x22, 0x78, 0xcb, 0xf8, 0x3b, 0xfd,
+ 0x81, 0xff, 00, 0x7d, 0x7f, 0xf5, 0xea, 0x16, 0xf0, 0x71,
+ 0x27, 0xee, 0x1, 0xf8, 0xff, 00, 0xf5, 0xeb, 0xda, 0x1b,
+ 0xc3, 0xb1, 0x9f, 0xf9, 0x64, 0xb9, 0xfa, 0x54, 0x67, 0xc3,
+ 0x68, 0x7f, 0xe5, 0x92, 0xfe, 0x54, 0xbd, 0x82, 0x27, 0xea,
+ 0xe8, 0xf1, 0x47, 0xf0, 0x6f, 0xfb, 0x23, 0xf3, 0xff, 00,
+ 0xeb, 0xd4, 0xf, 0xe0, 0xe0, 0x3f, 0xe5, 0x98, 0x3f, 0x9d,
+ 0x7b, 0x6b, 0x78, 0x69, 0x3f, 0xe7, 0x9a, 0xfe, 0xb5, 0x13,
+ 0x78, 0x65, 0x7f, 0xe7, 0x98, 0xfc, 0xcd, 0x2f, 0x60, 0x84,
+ 0xf0, 0xc9, 0x9e, 0x1e, 0xfe, 0xe, 0xcf, 0xf0, 0xf, 0xd6,
+ 0xa2, 0x6f, 0x6, 0xb7, 0x64, 0x15, 0xee, 0x2d, 0xe1, 0x75,
+ 0x3f, 0xf2, 0xcc, 0x7e, 0x75, 0x13, 0x78, 0x51, 0x71, 0xf7,
+ 0x5, 0x4f, 0xd5, 0xd1, 0x1f, 0x55, 0x47, 0x87, 0x37, 0x83,
+ 0x4f, 0x75, 0x5f, 0xf3, 0xf8, 0xd4, 0x4d, 0xe0, 0xc6, 0x3d,
+ 0x10, 0x1f, 0xc7, 0xff, 00, 0xaf, 0x5e, 0xe2, 0xde, 0x13,
+ 0x4f, 0xf9, 0xe6, 0x33, 0xf4, 0xa8, 0x5f, 0xc2, 0x49, 0xff,
+ 00, 0x3c, 0x97, 0xfe, 0xf9, 0xa9, 0xfa, 0xb9, 0x3f, 0x54,
+ 0x47, 0x86, 0xbf, 0x83, 0xd8, 0x1f, 0xf5, 0x63, 0xf3, 0xaa,
+ 0xef, 0xe0, 0xf6, 0xfe, 0xe0, 0xaf, 0x74, 0x7f, 0x8, 0xfa,
+ 0x44, 0xbf, 0x91, 0xa8, 0x4f, 0x84, 0xbd, 0x62, 0x5f, 0xcc,
+ 0xd2, 0xfa, 0xb9, 0x1f, 0x55, 0x3c, 0x31, 0xbc, 0x20, 0xe3,
+ 0xa2, 0xf, 0xf3, 0xf8, 0xd4, 0x67, 0xc2, 0x2e, 0x3f, 0x83,
+ 0xf5, 0xff, 00, 0xeb, 0xd7, 0xb9, 0x3f, 0x84, 0xbf, 0xe9,
+ 0x98, 0x15, 0x13, 0x78, 0x47, 0xfe, 0x99, 0x8a, 0x8f, 0xab,
+ 0x13, 0xf5, 0x43, 0xc3, 0x5f, 0xc2, 0x92, 0x8f, 0xe0, 0x1f,
+ 0x9f, 0xff, 00, 0x5e, 0xa1, 0x93, 0xc2, 0xf2, 0xf, 0xe1,
+ 0x1f, 0x9d, 0x7b, 0x93, 0xf8, 0x3c, 0x67, 0xfd, 0x50, 0xfc,
+ 0xaa, 0x17, 0xf0, 0x79, 0x1d, 0x22, 0x1f, 0x80, 0xa9, 0xfa,
+ 0xbb, 0x27, 0xea, 0xac, 0xf0, 0xe6, 0xf0, 0xcc, 0x98, 0xe8,
+ 0x2a, 0x26, 0xf0, 0xd4, 0xbf, 0xdd, 0xaf, 0x6f, 0x7f, 0x8,
+ 0x1f, 0xf9, 0xe2, 0x3f, 0x23, 0x50, 0xbf, 0x84, 0xf, 0xfc,
+ 0xf1, 0x1f, 0x91, 0xa5, 0xec, 0x24, 0x4f, 0xd5, 0xa4, 0x78,
+ 0x9b, 0x78, 0x72, 0x6f, 0xee, 0xff, 00, 0x2a, 0x89, 0xb4,
+ 0x9, 0x47, 0xf0, 0x8a, 0xf6, 0xb6, 0xf0, 0x78, 0xcf, 0xfa,
+ 0x95, 0xfd, 0x6a, 0x16, 0xf0, 0x72, 0xff, 00, 0xcf, 0x15,
+ 0xa5, 0xec, 0x64, 0x4f, 0xd5, 0xe7, 0xdc, 0xf1, 0x53, 0xa1,
+ 0xc9, 0xfd, 0xc1, 0x4c, 0x3a, 0x2c, 0xbf, 0xdd, 0x1f, 0x9d,
+ 0x7b, 0x43, 0xf8, 0x35, 0x7f, 0xe7, 0x98, 0xfc, 0x2a, 0x9,
+ 0x3c, 0x1a, 0x33, 0xc4, 0x54, 0xbd, 0x94, 0xd0, 0xbd, 0x84,
+ 0xcf, 0x1c, 0x3a, 0x3c, 0xa3, 0xf8, 0x3f, 0x51, 0x51, 0x9d,
+ 0x25, 0xc7, 0xf0, 0xf, 0xcc, 0x57, 0xb0, 0x3f, 0x83, 0x78,
+ 0xff, 00, 0x53, 0xfa, 0x1a, 0x81, 0xbc, 0x1b, 0xff, 00,
+ 0x4c, 0x47, 0xe4, 0x69, 0x7b, 0x39, 0x8b, 0xd9, 0x54, 0x47,
+ 0x91, 0xb6, 0x96, 0xff, 00, 0xdc, 0xfd, 0x45, 0x30, 0xe9,
+ 0xa7, 0x3f, 0x76, 0xbd, 0x69, 0xbc, 0x1a, 0x3f, 0xe7, 0x98,
+ 0xfc, 0xbf, 0xfa, 0xd5, 0xb, 0xf8, 0x3b, 0xfd, 0x81, 0x47,
+ 0x2c, 0xc3, 0x92, 0xa2, 0x3c, 0xab, 0xfb, 0x3f, 0x1f, 0xc2,
+ 0x7f, 0x2a, 0x61, 0xd3, 0xce, 0x4f, 0x18, 0xfc, 0x2b, 0xd4,
+ 0x9b, 0xc1, 0xbf, 0xf4, 0xcd, 0x4f, 0xe3, 0x50, 0x3f, 0x83,
+ 0x5b, 0xfe, 0x79, 0x2f, 0xeb, 0x4a, 0xd3, 0xb, 0x54, 0x3c,
+ 0xc8, 0xd8, 0xfb, 0x1a, 0x69, 0xb2, 0xc7, 0xa9, 0xaf, 0x49,
+ 0x7f, 0x6, 0x37, 0xfc, 0xf2, 0x1f, 0x97, 0xff, 00, 0x5a,
+ 0xa1, 0x7f, 0x7, 0x3f, 0xfc, 0xf3, 0xfd, 0x28, 0xf7, 0xc5,
+ 0x7a, 0x88, 0xf3, 0xbf, 0xb1, 0x9a, 0x69, 0xb4, 0x61, 0x5e,
+ 0x82, 0xde, 0xf, 0x61, 0xff, 00, 0x2c, 0xea, 0x16, 0xf0,
+ 0x9b, 0x8f, 0xf9, 0x66, 0x3f, 0x33, 0x45, 0xe7, 0xd8, 0x39,
+ 0xaa, 0x23, 0x84, 0x6b, 0x56, 0x2, 0x9a, 0x6d, 0x9c, 0x57,
+ 0x6e, 0xde, 0x14, 0x90, 0x7f, 0xcb, 0x31, 0xfa, 0xd4, 0x6d,
+ 0xe1, 0x69, 0x7, 0xf0, 0x1f, 0xca, 0x8e, 0x69, 0x76, 0xf,
+ 0x69, 0x2e, 0xc7, 0x17, 0xf6, 0x77, 0xa4, 0x36, 0xee, 0x3b,
+ 0x57, 0x60, 0x7c, 0x33, 0x28, 0xfe, 0x3, 0xfe, 0x7f, 0xa,
+ 0x88, 0xf8, 0x72, 0x5f, 0xee, 0x51, 0xce, 0xfb, 0x7, 0xb4,
+ 0x97, 0x63, 0x93, 0xf2, 0x5f, 0xd2, 0x8f, 0x29, 0xbd, 0x2b,
+ 0xa8, 0x6f, 0xf, 0xcd, 0xfd, 0xd1, 0xfa, 0xd4, 0x47, 0x40,
+ 0x98, 0x1f, 0xb9, 0xfa, 0x1f, 0xf0, 0xa3, 0xda, 0x79, 0xf,
+ 0xda, 0xbe, 0xc7, 0x37, 0xe5, 0xb0, 0xed, 0x48, 0x50, 0xfa,
+ 0x57, 0x44, 0x74, 0x29, 0xbf, 0xe7, 0x9f, 0xe8, 0x6a, 0x36,
+ 0xd1, 0xa4, 0x1f, 0xf2, 0xce, 0x8f, 0x68, 0x83, 0xda, 0x98,
+ 0x3b, 0x4f, 0xa5, 0x18, 0xad, 0xb3, 0xa4, 0x48, 0x3f, 0x83,
+ 0xf5, 0xa6, 0x9d, 0x29, 0xff, 00, 0xb8, 0x69, 0xfb, 0x44,
+ 0x3f, 0x6c, 0x8c, 0x5c, 0x51, 0x5a, 0xed, 0xa6, 0x3f, 0xfc,
+ 0xf3, 0x3f, 0x95, 0x30, 0xe9, 0xad, 0xfd, 0xc3, 0xf9, 0x53,
+ 0xf6, 0x91, 0x1f, 0xb5, 0x89, 0x97, 0x45, 0x69, 0x1d, 0x3d,
+ 0xbf, 0xb9, 0x4c, 0x36, 0x7, 0xd2, 0x9f, 0x3c, 0x47, 0xed,
+ 0x62, 0x50, 0xa2, 0xaf, 0x1b, 0xc, 0x76, 0xa6, 0xfd, 0x88,
+ 0xd1, 0xcf, 0x11, 0xfb, 0x48, 0x94, 0xea, 0x37, 0xab, 0xc6,
+ 0xcc, 0x8f, 0x5a, 0x63, 0x59, 0x9e, 0xe2, 0xa9, 0x4d, 0x14,
+ 0xa7, 0x1e, 0xe5, 0xa, 0x50, 0x33, 0x57, 0x45, 0xa7, 0xb5,
+ 0xd, 0x6a, 0x17, 0xb5, 0x5f, 0x3a, 0x2f, 0xda, 0x22, 0x9e,
+ 0xda, 0x42, 0xbe, 0xd5, 0x73, 0xc9, 0xa8, 0x5e, 0x2d, 0xb4,
+ 0xd4, 0xae, 0x35, 0x2b, 0x95, 0x18, 0x60, 0xd2, 0x2c, 0xad,
+ 0x11, 0xf9, 0x4d, 0x4c, 0xc9, 0x9e, 0x2a, 0x36, 0x80, 0xfa,
+ 0x56, 0xd1, 0x95, 0x8d, 0xe1, 0x3e, 0x57, 0x72, 0xfd, 0x8e,
+ 0xb4, 0xd1, 0x9c, 0x31, 0x20, 0xfd, 0x2b, 0x46, 0x4d, 0x50,
+ 0xbc, 0x67, 0xe6, 0x35, 0xcd, 0x98, 0xfd, 0xb1, 0x4e, 0x8e,
+ 0x77, 0x1f, 0x29, 0x26, 0xbd, 0x3a, 0x38, 0x96, 0xb4, 0x67,
+ 0xb3, 0x87, 0xc6, 0x35, 0xa3, 0x64, 0x7a, 0x95, 0xc6, 0xf7,
+ 0x61, 0x9e, 0xb5, 0x84, 0xf1, 0x65, 0x8f, 0x6a, 0xd8, 0xba,
+ 0x81, 0xb7, 0x6e, 0xeb, 0x5e, 0x97, 0xf0, 0x7b, 0xe0, 0xad,
+ 0xd7, 0x8d, 0x75, 0x8, 0x2f, 0xf5, 0xb, 0x62, 0xba, 0x3a,
+ 0xb7, 0xdd, 0x7d, 0xca, 0xd3, 0x1e, 0x70, 0x17, 0x8e, 0x47,
+ 0xe3, 0x5d, 0x14, 0xe3, 0x2c, 0x44, 0xd4, 0x21, 0xab, 0x3a,
+ 0xa9, 0x42, 0x78, 0xaa, 0x8a, 0x14, 0xd5, 0xd9, 0xa1, 0xfb,
+ 0x35, 0x7c, 0x15, 0xb8, 0xf1, 0x6, 0xb3, 0x6f, 0xaf, 0xea,
+ 0x36, 0x99, 0x81, 0x5c, 0x7d, 0x8a, 0x37, 0x38, 0x2e, 0xe0,
+ 0xe3, 0x77, 0x5e, 00, 0x3e, 0xbe, 0x95, 0xfa, 0x2f, 0xa2,
+ 0x69, 0xd1, 0xe9, 0x7a, 0x74, 0x36, 0xd1, 0xa8, 0x50, 0x8a,
+ 0x1, 0xc7, 0x3c, 0xf7, 0xae, 0x4f, 0xe1, 0xff, 00, 0x81,
+ 0x2d, 0xbc, 0x33, 0x61, 0x1, 0x36, 0xd1, 0x45, 0x2a, 0xae,
+ 0xd8, 0xe3, 0x41, 0xc4, 0x4b, 0xd8, 0xe, 0x38, 0xae, 0xf6,
+ 0x24, 0xe9, 0xc5, 0x7d, 0xae, 0x1e, 0x84, 0x68, 0x41, 0x45,
+ 0x1f, 0xa2, 0x61, 0x70, 0xf1, 0xc3, 0x53, 0x50, 0x45, 0x88,
+ 0x54, 0xe, 0xd5, 0x7e, 0x11, 0x55, 0xa1, 0x8f, 0xda, 0xaf,
+ 0x42, 0x80, 0x57, 0x49, 0xd6, 0x5a, 0xb7, 0x19, 0xc5, 0x68,
+ 0x42, 0x3a, 0x55, 0x48, 0x10, 0x71, 0x5a, 0x10, 0xa0, 0x27,
+ 0xa5, 00, 0x5a, 0x81, 0x79, 0xad, 0x18, 0x97, 0x8a, 0xa7,
+ 0x6e, 0xbd, 0x2b, 0x42, 0x21, 0xd2, 0x80, 0x2c, 0x44, 0xbc,
+ 0xd5, 0xb8, 0xc7, 0x4a, 0xaf, 0x12, 0xe6, 0xad, 0x20, 0xa0,
+ 0x9, 0xe3, 0x15, 0x3a, 0xf4, 0xa8, 0x63, 0x15, 0x3a, 0xaf,
+ 0x14, 00, 0xf5, 0xed, 0x4f, 0x5a, 0x45, 0x5a, 0x70, 0x18,
+ 0xa0, 0x7, 0x28, 0xe2, 0xa4, 0xa6, 0xaf, 0x5a, 0x75, 00,
+ 0x14, 0xe1, 0xd2, 0x9b, 0x4f, 0xa0, 0x2, 0x8a, 0x28, 0xa0,
+ 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0xa, 0xf8,
+ 0xf6, 0xa6, 0x30, 0xa9, 0x4f, 0x4a, 0x6e, 0x3d, 0xa8, 0x2,
+ 0x16, 0x5a, 0x89, 0x93, 0xa9, 0xab, 0x24, 0x73, 0xd2, 0xa3,
+ 0x64, 0x18, 0xa0, 0xa, 0xac, 0x9c, 0x54, 0x6e, 0x95, 0x6c,
+ 0xae, 0x29, 0x8e, 0x94, 0x1, 0x49, 0xa2, 0xe2, 0xa2, 0x31,
+ 0xfb, 0x55, 0xd6, 0x41, 0xe9, 0x51, 0xb2, 0x71, 0x40, 0x14,
+ 0x1e, 0x2f, 0x6a, 0x89, 0xa2, 0x1e, 0x95, 0x7d, 0xa3, 0xcd,
+ 0x46, 0xd1, 0xf5, 0xe0, 0xd0, 0x6, 0x7b, 0x46, 0x3f, 0xc8,
+ 0xa8, 0xda, 0x1c, 0xff, 00, 0xfa, 0xab, 0x40, 0xc4, 0x3d,
+ 0x29, 0x86, 0x21, 0xe9, 0x40, 0x19, 0xaf, 0x5, 0x46, 0x60,
+ 0xf6, 0xad, 0x23, 0xf, 0x14, 0xd3, 0xe, 0x28, 0x3, 0x30,
+ 0xc1, 0x4c, 0x30, 0x64, 0xe6, 0xb4, 0x9a, 0x2f, 0x6a, 0x67,
+ 0x91, 0x40, 0x19, 0xc6, 0xa, 0x61, 0x84, 0xe3, 0xa7, 0xe9,
+ 0x5a, 0x66, 0x1c, 0xe, 0x95, 0x1f, 0x92, 0x3d, 0x28, 0x3,
+ 0x37, 0xec, 0xfe, 0xd4, 0x86, 0xf, 0x6f, 0xd2, 0xb4, 0xbc,
+ 0x9a, 0x69, 0xb7, 0xc5, 00, 0x65, 0xf9, 0x39, 0xed, 0xfa,
+ 0x52, 0x1b, 0x7f, 0x6f, 0xd2, 0xb5, 0x3c, 0x9c, 0x53, 0x5a,
+ 0x1e, 0x3a, 0x50, 0x6, 0x49, 0xb7, 0x3, 0xb5, 0x21, 0xb7,
+ 0x1e, 0x9c, 0x56, 0x99, 0xb7, 0x18, 0xe9, 0x4d, 0x30, 0x71,
+ 0xd2, 0x80, 0x32, 0x8d, 0xb6, 0x7b, 0x50, 0x2d, 0x80, 0xad,
+ 0x2f, 0x26, 0x90, 0xc0, 0x3d, 0x28, 0x3, 0x25, 0xed, 0x11,
+ 0x8f, 0x2a, 0x1b, 0xea, 0x33, 0x50, 0xbe, 0x93, 0x6f, 0x27,
+ 0xde, 0xb7, 0x8c, 0xfd, 0x50, 0x1f, 0xe9, 0x5b, 0x26, 0xd8,
+ 0x7a, 0x52, 0x1b, 0x71, 0xe9, 0x40, 0x18, 0x12, 0x78, 0x7e,
+ 0xc1, 0xcf, 0xcd, 0x65, 0x6e, 0x7e, 0xb1, 0x2f, 0xf8, 0x54,
+ 0xf, 0xe1, 0x7d, 0x31, 0xfa, 0xe9, 0xd6, 0xc7, 0xfe, 0xd8,
+ 0xaf, 0xf8, 0x57, 0x46, 0x6d, 0xf3, 0xd4, 0x53, 0x4d, 0xb8,
+ 0xec, 0x28, 0x3, 0x97, 0x6f, 0x6, 0x68, 0xef, 0xd7, 0x4b,
+ 0xb5, 0x3f, 0xf6, 0xc5, 0x7f, 0xc2, 0xa2, 0x93, 0xc0, 0x7a,
+ 0x13, 0x8c, 0x1d, 0x26, 0xd7, 0xeb, 0xe4, 0x8c, 0xd7, 0x5a,
+ 0x6d, 0xf8, 0xe9, 0x4d, 0xfb, 0x31, 0xa0, 0xe, 0x22, 0x7f,
+ 0x86, 0xda, 0x14, 0xa7, 0x8b, 0x18, 0xe3, 0xff, 00, 0x71,
+ 0x14, 0x7f, 0x4a, 0xcf, 0x9b, 0xe1, 0x26, 0x89, 0x3e, 0x40,
+ 0x59, 0xe3, 0xc9, 0xcf, 0xc8, 0x54, 0x63, 0xff, 00, 0x1d,
+ 0xaf, 0x45, 0x36, 0xe4, 0x53, 0x7c, 0x83, 0x40, 0x1e, 0x62,
+ 0xdf, 0x5, 0xf4, 0x7c, 0xe5, 0x6e, 0xaf, 0xd7, 0xfe, 0xda,
+ 0x2f, 0xff, 00, 0x13, 0x51, 0xb7, 0xc1, 0xab, 0x5, 0xce,
+ 0xcd, 0x46, 0xf9, 0x7f, 0xe0, 0x4b, 0xfe, 0x15, 0xea, 0x1f,
+ 0x67, 0x3e, 0x94, 0x1b, 0x71, 0xdc, 0x54, 0xb8, 0xa7, 0xba,
+ 0x25, 0xc6, 0x2f, 0x74, 0x79, 0x67, 0xfc, 0x29, 0xf8, 0x86,
+ 0x76, 0x6a, 0xf7, 0xab, 0x4c, 0x6f, 0x84, 0x72, 0x2e, 0x76,
+ 0x6b, 0x77, 0x5f, 0xf0, 0x21, 0x8f, 0xeb, 0x5e, 0xa6, 0xd0,
+ 0xfb, 0x53, 0x7c, 0x8a, 0x9f, 0x65, 0x7, 0xbc, 0x57, 0xdc,
+ 0x47, 0xb2, 0xa6, 0xf7, 0x8a, 0xfb, 0x91, 0xe4, 0x92, 0xfc,
+ 0x2b, 0xd5, 0x23, 0xff, 00, 0x55, 0xac, 0x31, 0xff, 00,
+ 0x79, 0x98, 0x7f, 0x4a, 0xad, 0x27, 0xc3, 0x4f, 0x11, 0xa1,
+ 0xfd, 0xce, 0xa9, 0x3, 0x7f, 0xbf, 0x23, 0x8f, 0xfd, 0x94,
+ 0xd7, 0xb1, 0x34, 0x1e, 0xa2, 0x9a, 0x60, 0x1e, 0x95, 0xe,
+ 0x85, 0x27, 0xf6, 0x17, 0xdc, 0x66, 0xf0, 0xd4, 0x1e, 0xf0,
+ 0x5f, 0x72, 0x3c, 0x61, 0xfc, 0xd, 0xe2, 0xa8, 0x7, 0xfc,
+ 0x7c, 0x5b, 0x49, 0xf4, 0x77, 0x3f, 0xfb, 0x2d, 0x44, 0xfa,
+ 0x7, 0x8a, 0xad, 0xcf, 0xfc, 0x7b, 0x43, 0x2f, 0x19, 0xe0,
+ 0x39, 0xaf, 0x69, 0x68, 0x3b, 0x62, 0x9b, 0xf6, 0x70, 0x3b,
+ 0x62, 0xb3, 0x78, 0x3c, 0x3c, 0xb7, 0xa6, 0xbe, 0xe3, 0x29,
+ 0x60, 0x30, 0xb2, 0xde, 0x9a, 0xfb, 0x8f, 0x12, 0x92, 0xd7,
+ 0xc5, 0x31, 0x71, 0xfd, 0x8c, 0x24, 0xf7, 0x58, 0xdb, 0xfc,
+ 0x6a, 0x22, 0x7c, 0x46, 0xbf, 0x7b, 0x42, 0x6f, 0xc2, 0x36,
+ 0xaf, 0x70, 0x68, 0x6, 0x3a, 0x53, 0x3c, 0x8f, 0xad, 0x63,
+ 0xfd, 0x9d, 0x85, 0x7f, 0xf2, 0xed, 0x18, 0x3c, 0xab, 0x4,
+ 0xff, 00, 0xe5, 0xd2, 0x3c, 0x3d, 0xae, 0xf5, 0xb8, 0xfe,
+ 0xf6, 0x85, 0x2f, 0xe1, 0x1b, 0x7f, 0x85, 0x30, 0xea, 0x9a,
+ 0x8a, 0xff, 00, 0xac, 0xd1, 0x2e, 0x14, 0xff, 00, 0xd7,
+ 0x36, 0xff, 00, 0xa, 0xf7, 0x26, 0xb6, 0xea, 0x79, 0xa8,
+ 0xda, 0xd5, 0x4f, 0x51, 0x9f, 0xad, 0x43, 0xcb, 0x30, 0xaf,
+ 0xec, 0x19, 0xbc, 0x9f, 0x4, 0xff, 00, 0xe5, 0xda, 0xfc,
+ 0x4f, 0x10, 0xfe, 0xdb, 0x75, 0x27, 0xcc, 0xd2, 0xee, 0x57,
+ 0x1e, 0x91, 0x9f, 0xeb, 0x48, 0x7c, 0x45, 0x6a, 0xbc, 0xc9,
+ 0x69, 0x74, 0xbf, 0xf6, 0xcc, 0x7f, 0x8d, 0x7b, 0x4c, 0x9a,
+ 0x55, 0xbc, 0x9f, 0x7a, 0xde, 0x26, 0xcf, 0xf7, 0x90, 0x1a,
+ 0xae, 0xfe, 0x1b, 0xd3, 0xa4, 0x1f, 0x3e, 0x9f, 0x6a, 0xdf,
+ 0x58, 0x54, 0xff, 00, 0x4a, 0xc9, 0xe5, 0x18, 0x57, 0xd2,
+ 0xdf, 0x33, 0x9, 0x64, 0x58, 0x27, 0xf6, 0x5f, 0xde, 0x78,
+ 0xfa, 0xf8, 0x8b, 0x4d, 0x63, 0xca, 0xca, 0xbf, 0xef, 0x2a,
+ 0xff, 00, 0x8d, 0x4a, 0xba, 0xce, 0x9a, 0xff, 00, 0xf2,
+ 0xd3, 0x6f, 0xd7, 0x1f, 0xe3, 0x5e, 0xa6, 0xfe, 0x10, 0xd1,
+ 0xcb, 0x73, 0xa5, 0xd9, 0x8f, 0xa4, 0xa, 0x3f, 0xa5, 0x55,
+ 0x97, 0xc0, 0x7a, 0x2c, 0x84, 0xff, 00, 0xc4, 0xba, 0x11,
+ 0x9f, 0xee, 0xa0, 0x15, 0x8b, 0xc9, 0xb0, 0xfd, 0x1b, 0x30,
+ 0x7c, 0x3f, 0x85, 0x7b, 0x36, 0xbe, 0x67, 0x9d, 0xb, 0xed,
+ 0x31, 0xcf, 0x17, 0x31, 0x8f, 0xa9, 0x14, 0xef, 0x3f, 0x4e,
+ 0x61, 0xc5, 0xd4, 0x3f, 0xf7, 0xd0, 0xae, 0xe2, 0x4f, 0x86,
+ 0x7a, 0x14, 0xa0, 0x86, 0xb2, 0xc6, 0x7f, 0xba, 0xe4, 0x55,
+ 0x76, 0xf8, 0x53, 0xa0, 0xb7, 0x48, 0x25, 0x5f, 0xa4, 0xc6,
+ 0xb2, 0x79, 0x25, 0x2e, 0x93, 0x66, 0xf, 0x87, 0x28, 0xbd,
+ 0xaa, 0x33, 0x8f, 0xff, 00, 0x41, 0x6e, 0x97, 0x30, 0xfe,
+ 0xc, 0x28, 0xf2, 0x6d, 0x5b, 0xa5, 0xc4, 0x47, 0xfe, 0x6,
+ 0x2b, 0xa9, 0x93, 0xe1, 0x2e, 0x89, 0xd8, 0x5c, 0xa7, 0xd2,
+ 0x5f, 0xfe, 0xb5, 0x42, 0xdf, 0x8, 0xb4, 0x9e, 0x4a, 0x4f,
+ 0x7a, 0x87, 0xda, 0x45, 0xff, 00, 0xe2, 0x6a, 0x1e, 0x47,
+ 0x1e, 0x95, 0x1f, 0xdc, 0x8c, 0xdf, 0xd, 0xd3, 0xe9, 0x55,
+ 0xfd, 0xc7, 0x39, 0xf6, 0x38, 0xf, 0x49, 0x50, 0xff, 00,
+ 0xc0, 0x85, 0x28, 0xd3, 0xa3, 0x3d, 0x18, 0x1f, 0xca, 0xb7,
+ 0x24, 0xf8, 0x4f, 0x6e, 0xa3, 0xf7, 0x57, 0xd7, 0x6b, 0xf5,
+ 0x71, 0xfd, 0x16, 0xa0, 0x93, 0xe1, 0x85, 0xc8, 0xe2, 0x2d,
+ 0x52, 0x71, 0xfe, 0xf4, 0x87, 0xfc, 0x2b, 0x27, 0x91, 0xcb,
+ 0xec, 0xd4, 0xfc, 0xc, 0xa5, 0xc3, 0x6f, 0xec, 0xd5, 0xfb,
+ 0xd1, 0x92, 0xda, 0x48, 0x3d, 0xb3, 0x51, 0x9d, 0x1f, 0xfd,
+ 0x9f, 0xd2, 0xb4, 0xdf, 0xe1, 0xc6, 0xb5, 0x1f, 0x31, 0x6a,
+ 0xec, 0x7d, 0x99, 0xda, 0xa2, 0x6f, 0x4, 0x78, 0x8e, 0x23,
+ 0xf2, 0xde, 0xa4, 0x9f, 0x53, 0xfe, 0x26, 0xb2, 0x79, 0x25,
+ 0x65, 0xb4, 0xd1, 0x84, 0xb8, 0x76, 0xba, 0xda, 0xa2, 0xfc,
+ 0x4c, 0xff, 00, 0xec, 0x7f, 0xf6, 0x4f, 0xe5, 0x4c, 0x6d,
+ 0x1c, 0x7f, 0x76, 0xaf, 0x1f, 0xd, 0xf8, 0xb2, 0x21, 0xf2,
+ 0x84, 0x7f, 0xf8, 0x12, 0x7f, 0x8d, 0x44, 0xda, 0x57, 0x8c,
+ 0x10, 0xf3, 0x62, 0x8d, 0xf4, 0x68, 0xff, 00, 0xf8, 0xaa,
+ 0xc9, 0xe4, 0xd8, 0x9e, 0x8d, 0x7d, 0xe6, 0xf, 0x20, 0xc6,
+ 0x2d, 0x9a, 0xfb, 0xff, 00, 0xe0, 0x15, 0xe, 0x91, 0xfe,
+ 0xcf, 0xe9, 0x4c, 0x6d, 0x23, 0x8f, 0xba, 0x7f, 0x2a, 0xb4,
+ 0xd6, 0xde, 0x2b, 0x4e, 0xba, 0x60, 0x6c, 0x7a, 0x28, 0x3f,
+ 0xc8, 0xd4, 0x65, 0xfc, 0x4c, 0xa7, 0xe6, 0xd1, 0xc9, 0xc7,
+ 0xfd, 0x31, 0x63, 0xfc, 0x8d, 0x47, 0xf6, 0x4e, 0x2d, 0x76,
+ 0xfb, 0xcc, 0xde, 0x45, 0x8d, 0x5d, 0xbe, 0xf2, 0xa9, 0xd1,
+ 0xc0, 0xfe, 0x3, 0xf9, 0x53, 0x3f, 0xb1, 0xff, 00, 0xd9,
+ 0xfd, 0x2a, 0xd7, 0xdb, 0xb5, 0xa5, 0x27, 0xcd, 0xd1, 0x65,
+ 0x1f, 0x4b, 0x77, 0x14, 0xdf, 0xed, 0xbb, 0x88, 0x94, 0x19,
+ 0x74, 0xb9, 0x97, 0x3f, 0xf4, 0xcc, 0x8a, 0xc9, 0xe5, 0x98,
+ 0xb5, 0xf6, 0x4c, 0xde, 0x4f, 0x8e, 0x5f, 0x66, 0xe5, 0x56,
+ 0xd1, 0x87, 0xf7, 0x7f, 0x4a, 0x8c, 0xe8, 0xcb, 0xfd, 0xdf,
+ 0xd2, 0xaf, 0x1f, 0x14, 0x5b, 0xa7, 0x12, 0xda, 0x4e, 0x9f,
+ 0x86, 0x28, 0x1e, 0x28, 0xd3, 0xdb, 0xaa, 0x48, 0xbf, 0x5a,
+ 0xcd, 0xe0, 0x71, 0x6b, 0xfe, 0x5d, 0xb3, 0x7, 0x96, 0x63,
+ 0x56, 0xf4, 0xd9, 0x9e, 0x74, 0x55, 0xcf, 0xdc, 0x1f, 0x95,
+ 0x46, 0xda, 0x22, 0xff, 00, 0x70, 0x7e, 0x55, 0xb2, 0xbe,
+ 0x21, 0xd2, 0xdb, 0xab, 0xb2, 0xfd, 0x54, 0x9f, 0xe9, 0x4f,
+ 0x1a, 0xd6, 0x92, 0xff, 00, 0xf2, 0xf3, 0xb7, 0xea, 0x8d,
+ 0xfe, 0x15, 0x8b, 0xc3, 0x62, 0x16, 0xf0, 0x66, 0xf, 0x9,
+ 0x8a, 0x8e, 0xf4, 0xdf, 0xdc, 0x73, 0xef, 0xa2, 0x29, 0xfe,
+ 0x11, 0xf9, 0x7f, 0xf5, 0xaa, 0x36, 0xd0, 0x93, 0x1f, 0x77,
+ 0xf4, 0xae, 0x94, 0x6a, 0x3a, 0x5b, 0xf4, 0xbb, 0x4f, 0xc4,
+ 0x11, 0xfd, 0x29, 0xc2, 0xe7, 0x4d, 0x6e, 0x97, 0x70, 0xfe,
+ 0x2e, 0x5, 0x43, 0xa5, 0x59, 0x6f, 0x7, 0xf7, 0x19, 0x3a,
+ 0x15, 0xd6, 0xf4, 0xdf, 0xdc, 0xce, 0x50, 0xf8, 0x7d, 0xf,
+ 0xf0, 0x7e, 0x94, 0xc7, 0xf0, 0xf2, 0x7f, 0x73, 0xf4, 0x15,
+ 0xd8, 0x66, 0xc5, 0xba, 0x5d, 0x40, 0x7e, 0x92, 0xad, 0x2f,
+ 0xd9, 0xed, 0x9f, 0xa4, 0xb1, 0x9f, 0xa3, 0x8a, 0xcd, 0xc6,
+ 0x6b, 0x78, 0xb3, 0x37, 0x9, 0xad, 0xe0, 0xfe, 0xe6, 0x71,
+ 0x4d, 0xe1, 0xc8, 0xcf, 0xf0, 0xff, 00, 0xe3, 0xa2, 0xa3,
+ 0x6f, 0xd, 0xc6, 0x3f, 0x80, 0x7f, 0xdf, 0x35, 0xdd, 0xae,
+ 0x9b, 0x1b, 0x74, 0x20, 0xfd, 0xd, 0x7, 0x48, 0x7, 0xf8,
+ 0x4d, 0x45, 0xed, 0xba, 0x33, 0xbd, 0xb7, 0x47, 0x9f, 0xb7,
+ 0x86, 0xe3, 0x3d, 0x10, 0xf, 0xc2, 0xa2, 0x6f, 0xc, 0x46,
+ 0x7f, 0x84, 0x7e, 0x5f, 0xfd, 0x6a, 0xf4, 0x13, 0xa4, 0x8f,
+ 0xee, 0x9a, 0x6b, 0x69, 0x23, 0xfb, 0xb4, 0xaf, 0x1e, 0xc2,
+ 0xe6, 0x8f, 0x63, 0xce, 0xdb, 0xc2, 0xb1, 0x9f, 0xe1, 0xff,
+ 00, 0x3f, 0x95, 0x42, 0xfe, 0x13, 0x8f, 0xfb, 0xbf, 0xa0,
+ 0xff, 00, 0xa, 0xf4, 0x83, 0xa4, 0xff, 00, 0xb2, 0x6a,
+ 0x33, 0xa4, 0xff, 00, 0xb2, 0x68, 0xbc, 0x42, 0xf1, 0x3c,
+ 0xd9, 0xbc, 0x24, 0x9f, 0xdc, 0x3f, 0x90, 0xff, 00, 0xa,
+ 0x8d, 0xbc, 0x24, 0x9f, 0xdc, 0xff, 00, 0xc7, 0x6b, 0xd2,
+ 0xce, 0x91, 0xfe, 0xc9, 0xa8, 0xce, 0x91, 0xd7, 0xe4, 0x34,
+ 0x7b, 0xa1, 0x68, 0x1e, 0x66, 0xde, 0x12, 0x4f, 0xee, 0x7e,
+ 0x3b, 0x6a, 0x17, 0xf0, 0x8a, 0x9e, 0x88, 0x3f, 0x2f, 0xfe,
+ 0xb5, 0x7a, 0x87, 0xf6, 0x47, 0xfb, 0x26, 0x98, 0x74, 0x8c,
+ 0x7f, 0x9, 0xa2, 0xd1, 0xb, 0x40, 0xf2, 0xc6, 0xf0, 0x70,
+ 0xfe, 0xe8, 0xfc, 0xbf, 0xfa, 0xd5, 0xb, 0xf8, 0x38, 0x7a,
+ 0x7e, 0x9f, 0xfd, 0x6a, 0xf5, 0x63, 0xa4, 0x75, 0xf9, 0xd,
+ 0x33, 0xfb, 0x1c, 0x7f, 0x76, 0x8e, 0x48, 0x93, 0xc9, 0x6,
+ 0x79, 0x33, 0xf8, 0x40, 0x7f, 0x70, 0x9f, 0xf8, 0xf, 0xff,
+ 00, 0x5a, 0xa1, 0x6f, 0x8, 0x2f, 0xfc, 0xf3, 0x3f, 0xf7,
+ 0xc8, 0xaf, 0x5b, 0x6d, 0x18, 0x63, 0xee, 0x7f, 0x2a, 0x8c,
+ 0xe8, 0x83, 0xba, 0x7f, 0x2a, 0x9e, 0x48, 0x87, 0xb2, 0x81,
+ 0xe4, 0x6d, 0xe1, 0x1, 0xff, 00, 0x3c, 0xbf, 0x34, 0xa8,
+ 0x5b, 0xc1, 0xc0, 0xff, 00, 0xcb, 0x1f, 0xfc, 0x77, 0xff,
+ 00, 0xad, 0x5e, 0xc0, 0xda, 0x22, 0xe3, 0xee, 0x1a, 0x88,
+ 0xe8, 0x69, 0xff, 00, 0x3c, 0xe8, 0xf6, 0x71, 0x17, 0xb2,
+ 0x81, 0xe3, 0xd2, 0x78, 0x30, 0x1f, 0xf9, 0x66, 0x3f, 0xef,
+ 0x9f, 0xfe, 0xb5, 0x42, 0xfe, 0xc, 0x1f, 0xf3, 0xcc, 0x7e,
+ 0x5f, 0xfd, 0x6a, 0xf6, 0x46, 0xd0, 0x97, 0xfb, 0x94, 0xc6,
+ 0xd0, 0x13, 0x1f, 0xea, 0xff, 00, 0x95, 0x2f, 0x63, 0x2,
+ 0x7d, 0x84, 0x4f, 0x18, 0x6f, 0x6, 0xa8, 0xff, 00, 0x96,
+ 0x67, 0xf2, 0xff, 00, 0xeb, 0x54, 0xf, 0xe0, 0xe5, 0xff,
+ 00, 0x9e, 0x47, 0xfe, 0xf9, 0xaf, 0x69, 0x6f, 0xf, 0x46,
+ 0x3f, 0xe5, 0x97, 0xe8, 0x2a, 0x33, 0xe1, 0xd8, 0xcf, 0xfc,
+ 0xb3, 0xc7, 0xe0, 0x2a, 0x7d, 0x82, 0x17, 0xd5, 0xe2, 0x78,
+ 0xa3, 0x78, 0x35, 0x48, 0xff, 00, 0x56, 0xdf, 0xf7, 0xc8,
+ 0xa8, 0x9f, 0xc1, 0x4b, 0xfd, 0xc6, 0xff, 00, 0xbe, 0x7f,
+ 0xfa, 0xd5, 0xed, 0x6d, 0xe1, 0xa8, 0xcf, 0xfc, 0xb3, 0x1f,
+ 0x95, 0x44, 0xde, 0x19, 0x8f, 0xb4, 0x7f, 0x95, 0x2f, 0x60,
+ 0x89, 0xfa, 0xb2, 0x3c, 0x49, 0xbc, 0x14, 0x7, 0xf0, 0x1f,
+ 0xfb, 0xe7, 0xff, 00, 0xad, 0x50, 0xbf, 0x82, 0xff, 00,
+ 0xd8, 0xfd, 0x3f, 0xfa, 0xd5, 0xed, 0xe7, 0xc3, 0xa, 0x7f,
+ 0xe5, 0x99, 0xfc, 0xea, 0x36, 0xf0, 0xb2, 0x7f, 0xcf, 0x22,
+ 0x6a, 0x7e, 0xae, 0x89, 0xfa, 0xac, 0x4f, 0xe, 0x7f, 0x6,
+ 0xf, 0xee, 0xfe, 0x9f, 0xfd, 0x6a, 0x82, 0x4f, 0x7, 0xf,
+ 0xee, 0x9f, 0xc8, 0x7f, 0x85, 0x7b, 0x9b, 0x78, 0x56, 0x3f,
+ 0xf9, 0xe6, 0x7f, 0x4a, 0x85, 0xbc, 0x26, 0x87, 0xfe, 0x59,
+ 0x1f, 0xc8, 0x52, 0xfa, 0xba, 0x27, 0xea, 0xa8, 0xf0, 0xc6,
+ 0xf0, 0x69, 0xfe, 0xe1, 0xfc, 0xbf, 0xfa, 0xd5, 0x13, 0x78,
+ 0x35, 0x87, 0xfc, 0xb3, 0x3f, 0xf7, 0xcf, 0xff, 00, 0x5a,
+ 0xbd, 0xc9, 0xbc, 0x24, 0xbf, 0xf3, 0xcc, 0xfe, 0x55, 0xb,
+ 0xf8, 0x45, 0x7f, 0xe7, 0x9f, 0xe9, 0x53, 0xf5, 0x72, 0x3e,
+ 0xa8, 0x78, 0x73, 0xf8, 0x39, 0xbf, 0xb8, 0x7f, 0xef, 0x9f,
+ 0xfe, 0xb5, 0x54, 0xb8, 0xf0, 0x9b, 0xaa, 0x9f, 0x95, 0x87,
+ 0xe1, 0xff, 00, 0xd6, 0xaf, 0x77, 0x6f, 0x8, 0x81, 0xff,
+ 00, 0x2c, 0xea, 0xa5, 0xc7, 0x84, 0xb2, 0x8, 0xf2, 0x89,
+ 0xfc, 0x6a, 0x7e, 0xae, 0x2f, 0xaa, 0x9e, 0x9, 0x37, 0x87,
+ 0x24, 0x8f, 0x9d, 0xad, 0xf9, 0x7f, 0xf5, 0xaa, 0x84, 0xda,
+ 0x4c, 0x91, 0xf5, 0x4f, 0xd2, 0xbd, 0xca, 0xef, 0xc1, 0xf8,
+ 0x7, 0xf7, 0x44, 0xa, 0xc2, 0xbe, 0xf0, 0x89, 0x19, 0xcc,
+ 0x67, 0xda, 0xb0, 0x95, 0x16, 0x8e, 0x59, 0xd0, 0x94, 0x4f,
+ 0x1f, 0x92, 0xc4, 0x8e, 0x30, 0x45, 0x40, 0xd6, 0x15, 0xe8,
+ 0xd7, 0xfe, 0x16, 0x61, 0x9c, 0x46, 0xd9, 0xac, 0x3b, 0x9d,
+ 0x15, 0xa1, 0xfe, 0x6, 0xc5, 0x72, 0x3a, 0x92, 0x83, 0xb3,
+ 0x38, 0xa5, 0x56, 0x54, 0xdd, 0x99, 0xc8, 0x35, 0x87, 0xb5,
+ 0x34, 0xd9, 0x7b, 0x57, 0x4c, 0xda, 0x7f, 0x1d, 0xd, 0x46,
+ 0xda, 0x7f, 0xa0, 0xa6, 0xb1, 0x3, 0x58, 0xa3, 0x99, 0x7b,
+ 0x2c, 0x9e, 0x5, 0x47, 0x1e, 0x98, 0xf2, 0xc8, 0xa9, 0x1a,
+ 0x33, 0xc8, 0xc7, 0x1, 0x54, 0x64, 0x93, 0x5d, 0xe6, 0x87,
+ 0xe0, 0x8d, 0x43, 0xc4, 0x57, 0xb, 0x15, 0x9d, 0xac, 0x92,
+ 0x2e, 0x40, 0x69, 0x71, 0xf2, 0xa8, 0xf5, 0x24, 0xf1, 0x5e,
+ 0xed, 0xf0, 0xd7, 0xe0, 0xd, 0xb5, 0xb5, 0xc4, 0x57, 0x2f,
+ 0x6c, 0xd7, 0xb7, 0x63, 0xef, 0x4b, 0x2e, 0xc, 0x49, 0xf4,
+ 0x4, 0x75, 0xfc, 0xeb, 0xdf, 0xcb, 0xf0, 0x78, 0x8c, 0x6b,
+ 0xbc, 0x15, 0xa3, 0xdc, 0xfa, 0x7c, 0xb3, 0x2f, 0xc5, 0x66,
+ 0x2d, 0x38, 0x2b, 0x47, 0xbb, 0xfd, 0x3b, 0x9e, 0x5f, 0xf0,
+ 0xc3, 0xe0, 0x1d, 0xcf, 0x88, 0x24, 0x86, 0xf3, 0x57, 0x86,
+ 0x54, 0x8c, 0x30, 0x64, 0xb4, 0x9, 0xf3, 0xbe, 0x3f, 0xbc,
+ 0xa, 0xe3, 0x15, 0xf6, 0x47, 0x82, 0x3c, 0x1, 0x67, 0xe1,
+ 0xdb, 0x58, 0x8b, 0x41, 0x18, 0x70, 0x3e, 0x58, 0x95, 00,
+ 0x48, 0xfe, 0x83, 0x15, 0xa9, 0xe1, 0xef, 0xa, 0xda, 0x68,
+ 0x91, 0xa9, 0x44, 0xdf, 0x3e, 0x39, 0x91, 0xb0, 0x71, 0xf4,
+ 0xe3, 0x81, 0x5d, 0x4, 0x69, 0x9e, 0x6b, 0xf4, 0x5c, 0x2e,
+ 0x12, 0x9e, 0x16, 0x3c, 0xb0, 0x5a, 0xf7, 0x3f, 0x58, 0xc1,
+ 0x60, 0x69, 0x60, 0xa1, 0xcb, 0xd, 0x5f, 0x57, 0xd5, 0x92,
+ 0xc4, 0x9e, 0xd5, 0x7a, 0x24, 0x35, 0x4, 0x51, 0xd5, 0xf8,
+ 0x53, 0xda, 0xbb, 0x4f, 0x40, 0x9e, 0x14, 0xe2, 0xae, 0xc2,
+ 0xbd, 0x38, 0xa8, 0x61, 0x4c, 0x1, 0xc5, 0x5e, 0x86, 0x3e,
+ 0x9c, 0x50, 0x5, 0x88, 0x17, 0xda, 0xaf, 0x42, 0xbc, 0x55,
+ 0x78, 0x53, 0xda, 0xaf, 0x44, 0xa2, 0x80, 0x2c, 0xc0, 0xbc,
+ 0x8a, 0xbd, 0x1a, 0x73, 0x55, 0xa1, 0x51, 0x9e, 0x95, 0x7a,
+ 0x25, 0xa0, 0x9, 0xa2, 0x15, 0x65, 0x14, 0x11, 0x50, 0xa2,
+ 0xd5, 0x94, 0x1d, 0x28, 0x2, 0x54, 0x1d, 0x2a, 0x75, 0xed,
+ 0x51, 0xa2, 0xd4, 0x8b, 0xfc, 0xa8, 0x2, 0x45, 0xa7, 0x1,
+ 0x4d, 0x5e, 0x31, 0x52, 0x1, 0x9a, 00, 0x55, 0xa5, 0xa0,
+ 0xc, 0x51, 0x40, 00, 0xe4, 0xd3, 0xe9, 0xab, 0xd6, 0x9d,
+ 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5,
+ 0x14, 0x51, 0x40, 0x11, 0x6d, 0xa4, 0xa7, 0xd2, 0x6d, 0xa0,
+ 0x6, 0x6d, 0xa6, 0x32, 0xf3, 0x52, 0x9e, 0xd, 0x37, 0x6f,
+ 0x34, 0x1, 0x11, 0x5a, 0x61, 0x5a, 0x9d, 0x87, 0xbd, 0x37,
+ 0x14, 0x1, 0x5c, 0xa0, 0x34, 0xd6, 0x8c, 0x55, 0x82, 0xb8,
+ 0x34, 0xc2, 0xb4, 0x1, 0x59, 0xa3, 00, 0x9a, 0x61, 0x8c,
+ 0x1a, 0xb6, 0x50, 0x62, 0x9b, 0xb0, 0x50, 0x5, 0x33, 0x10,
+ 0x1d, 0xa9, 0x8d, 0x17, 0xb5, 0x5c, 0x31, 0x83, 0x4c, 0x64,
+ 0x19, 0xe9, 0x40, 0x15, 0x3c, 0x9f, 0x63, 0x4c, 0x30, 0x8c,
+ 0xf2, 0xb5, 0x77, 0xcb, 0xf6, 0xa6, 0xb4, 0x54, 0x1, 0x49,
+ 0xa2, 0x7, 0xb5, 0x33, 0xc9, 0xab, 0xde, 0x5d, 0x27, 0x97,
+ 0x40, 0x14, 0x5a, 0x1, 0xe9, 0x4d, 0xf2, 0x7, 0xa5, 0x5f,
+ 0x31, 0x53, 0x4c, 0x42, 0x80, 0x28, 0x79, 0x34, 0x86, 0xdc,
+ 0x7a, 0x55, 0xff, 00, 0x26, 0x90, 0xc2, 0x31, 0x40, 0x19,
+ 0xe6, 0x1, 0xe9, 0x4c, 0x30, 0xf3, 0x5a, 0x6, 0x1a, 0x4f,
+ 0x27, 0xda, 0x80, 0x33, 0xcd, 0xbf, 0xb5, 0x31, 0xa0, 0x19,
+ 0xe9, 0x5a, 0x46, 0xc, 0xf6, 0xa6, 0x18, 0x28, 0x3, 0x3b,
+ 0xc8, 0xf6, 0xa4, 0xf2, 0x33, 0xd8, 0xd6, 0x8f, 0x93, 0xed,
+ 0x48, 0x60, 0xf6, 0xa0, 0xc, 0xc6, 0xb7, 0x19, 0xa4, 0x30,
+ 0x7b, 0x56, 0x8f, 0x91, 0x49, 0xe4, 0xe2, 0x80, 0x33, 0x7e,
+ 0xcf, 0xed, 0x48, 0xd6, 0xe0, 0x76, 0xad, 0x13, 0xf, 0xb5,
+ 0x23, 0x43, 0x40, 0x19, 0xbe, 0x47, 0xb6, 0x29, 0x3e, 0xcf,
+ 0x5a, 0x1e, 0x4d, 0x1e, 0x4d, 00, 0x66, 0x9b, 0x51, 0xe9,
+ 0x48, 0x6d, 0x87, 0xa5, 0x69, 0x79, 0x14, 0x9e, 0x48, 0xa0,
+ 0xc, 0xd3, 0x6f, 0xed, 0x4c, 0x36, 0xc3, 0x15, 0xa9, 0xe4,
+ 0x67, 0xb5, 0x30, 0xc0, 0x3d, 0x28, 0x3, 0x33, 0xec, 0xe3,
+ 0x3d, 0x29, 0x1a, 0xdf, 0xda, 0xb4, 0xcc, 0x22, 0x98, 0x60,
+ 0xa0, 0xc, 0xc3, 0x6b, 0x93, 0xd2, 0x9a, 0x6d, 0xc0, 0xed,
+ 0x9a, 0xd3, 0xf2, 0x33, 0xda, 0x90, 0xc1, 0x40, 0x19, 0x46,
+ 0xdb, 0x3d, 0xa8, 0xfb, 0x2f, 0xb5, 0x69, 0x79, 0x34, 0x9e,
+ 0x41, 0xf4, 0xa0, 0xc, 0xa6, 0xb6, 0x1e, 0x94, 0xdf, 0xb3,
+ 0x7b, 0x56, 0xa3, 0x5b, 0xf3, 0x49, 0xe4, 0xfb, 0x50, 0x6,
+ 0x53, 0x5b, 0x71, 0xd2, 0x99, 0xf6, 0x60, 0x3b, 0x56, 0xa9,
+ 0xb7, 0x27, 0xb5, 0x27, 0xd9, 0xf1, 0x40, 0x19, 0x5f, 0x67,
+ 0x1e, 0x86, 0x93, 0xec, 0xb9, 0xec, 0x6b, 0x54, 0xc3, 0x4d,
+ 0x30, 0x7b, 0x50, 0x6, 0x51, 0xb4, 0x3, 0xb7, 0xeb, 0x4d,
+ 0x36, 0xc3, 0xd2, 0xb5, 0x3e, 0xcf, 0xed, 0x48, 0x60, 0x1e,
+ 0x94, 0x1, 0x97, 0xf6, 0x6a, 0x43, 0x6b, 0x8a, 0xd4, 0xf2,
+ 0x3d, 0xa9, 0xd, 0xb8, 0xc7, 0x4a, 00, 0xc9, 0x36, 0xfc,
+ 0xf4, 0xa6, 0xfd, 0x9f, 0xda, 0xb5, 0xd, 0xb8, 0xa3, 0xec,
+ 0xfe, 0xd4, 0x1, 0x90, 0xd6, 0xde, 0xd4, 0xdf, 0xb3, 0xfb,
+ 0x66, 0xb5, 0x4d, 0xb0, 0x26, 0x93, 0xec, 0xe0, 0x76, 0xa0,
+ 0xc, 0x96, 0xb6, 0xf6, 0x34, 0xd3, 0x6c, 0x2b, 0x55, 0xad,
+ 0xf2, 0x69, 0xbf, 0x66, 0xf5, 0xa0, 0xc, 0x96, 0xb6, 0x50,
+ 0x3a, 0x53, 0x7e, 0xce, 0xd, 0x6a, 0xb5, 0xbf, 0x34, 0xd3,
+ 0x6f, 0xed, 0x40, 0x19, 0x66, 0xd8, 0x7a, 0x53, 0x5a, 0xdc,
+ 0xe, 0xd5, 0xa8, 0xd6, 0xe7, 0xd2, 0x98, 0x6d, 0xb3, 0xda,
+ 0x80, 0x32, 0xcd, 0xb0, 0x27, 0x3b, 0x73, 0x4c, 0x36, 0x28,
+ 0x7a, 0xa0, 0x3f, 0x51, 0x5a, 0xa6, 00, 0x38, 0xc5, 0x1f,
+ 0x67, 0xff, 00, 0x38, 0xa0, 0xc, 0x86, 0xd3, 0xa1, 0xef,
+ 0x12, 0xff, 00, 0xdf, 0x22, 0xab, 0x49, 0xa2, 0x5a, 0x4a,
+ 0x30, 0xf6, 0xe8, 0xd5, 0xbe, 0x6d, 0xf0, 0x2a, 0x3f, 0x22,
+ 0x80, 0x39, 0x99, 0x7c, 0x25, 0xa6, 0x4c, 0x7e, 0x7b, 0x35,
+ 0x3f, 0xf0, 0x26, 0x1f, 0xd6, 0xaa, 0xcb, 0xe0, 0xd, 0x12,
+ 0x5f, 0xbd, 0x62, 0xf, 0xfd, 0xb4, 0x71, 0xfd, 0x6b, 0xaf,
+ 0xf2, 0x28, 0x36, 0xa2, 0x80, 0x38, 0xb3, 0xf0, 0xe7, 0x41,
+ 0xff, 00, 0x9f, 0x1, 0xff, 00, 0x7f, 0x5f, 0xff, 00,
+ 0x8a, 0xa6, 0xff, 00, 0xc2, 0xbb, 0xd0, 0x41, 0xff, 00,
+ 0x8f, 0x1, 0xff, 00, 0x7f, 0x64, 0xff, 00, 0xe2, 0xab,
+ 0xb3, 0x30, 0x1, 0xd2, 0x98, 0x6d, 0xf3, 0xd3, 0x8a, 00,
+ 0xe3, 0xcf, 0xc3, 0xcd, 0xb, 0x1c, 0x58, 0xe3, 0xe9, 0x2b,
+ 0xff, 00, 0xf1, 0x55, 0x1b, 0x7c, 0x3c, 0xd1, 0x7b, 0x5b,
+ 0x3a, 0xfd, 0x26, 0x6f, 0xf1, 0xae, 0xd3, 0xec, 0xc7, 0xeb,
+ 0x4c, 0x30, 0x73, 0xd2, 0x81, 0x34, 0x9e, 0xe7, 0x15, 0xff,
+ 00, 0xa, 0xeb, 0x49, 0xec, 0x93, 0x8f, 0xa4, 0xad, 0x4c,
+ 0x3f, 0xf, 0x6c, 0x13, 0x98, 0xe5, 0xb8, 0x4f, 0xac, 0x99,
+ 0xae, 0xd8, 0xdb, 0xfb, 0x52, 0x1b, 0x7f, 0x5a, 0x87, 0x8,
+ 0xbd, 0xd1, 0x2e, 0x9c, 0x1e, 0xe9, 0x33, 0x88, 0x3e, 0x6,
+ 0xa, 0x3f, 0x77, 0x7f, 0x2a, 0x7d, 0x50, 0x35, 0x46, 0x7c,
+ 0x1d, 0x7c, 0xa3, 0x11, 0xeb, 0x2c, 0xbf, 0x5b, 0x65, 0x3f,
+ 0xd6, 0xbb, 0x8f, 0x22, 0x9a, 0x61, 0xf6, 0xac, 0x9e, 0x1e,
+ 0x8b, 0xde, 0xb, 0xee, 0x30, 0x96, 0x17, 0xf, 0x2f, 0x8a,
+ 0x9a, 0x7f, 0x24, 0x70, 0x4f, 0xe1, 0x1d, 0x61, 0x49, 0xdb,
+ 0xac, 0x86, 0xfa, 0xdb, 0x28, 0xfe, 0xb5, 0x56, 0x5f, 0xc,
+ 0x78, 0x81, 0x4f, 0xcb, 0xa8, 0xab, 0x7d, 0x62, 0x41, 0x5e,
+ 0x88, 0x60, 0xf6, 0xa4, 0xf2, 00, 0xed, 0x51, 0xf5, 0x4c,
+ 0x3f, 0xfc, 0xfb, 0x5f, 0x71, 0x1f, 0x51, 0xc2, 0xff, 00,
+ 0xcf, 0xa8, 0xfd, 0xc8, 0xf3, 0x29, 0x7c, 0x3d, 0xe2, 0x85,
+ 0xfb, 0xb3, 0xc6, 0xdf, 0x5d, 0x83, 0xfa, 0x54, 0x47, 0x46,
+ 0xf1, 0x52, 0x7f, 0xc, 0x4d, 0xf8, 0xad, 0x7a, 0x8f, 0x92,
+ 0x3d, 0x29, 0x86, 0xe, 0x7d, 0xa8, 0xfa, 0xa6, 0x1f, 0xfe,
+ 0x7d, 0xaf, 0xb8, 0x4f, 0x3, 0x85, 0x7f, 0xf2, 0xea, 0x3f,
+ 0x72, 0x3c, 0xb8, 0xe9, 0xfe, 0x28, 0x53, 0xff, 00, 0x1e,
+ 0xa8, 0xdf, 0x8a, 0xff, 00, 0x8d, 0x21, 0xb7, 0xf1, 0x22,
+ 0x2, 0x5f, 0x4e, 0x52, 0x3d, 0x41, 0x1f, 0xe3, 0x5e, 0xa2,
+ 0x6d, 0xe9, 0x3c, 0x9a, 0x87, 0x81, 0xc3, 0x3f, 0xf9, 0x76,
+ 0x8c, 0xde, 0x5b, 0x83, 0x7f, 0xf2, 0xe9, 0x1e, 0x58, 0xd3,
+ 0xeb, 0x10, 0x9c, 0x49, 0xa6, 0x8c, 0xff, 00, 0xbc, 0x5,
+ 0x42, 0xda, 0xe5, 0xc4, 0x5f, 0xeb, 0x34, 0xde, 0x9c, 0x1f,
+ 0xde, 0xe3, 0xfa, 0x57, 0xac, 0x18, 0x29, 0xad, 0x7, 0xb5,
+ 0x64, 0xf2, 0xdc, 0x2b, 0xfb, 0x6, 0x32, 0xca, 0x30, 0x52,
+ 0xff, 00, 0x97, 0x67, 0x92, 0x8f, 0x15, 0x45, 0xd1, 0xec,
+ 0xa, 0xff, 00, 0xdb, 0x52, 0x7f, 0xa5, 0x4c, 0xbe, 0x25,
+ 0xb1, 0x3f, 0x7a, 0x16, 0x5f, 0xc4, 0x9a, 0xf5, 0x6, 0xb7,
+ 0x56, 0x18, 0x2a, 0x18, 0x7a, 0x11, 0x50, 0x3e, 0x93, 0x6d,
+ 0x27, 0xde, 0xb7, 0x8c, 0xfd, 0x56, 0xb1, 0x79, 0x4e, 0x15,
+ 0xf4, 0xfc, 0x4c, 0x25, 0x91, 0xe0, 0xa5, 0xf6, 0x5a, 0xf9,
+ 0x9e, 0x74, 0xbe, 0x20, 0xd2, 0x9b, 0xef, 0x19, 0x13, 0xe8,
+ 0xa4, 0xd3, 0xbf, 0xb6, 0x74, 0x86, 0xff, 00, 0x96, 0x8c,
+ 0x3f, 0xe0, 0x2d, 0x5d, 0xdb, 0xf8, 0x6f, 0x4f, 0x7c, 0xee,
+ 0xb2, 0x85, 0x81, 0xf5, 0x4a, 0x80, 0xf8, 0x4f, 0x49, 0x3d,
+ 0x74, 0xeb, 0x7f, 0xc1, 0x31, 0x59, 0x3c, 0x9b, 0xd, 0xd1,
+ 0xb3, 0x7, 0xc3, 0xf8, 0x47, 0xd5, 0xfd, 0xe7, 0x17, 0xfd,
+ 0xa9, 0xa4, 0x1f, 0xf9, 0x6f, 0xfa, 0x35, 0x3b, 0xfb, 0x43,
+ 0x48, 0x6f, 0xf9, 0x79, 0x51, 0xf5, 0xdd, 0x5d, 0x6b, 0xf8,
+ 0x33, 0x47, 0x6e, 0xba, 0x7c, 0x5f, 0x86, 0x47, 0xf5, 0xa8,
+ 0x9b, 0xc0, 0xba, 0x33, 0x75, 0xb1, 0x3, 0xe9, 0x23, 0x8f,
+ 0xeb, 0x50, 0xf2, 0x4a, 0x1d, 0x24, 0xff, 00, 0x3, 0x37,
+ 0xc3, 0xb8, 0x67, 0xb4, 0xa5, 0xf8, 0x7f, 0x91, 0xcd, 0x2c,
+ 0x9a, 0x74, 0xa7, 0xb, 0x32, 0x93, 0xf8, 0xd4, 0x89, 0x69,
+ 0x6a, 0xfd, 0x18, 0x1f, 0xce, 0xb6, 0x24, 0xf8, 0x7f, 0xa4,
+ 0xb7, 0xdd, 0x80, 0xa7, 0xd1, 0xd8, 0xff, 00, 0x5a, 0xad,
+ 0x27, 0xc3, 0x9b, 0x6, 0xfb, 0xac, 0xe9, 0xf9, 0x9f, 0xeb,
+ 0x59, 0x3c, 0x8e, 0x9f, 0xd9, 0x9b, 0x31, 0x97, 0xe, 0x53,
+ 0xfb, 0x35, 0x1f, 0xdc, 0x55, 0x3a, 0x4c, 0x6c, 0x32, 0x17,
+ 0x23, 0xeb, 0x4d, 0x3a, 0x3a, 0x7f, 0x77, 0xf5, 0xa9, 0x5f,
+ 0xe1, 0xad, 0xb8, 0x39, 0x4b, 0xb9, 0x13, 0xd8, 0x28, 0x3f,
+ 0xd6, 0x9b, 0xff, 00, 0xa, 0xf1, 0x90, 0xd, 0x9a, 0x94,
+ 0xab, 0xff, 00, 0x1, 0xff, 00, 0xeb, 0xd6, 0x2f, 0x23,
+ 0x7d, 0x2a, 0x7e, 0x6, 0xf, 0x86, 0xdf, 0xd9, 0xab, 0xf8,
+ 0x7f, 0xc1, 0x21, 0xfe, 0xc6, 0x43, 0xfc, 0x3f, 0xad, 0x31,
+ 0xb4, 0x55, 0xfe, 0xef, 0xeb, 0x56, 0x8f, 0x82, 0x2f, 0x14,
+ 0xfc, 0x9a, 0xbc, 0x80, 0x7f, 0xbb, 0xff, 00, 0xd7, 0xa0,
+ 0xf8, 0x43, 0x55, 0x4f, 0xbb, 0xac, 0xb9, 0xf6, 0x2a, 0x7f,
+ 0xc6, 0xb2, 0x79, 0x25, 0x6e, 0x93, 0x5f, 0x89, 0x83, 0xe1,
+ 0xda, 0xeb, 0x6a, 0x88, 0xa2, 0xda, 0x2a, 0xff, 00, 0x77,
+ 0xf5, 0xa6, 0x9d, 0x15, 0x7f, 0xb9, 0xfa, 0xd5, 0xb9, 0x3c,
+ 0x39, 0xaf, 0x46, 0x4e, 0xcd, 0x40, 0xb8, 0x1d, 0xe, 0xd1,
+ 0xfd, 0x4d, 0x40, 0xda, 0x3f, 0x89, 0x94, 0xfc, 0xb2, 0xee,
+ 0xfc, 0x23, 0xfe, 0xb5, 0x2f, 0x25, 0xc4, 0x2f, 0xb4, 0x8c,
+ 0xdf, 0xf, 0xe2, 0x96, 0xd2, 0x5f, 0x89, 0x1, 0xd1, 0x57,
+ 0xfb, 0x9f, 0xad, 0x31, 0xb4, 0x55, 0xc7, 0xdc, 0xfd, 0x6a,
+ 0x63, 0x67, 0xe2, 0x98, 0xcf, 0xcd, 0x8, 0x7f, 0xc6, 0x2a,
+ 0x43, 0x2e, 0xbf, 0x11, 0x3b, 0xec, 0x4b, 0x7f, 0xdf, 0x3f,
+ 0xd2, 0xb2, 0x79, 0x46, 0x29, 0x6d, 0x63, 0x27, 0x91, 0x63,
+ 0x16, 0xd6, 0x7f, 0x32, 0xf, 0xec, 0x55, 0xfe, 0xe7, 0xeb,
+ 0x50, 0xcb, 0xa2, 0x23, 0xf, 0xb9, 0xfa, 0xd5, 0xc3, 0xaa,
+ 0x6a, 0xb1, 0xf, 0x9f, 0x4a, 0x76, 0x1f, 0x43, 0xfd, 0x5,
+ 0x30, 0xeb, 0xf7, 0x9d, 0x1b, 0x48, 0x94, 0x7e, 0xd, 0xfe,
+ 0x15, 0x9b, 0xca, 0xf1, 0x6b, 0xec, 0xfe, 0x26, 0x2f, 0x26,
+ 0xc7, 0x2d, 0xa2, 0xbe, 0xf3, 0x26, 0x5f, 0xf, 0x44, 0x41,
+ 0xcc, 0x79, 0xfa, 0x93, 0x59, 0xb7, 0x5e, 0x15, 0x81, 0xf3,
+ 0xfb, 0xaf, 0xd4, 0xd7, 0x46, 0xda, 0xd5, 0xd3, 0xf0, 0x34,
+ 0xa9, 0x9, 0xfa, 0x37, 0xf8, 0x53, 0x3c, 0xdd, 0x52, 0xf1,
+ 0xb1, 0x16, 0x99, 0x22, 0x7d, 0x54, 0x8f, 0xe7, 0x42, 0xca,
+ 0xb1, 0x52, 0xd1, 0xc7, 0xf1, 0x1a, 0xc9, 0x71, 0xb3, 0xd1,
+ 0xc3, 0xf1, 0x47, 0x9e, 0x6a, 0x9e, 0x10, 0x8d, 0x57, 0xfd,
+ 0x58, 0xf6, 0xf9, 0xba, 0xfe, 0xb5, 0xc6, 0xea, 0xbe, 0x13,
+ 0x56, 0x62, 0x16, 0x3c, 0x92, 0x78, 0xe7, 0xff, 00, 0xaf,
+ 0x5e, 0xee, 0xbe, 0x13, 0xd6, 0xef, 0x48, 0xf3, 0x61, 0x11,
+ 0x46, 0x79, 0xc9, 0x28, 0x71, 0xfa, 0xe6, 0xb4, 0xad, 0xbe,
+ 0x19, 0x28, 0x6c, 0xcb, 0x77, 0x9e, 0xe4, 0x2a, 0x63, 0xfa,
+ 0xd4, 0xbe, 0x1c, 0xa9, 0x55, 0xfe, 0xf2, 0x69, 0x21, 0x3e,
+ 0x13, 0xab, 0x5d, 0xfe, 0xf2, 0xa2, 0x8a, 0xf2, 0x57, 0x67,
+ 0xcc, 0x71, 0x7c, 0x2e, 0xd4, 0x6e, 0xa4, 0x4, 0x42, 0xb0,
+ 0xc6, 0x7f, 0x89, 0x9c, 0x1f, 0xd3, 0x35, 0xe8, 0x7e, 0x14,
+ 0xf8, 0x9, 0x67, 0x7b, 0x16, 0xe9, 0x20, 0xfb, 0x71, 0x4,
+ 0x6e, 0x91, 0xdc, 0xc6, 0x7, 0xd0, 0x6, 0xaf, 0x79, 0xb0,
+ 0xf0, 0x6e, 0x99, 0x62, 0x14, 0x8b, 0x65, 0x79, 0x17, 0xf8,
+ 0xdc, 0x93, 0xfa, 0x13, 0x5b, 0x91, 0x40, 0x10, 00, 0xa3,
+ 00, 0x74, 0x2, 0xbd, 0x9c, 0x27, 0xf, 0xe0, 0xb0, 0x8f,
+ 0x99, 0xae, 0x67, 0xe7, 0xaf, 0xe1, 0xb1, 0xef, 0xe0, 0x38,
+ 0x5f, 0x2f, 0xc1, 0x3e, 0x67, 0x1e, 0x77, 0xfd, 0xed, 0x7f,
+ 0xd, 0x8e, 0x33, 0xc3, 0xff, 00, 0xb, 0xf4, 0x9d, 0x1e,
+ 0xce, 0x38, 0x4c, 0x26, 0x5d, 0xa3, 00, 0x2, 0x54, 0x7f,
+ 0x3c, 0x9f, 0xce, 0xbb, 0xb, 0x6b, 0x28, 0xed, 0xa2, 0x58,
+ 0xe3, 0x8c, 0x22, 0x2f, 00, 0xa, 0xb2, 0x90, 0xfb, 0x54,
+ 0xe9, 0xf, 0x3d, 0x2b, 0xe8, 0xd4, 0x54, 0x52, 0x4b, 0x63,
+ 0xeb, 0x23, 0x15, 0x4, 0xa3, 0x15, 0x64, 0x86, 0x45, 0x17,
+ 0xb5, 0x58, 0x8a, 0x3a, 0x91, 0x22, 0xab, 0x11, 0x43, 0xed,
+ 0x54, 0x50, 0x45, 0x15, 0x5f, 0x86, 0x3e, 0x3a, 0x53, 0x22,
+ 0x87, 0xa5, 0x5d, 0x86, 0x2e, 0x94, 0x1, 0x24, 0x31, 0x55,
+ 0xe8, 0x63, 0xa8, 0xe1, 0x8e, 0xae, 0xc5, 0x1f, 0x4a, 00,
+ 0x92, 0x24, 0xe2, 0xae, 0xc3, 0x1f, 0x35, 0x1c, 0x68, 0x6a,
+ 0xe4, 0x28, 0x7a, 0xd0, 0x4, 0xb0, 0xc7, 0xcd, 0x5c, 0x89,
+ 0x5, 0x45, 0x12, 0x74, 0xab, 0x71, 0xa9, 0xa0, 0x7, 0xaa,
+ 0x8a, 0x9d, 0x13, 0x8a, 0x6a, 0xa, 0x99, 0x46, 0x68, 0x1,
+ 0xeb, 0x4f, 0x1d, 0x29, 0x10, 0x71, 0x52, 00, 0x31, 0xd2,
+ 0x80, 0x15, 0x7b, 0x54, 0x83, 0xa5, 0x31, 0x69, 0xe3, 0xa5,
+ 00, 0x2d, 0x14, 0x52, 0x81, 0x40, 0x2, 0xd3, 0xa9, 0x29,
+ 0x68, 00, 0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a, 0x28, 00,
+ 0xa2, 0x8a, 0x28, 0x1, 0x94, 0x53, 0xb0, 0x29, 0xa6, 0x80,
+ 0xc, 0x52, 0x6d, 0xa5, 0xa2, 0x80, 0x18, 0x57, 0x9a, 0x4d,
+ 0xb4, 0xf2, 0x28, 0xc0, 0xf5, 0xa0, 0x8, 0xc8, 0xa6, 0xed,
+ 0xcd, 0x48, 0x79, 0x14, 0x9b, 0x68, 0x2, 0x32, 0x29, 0x84,
+ 0x54, 0xfb, 0x69, 0xbb, 0x7e, 0xb4, 0x1, 0xe, 0xda, 0x4d,
+ 0x82, 0xa6, 0xc6, 0xd, 0x18, 0xf6, 0xa0, 0x8, 0xa, 0xe2,
+ 0x98, 0x63, 0xab, 0x5, 0x69, 0x36, 0x50, 0x4, 0x1e, 0x55,
+ 0x1e, 0x5f, 0xb5, 0x4d, 0xb2, 0x8d, 0x94, 0x1, 0x58, 0xc7,
+ 0xcd, 0x27, 0x97, 0xf5, 0xab, 0x25, 0x5, 0x26, 0xc1, 0x40,
+ 0x15, 0xcc, 0x74, 0x86, 0x2c, 0xd5, 0x8d, 0x98, 0x14, 0x6d,
+ 0xcd, 00, 0x56, 0xf2, 0x40, 0xa6, 0xf9, 0x75, 0x68, 0xa6,
+ 0x78, 0xa4, 0xf2, 0xc5, 00, 0x55, 0xf2, 0xe9, 0x3c, 0x9a,
+ 0xb5, 0xb0, 0xd3, 0x4a, 0x73, 0x40, 0x15, 0x4a, 0x9a, 0x6e,
+ 0xca, 0xb6, 0x63, 0xa4, 0xf2, 0xfe, 0xb4, 0x1, 0x50, 0xc5,
+ 0x49, 0xe5, 0xd5, 0xcf, 0x2f, 0xd8, 0xd2, 0x79, 0x7e, 0xd4,
+ 0x1, 0x4c, 0xc6, 0x4d, 0x34, 0xc3, 0x9a, 0xbd, 0xb3, 0x34,
+ 0xd6, 0x4e, 0x28, 0x2, 0x97, 0x92, 0x29, 0xc, 0x3e, 0x95,
+ 0x70, 0xc5, 0xed, 0x49, 0xb3, 0xda, 0x80, 0x29, 0x79, 0x54,
+ 0x79, 0x42, 0xae, 0x79, 0x74, 0x79, 0x42, 0x80, 0x29, 0x79,
+ 0x5c, 0x53, 0xc, 0x19, 0xad, 0xf, 0x2f, 0xeb, 0x4d, 0xf2,
+ 0xa8, 0x2, 0x87, 0x91, 0x48, 0xd1, 0x71, 0x57, 0x8c, 0x5c,
+ 0x53, 0x7c, 0x9f, 0xc6, 0x80, 0x28, 0x79, 0x19, 0xa6, 0x98,
+ 0x30, 0x2b, 0x47, 0xca, 0xa6, 0xb4, 0x1c, 0x50, 0x6, 0x6f,
+ 0x93, 0x47, 0x93, 0x5a, 0x6, 0xf, 0x63, 0x4d, 0xf2, 0x7d,
+ 0x8d, 00, 0x67, 0xb4, 0x14, 0xc3, 0xd, 0x69, 0x34, 0x1f,
+ 0x5a, 0x69, 0xb7, 0x3, 0xd6, 0x80, 0x33, 0xfc, 0xaa, 0x4f,
+ 0xb3, 0xd5, 0xff, 00, 0x23, 0xeb, 0x41, 0x84, 0xd0, 0x6,
+ 0x61, 0x87, 0x34, 0x9e, 0x4e, 0x45, 0x68, 0x18, 0x31, 0xd8,
+ 0xd2, 0x79, 0x54, 0x1, 0x43, 0xec, 0xf4, 0x9e, 0x4e, 0x3f,
+ 0xfd, 0x55, 0xa1, 0xe4, 0x7d, 0x69, 0xc, 0x1f, 0x5a, 00,
+ 0xce, 0x68, 0xa9, 0x9e, 0x4d, 0x69, 0xb4, 0x5c, 0x54, 0x7e,
+ 0x47, 0xd6, 0x80, 0x33, 0xfc, 0x80, 0x29, 0x8d, 0xf, 0x3d,
+ 0x2b, 0x4b, 0xc8, 0xfc, 0x29, 0x1a, 0x1c, 0x7a, 0xd0, 0x6,
+ 0x61, 0xb7, 0xcd, 0x35, 0xad, 0xc0, 0x35, 0xa5, 0xe4, 0x1f,
+ 0x7a, 0x43, 0x6f, 0x40, 0x19, 0x9f, 0x67, 0xa4, 0x36, 0xf5,
+ 0xa3, 0xe4, 0xd3, 0x7c, 0x93, 0xe9, 0x40, 0x19, 0x8d, 0x6d,
+ 0xcd, 0x37, 0xec, 0xf5, 0xa6, 0xd6, 0xfe, 0xb9, 0xa6, 0xf9,
+ 0x3, 0xde, 0x80, 0x33, 0x4c, 0x1e, 0xd4, 0xd3, 0x5, 0x69,
+ 0x98, 0xd, 0x37, 0xec, 0xf9, 0xa0, 0xc, 0xcf, 0x22, 0x90,
+ 0xc0, 0x4f, 0x6a, 0xd2, 0xf2, 0x71, 0xd8, 0xd1, 0xe4, 0xfb,
+ 0x1a, 00, 0xcb, 0x68, 0x38, 0xa6, 0xf9, 0x38, 0xad, 0x36,
+ 0xb7, 0x27, 0xb1, 0x34, 0x9e, 0x41, 0xf4, 0x34, 0x1, 0x96,
+ 0x61, 0xcf, 0x6a, 0x3e, 0xce, 0x3d, 0x2b, 0x4c, 0xc2, 0x41,
+ 0xe9, 0x4d, 0x30, 0x13, 0xda, 0x80, 0x32, 0xda, 0xde, 0x99,
+ 0xe4, 0x7b, 0x56, 0xa7, 0xd9, 0xfd, 0xa9, 0x3c, 0x8f, 0x63,
+ 0x40, 0x19, 0x9f, 0x67, 0xcd, 0x33, 0xec, 0xf5, 0xaa, 0x6d,
+ 0xf2, 0x2a, 0x3f, 0xb3, 0x7e, 0x14, 0x1, 0x99, 0xf6, 0x7a,
+ 0x63, 0x5b, 0xf3, 0x5a, 0xbe, 0x40, 0xa6, 0x1b, 0x7e, 0x68,
+ 0x3, 0x30, 0xdb, 0xd3, 0xc, 0x1c, 0xd6, 0xa1, 0xb6, 0xa6,
+ 0x1b, 0x7f, 0xad, 00, 0x66, 0x7d, 0x9c, 0x9a, 0x6b, 0xdb,
+ 0xe3, 0xad, 0x6a, 0x1b, 0x7a, 0x63, 0x5b, 0xe4, 0xf3, 0x40,
+ 0x19, 0x9e, 0x47, 0xe3, 0x4d, 0x36, 0xf9, 0xed, 0x5a, 0x7f,
+ 0x67, 0xfa, 0xd2, 0x18, 0xf, 0xa5, 00, 0x66, 0x7d, 0x9f,
+ 0x8a, 0x46, 0x83, 0x3, 0xa5, 0x69, 0xb4, 0x7, 0x1d, 0x29,
+ 0x9e, 0x47, 0xb5, 00, 0x66, 0x79, 0x54, 0xd3, 0x6f, 0x9a,
+ 0xd4, 0x30, 0x7b, 0x52, 0x79, 0x1f, 0x5a, 00, 0xcb, 0x30,
+ 0x76, 0xe6, 0x9b, 0xe4, 0xe2, 0xb5, 0x7e, 0xcf, 0xf5, 0xa8,
+ 0xcc, 0x3e, 0xc6, 0x80, 0x33, 0x4c, 0x39, 0xa6, 0x1b, 0x7d,
+ 0xbe, 0xf5, 0xa9, 0xe4, 0x7b, 0x1a, 0x63, 0x5b, 0xf3, 0xc8,
+ 0xe2, 0x80, 0x33, 0x7c, 0xaa, 0x6b, 0x43, 0x91, 0x5a, 0x46,
+ 0xdc, 0x76, 0x6, 0x9a, 0x61, 0xc0, 0xe8, 0x68, 0x3, 0x30,
+ 0xc1, 0x8e, 0xb4, 0x86, 0x2f, 0x4a, 0xd2, 0x36, 0xf9, 0x3d,
+ 0xe9, 0xa6, 0xc, 0x7a, 0x9a, 00, 0xcc, 0x30, 0x9e, 0xf4,
+ 0x9e, 0x45, 0x68, 0x9b, 0x7c, 0xd2, 0x7d, 0x98, 0xfb, 0xd0,
+ 0x6, 0x71, 0x82, 0x93, 0xcb, 0xc7, 0x6a, 0xd0, 0x30, 0x63,
+ 0xb5, 0x31, 0xa0, 0x24, 0xf4, 0x34, 0x1, 0x43, 0xca, 0xcf,
+ 0x6a, 0xc, 0x78, 0xab, 0xc6, 0xdc, 0xd1, 0xe4, 0x7b, 0x50,
+ 0x5, 0xd, 0x94, 0x9e, 0x57, 0xb7, 0xe9, 0x57, 0x8c, 0x27,
+ 0xd2, 0x93, 0xc9, 0x3e, 0x86, 0x80, 0x29, 0x79, 0x62, 0x8f,
+ 0x2b, 0xd2, 0xae, 0xf9, 0x1e, 0xc6, 0x90, 0x43, 0xcf, 0x4a,
+ 00, 0xa4, 0x21, 0xc5, 0x2f, 0x93, 0x9e, 0xbc, 0xd5, 0xef,
+ 0x27, 0xeb, 0x4b, 0xf6, 0x7f, 0x5a, 00, 0xa5, 0xe4, 0xe0,
+ 0x52, 0xac, 0x26, 0xae, 0x88, 0x29, 0xe2, 0x1e, 0x28, 0x2,
+ 0x9a, 0xc3, 0x8a, 0x95, 0x63, 0x20, 0x55, 0xa1, 0x7, 0x3d,
+ 0xea, 0x44, 0x87, 0xeb, 0x40, 0x15, 0x52, 0x23, 0x56, 0x23,
+ 0x87, 0x9a, 0x9d, 0x21, 0xe6, 0xac, 0x24, 0x18, 0xa0, 0x8,
+ 0x56, 0x3c, 0x55, 0x88, 0xe3, 0xa9, 0x52, 0x1a, 0xb3, 0x1c,
+ 0x44, 0xf6, 0xa0, 0x6, 0xc5, 0x16, 0x6a, 0xec, 0x71, 0x7b,
+ 0x51, 0x14, 0x27, 0xd2, 0xae, 0xc5, 0x17, 0xb5, 00, 0x24,
+ 0x51, 0x74, 0xe2, 0xae, 0x45, 0x1d, 0x11, 0x45, 0x56, 0xa3,
+ 0x8e, 0x80, 0x16, 0x28, 0xea, 0xdc, 0x51, 0xd3, 0x63, 0x8f,
+ 0xa5, 0x59, 0x8d, 0x31, 0x40, 0x12, 0x46, 0x87, 0xb5, 0x5a,
+ 0x8d, 0x4d, 0x47, 0x1a, 0x55, 0x88, 0xd2, 0x80, 0x1c, 0xa3,
+ 0x9a, 0x95, 0x6, 0x3b, 0x52, 0x5, 0xa9, 0x94, 0x70, 0x28,
+ 00, 0x3, 0x8a, 0x91, 0x79, 0x34, 0x80, 0x52, 0x81, 0x40,
+ 0xa, 0x5, 0x3e, 0x81, 0xd2, 0x8a, 00, 0x29, 0xcb, 0xd2,
+ 0x90, 0xc, 0xd2, 0xf4, 0xa0, 0x5, 0xa2, 0x8a, 0x28, 00,
+ 0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a, 0x28, 00, 0xa2, 0x8a,
+ 0x28, 00, 0xa2, 0x8a, 0x28, 0x1, 0x31, 0x4d, 0xa7, 0xd2,
+ 0x62, 0x80, 0x1b, 0x45, 0x3b, 0x14, 0xdc, 0x50, 0x2, 0x6d,
+ 0xa3, 0x6d, 0x2d, 0x14, 00, 0x9b, 0x69, 0x8, 0xc1, 0xa7,
+ 0x51, 0x81, 0x40, 0x11, 0x91, 0x46, 0xda, 0x7e, 0x5, 0x1b,
+ 0x68, 0x1, 0x9b, 0x28, 0xdb, 0x4f, 0xdb, 0x46, 0xda, 00,
+ 0x8f, 0x67, 0xb5, 0x1b, 0x6a, 0x4d, 0xb4, 0x6d, 0xa0, 0x8,
+ 0x4a, 0xd2, 0x14, 0xa9, 0x8a, 0xfe, 0x34, 0x9b, 0x7d, 0xa8,
+ 0x2, 0x2d, 0x94, 0x9b, 0x6a, 0x52, 0x38, 0xa4, 0xc5, 00,
+ 0x47, 0xb6, 0x93, 0x65, 0x4b, 0x8a, 0x31, 0x40, 0x11, 0x6d,
+ 0xa6, 0x95, 0xa9, 0x8a, 0xd2, 0x6d, 0xa0, 0x8, 0x76, 0xd1,
+ 0xb7, 0xda, 0xa6, 0xdb, 0x46, 0xca, 00, 0x83, 0x6d, 0x1b,
+ 0x6a, 0x6d, 0x94, 0x6c, 0xa0, 0x8, 0x76, 0x8a, 0x6b, 0x26,
+ 0x4d, 0x58, 0xd9, 0x41, 0x5c, 0x76, 0xa0, 0xa, 0xbe, 0x5d,
+ 0x2f, 0x96, 0x3d, 0xaa, 0x7d, 0xb9, 0xa3, 0x60, 0xa0, 0xa,
+ 0xfe, 0x5f, 0xd2, 0x93, 0xcb, 0x15, 0x67, 0x6f, 0xb5, 0x34,
+ 0xa5, 00, 0x40, 0x63, 0x2, 0x90, 0xc7, 0x53, 0xec, 0xa4,
+ 0xd9, 0x40, 0x10, 0x79, 0x34, 0xd3, 0x10, 0xcd, 0x59, 0xd8,
+ 0x69, 0x3c, 0xba, 00, 0xad, 0xe5, 0xd2, 0x79, 0x59, 0xab,
+ 0x5e, 0x5d, 0x21, 0x8f, 0x2, 0x80, 0x2a, 0x98, 0xa9, 0xbb,
+ 0x2a, 0xd1, 0x8f, 0x34, 0x9e, 0x5e, 0x28, 0x2, 0xa7, 0x95,
+ 0x9a, 0x3c, 0x9f, 0xc6, 0xad, 0x79, 0x74, 0x79, 0x54, 0x1,
+ 0x53, 0xcb, 0xa4, 0xf2, 0x73, 0x56, 0xfc, 0xbf, 0x6a, 0x3c,
+ 0xb3, 0x40, 0x14, 0x4c, 0x3c, 0xd1, 0xe4, 0x8a, 0xb6, 0xd1,
+ 0x1c, 0xf3, 0x49, 0xe5, 0xd0, 0x5, 0x43, 0x17, 0xb7, 0xe9,
+ 0x4d, 0x30, 0xe6, 0xae, 0x6c, 0xf6, 0xa3, 0xcb, 0xf6, 0xa0,
+ 0xa, 0x46, 0x2f, 0x6a, 0x4f, 0x26, 0xae, 0xf9, 0x7e, 0xd4,
+ 0x85, 0x38, 0xe9, 0x40, 0x14, 0x3c, 0x81, 0xf5, 0xa4, 0x31,
+ 0xa, 0xbd, 0xe4, 0xd2, 0x79, 0x3e, 0xd4, 0x1, 0x43, 0xc9,
+ 0xcf, 0xff, 00, 0xaa, 0x91, 0xa0, 0xe3, 0x9a, 0xd0, 0xf2,
+ 0x69, 0x8f, 0xf, 0x4a, 00, 0xce, 0xf2, 0x5, 0x1e, 0x45,
+ 0x5f, 0xf2, 0x68, 0xf2, 0xbd, 0x6, 0x68, 0x3, 0x39, 0xe1,
+ 0xf6, 0xa6, 0x79, 0x2, 0xb4, 0x5a, 0x2, 0x4f, 0x4a, 0x4f,
+ 0x23, 0xe9, 0x40, 0x19, 0xfe, 0x4d, 0x21, 0x87, 0xda, 0xb4,
+ 0x3c, 0x9f, 0x6a, 0x43, 0x6e, 0x68, 0x3, 0x30, 0xc1, 0xcf,
+ 0x4a, 0x3c, 0xaa, 0xd0, 0xfb, 0x3d, 0x37, 0xc8, 0xf6, 0xa0,
+ 0xc, 0xf3, 0xe, 0x69, 0x3c, 0x8f, 0x6a, 0xd1, 0xfb, 0x39,
+ 0x3d, 0xa9, 0x3e, 0xcf, 0xed, 0x40, 0x19, 0xe6, 0x11, 0x8a,
+ 0x61, 0x83, 0xaf, 0x15, 0xa5, 0xe4, 0x7b, 0x52, 0x34, 0x3c,
+ 0x50, 0x6, 0x67, 0x91, 0xfe, 0x71, 0x49, 0xe4, 0x8f, 0x4a,
+ 0xd1, 0xfb, 0x39, 0x34, 0x9e, 0x45, 00, 0x66, 0x18, 0x3d,
+ 0xa9, 0xd, 0xbd, 0x68, 0xb4, 0x27, 0x34, 0x9f, 0x67, 0x27,
+ 0xd2, 0x80, 0x33, 0xc, 0x3, 0xd2, 0x9b, 0xf6, 0x7f, 0x6a,
+ 0xd3, 0x68, 0x3d, 0xa9, 0x86, 0xc, 0x74, 0xa0, 0xc, 0xe3,
+ 0x6f, 0xc5, 0x46, 0x6d, 0x80, 0xad, 0x5f, 0xb3, 0x93, 0x4c,
+ 0x36, 0xfc, 0xd0, 0x6, 0x67, 0xd9, 0xfd, 0xa9, 0x86, 0xdb,
+ 0x9f, 0xfe, 0xb5, 0x6a, 0x18, 0x3d, 0xa9, 0xbf, 0x65, 0x27,
+ 0xda, 0x80, 0x33, 0x3e, 0xcd, 0x8a, 0x3e, 0xcf, 0xf4, 0xad,
+ 0x2f, 0xb3, 0x7f, 0x9c, 0x53, 0x7c, 0x9f, 0x6a, 00, 0xcd,
+ 0x36, 0xf8, 0x14, 0xc3, 0x6f, 0x8f, 0xff, 00, 0x55, 0x69,
+ 0xb5, 0xb9, 0x34, 0xd3, 0x6c, 0x7d, 0x28, 0x3, 0x30, 0xc1,
+ 0xfe, 0x71, 0x48, 0x6d, 0xf3, 0xda, 0xb5, 0x5, 0xbf, 0xb5,
+ 0x34, 0xc2, 0x73, 0xd2, 0x80, 0x33, 0xd, 0xbd, 0x30, 0xdb,
+ 0x8f, 0x4c, 0xd6, 0xa1, 0xb7, 0xe3, 0xa5, 0x37, 0xec, 0xfe,
+ 0xd4, 0x1, 0x96, 0x6d, 0xfd, 0xbf, 0x4a, 0x61, 0xb7, 0xcd,
+ 0x6a, 0x98, 0x49, 0xed, 0x4c, 0xfb, 0x31, 0xf4, 0xa0, 0xc,
+ 0xcf, 0xb3, 0x8f, 0x4a, 0x63, 0x40, 0x33, 0xd2, 0xb5, 0x7e,
+ 0xcf, 0xed, 0x4c, 0x36, 0xff, 00, 0xec, 0xd0, 0x6, 0x59,
+ 0xb7, 0x6, 0x98, 0xd6, 0xe3, 0x35, 0xab, 0xf6, 0x7f, 0x6a,
+ 0x61, 0xb7, 0x19, 0xe9, 0x40, 0x19, 0x7f, 0x67, 0xf6, 0xa4,
+ 0x36, 0xfc, 0xd6, 0xa1, 0xb7, 0xf6, 0xa6, 0x35, 0xb1, 0xf4,
+ 0xa0, 0xc, 0xb3, 0x6f, 0x48, 0x6d, 0xfe, 0x95, 0xa7, 0xf6,
+ 0x6a, 0x4f, 0xb3, 0xfb, 0x50, 0x6, 0x67, 0xd9, 0x8d, 0x21,
+ 0xb7, 0xad, 0x36, 0xb6, 0x34, 0x86, 0xd8, 0x8f, 0x4a, 00,
+ 0xcc, 0x30, 0x62, 0x93, 0xec, 0xf9, 0xed, 0xfa, 0x56, 0x9f,
+ 0xd9, 0xe8, 0x36, 0xed, 0xe9, 0x40, 0x19, 0x7f, 0x67, 0xff,
+ 00, 0x38, 0xa4, 0xf2, 0x3d, 0xab, 0x4c, 0xdb, 0x1f, 0x4a,
+ 0x5, 0xb1, 0xf4, 0xa0, 0xc, 0xef, 0x23, 0xdb, 0x1f, 0x85,
+ 0x2, 0xdc, 0x56, 0x99, 0xb7, 0x27, 0xb5, 0x2, 0xd8, 0x81,
+ 0xd2, 0x80, 0x33, 0x7c, 0x80, 0x29, 0xc2, 0x1e, 0x6b, 0x43,
+ 0xec, 0xdc, 0xf4, 0xa7, 0xfd, 0x9f, 0xda, 0x80, 0x33, 0xc4,
+ 0x15, 0x22, 0xc1, 0xed, 0x57, 0x96, 0xdf, 0xda, 0xa4, 0x5b,
+ 0x7f, 0x6a, 00, 0xa4, 0xb0, 0x55, 0x88, 0xe0, 0xfc, 0x6a,
+ 0xd0, 0xb6, 0xc0, 0xe9, 0x52, 0xad, 0xb9, 0xa0, 0xa, 0xe9,
+ 00, 0x1c, 0xd5, 0x88, 0xa1, 0xa9, 0xe3, 0xb7, 0x35, 0x61,
+ 0x20, 0xf6, 0xa0, 0x8, 0xe3, 0x86, 0xae, 0x45, 0x10, 0xa7,
+ 0x47, 0x6e, 0x41, 0xab, 0x51, 0xc3, 0x40, 0xd, 0x8e, 0x2e,
+ 0x2a, 0xc2, 0x45, 0xd2, 0x95, 0x13, 0xa0, 0xc5, 0x59, 0x48,
+ 0xe8, 0x1, 0x12, 0x2a, 0xb0, 0x89, 0x42, 0x47, 0x53, 0xa4,
+ 0x74, 00, 0xa8, 0x98, 0xc5, 0x4c, 0xa3, 0x14, 0x8a, 0xb5,
+ 0x22, 0xaf, 0x14, 00, 0xf5, 0x5e, 0x3a, 0xd4, 0x81, 0x79,
+ 0xa6, 0xa8, 0xa9, 0x16, 0x80, 00, 0x3d, 0x69, 0xdb, 0x69,
+ 0x29, 0xf4, 00, 0xa, 0x72, 0xd3, 0x69, 0xc3, 0xa5, 00,
+ 0x2d, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14,
+ 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40,
+ 0x5, 0x14, 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x5, 0x14,
+ 0x51, 0x40, 0x5, 0x14, 0x51, 0x40, 0x8, 0x7a, 0x53, 0x69,
+ 0xf4, 0x50, 0x3, 0x28, 0xa7, 0x62, 0x8c, 0x50, 0x3, 0x68,
+ 0xa7, 0x62, 0x8c, 0xa, 00, 0x6d, 0x14, 0xec, 0xa, 0x36,
+ 0xd0, 0x3, 0x68, 0xa7, 0x6d, 0xa4, 0x23, 0x14, 00, 0xcd,
+ 0xb4, 0x6d, 0xa7, 0x51, 0x40, 0xd, 0xc1, 0xa3, 0x6, 0x9d,
+ 0x45, 00, 0x37, 0x6, 0x8c, 0x1a, 0x75, 0x14, 00, 0xdc,
+ 0x1a, 0x31, 0x8a, 0x75, 0x14, 00, 0xca, 0x31, 0x4f, 0xa2,
+ 0x80, 0x19, 0x81, 0x49, 0x8a, 0x92, 0x93, 0xf0, 0xa0, 0x8,
+ 0xf6, 0x50, 0x57, 0x15, 0x26, 0x5, 0x1b, 0x68, 0x2, 0x2c,
+ 0xa, 0x36, 0x54, 0xbb, 0x69, 0x8, 0xc5, 00, 0x47, 0xb6,
+ 0x93, 0x6d, 0x48, 0x46, 0x69, 0x36, 0xd0, 0x3, 0x36, 0xd2,
+ 0x6c, 0xa7, 0xe0, 0xd1, 0x83, 0x40, 0xc, 0xda, 0x5, 0x23,
+ 0x26, 0x45, 0x49, 0x83, 0x46, 0xd2, 0x68, 0x2, 0x1d, 0x94,
+ 0x6c, 0xa9, 0x76, 0x51, 0xb2, 0x80, 0x22, 0xd9, 0x46, 0xca,
+ 0x97, 0x6f, 0xd6, 0x8d, 0xb4, 0x1, 0xe, 0xda, 0x8, 0xa9,
+ 0xb6, 0xd2, 0x6d, 0xa0, 0x8, 0x3c, 0xba, 0x3c, 0xba, 0x98,
+ 0xae, 0x69, 0x36, 0xd0, 0x4, 0x3b, 0x5, 0x26, 0xcc, 0x7a,
+ 0x9a, 0x9f, 0x6d, 0x21, 0x5c, 0x9a, 00, 0x83, 0x2, 0x8d,
+ 0xbe, 0xf5, 0x36, 0xda, 0x36, 0xfd, 0x68, 0x2, 0xd, 0x94,
+ 0xdf, 0x2e, 0xac, 0x6d, 0xa3, 0x65, 00, 0x56, 0xd9, 0xed,
+ 0x41, 0x8e, 0xac, 0xed, 0xa6, 0xb2, 0xf1, 0x40, 0x15, 0x5a,
+ 0x3a, 0x4f, 0x2c, 0x7a, 0x55, 0x9d, 0x94, 0x6c, 0xa0, 0xa,
+ 0xbe, 0x56, 0x68, 0xf2, 0x80, 0xab, 0x5b, 0x29, 0x3c, 0xba,
+ 00, 0xaa, 0x62, 0x14, 0xd3, 0x1d, 0x5c, 0xd9, 0x49, 0xb2,
+ 0x80, 0x29, 0xf9, 0x42, 0x93, 0x65, 0x5a, 0x31, 0x8c, 0xd1,
+ 0xe5, 0x8a, 00, 0xa8, 0x63, 0x27, 0xb5, 0x27, 0x94, 0x7d,
+ 0xea, 0xd9, 0x8f, 0x3d, 0xa9, 0x3c, 0xaa, 00, 0xa9, 0xe5,
+ 0x52, 0x18, 0x89, 0xab, 0x9e, 0x5f, 0xd6, 0x90, 0xc7, 0x40,
+ 0x14, 0x8c, 0x20, 0x53, 0x4c, 0x40, 0x55, 0xe6, 0x88, 0xb5,
+ 0x37, 0xca, 0xc7, 0xa5, 00, 0x51, 0x31, 0x64, 0xd2, 0x79,
+ 0x15, 0x7b, 0xcb, 0xa4, 0xf2, 0x89, 0xa0, 0xa, 0xd, 0xf,
+ 0x34, 0xd3, 0x15, 0x5e, 0x31, 0xd2, 0x79, 0x67, 0xd2, 0x80,
+ 0x28, 0x98, 0x79, 0xa6, 0x34, 0x35, 0xa2, 0x62, 0xcf, 0x6a,
+ 0x69, 0x84, 0xa, 00, 0xcf, 0xf2, 0xa9, 0xc, 0x39, 0xab,
+ 0xfe, 0x55, 0x21, 0x8a, 0x80, 0x28, 0x18, 0x71, 0x51, 0x98,
+ 0xb1, 0x5a, 0x26, 0x1e, 0x29, 0x3c, 0x8a, 00, 0xce, 0xf2,
+ 0x73, 0x47, 0x91, 0x5a, 0x1e, 0x41, 0xa6, 0x98, 0x31, 0x40,
+ 0x14, 0x3c, 0xac, 0x53, 0x4c, 0x35, 0xa3, 0xe4, 0xfb, 0x53,
+ 0x5a, 0x1f, 0x6a, 00, 0xcd, 0xf2, 0x69, 0xc, 0x42, 0xb4,
+ 0x7e, 0xce, 0x69, 0xc, 0x34, 0x1, 0x9a, 0x61, 0xc0, 0x14,
+ 0xdf, 0x22, 0xb4, 0x5a, 0x1e, 0x7a, 0x53, 0x7c, 0x83, 0x40,
+ 0x19, 0xcd, 0x6, 0x29, 0xbe, 0x5d, 0x68, 0xb4, 0x3c, 0x53,
+ 0x7c, 0x9a, 00, 0xcf, 0xf2, 0x69, 0x9e, 0x4f, 0xb5, 0x69,
+ 0x18, 0x49, 0xed, 0x4c, 0x68, 0x70, 0x68, 0x3, 0x3c, 0xc2,
+ 0x3d, 0x29, 0x86, 0x3, 0xef, 0x5a, 0x3e, 0x4f, 0xb5, 0x1e,
+ 0x45, 00, 0x66, 0x7d, 0x9c, 0x7a, 0x52, 0x79, 0x1e, 0xd5,
+ 0xa7, 0xe4, 0xd2, 0x34, 0x3c, 0x74, 0xa0, 0xc, 0xc3, 0x6f,
+ 0x9a, 0x4f, 0xb3, 0xfa, 0xd6, 0x89, 0x86, 0x90, 0xc1, 0x40,
+ 0x19, 0xa6, 0x1a, 0xd, 0xbe, 0x7e, 0x95, 0xa3, 0xe4, 0xd2,
+ 0x79, 0x1e, 0xd4, 0x1, 0x9d, 0xf6, 0x7a, 0x4, 0x1c, 0xd6,
+ 0x97, 0xd9, 0xa8, 0xf2, 0x31, 0x40, 0x19, 0xde, 0x41, 0x3d,
+ 0xa8, 0xf2, 0x31, 0x5a, 0x22, 0xc, 0x9a, 0x3e, 0xcd, 0x8a,
+ 00, 0xcf, 0x10, 0xe3, 0xb5, 0x38, 0x43, 0x57, 0xfe, 0xcf,
+ 0x4e, 0x10, 0x76, 0xc5, 00, 0x51, 0x10, 0x73, 0x52, 0x2c,
+ 0x22, 0xae, 0xb, 0x7c, 0xd3, 0xd6, 0xde, 0x80, 0x2a, 0x2c,
+ 0x39, 0xa9, 0x16, 0x1a, 0xb6, 0xb0, 0xd4, 0xab, 0x7, 0xe5,
+ 0x40, 0x15, 0x56, 0xc, 0xe2, 0xac, 0xa4, 0x38, 0xed, 0x53,
+ 0xac, 0x38, 0xa9, 0x56, 0x2a, 00, 0x85, 0x22, 0xcd, 0x58,
+ 0x58, 0xe9, 0xe9, 0x15, 0x4e, 0xb1, 0xe3, 0x14, 00, 0xc5,
+ 0x8e, 0xa6, 0x8d, 0x29, 0xe8, 0xb5, 0x28, 0x4a, 00, 0x6a,
+ 0xa5, 0x4c, 0xab, 0x40, 0x5a, 0x91, 0x45, 00, 0xb, 0x4f,
+ 00, 0x71, 0x4a, 0xa3, 0xa5, 0x3c, 0xe, 0x7a, 0x50, 00,
+ 0xa0, 0x66, 0x9d, 0xd2, 0x8c, 0x62, 0x9c, 0x7, 0x14, 00,
+ 0x60, 0x52, 0xd1, 0x45, 00, 0x28, 0x19, 0xa7, 0x52, 0xe,
+ 0x94, 0xb4, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14,
+ 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51,
+ 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14,
+ 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51,
+ 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14,
+ 00, 0x51, 0x45, 0x14, 00, 0x52, 0x60, 0x1a, 0x5a, 0x28,
+ 0x1, 0xbb, 0x68, 0xdb, 0x4e, 0xa2, 0x80, 0x1b, 0xb6, 0x8d,
+ 0xb4, 0xea, 0x28, 0x1, 0xbb, 0x68, 0xdb, 0x4e, 0xa2, 0x80,
+ 0x1b, 0x83, 0x46, 0xd, 0x3a, 0x8a, 00, 0x66, 0x28, 0xc5,
+ 0x3e, 0x8a, 00, 0x65, 0x14, 0xfa, 0x4c, 0x50, 0x3, 0x68,
+ 0xa7, 0x60, 0x51, 0x81, 0x40, 0xd, 0xa2, 0x9d, 0x81, 0x41,
+ 0x1c, 0x50, 0x3, 0x30, 0x28, 0xc0, 0xa5, 0xa2, 0x80, 0x13,
+ 0x6d, 0x1b, 0x69, 0x68, 0xa0, 0x4, 0xdb, 0x49, 0xb6, 0x9d,
+ 0x46, 0x28, 0x1, 0xbb, 0x68, 0xc1, 0xa7, 0x62, 0x8a, 00,
+ 0x6e, 0x28, 0xc7, 0xb5, 0x3a, 0x8a, 00, 0x66, 0x28, 0xc5,
+ 0x3e, 0x8a, 00, 0x8c, 0xad, 0x26, 0xda, 0x96, 0x8c, 0x50,
+ 0x4, 0x5b, 0x68, 0xdb, 0x52, 0xe2, 0x91, 0xa8, 0x2, 0x22,
+ 0xb4, 0x9b, 0x6a, 0x4c, 0x51, 0x81, 0x40, 0x11, 0xed, 0x34,
+ 0x6d, 0xa7, 0x91, 0x46, 0xda, 00, 0x66, 0xda, 0x6b, 0x2d,
+ 0x4b, 0xb6, 0x8d, 0xb4, 0x1, 0xe, 0xca, 0x36, 0xd4, 0xbb,
+ 0x68, 0xdb, 0x40, 0x11, 0x14, 0xcd, 0x26, 0xcf, 0x7a, 0x9b,
+ 0x6f, 0xb5, 0x26, 0xcc, 0xd0, 0x4, 0x5b, 0x29, 0x36, 0xd4,
+ 0xdb, 0x28, 0xdb, 0x40, 0x10, 0x6c, 0xa3, 0x67, 0xb0, 0xa9,
+ 0x88, 0xf6, 0xa4, 0xc6, 0x28, 0x2, 0x2d, 0x83, 0xd0, 0x52,
+ 0x79, 0x62, 0xa6, 0xc5, 0x26, 0x5, 00, 0x40, 0x52, 0x8d,
+ 0x9e, 0xd5, 0x36, 0xda, 0x30, 0x68, 0x2, 0x1d, 0xb4, 0xd6,
+ 0x4a, 0x9f, 0x66, 0x68, 0xd9, 0x40, 0x15, 0xfc, 0xba, 0x3c,
+ 0xba, 0xb1, 0xb4, 0x52, 0x6d, 0xa0, 0xa, 0xfe, 0x5f, 0xd2,
+ 0x9a, 0x63, 0xf6, 0xab, 0xc, 0xbc, 0xd2, 0x6d, 0xa0, 0xa,
+ 0xde, 0x5d, 0x21, 0x8f, 0x35, 0x6b, 0x6d, 0x26, 0xca, 00,
+ 0xab, 0xe5, 0x7b, 0x50, 0x62, 0xf6, 0xab, 0x5b, 0x29, 0x36,
+ 0x50, 0x5, 0x5f, 0x26, 0x9b, 0xb0, 0x7a, 0x55, 0xc2, 0x9c,
+ 0x54, 0x7b, 0x68, 0x2, 0xbf, 0x96, 0x3d, 0x5, 0x34, 0xc3,
+ 0x93, 0x56, 0xb6, 0xd1, 0xe5, 0xd0, 0x5, 0x43, 0xd, 0x1e,
+ 0x49, 0xab, 0x5e, 0x5d, 0x1e, 0x5d, 00, 0x54, 0x30, 0xfb,
+ 0x53, 0x1a, 0x21, 0x57, 0x4c, 0x59, 0xa6, 0x98, 0x68, 0x2,
+ 0x91, 0x8b, 0x3d, 0xa9, 0x3c, 0xaf, 0xa5, 0x5d, 0xf2, 0xfd,
+ 0xe9, 0x36, 0x50, 0x5, 0x16, 0x87, 0x9e, 0x82, 0x93, 0xc9,
+ 0xf6, 0xab, 0xa6, 0x23, 0x49, 0xe5, 0xd0, 0x5, 0x2f, 0x27,
+ 0x34, 0xc6, 0x80, 0x75, 0xab, 0xfe, 0x5d, 0x35, 0xa3, 0xc0,
+ 0xe9, 0x40, 0x19, 0xfe, 0x50, 0xa4, 0x30, 0x66, 0xaf, 0xf9,
+ 0x7e, 0xd4, 0x9e, 0x5e, 0x68, 0x2, 0x89, 0x82, 0x93, 0xc8,
+ 0xc7, 0xa1, 0xab, 0xe6, 0x2a, 0x4f, 0x2c, 0x50, 0x6, 0x71,
+ 0xb7, 0x24, 0xd2, 0x7d, 0x9f, 0xda, 0xb4, 0x7c, 0xbc, 0xd2,
+ 0x79, 0x22, 0x80, 0x33, 0x8c, 0x1f, 0x4a, 0x41, 0x6, 0x4f,
+ 0x4a, 0xd2, 0x31, 0x52, 0x79, 0x34, 0x1, 0x40, 0xc1, 0xea,
+ 0x29, 0xc, 0x1e, 0xd5, 0xa1, 0xe4, 0xd2, 0x18, 0x68, 0x2,
+ 0x82, 0xc1, 0xcf, 0x41, 0x4a, 0x60, 0xcf, 0x61, 0x57, 0x84,
+ 0x54, 0xbe, 0x51, 0xa0, 0xa, 0x42, 0xe, 0x28, 0x11, 0x73,
+ 0x57, 0x44, 0x54, 0xbe, 0x5d, 00, 0x54, 0x10, 0xf1, 0xda,
+ 0x9e, 0x21, 0xab, 0x42, 0x2a, 0x78, 0x8b, 0xda, 0x80, 0x2a,
+ 0xac, 0x35, 0x20, 0x8e, 0xac, 0x88, 0xf8, 0xe9, 0x4a, 0x22,
+ 0xe6, 0x80, 0x21, 0x58, 0x86, 0x7a, 0x54, 0xab, 0x10, 0xa9,
+ 0x56, 0x3c, 0x54, 0x9b, 0x45, 00, 0x42, 0x22, 0xc5, 0x4c,
+ 0x91, 0xe7, 0xd2, 0x9f, 0xb2, 0x9e, 0xab, 0x40, 0xd, 0x54,
+ 0xc5, 0x4a, 0x13, 0x38, 0xa5, 0x55, 0xa7, 0xaa, 0xd0, 0x3,
+ 0x42, 0xd3, 0xc0, 0x34, 0xbb, 0x69, 0xd8, 0xc0, 0xa0, 00,
+ 0x66, 0x9f, 0x8a, 0x4a, 0x78, 0xe9, 0x40, 0x9, 0x81, 0x4b,
+ 0x45, 0x14, 00, 0x52, 0x81, 0x4a, 0x7, 0x14, 0xb4, 00,
+ 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45,
+ 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00,
+ 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45,
+ 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00,
+ 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45,
+ 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00,
+ 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45,
+ 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00,
+ 0x51, 0x45, 0x14, 00, 0x51, 0x45, 0x14, 00, 0x51, 0x45,
+ 0x14, 00, 0x98, 0x14, 0x6d, 0xa5, 0xa2, 0x80, 0x13, 0x6d,
+ 0x18, 0xa5, 0xa2, 0x80, 0x13, 0x1e, 0xf4, 0x63, 0xde, 0x96,
+ 0x8a, 00, 0x69, 0x7, 0xeb, 0x46, 0xd, 0x3a, 0x8a, 00,
+ 0x6e, 0xd, 0x26, 0x29, 0xf4, 0x50, 0x3, 0x31, 0x46, 0x29,
+ 0xf4, 0x50, 0x3, 0x31, 0x46, 0x29, 0xf4, 0x50, 0x3, 0x28,
+ 0xa7, 0x62, 0x8c, 0x50, 0x3, 0x31, 0x9a, 0x36, 0xd2, 0xe2,
+ 0x8a, 00, 0x4d, 0xb4, 0x6d, 0xa5, 0xa2, 0x80, 0x13, 0x6d,
+ 0x1b, 0x69, 0x68, 0xa0, 0x4, 0xdb, 0x46, 0xda, 0x5a, 0x28,
+ 0x1, 0xb8, 0x34, 0x60, 0xd3, 0xa8, 0xa0, 0x6, 0xe0, 0xd1,
+ 0x83, 0x4e, 0xa2, 0x80, 0x19, 0xb3, 0x34, 0x9b, 0x6a, 0x4a,
+ 0x28, 0x2, 0x3c, 0x51, 0xb7, 0xde, 0xa4, 0xc5, 0x18, 0xa0,
+ 0x8, 0xf6, 0x53, 0x70, 0x2a, 0x42, 0x3d, 0xa9, 0x31, 0x40,
+ 0xc, 0xdb, 0x46, 0xda, 0x7e, 0x28, 0xc0, 0xa0, 0x6, 0x6d,
+ 0xa3, 0x1e, 0xf4, 0xfc, 0xa, 0x4d, 0xb4, 0x1, 0x19, 0x5e,
+ 0x69, 0x36, 0xd4, 0xbb, 0x68, 0xdb, 0x40, 0x10, 0xed, 0xa3,
+ 0x60, 0xa9, 0xb6, 0xd1, 0xb6, 0x80, 0x21, 0xd8, 0x29, 0x36,
+ 0x66, 0xa7, 0xd9, 0x49, 0xb6, 0x80, 0x21, 0xf2, 0xe9, 0x36,
+ 0x54, 0xfb, 0x29, 0xbb, 0x68, 0x2, 0x2d, 0x94, 0x6c, 0xa9,
+ 0x76, 0xd2, 0x6d, 0xa0, 0x8, 0xa, 0x51, 0xb6, 0xa6, 0xf2,
+ 0xe8, 0xd9, 0x40, 0x10, 0x6d, 0x26, 0x93, 0x65, 0x58, 0xd9,
+ 0x49, 0xb0, 0x50, 0x5, 0x7f, 0x2e, 0x8f, 0x2e, 0xac, 0x6c,
+ 0xa3, 0x65, 00, 0x56, 0x31, 0xe3, 0xad, 0x35, 0x93, 0xd2,
+ 0xac, 0xb2, 0x7b, 0x52, 0x6c, 0xf6, 0xa0, 0xa, 0xbe, 0x5d,
+ 0x1e, 0x55, 0x59, 0xd9, 0x49, 0xb2, 0x80, 0x2b, 0xf9, 0x5e,
+ 0xd4, 0x9e, 0x5f, 0xb5, 0x59, 0xf2, 0xe8, 0xf2, 0xe8, 0x2,
+ 0xaf, 0x95, 0xed, 0x49, 0xe5, 0xf, 0x4a, 0xb7, 0xe5, 0xd1,
+ 0xb2, 0x80, 0x2a, 0x79, 0x54, 0x86, 0x2c, 0xd5, 0xbf, 0x2e,
+ 0x93, 0xcb, 0xcd, 00, 0x55, 0xf2, 0x47, 0xf9, 0x14, 0x9e,
+ 0x4d, 0x5b, 0xf2, 0xe8, 0xf2, 0xe8, 0x2, 0x9f, 0x91, 0x47,
+ 0x91, 0xef, 0x56, 0xcc, 0x54, 0x79, 0x43, 0xd2, 0x80, 0x2a,
+ 0x8, 0xa8, 0xf2, 0x8d, 0x5a, 0xf2, 0xc7, 0xa5, 0x1e, 0x5d,
+ 00, 0x56, 0x11, 0x7a, 0x9a, 0x5f, 0x2f, 0xd2, 0xad, 0x79,
+ 0x74, 0x79, 0x74, 0x1, 0x5f, 0xcb, 0xa5, 0x58, 0xaa, 0x7f,
+ 0x2e, 0x9c, 0x23, 0xe2, 0x80, 0x21, 0xd9, 0x4a, 0x23, 0x3e,
+ 0x95, 0x32, 0xa7, 0x34, 0xed, 0x80, 0xd0, 0x4, 0x41, 0x29,
+ 0xea, 0x9c, 0xd3, 0xc2, 0x71, 0x4e, 0xb, 0x40, 0xc, 0xb,
+ 0x4f, 0xb, 0xd2, 0x9c, 0x12, 0x9c, 0x16, 0x80, 0x1a, 0x17,
+ 0x6, 0x9e, 0x17, 0x8a, 0x5c, 0x7b, 0x50, 0x5, 00, 0x26,
+ 0xda, 0x70, 0x19, 0x34, 0xb8, 0x14, 0xb4, 00, 0x63, 0x14,
+ 0x51, 0x4a, 0x6, 0x68, 00, 0x3, 0x34, 0xa0, 0x71, 0x40,
+ 0x18, 0xa5, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28,
+ 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2,
+ 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28,
+ 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2,
+ 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28,
+ 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2,
+ 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28,
+ 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2,
+ 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28,
+ 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2,
+ 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28,
+ 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2,
+ 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28,
+ 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x4,
+ 0xc0, 0xa3, 0x2, 0x96, 0x8a, 00, 0x4c, 0xa, 0x36, 0xd2,
+ 0xd1, 0x40, 0x9, 0xb6, 0x93, 0x6d, 0x3a, 0x8a, 00, 0x6e,
+ 0xda, 0x36, 0xd3, 0xa8, 0xa0, 0x6, 0xed, 0xa3, 0x6d, 0x3a,
+ 0x8a, 00, 0x6e, 0x28, 0xc7, 0xb5, 0x3a, 0x8a, 00, 0x6e,
+ 0x29, 0x29, 0xc4, 0x66, 0x93, 0x6, 0x80, 0x12, 0x8a, 0x31,
+ 0x46, 0x28, 00, 0xa2, 0x8a, 0x28, 0x1, 0x30, 0x28, 0xc0,
+ 0xa5, 0xa2, 0x80, 0x13, 0x6e, 0x68, 0xc0, 0xf5, 0xa5, 0xa2,
+ 0x80, 0x13, 0x3, 0xd6, 0x93, 0x6d, 0x3a, 0x8a, 00, 0x6e,
+ 0xda, 0x36, 0xd3, 0xa8, 0xa0, 0x6, 0xed, 0xa4, 0xd9, 0xed,
+ 0x4f, 0xa2, 0x80, 0x19, 0xb7, 0x14, 0x84, 0x53, 0xc8, 0xcd,
+ 0x26, 0xd, 00, 0x32, 0x93, 0x2, 0xa4, 0xc1, 0xa3, 0x6,
+ 0x80, 0x23, 0xc5, 0x18, 0xa9, 0x31, 0x46, 0x28, 0x2, 0x2d,
+ 0xb4, 0x6d, 0xa9, 0x31, 0x46, 0x28, 0x2, 0x3d, 0x94, 0x9b,
+ 0x2a, 0x4d, 0xb4, 0x6d, 0xa0, 0x8, 0xf6, 0xd2, 0x6d, 0xfa,
+ 0xd4, 0xbb, 0x68, 0xdb, 0x40, 0x11, 0x15, 0x1d, 0xe9, 0x36,
+ 0x8a, 0x9b, 0x6d, 0x1b, 0x28, 0x2, 0x1d, 0x94, 0x6c, 0xa9,
+ 0x76, 0xd1, 0xb6, 0x80, 0x22, 0xd9, 0x49, 0xb2, 0xa6, 0xdb,
+ 0xed, 0x46, 0xdf, 0x6a, 00, 0x87, 0x65, 0x1b, 0x2a, 0x5d,
+ 0x94, 0x6c, 0xa0, 0x8, 0x76, 0x1a, 0x36, 0x7a, 0xd4, 0xdb,
+ 0x7e, 0xb4, 0x6d, 0xa0, 0x8, 0xf6, 0x51, 0xb7, 0xda, 0xa4,
+ 0xc5, 0x18, 0xa0, 0x8, 0xf6, 0x52, 0x85, 0xc7, 0x15, 0x26,
+ 0xda, 0x50, 0xb4, 00, 0xc0, 0xb4, 0x6d, 0xa7, 0xed, 0xa0,
+ 0xa, 00, 0x68, 0x5e, 0x69, 0xdb, 0x69, 0xc0, 0x66, 0x97,
+ 0x6d, 00, 0x36, 0x97, 0x6, 0x94, 0xc, 0x1a, 0x5a, 00,
+ 0x40, 0x30, 0x29, 0x68, 0xa3, 0x14, 00, 0x51, 0x4e, 0x3,
+ 0x8a, 0x31, 0x40, 0x6, 0x28, 0xe9, 0x4b, 0x45, 00, 0x14,
+ 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45,
+ 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14,
+ 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45,
+ 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14,
+ 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45,
+ 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14,
+ 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45,
+ 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14,
+ 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45,
+ 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14,
+ 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45,
+ 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14,
+ 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45,
+ 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14,
+ 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45,
+ 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14,
+ 0x51, 0x45, 00, 0x14, 0x51, 0x45, 00, 0x14, 0x51, 0x45,
+ 00, 0x14, 0x51, 0x45, 00, 0x14, 0x98, 0xa5, 0xa2, 0x80,
+ 0x13, 0x14, 0x62, 0x96, 0x8a, 00, 0x6e, 0xda, 0x36, 0xd3,
+ 0xa8, 0xa0, 0x6, 0xed, 0xa3, 0x6d, 0x3a, 0x8a, 00, 0x6e,
+ 0xda, 0x36, 0xd3, 0xa8, 0xa0, 0x6, 0x91, 0x8a, 0x4a, 0x56,
+ 0xa4, 0xa0, 0x2, 0x8a, 0x28, 0xa0, 0x2, 0x8a, 0x28, 0xa0,
+ 0x3, 0x14, 0x62, 0x8a, 0x28, 00, 0xc5, 0x26, 0x5, 0x2d,
+ 0x14, 00, 0x98, 0x14, 0x60, 0x52, 0xd1, 0x40, 0x9, 0x81,
+ 0x46, 0x5, 0x2d, 0x14, 00, 0x9b, 0x68, 0xdb, 0x4b, 0x45,
+ 00, 0x37, 0x14, 0x62, 0x9d, 0x45, 00, 0x37, 0x14, 0x62,
+ 0x9d, 0x45, 00, 0x37, 0x14, 0x98, 0xa7, 0xd1, 0x40, 0xc,
+ 0xc5, 0x18, 0xa7, 0xd1, 0x40, 0xd, 0x3, 0x34, 0xb8, 0x14,
+ 0xb4, 0x50, 0x2, 0x60, 0x51, 0x81, 0x4b, 0x45, 00, 0x14,
+ 0x51, 0x45, 00, 0x14, 0xb8, 0xa4, 0xa7, 0xe, 0x94, 00,
+ 0x80, 0x73, 0x4e, 0xa2, 0x8a, 00, 0x28, 0xa2, 0x8a, 00,
+ 0x28, 0xa2, 0x8a, 00, 0x28, 0xa2, 0x8a, 00, 0x28, 0xa2,
+ 0x8a, 00, 0x28, 0xa2, 0x8a, 00, 0x28, 0xa2, 0x8a, 00,
+ 0x28, 0xa2, 0x8a, 00, 0x28, 0xa2, 0x8a, 00, 0x28, 0xa2,
+ 0x8a, 00, 0x28, 0xa2, 0x8a, 00, 0xff, 0xd9, 0};
+
+static const unsigned char data_index_html[] = {
+ /* /index.html */
+ 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0,
+ 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20,
+ 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49,
+ 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f,
+ 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20,
+ 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45,
+ 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34,
+ 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64,
+ 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa,
+ 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20,
+ 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e,
+ 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f,
+ 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 0x57, 0x45, 0x42,
+ 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x64, 0x65,
+ 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e,
+ 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0xa, 0x20, 0x20, 0x3c, 0x42, 0x4f, 0x44, 0x59, 0x20, 0x6f,
+ 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x3d, 0x22, 0x77, 0x69, 0x6e,
+ 0x64, 0x6f, 0x77, 0x2e, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d,
+ 0x65, 0x6f, 0x75, 0x74, 0x28, 0x26, 0x71, 0x75, 0x6f, 0x74,
+ 0x3b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27, 0x69, 0x6e, 0x64, 0x65,
+ 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x27, 0x26, 0x71,
+ 0x75, 0x6f, 0x74, 0x3b, 0x2c, 0x31, 0x30, 0x30, 0x29, 0x22,
+ 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23,
+ 0x43, 0x43, 0x43, 0x43, 0x66, 0x66, 0x22, 0x3e, 0xa, 0x3c,
+ 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d,
+ 0x22, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3e, 0xa, 0x4c,
+ 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x64,
+ 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x2e, 0x20,
+ 0x20, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x20, 0x3c, 0x61, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65,
+ 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x68,
+ 0x65, 0x72, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, 0x66,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d,
+ 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x72,
+ 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e,
+ 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xa, 0x3c,
+ 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xa, 0x3c, 0x2f, 0x62,
+ 0x6f, 0x64, 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d,
+ 0x6c, 0x3e, 0xa, 0xa, 0};
+
+static const unsigned char data_index_shtml[] = {
+ /* /index.shtml */
+ 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,
+ 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20,
+ 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49,
+ 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f,
+ 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20,
+ 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45,
+ 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34,
+ 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64,
+ 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa,
+ 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20,
+ 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e,
+ 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f,
+ 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 0x57, 0x45, 0x42,
+ 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x64, 0x65,
+ 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e,
+ 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0xa, 0x20, 0x20, 0x3c, 0x42, 0x4f, 0x44, 0x59, 0x20, 0x6f,
+ 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x3d, 0x22, 0x77, 0x69, 0x6e,
+ 0x64, 0x6f, 0x77, 0x2e, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d,
+ 0x65, 0x6f, 0x75, 0x74, 0x28, 0x26, 0x71, 0x75, 0x6f, 0x74,
+ 0x3b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27, 0x69, 0x6e, 0x64, 0x65,
+ 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x27, 0x26, 0x71,
+ 0x75, 0x6f, 0x74, 0x3b, 0x2c, 0x32, 0x30, 0x30, 0x30, 0x29,
+ 0x22, 0x3e, 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66,
+ 0x61, 0x63, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 0x6c,
+ 0x22, 0x3e, 0xa, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68,
+ 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x52, 0x54, 0x4f, 0x53, 0x20,
+ 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20,
+ 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c,
+ 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6d,
+ 0x61, 0x67, 0x65, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x3e, 0x36,
+ 0x35, 0x4b, 0x20, 0x4a, 0x50, 0x47, 0x3c, 0x2f, 0x61, 0x3e,
+ 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20,
+ 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74,
+ 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e,
+ 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c,
+ 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74,
+ 0x6d, 0x6c, 0x22, 0x3e, 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e,
+ 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xa, 0x3c,
+ 0x68, 0x72, 0x3e, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70,
+ 0x3e, 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x54, 0x61, 0x73, 0x6b,
+ 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63,
+ 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xa, 0x54, 0x68, 0x69,
+ 0x73, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x73, 0x68, 0x6f,
+ 0x77, 0x73, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63,
+ 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72,
+ 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20,
+ 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f,
+ 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x20,
+ 0x54, 0x68, 0x65, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x77,
+ 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73,
+ 0x68, 0x20, 0x65, 0x76, 0x65, 0x79, 0x20, 0x32, 0x20, 0x73,
+ 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x3c, 0x70, 0x3e,
+ 0xa, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63,
+ 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, 0x54, 0x61, 0x73,
+ 0x6b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x20, 0x50, 0x72,
+ 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x20, 0x53, 0x74,
+ 0x61, 0x63, 0x6b, 0x9, 0x23, 0x3c, 0x62, 0x72, 0x3e, 0x2a,
+ 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a,
+ 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a,
+ 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a,
+ 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a,
+ 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x3c, 0x62, 0x72,
+ 0x3e, 0xa, 0x25, 0x21, 0x20, 0x72, 0x74, 0x6f, 0x73, 0x2d,
+ 0x73, 0x74, 0x61, 0x74, 0x73, 0xa, 0x3c, 0x2f, 0x70, 0x72,
+ 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xa,
+ 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xa, 0x3c, 0x2f,
+ 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, 0x74,
+ 0x6d, 0x6c, 0x3e, 0xa, 0xa, 0};
+
+static const unsigned char data_io_shtml[] = {
+ /* /io.shtml */
+ 0x2f, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,
+ 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20,
+ 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49,
+ 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f,
+ 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20,
+ 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45,
+ 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34,
+ 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64,
+ 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa,
+ 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20,
+ 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e,
+ 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f,
+ 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 0x57, 0x45, 0x42,
+ 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x64, 0x65,
+ 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e,
+ 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0xa, 0x20, 0x20, 0x3c, 0x42, 0x4f, 0x44, 0x59, 0x3e, 0xa,
+ 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65,
+ 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3e, 0xa,
+ 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c,
+ 0x22, 0x3e, 0x52, 0x54, 0x4f, 0x53, 0x20, 0x53, 0x74, 0x61,
+ 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e,
+ 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65,
+ 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x3e, 0x36, 0x35, 0x4b, 0x20,
+ 0x4a, 0x50, 0x47, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62,
+ 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e,
+ 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e,
+ 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f,
+ 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62,
+ 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22,
+ 0x3e, 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xa, 0x3c, 0x62,
+ 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xa, 0x3c, 0x68, 0x72, 0x3e,
+ 0xa, 0x3c, 0x62, 0x3e, 0x4c, 0x45, 0x44, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x4c, 0x43, 0x44, 0x20, 0x49, 0x4f, 0x3c, 0x2f,
+ 0x62, 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0xa, 0xa, 0x3c, 0x70,
+ 0x3e, 0xa, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x67,
+ 0x65, 0x20, 0x64, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x72,
+ 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x77,
+ 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x20, 0x42,
+ 0x79, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x62, 0x6f,
+ 0x78, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x20, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x57, 0x45, 0x42, 0x20, 0x69, 0x6e,
+ 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x63, 0x61,
+ 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63,
+ 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x67,
+ 0x72, 0x61, 0x6d, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x70, 0x3e, 0xa, 0x55, 0x73,
+ 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x65, 0x63,
+ 0x6b, 0x20, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x20, 0x74, 0x6f,
+ 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x4c, 0x45, 0x44, 0x27, 0x73, 0x20, 0x74, 0x6f,
+ 0x20, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x6f,
+ 0x72, 0x20, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f,
+ 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x6f,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x43, 0x44, 0x2c,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x63, 0x6c, 0x69, 0x63,
+ 0x6b, 0x20, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20,
+ 0x49, 0x4f, 0x22, 0x2e, 0xa, 0xa, 0xa, 0x3c, 0x70, 0x3e,
+ 0xa, 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3d, 0x22, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x22, 0x20,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x2f, 0x69,
+ 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, 0x6d,
+ 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74,
+ 0x22, 0x3e, 0xa, 0x25, 0x21, 0x20, 0x6c, 0x65, 0x64, 0x2d,
+ 0x69, 0x6f, 0xa, 0x3c, 0x70, 0x3e, 0xa, 0x3c, 0x69, 0x6e,
+ 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22,
+ 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x20, 0x49, 0x4f, 0x22, 0x3e, 0xa, 0x3c, 0x2f, 0x66,
+ 0x6f, 0x72, 0x6d, 0x3e, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c,
+ 0x70, 0x3e, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e,
+ 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xa, 0x3c,
+ 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, 0xa, 0};
+
+static const unsigned char data_stats_shtml[] = {
+ /* /stats.shtml */
+ 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,
+ 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20,
+ 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49,
+ 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f,
+ 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20,
+ 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45,
+ 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34,
+ 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64,
+ 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa,
+ 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20,
+ 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e,
+ 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f,
+ 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 0x57, 0x45, 0x42,
+ 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x64, 0x65,
+ 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e,
+ 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0xa, 0x20, 0x20, 0x3c, 0x42, 0x4f, 0x44, 0x59, 0x20, 0x62,
+ 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x43,
+ 0x43, 0x43, 0x43, 0x66, 0x66, 0x22, 0x3e, 0xa, 0x3c, 0x66,
+ 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22,
+ 0x61, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3e, 0xa, 0x3c, 0x61,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64,
+ 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e,
+ 0x52, 0x54, 0x4f, 0x53, 0x20, 0x53, 0x74, 0x61, 0x74, 0x73,
+ 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c,
+ 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x73,
+ 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x54, 0x43, 0x50, 0x20,
+ 0x53, 0x74, 0x61, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20,
+ 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c,
+ 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63,
+ 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43,
+ 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c,
+ 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x72, 0x74,
+ 0x6f, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x22, 0x3e, 0x46,
+ 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f, 0x72,
+ 0x67, 0x20, 0x48, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65,
+ 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c,
+ 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d,
+ 0x6c, 0x22, 0x3e, 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xa,
+ 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xa, 0x3c, 0x68,
+ 0x72, 0x3e, 0xa, 0x3c, 0x62, 0x72, 0x3e, 0x3c, 0x70, 0x3e,
+ 0xa, 0x3c, 0x68, 0x32, 0x3e, 0x4e, 0x65, 0x74, 0x77, 0x6f,
+ 0x72, 0x6b, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74,
+ 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0xa, 0x3c,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, 0x74,
+ 0x68, 0x3d, 0x22, 0x33, 0x30, 0x30, 0x22, 0x20, 0x62, 0x6f,
+ 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x3e, 0xa,
+ 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c,
+ 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, 0x22,
+ 0x3e, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63,
+ 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x75, 0x72, 0x69, 0x65, 0x72,
+ 0x22, 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, 0xa, 0x49, 0x50,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64,
+ 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x72, 0x65,
+ 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x73, 0x65,
+ 0x6e, 0x74, 0xa, 0x49, 0x50, 0x20, 0x65, 0x72, 0x72, 0x6f,
+ 0x72, 0x73, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, 0x76,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
+ 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x49, 0x50, 0x20, 0x6c, 0x65, 0x6e,
+ 0x67, 0x74, 0x68, 0x2c, 0x20, 0x68, 0x69, 0x67, 0x68, 0x20,
+ 0x62, 0x79, 0x74, 0x65, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x50,
+ 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2c, 0x20, 0x6c,
+ 0x6f, 0x77, 0x20, 0x62, 0x79, 0x74, 0x65, 0xa, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x49, 0x50, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65,
+ 0x6e, 0x74, 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73,
+ 0x75, 0x6d, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x57, 0x72, 0x6f, 0x6e,
+ 0x67, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c,
+ 0xa, 0x49, 0x43, 0x4d, 0x50, 0x9, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64,
+ 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x72, 0x65,
+ 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x73, 0x65,
+ 0x6e, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x79, 0x70, 0x65,
+ 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0xa, 0x54, 0x43,
+ 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x64,
+ 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x72, 0x65,
+ 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0xa, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x73, 0x65,
+ 0x6e, 0x74, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x68, 0x65, 0x63,
+ 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72,
+ 0x73, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20,
+ 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x43, 0x4b, 0x73,
+ 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x73, 0x65, 0x74, 0x73,
+ 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x74, 0x72, 0x61, 0x6e,
+ 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0xa,
+ 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x6f, 0x20, 0x63,
+ 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x61, 0x76, 0x61, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0xa,
+ 0x9, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x6e,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x74, 0x74,
+ 0x65, 0x6d, 0x70, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63,
+ 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x70, 0x6f, 0x72, 0x74,
+ 0x73, 0xa, 0x3c, 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e,
+ 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x70, 0x72, 0x65, 0x3e, 0x25,
+ 0x21, 0x20, 0x6e, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x61, 0x74,
+ 0x73, 0xa, 0x3c, 0x2f, 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0xa, 0x3c, 0x2f, 0x66,
+ 0x6f, 0x6e, 0x74, 0x3e, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64,
+ 0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e,
+ 0xa, 0};
+
+static const unsigned char data_tcp_shtml[] = {
+ /* /tcp.shtml */
+ 0x2f, 0x74, 0x63, 0x70, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0,
+ 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20,
+ 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49,
+ 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f,
+ 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20,
+ 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45,
+ 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34,
+ 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, 0x64, 0x74, 0x64,
+ 0x22, 0x3e, 0xa, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa,
+ 0x20, 0x20, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0xa, 0x20,
+ 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e,
+ 0x46, 0x72, 0x65, 0x65, 0x52, 0x54, 0x4f, 0x53, 0x2e, 0x6f,
+ 0x72, 0x67, 0x20, 0x75, 0x49, 0x50, 0x20, 0x57, 0x45, 0x42,
+ 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x64, 0x65,
+ 0x6d, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e,
+ 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0xa, 0x20, 0x20, 0x3c, 0x42, 0x4f, 0x44, 0x59, 0x3e, 0xa,
+ 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x66, 0x61, 0x63, 0x65,
+ 0x3d, 0x22, 0x61, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x3e, 0xa,
+ 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c,
+ 0x22, 0x3e, 0x52, 0x54, 0x4f, 0x53, 0x20, 0x53, 0x74, 0x61,
+ 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e,
+ 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65,
+ 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x3e, 0x36, 0x35, 0x4b, 0x20,
+ 0x4a, 0x50, 0x47, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x62,
+ 0x3e, 0x7c, 0x3c, 0x2f, 0x62, 0x3e, 0x20, 0x3c, 0x61, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x63, 0x70, 0x2e,
+ 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x43, 0x6f, 0x6e,
+ 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f,
+ 0x61, 0x3e, 0x20, 0x3c, 0x62, 0x3e, 0x7c, 0x3c, 0x2f, 0x62,
+ 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x69, 0x6f, 0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, 0x22,
+ 0x3e, 0x49, 0x4f, 0x3c, 0x2f, 0x61, 0x3e, 0xa, 0x3c, 0x62,
+ 0x72, 0x3e, 0x3c, 0x70, 0x3e, 0xa, 0x3c, 0x68, 0x72, 0x3e,
+ 0xa, 0x3c, 0x62, 0x72, 0x3e, 0xa, 0x3c, 0x68, 0x32, 0x3e,
+ 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x63, 0x6f,
+ 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c,
+ 0x2f, 0x68, 0x32, 0x3e, 0xa, 0x54, 0x68, 0x69, 0x73, 0x20,
+ 0x70, 0x61, 0x67, 0x65, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c,
+ 0x61, 0x79, 0x73, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69,
+ 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x67, 0x65, 0x6e, 0x65,
+ 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x54, 0x43, 0x50, 0x2f, 0x49, 0x50, 0x20, 0x63,
+ 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x2e, 0xa, 0x3c, 0x70, 0x3e, 0xa, 0x3c, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x3e, 0xa, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74,
+ 0x68, 0x3e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x3c, 0x2f, 0x74,
+ 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x6d, 0x6f,
+ 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68,
+ 0x3e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x68,
+ 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x52, 0x65, 0x74, 0x72, 0x61,
+ 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73,
+ 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x54,
+ 0x69, 0x6d, 0x65, 0x72, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c,
+ 0x74, 0x68, 0x3e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x3c, 0x2f,
+ 0x74, 0x68, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0xa, 0x25,
+ 0x21, 0x20, 0x74, 0x63, 0x70, 0x2d, 0x63, 0x6f, 0x6e, 0x6e,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa, 0x3c, 0x2f,
+ 0x70, 0x72, 0x65, 0x3e, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74,
+ 0x3e, 0xa, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0xa,
+ 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xa, 0x3c, 0x2f,
+ 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, 0xa, 0};
+
+const struct httpd_fsdata_file file_404_html[] = {{NULL, data_404_html, data_404_html + 10, sizeof(data_404_html) - 10}};
+
+const struct httpd_fsdata_file file_image_jpg[] = {{file_404_html, data_image_jpg, data_image_jpg + 11, sizeof(data_image_jpg) - 11}};
+
+const struct httpd_fsdata_file file_index_html[] = {{file_image_jpg, data_index_html, data_index_html + 12, sizeof(data_index_html) - 12}};
+
+const struct httpd_fsdata_file file_index_shtml[] = {{file_index_html, data_index_shtml, data_index_shtml + 13, sizeof(data_index_shtml) - 13}};
+
+const struct httpd_fsdata_file file_io_shtml[] = {{file_index_shtml, data_io_shtml, data_io_shtml + 10, sizeof(data_io_shtml) - 10}};
+
+const struct httpd_fsdata_file file_stats_shtml[] = {{file_io_shtml, data_stats_shtml, data_stats_shtml + 13, sizeof(data_stats_shtml) - 13}};
+
+const struct httpd_fsdata_file file_tcp_shtml[] = {{file_stats_shtml, data_tcp_shtml, data_tcp_shtml + 11, sizeof(data_tcp_shtml) - 11}};
+
+#define HTTPD_FS_ROOT file_tcp_shtml
+
+#define HTTPD_FS_NUMFILES 7
Index: /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd.c (revision 14)
@@ -0,0 +1,346 @@
+/**
+ * \addtogroup apps
+ * @{
+ */
+
+/**
+ * \defgroup httpd Web server
+ * @{
+ * The uIP web server is a very simplistic implementation of an HTTP
+ * server. It can serve web pages and files from a read-only ROM
+ * filesystem, and provides a very small scripting language.
+
+ */
+
+/**
+ * \file
+ * Web server
+ * \author
+ * Adam Dunkels
+ */
+
+
+/*
+ * Copyright (c) 2004, Adam Dunkels.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels
+ *
+ * $Id: httpd.c,v 1.2 2006/06/11 21:46:38 adam Exp $
+ */
+
+#include "uip.h"
+#include "httpd.h"
+#include "httpd-fs.h"
+#include "httpd-cgi.h"
+#include "http-strings.h"
+
+#include
+
+#define STATE_WAITING 0
+#define STATE_OUTPUT 1
+
+#define ISO_nl 0x0a
+#define ISO_space 0x20
+#define ISO_bang 0x21
+#define ISO_percent 0x25
+#define ISO_period 0x2e
+#define ISO_slash 0x2f
+#define ISO_colon 0x3a
+
+
+/*---------------------------------------------------------------------------*/
+static unsigned short
+generate_part_of_file(void *state)
+{
+ struct httpd_state *s = (struct httpd_state *)state;
+
+ if(s->file.len > uip_mss()) {
+ s->len = uip_mss();
+ } else {
+ s->len = s->file.len;
+ }
+ memcpy(uip_appdata, s->file.data, s->len);
+
+ return s->len;
+}
+/*---------------------------------------------------------------------------*/
+static
+PT_THREAD(send_file(struct httpd_state *s))
+{
+ PSOCK_BEGIN(&s->sout);
+
+ do {
+ PSOCK_GENERATOR_SEND(&s->sout, generate_part_of_file, s);
+ s->file.len -= s->len;
+ s->file.data += s->len;
+ } while(s->file.len > 0);
+
+ PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+static
+PT_THREAD(send_part_of_file(struct httpd_state *s))
+{
+ PSOCK_BEGIN(&s->sout);
+
+ PSOCK_SEND(&s->sout, s->file.data, s->len);
+
+ PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+static void
+next_scriptstate(struct httpd_state *s)
+{
+ char *p;
+ p = strchr(s->scriptptr, ISO_nl) + 1;
+ s->scriptlen -= (unsigned short)(p - s->scriptptr);
+ s->scriptptr = p;
+}
+/*---------------------------------------------------------------------------*/
+static
+PT_THREAD(handle_script(struct httpd_state *s))
+{
+ char *ptr;
+
+ PT_BEGIN(&s->scriptpt);
+
+
+ while(s->file.len > 0) {
+
+ /* Check if we should start executing a script. */
+ if(*s->file.data == ISO_percent &&
+ *(s->file.data + 1) == ISO_bang) {
+ s->scriptptr = s->file.data + 3;
+ s->scriptlen = s->file.len - 3;
+ if(*(s->scriptptr - 1) == ISO_colon) {
+ httpd_fs_open(s->scriptptr + 1, &s->file);
+ PT_WAIT_THREAD(&s->scriptpt, send_file(s));
+ } else {
+ PT_WAIT_THREAD(&s->scriptpt,
+ httpd_cgi(s->scriptptr)(s, s->scriptptr));
+ }
+ next_scriptstate(s);
+
+ /* The script is over, so we reset the pointers and continue
+ sending the rest of the file. */
+ s->file.data = s->scriptptr;
+ s->file.len = s->scriptlen;
+ } else {
+ /* See if we find the start of script marker in the block of HTML
+ to be sent. */
+
+ if(s->file.len > uip_mss()) {
+ s->len = uip_mss();
+ } else {
+ s->len = s->file.len;
+ }
+
+ if(*s->file.data == ISO_percent) {
+ ptr = strchr(s->file.data + 1, ISO_percent);
+ } else {
+ ptr = strchr(s->file.data, ISO_percent);
+ }
+ if(ptr != NULL &&
+ ptr != s->file.data) {
+ s->len = (int)(ptr - s->file.data);
+ if(s->len >= uip_mss()) {
+ s->len = uip_mss();
+ }
+ }
+ PT_WAIT_THREAD(&s->scriptpt, send_part_of_file(s));
+ s->file.data += s->len;
+ s->file.len -= s->len;
+
+ }
+ }
+
+ PT_END(&s->scriptpt);
+}
+/*---------------------------------------------------------------------------*/
+static
+PT_THREAD(send_headers(struct httpd_state *s, const char *statushdr))
+{
+ char *ptr;
+
+ PSOCK_BEGIN(&s->sout);
+
+ PSOCK_SEND_STR(&s->sout, statushdr);
+
+ ptr = strrchr(s->filename, ISO_period);
+ if(ptr == NULL) {
+ PSOCK_SEND_STR(&s->sout, http_content_type_binary);
+ } else if(strncmp(http_html, ptr, 5) == 0 ||
+ strncmp(http_shtml, ptr, 6) == 0) {
+ PSOCK_SEND_STR(&s->sout, http_content_type_html);
+ } else if(strncmp(http_css, ptr, 4) == 0) {
+ PSOCK_SEND_STR(&s->sout, http_content_type_css);
+ } else if(strncmp(http_png, ptr, 4) == 0) {
+ PSOCK_SEND_STR(&s->sout, http_content_type_png);
+ } else if(strncmp(http_gif, ptr, 4) == 0) {
+ PSOCK_SEND_STR(&s->sout, http_content_type_gif);
+ } else if(strncmp(http_jpg, ptr, 4) == 0) {
+ PSOCK_SEND_STR(&s->sout, http_content_type_jpg);
+ } else {
+ PSOCK_SEND_STR(&s->sout, http_content_type_plain);
+ }
+ PSOCK_END(&s->sout);
+}
+/*---------------------------------------------------------------------------*/
+static
+PT_THREAD(handle_output(struct httpd_state *s))
+{
+ char *ptr;
+
+ PT_BEGIN(&s->outputpt);
+
+ if(!httpd_fs_open(s->filename, &s->file)) {
+ httpd_fs_open(http_404_html, &s->file);
+ strcpy(s->filename, http_404_html);
+ PT_WAIT_THREAD(&s->outputpt,
+ send_headers(s,
+ http_header_404));
+ PT_WAIT_THREAD(&s->outputpt,
+ send_file(s));
+ } else {
+ PT_WAIT_THREAD(&s->outputpt,
+ send_headers(s,
+ http_header_200));
+ ptr = strchr(s->filename, ISO_period);
+ if(ptr != NULL && strncmp(ptr, http_shtml, 6) == 0) {
+ PT_INIT(&s->scriptpt);
+ PT_WAIT_THREAD(&s->outputpt, handle_script(s));
+ } else {
+ PT_WAIT_THREAD(&s->outputpt,
+ send_file(s));
+ }
+ }
+ PSOCK_CLOSE(&s->sout);
+ PT_END(&s->outputpt);
+}
+/*---------------------------------------------------------------------------*/
+static
+PT_THREAD(handle_input(struct httpd_state *s))
+{
+ PSOCK_BEGIN(&s->sin);
+
+ PSOCK_READTO(&s->sin, ISO_space);
+
+
+ if(strncmp(s->inputbuf, http_get, 4) != 0) {
+ PSOCK_CLOSE_EXIT(&s->sin);
+ }
+ PSOCK_READTO(&s->sin, ISO_space);
+
+ if(s->inputbuf[0] != ISO_slash) {
+ PSOCK_CLOSE_EXIT(&s->sin);
+ }
+
+ if(s->inputbuf[1] == ISO_space) {
+ strncpy(s->filename, http_index_html, sizeof(s->filename));
+ } else {
+
+ s->inputbuf[PSOCK_DATALEN(&s->sin) - 1] = 0;
+
+ /* Process any form input being sent to the server. */
+ {
+ extern void vApplicationProcessFormInput( char *pcInputString, long xInputLength );
+ vApplicationProcessFormInput( s->inputbuf, PSOCK_DATALEN(&s->sin) );
+ }
+
+ strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename));
+ }
+
+ /* httpd_log_file(uip_conn->ripaddr, s->filename);*/
+
+ s->state = STATE_OUTPUT;
+
+ while(1) {
+ PSOCK_READTO(&s->sin, ISO_nl);
+
+ if(strncmp(s->inputbuf, http_referer, 8) == 0) {
+ s->inputbuf[PSOCK_DATALEN(&s->sin) - 2] = 0;
+ /* httpd_log(&s->inputbuf[9]);*/
+ }
+ }
+
+ PSOCK_END(&s->sin);
+}
+/*---------------------------------------------------------------------------*/
+static void
+handle_connection(struct httpd_state *s)
+{
+ handle_input(s);
+ if(s->state == STATE_OUTPUT) {
+ handle_output(s);
+ }
+}
+/*---------------------------------------------------------------------------*/
+void
+httpd_appcall(void)
+{
+ struct httpd_state *s = (struct httpd_state *)&(uip_conn->appstate);
+
+ if(uip_closed() || uip_aborted() || uip_timedout()) {
+ } else if(uip_connected()) {
+ PSOCK_INIT(&s->sin, s->inputbuf, sizeof(s->inputbuf) - 1);
+ PSOCK_INIT(&s->sout, s->inputbuf, sizeof(s->inputbuf) - 1);
+ PT_INIT(&s->outputpt);
+ s->state = STATE_WAITING;
+ /* timer_set(&s->timer, CLOCK_SECOND * 100);*/
+ s->timer = 0;
+ handle_connection(s);
+ } else if(s != NULL) {
+ if(uip_poll()) {
+ ++s->timer;
+ if(s->timer >= 20) {
+ uip_abort();
+ }
+ } else {
+ s->timer = 0;
+ }
+ handle_connection(s);
+ } else {
+ uip_abort();
+ }
+}
+/*---------------------------------------------------------------------------*/
+/**
+ * \brief Initialize the web server
+ *
+ * This function initializes the web server and should be
+ * called at system boot-up.
+ */
+void
+httpd_init(void)
+{
+ uip_listen(HTONS(80));
+}
+/*---------------------------------------------------------------------------*/
+/** @} */
Index: /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/http-strings
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/http-strings (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/http-strings (revision 14)
@@ -0,0 +1,35 @@
+http_http "http://"
+http_200 "200 "
+http_301 "301 "
+http_302 "302 "
+http_get "GET "
+http_10 "HTTP/1.0"
+http_11 "HTTP/1.1"
+http_content_type "content-type: "
+http_texthtml "text/html"
+http_location "location: "
+http_host "host: "
+http_crnl "\r\n"
+http_index_html "/index.html"
+http_404_html "/404.html"
+http_referer "Referer:"
+http_header_200 "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n"
+http_header_404 "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n"
+http_content_type_plain "Content-type: text/plain\r\n\r\n"
+http_content_type_html "Content-type: text/html\r\n\r\n"
+http_content_type_css "Content-type: text/css\r\n\r\n"
+http_content_type_text "Content-type: text/text\r\n\r\n"
+http_content_type_png "Content-type: image/png\r\n\r\n"
+http_content_type_gif "Content-type: image/gif\r\n\r\n"
+http_content_type_jpg "Content-type: image/jpeg\r\n\r\n"
+http_content_type_binary "Content-type: application/octet-stream\r\n\r\n"
+http_html ".html"
+http_shtml ".shtml"
+http_htm ".htm"
+http_css ".css"
+http_png ".png"
+http_gif ".gif"
+http_jpg ".jpg"
+http_text ".txt"
+http_txt ".txt"
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/uip-conf.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/uip-conf.h (revision 16)
+++ /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/uip-conf.h (revision 16)
@@ -0,0 +1,157 @@
+/**
+ * \addtogroup uipopt
+ * @{
+ */
+
+/**
+ * \name Project-specific configuration options
+ * @{
+ *
+ * uIP has a number of configuration options that can be overridden
+ * for each project. These are kept in a project-specific uip-conf.h
+ * file and all configuration names have the prefix UIP_CONF.
+ */
+
+/*
+ * Copyright (c) 2006, Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack
+ *
+ * $Id: uip-conf.h,v 1.6 2006/06/12 08:00:31 adam Exp $
+ */
+
+/**
+ * \file
+ * An example uIP configuration file
+ * \author
+ * Adam Dunkels
+ */
+
+#ifndef __UIP_CONF_H__
+#define __UIP_CONF_H__
+
+#include
+
+/**
+ * 8 bit datatype
+ *
+ * This typedef defines the 8-bit type used throughout uIP.
+ *
+ * \hideinitializer
+ */
+typedef uint8_t u8_t;
+
+/**
+ * 16 bit datatype
+ *
+ * This typedef defines the 16-bit type used throughout uIP.
+ *
+ * \hideinitializer
+ */
+typedef uint16_t u16_t;
+
+/**
+ * Statistics datatype
+ *
+ * This typedef defines the dataype used for keeping statistics in
+ * uIP.
+ *
+ * \hideinitializer
+ */
+typedef unsigned short uip_stats_t;
+
+/**
+ * Maximum number of TCP connections.
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_MAX_CONNECTIONS 5
+
+/**
+ * Maximum number of listening TCP ports.
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_MAX_LISTENPORTS 10
+
+/**
+ * uIP buffer size.
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_BUFFER_SIZE 1480
+
+/**
+ * CPU byte order.
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN
+
+/**
+ * Logging on or off
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_LOGGING 0
+
+/**
+ * UDP support on or off
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_UDP 0
+
+/**
+ * UDP checksums on or off
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_UDP_CHECKSUMS 1
+
+/**
+ * uIP statistics on or off
+ *
+ * \hideinitializer
+ */
+#define UIP_CONF_STATISTICS 1
+
+/* Here we include the header file for the application(s) we use in
+ our project. */
+/*#include "smtp.h"*/
+/*#include "hello-world.h"*/
+/*#include "telnetd.h"*/
+#include "webserver.h"
+/*#include "dhcpc.h"*/
+/*#include "resolv.h"*/
+/*#include "webclient.h"*/
+
+#endif /* __UIP_CONF_H__ */
+
+/** @} */
+/** @} */
Index: /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd.h (revision 14)
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2001-2005, Adam Dunkels.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack.
+ *
+ * $Id: httpd.h,v 1.2 2006/06/11 21:46:38 adam Exp $
+ *
+ */
+
+#ifndef __HTTPD_H__
+#define __HTTPD_H__
+
+#include "psock.h"
+#include "httpd-fs.h"
+
+struct httpd_state {
+ unsigned char timer;
+ struct psock sin, sout;
+ struct pt outputpt, scriptpt;
+ char inputbuf[50];
+ char filename[20];
+ char state;
+ struct httpd_fs_file file;
+ int len;
+ char *scriptptr;
+ int scriptlen;
+
+ unsigned short count;
+};
+
+void httpd_init(void);
+void httpd_appcall(void);
+
+void httpd_log(char *msg);
+void httpd_log_file(u16_t *requester, char *file);
+
+#endif /* __HTTPD_H__ */
Index: /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd-fsdata.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd-fsdata.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd-fsdata.h (revision 14)
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2001, Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels
+ *
+ * $Id: httpd-fsdata.h,v 1.1 2006/06/07 09:13:08 adam Exp $
+ */
+#ifndef __HTTPD_FSDATA_H__
+#define __HTTPD_FSDATA_H__
+
+#include "uip.h"
+
+struct httpd_fsdata_file {
+ const struct httpd_fsdata_file *next;
+ const char *name;
+ const char *data;
+ const int len;
+#ifdef HTTPD_FS_STATISTICS
+#if HTTPD_FS_STATISTICS == 1
+ u16_t count;
+#endif /* HTTPD_FS_STATISTICS */
+#endif /* HTTPD_FS_STATISTICS */
+};
+
+struct httpd_fsdata_file_noconst {
+ struct httpd_fsdata_file *next;
+ char *name;
+ char *data;
+ int len;
+#ifdef HTTPD_FS_STATISTICS
+#if HTTPD_FS_STATISTICS == 1
+ u16_t count;
+#endif /* HTTPD_FS_STATISTICS */
+#endif /* HTTPD_FS_STATISTICS */
+};
+
+#endif /* __HTTPD_FSDATA_H__ */
Index: /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd-cgi.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd-cgi.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd-cgi.h (revision 14)
@@ -0,0 +1,84 @@
+/**
+ * \addtogroup httpd
+ * @{
+ */
+
+/**
+ * \file
+ * Web server script interface header file
+ * \author
+ * Adam Dunkels
+ *
+ */
+
+
+
+/*
+ * Copyright (c) 2001, Adam Dunkels.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack.
+ *
+ * $Id: httpd-cgi.h,v 1.2 2006/06/11 21:46:38 adam Exp $
+ *
+ */
+
+#ifndef __HTTPD_CGI_H__
+#define __HTTPD_CGI_H__
+
+#include "psock.h"
+#include "httpd.h"
+
+typedef PT_THREAD((* httpd_cgifunction)(struct httpd_state *, char *));
+
+httpd_cgifunction httpd_cgi(char *name);
+
+struct httpd_cgi_call {
+ const char *name;
+ const httpd_cgifunction function;
+};
+
+/**
+ * \brief HTTPD CGI function declaration
+ * \param name The C variable name of the function
+ * \param str The string name of the function, used in the script file
+ * \param function A pointer to the function that implements it
+ *
+ * This macro is used for declaring a HTTPD CGI
+ * function. This function is then added to the list of
+ * HTTPD CGI functions with the httpd_cgi_add() function.
+ *
+ * \hideinitializer
+ */
+#define HTTPD_CGI_CALL(name, str, function) \
+static PT_THREAD(function(struct httpd_state *, char *)); \
+static const struct httpd_cgi_call name = {str, function}
+
+void httpd_cgi_init(void);
+#endif /* __HTTPD_CGI_H__ */
+
+/** @} */
Index: /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd-fs.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd-fs.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/webserver/httpd-fs.c (revision 14)
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2001, Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels
+ *
+ * $Id: httpd-fs.c,v 1.1 2006/06/07 09:13:08 adam Exp $
+ */
+
+#include "httpd.h"
+#include "httpd-fs.h"
+#include "httpd-fsdata.h"
+
+#ifndef NULL
+#define NULL 0
+#endif /* NULL */
+
+#include "httpd-fsdata.c"
+
+#if HTTPD_FS_STATISTICS
+static u16_t count[HTTPD_FS_NUMFILES];
+#endif /* HTTPD_FS_STATISTICS */
+
+/*-----------------------------------------------------------------------------------*/
+static u8_t
+httpd_fs_strcmp(const char *str1, const char *str2)
+{
+ u8_t i;
+ i = 0;
+ loop:
+
+ if(str2[i] == 0 ||
+ str1[i] == '\r' ||
+ str1[i] == '\n') {
+ return 0;
+ }
+
+ if(str1[i] != str2[i]) {
+ return 1;
+ }
+
+
+ ++i;
+ goto loop;
+}
+/*-----------------------------------------------------------------------------------*/
+int
+httpd_fs_open(const char *name, struct httpd_fs_file *file)
+{
+#if HTTPD_FS_STATISTICS
+ u16_t i = 0;
+#endif /* HTTPD_FS_STATISTICS */
+ struct httpd_fsdata_file_noconst *f;
+
+ for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT;
+ f != NULL;
+ f = (struct httpd_fsdata_file_noconst *)f->next) {
+
+ if(httpd_fs_strcmp(name, f->name) == 0) {
+ file->data = f->data;
+ file->len = f->len;
+#if HTTPD_FS_STATISTICS
+ ++count[i];
+#endif /* HTTPD_FS_STATISTICS */
+ return 1;
+ }
+#if HTTPD_FS_STATISTICS
+ ++i;
+#endif /* HTTPD_FS_STATISTICS */
+
+ }
+ return 0;
+}
+/*-----------------------------------------------------------------------------------*/
+void
+httpd_fs_init(void)
+{
+#if HTTPD_FS_STATISTICS
+ u16_t i;
+ for(i = 0; i < HTTPD_FS_NUMFILES; i++) {
+ count[i] = 0;
+ }
+#endif /* HTTPD_FS_STATISTICS */
+}
+/*-----------------------------------------------------------------------------------*/
+#if HTTPD_FS_STATISTICS
+u16_t httpd_fs_count
+(char *name)
+{
+ struct httpd_fsdata_file_noconst *f;
+ u16_t i;
+
+ i = 0;
+ for(f = (struct httpd_fsdata_file_noconst *)HTTPD_FS_ROOT;
+ f != NULL;
+ f = (struct httpd_fsdata_file_noconst *)f->next) {
+
+ if(httpd_fs_strcmp(name, f->name) == 0) {
+ return count[i];
+ }
+ ++i;
+ }
+ return 0;
+}
+#endif /* HTTPD_FS_STATISTICS */
+/*-----------------------------------------------------------------------------------*/
Index: /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/FreeRTOSConfig.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/FreeRTOSConfig.h (revision 17)
+++ /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/FreeRTOSConfig.h (revision 17)
@@ -0,0 +1,140 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef FREERTOS_CONFIG_H
+#define FREERTOS_CONFIG_H
+
+#include
+#include
+#define vPortYieldProcessor swi_handler
+
+/*-----------------------------------------------------------
+ * Application specific definitions.
+ *
+ * These definitions should be adjusted for your particular hardware and
+ * application requirements.
+ *
+ * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
+ *
+ * See http://www.freertos.org/a00110.html.
+ *----------------------------------------------------------*/
+
+
+/* Value to use on old rev '-' devices. */
+//#define configPINSEL2_VALUE 0x50151105
+
+/* Value to use on rev 'A' and newer devices. */
+#define configPINSEL2_VALUE 0x50150105
+
+#ifndef configPINSEL2_VALUE
+ #error Please uncomment one of the two configPINSEL2_VALUE definitions above, depending on the revision of the LPC2000 device being used.
+#endif
+
+#define configUSE_PREEMPTION 1
+#define configUSE_IDLE_HOOK 0
+#define configUSE_TICK_HOOK 0
+#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 57600000 )
+#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
+#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 4 )
+#define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 120 )
+#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 18 * 1024 ) )
+#define configMAX_TASK_NAME_LEN ( 16 )
+#define configUSE_TRACE_FACILITY 1
+#define configUSE_16_BIT_TICKS 0
+#define configIDLE_SHOULD_YIELD 1
+
+/* Co-routine definitions. */
+#define configUSE_CO_ROUTINES 0
+#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
+
+
+/* Set the following definitions to 1 to include the API function, or zero
+to exclude the API function. */
+
+#define INCLUDE_vTaskPrioritySet 1
+#define INCLUDE_uxTaskPriorityGet 1
+#define INCLUDE_vTaskDelete 1
+#define INCLUDE_vTaskCleanUpResources 0
+#define INCLUDE_vTaskSuspend 1
+#define INCLUDE_vTaskDelayUntil 1
+#define INCLUDE_vTaskDelay 1
+#define INCLUDE_xTaskGetCurrentTaskHandle 1
+
+
+#endif /* FREERTOS_CONFIG_H */
+
+
+#ifndef sbi
+#define sbi(x,y) x|=(1 << (y))
+#endif
+
+#ifndef cbi
+#define cbi(x,y) x&=~(1 << (y))
+#endif
+
+#ifndef tstb
+#define tstb(x,y) (x & (1 << (y)) ? 1 : 0)
+#endif
+
+#ifndef toggle
+#define toggle(x,y) x^=(1 << (y))
+#endif
+
+#ifndef BIT
+#define BIT(x) (1 << (x))
+
+
+//#define VICVectAddr VICAddress
+//#define VICVectCntl4 VICVectPriority4
+typedef struct
+{
+ long xColumn;
+ signed char *pcMessage;
+} xLCDMessage;
+
+#endif
Index: /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/main.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/main.c (revision 22)
+++ /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/main.c (revision 22)
@@ -0,0 +1,261 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/* Environment includes. */
+#include
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* Demo app includes. */
+
+#include "portlcd.h"
+#include "flash.h"
+
+
+/* Demo application definitions. */
+#define mainQUEUE_SIZE ( 3 )
+#define mainCHECK_DELAY ( ( portTickType ) 5000 / portTICK_RATE_MS )
+#define mainBASIC_WEB_STACK_SIZE ( configMINIMAL_STACK_SIZE * 2 )
+
+/* Task priorities. */
+#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 )
+#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
+#define mainFLASH_PRIORITY ( tskIDLE_PRIORITY + 2 )
+
+
+
+void setRTC(void);
+void startRTC(void);
+
+/*
+ * Checks the status of all the demo tasks then prints a message to the
+ * CrossStudio terminal IO windows. The message will be either PASS or FAIL
+ * depending on the status of the demo applications tasks. A FAIL status will
+ * be latched.
+ *
+ * Messages are not written directly to the terminal, but passed to vPrintTask
+ * via a queue.
+ */
+static void vCheckTask( void *pvParameters );
+
+/*
+ * The task that handles the uIP stack. All TCP/IP processing is performed in
+ * this task.
+ */
+extern void vuIP_Task( void *pvParameters );
+
+/*
+ * The task that handles the electricity meter handling/calculations.
+ */
+extern void vMeters_Task( void *pvParameters );
+
+/*
+ * The LCD is written two by more than one task so is controlled by a
+ * 'gatekeeper' task. This is the only task that is actually permitted to
+ * access the LCD directly. Other tasks wanting to display a message send
+ * the message to the gatekeeper.
+ */
+static void vLCDTask( void *pvParameters );
+
+/* The queue used to send messages to the LCD task. */
+xQueueHandle xLCDQueue;
+
+/*-----------------------------------------------------------*/
+
+int main (void)
+{
+ startRTC(); /* start the RTC */
+
+ /* Setup the led's on the MCB2300 board */
+ vParTestInitialise();
+
+ /* Create the queue used by the LCD task. Messages for display on the LCD
+ are received via this queue. */
+ xLCDQueue = xQueueCreate( mainQUEUE_SIZE, sizeof( xLCDMessage ) );
+
+ /* Create the lwIP task. This uses the lwIP RTOS abstraction layer.*/
+ xTaskCreate( vuIP_Task, ( signed portCHAR * ) "uIP", mainBASIC_WEB_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY - 1, NULL );
+
+// vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
+ vStartMetersTask( mainFLASH_PRIORITY );
+ /* Start the standard demo tasks. */
+// vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
+// vCreateBlockTimeTasks();
+ vStartLEDFlashTasks( mainFLASH_PRIORITY );
+// vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
+// vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
+// vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );
+
+ /* Start the tasks defined within this file/specific to this demo. */
+ // xTaskCreate( vCheckTask, ( signed portCHAR * ) "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
+ xTaskCreate( vLCDTask, ( signed portCHAR * ) "LCD", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY - 1, NULL );
+
+ /* The suicide tasks must be created last as they need to know how many
+ tasks were running prior to their creation in order to ascertain whether
+ or not the correct/expected number of tasks are running at any given time. */
+ // vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );
+
+
+ /* Start the scheduler. */
+ vTaskStartScheduler();
+
+ /* Will only get here if there was insufficient memory to create the idle
+ task. */
+ return 0;
+}
+/*-----------------------------------------------------------*/
+
+static void vCheckTask( void *pvParameters )
+{
+portBASE_TYPE xErrorOccurred = pdFALSE;
+portTickType xLastExecutionTime;
+unsigned portBASE_TYPE uxColumn = 0;
+xLCDMessage xMessage;
+
+ xLastExecutionTime = xTaskGetTickCount();
+
+ xMessage.xColumn = 0;
+ xMessage.pcMessage = "PASS";
+
+ for( ;; )
+ {
+ /* Perform this check every mainCHECK_DELAY milliseconds. */
+ vTaskDelayUntil( &xLastExecutionTime, mainCHECK_DELAY );
+
+ /* Has an error been found in any task? */
+
+
+
+ LCD_cls();
+ xMessage.xColumn++;
+ LCD_gotoxy( ( uxColumn & 0x07 ) + 1, ( uxColumn & 0x01 ) + 1 );
+
+ if( xErrorOccurred == pdTRUE )
+ {
+ xMessage.pcMessage = "FAIL";
+ }
+
+ /* Send the message to the LCD gatekeeper for display. */
+ xQueueSend( xLCDQueue, &xMessage, portMAX_DELAY );
+ }
+}
+/*-----------------------------------------------------------*/
+
+void vLCDTask( void *pvParameters )
+{
+xLCDMessage xMessage;
+
+ /* Initialise the LCD and display a startup message. */
+ LCD_init();
+ LCD_cur_off();
+ LCD_cls();
+ LCD_gotoxy( 1, 1 );
+ LCD_puts( ( signed portCHAR * ) "www.FreeRTOS.org" );
+
+ for( ;; )
+ {
+ /* Wait for a message to arrive that requires displaying. */
+ while( xQueueReceive( xLCDQueue, &xMessage, portMAX_DELAY ) != pdPASS );
+
+ /* Display the message. Print each message to a different position. */
+ LCD_cls();
+ LCD_gotoxy( ( xMessage.xColumn & 0x07 ) + 1, ( xMessage.xColumn & 0x01 ) + 1 );
+ LCD_puts( xMessage.pcMessage );
+ }
+
+}
+/*-----------------------------------------------------------*/
+
+/* Keep the compiler quiet. */
+#include
+int __putchar( int c )
+{
+ return EOF;
+}
+
+void setRTC(void)
+{
+/*
+ This function needs to be called when the RTC battery was replaces
+
+ SEC 6 Seconds value in the range of 0 to 59 R/W 0xE002 4020
+ MIN 6 Minutes value in the range of 0 to 59 R/W 0xE002 4024
+ HOUR 5 Hours value in the range of 0 to 23 R/W 0xE002 4028
+ DOM 5 Day of month value in the range of 1 to 28, 29, 30,
+ or 31 (depending on the month and whether it is a
+ leap year).[1]
+ R/W 0xE002 402C
+ DOW 3 Day of week value in the range of 0 to 6[1] R/W 0xE002 4030
+ DOY 9 Day of year value in the range of 1 to 365 (366 for
+ leap years)[1]
+ R/W 0xE002 4034
+ MONTH 4 Month value in the range of 1 to 12 R/W 0xE002 4038
+ YEAR 12 Year value in the range of 0 to 4095 R/W 0xE002 403C
+*/
+ RTC_SEC = 00;
+ RTC_MIN = 22;
+ RTC_HOUR = 17;
+ RTC_DOM = 11;
+ RTC_DOW = 2-1;
+ RTC_DOY = 223;
+ RTC_MONTH = 8;
+ RTC_YEAR = 2009;
+}
+
+void startRTC(void)
+{
+ // Initial RTC Function
+ RTC_CCR = 0; // Reset All Bit Control
+ RTC_CCR |= 0x00000010; // CLKSRC = 1 = Used EXT 32.768 KHz
+ RTC_CCR |= 0x00000002; // Reset Clock
+ RTC_CCR &= 0xFFFFFFFD; // Release Reset
+ RTC_CCR |= 0x00000001; // Start RTC Clock
+}
Index: /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/RTOSDemo.hzp
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/RTOSDemo.hzp (revision 22)
+++ /webserver/example/freeRTOSexample/EnergyMeters/ARM7_LPC2368_Rowley/RTOSDemo.hzp (revision 22)
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/comtest.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/comtest.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/comtest.c (revision 14)
@@ -0,0 +1,366 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/**
+ * Creates two tasks that operate on an interrupt driven serial port. A loopback
+ * connector should be used so that everything that is transmitted is also received.
+ * The serial port does not use any flow control. On a standard 9way 'D' connector
+ * pins two and three should be connected together.
+ *
+ * The first task repeatedly sends a string to a queue, character at a time. The
+ * serial port interrupt will empty the queue and transmit the characters. The
+ * task blocks for a pseudo random period before resending the string.
+ *
+ * The second task blocks on a queue waiting for a character to be received.
+ * Characters received by the serial port interrupt routine are posted onto the
+ * queue - unblocking the task making it ready to execute. If this is then the
+ * highest priority task ready to run it will run immediately - with a context
+ * switch occurring at the end of the interrupt service routine. The task
+ * receiving characters is spawned with a higher priority than the task
+ * transmitting the characters.
+ *
+ * With the loop back connector in place, one task will transmit a string and the
+ * other will immediately receive it. The receiving task knows the string it
+ * expects to receive so can detect an error.
+ *
+ * This also creates a third task. This is used to test semaphore usage from an
+ * ISR and does nothing interesting.
+ *
+ * \page ComTestC comtest.c
+ * \ingroup DemoFiles
+ *
+ */
+
+/*
+Changes from V1.00:
+
+ + The priority of the Rx task has been lowered. Received characters are
+ now processed (read from the queue) at the idle priority, allowing low
+ priority tasks to run evenly at times of a high communications overhead.
+
+Changes from V1.01:
+
+ + The Tx task now waits a pseudo random time between transissions.
+ Previously a fixed period was used but this was not such a good test as
+ interrupts fired at regular intervals.
+
+Changes From V1.2.0:
+
+ + Use vSerialPutString() instead of single character puts.
+ + Only stop the check variable incrementing after two consecutive errors.
+
+Changed from V1.2.5
+
+ + Made the Rx task 2 priorities higher than the Tx task. Previously it was
+ only 1. This is done to tie in better with the other demo application
+ tasks.
+
+Changes from V2.0.0
+
+ + Delay periods are now specified using variables and constants of
+ portTickType rather than unsigned portLONG.
+ + Slight modification to task priorities.
+
+*/
+
+
+/* Scheduler include files. */
+#include
+#include
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* Demo program include files. */
+#include "serial.h"
+#include "comtest.h"
+#include "print.h"
+
+/* The Tx task will transmit the sequence of characters at a pseudo random
+interval. This is the maximum and minimum block time between sends. */
+#define comTX_MAX_BLOCK_TIME ( ( portTickType ) 0x15e )
+#define comTX_MIN_BLOCK_TIME ( ( portTickType ) 0xc8 )
+
+#define comMAX_CONSECUTIVE_ERRORS ( 2 )
+
+#define comSTACK_SIZE ( ( unsigned portSHORT ) 256 )
+
+#define comRX_RELATIVE_PRIORITY ( 1 )
+
+/* Handle to the com port used by both tasks. */
+static xComPortHandle xPort;
+
+/* The transmit function as described at the top of the file. */
+static void vComTxTask( void *pvParameters );
+
+/* The receive function as described at the top of the file. */
+static void vComRxTask( void *pvParameters );
+
+/* The semaphore test function as described at the top of the file. */
+static void vSemTestTask( void * pvParameters );
+
+/* The string that is repeatedly transmitted. */
+const portCHAR * const pcMessageToExchange = "Send this message over and over again to check communications interrupts. "
+ "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n";
+
+/* Variables that are incremented on each cycle of each task. These are used to
+check that both tasks are still executing. */
+volatile portSHORT sTxCount = 0, sRxCount = 0, sSemCount = 0;
+
+/* The handle to the semaphore test task. */
+static xTaskHandle xSemTestTaskHandle = NULL;
+
+/*-----------------------------------------------------------*/
+
+void vStartComTestTasks( unsigned portBASE_TYPE uxPriority, eCOMPort ePort, eBaud eBaudRate )
+{
+const unsigned portBASE_TYPE uxBufferLength = 255;
+
+ /* Initialise the com port then spawn both tasks. */
+ xPort = xSerialPortInit( ePort, eBaudRate, serNO_PARITY, serBITS_8, serSTOP_1, uxBufferLength );
+ xTaskCreate( vComTxTask, "COMTx", comSTACK_SIZE, NULL, uxPriority, NULL );
+ xTaskCreate( vComRxTask, "COMRx", comSTACK_SIZE, NULL, uxPriority + comRX_RELATIVE_PRIORITY, NULL );
+ xTaskCreate( vSemTestTask, "ISRSem", comSTACK_SIZE, NULL, tskIDLE_PRIORITY, &xSemTestTaskHandle );
+}
+/*-----------------------------------------------------------*/
+
+static void vComTxTask( void *pvParameters )
+{
+const portCHAR * const pcTaskStartMsg = "COM Tx task started.\r\n";
+portTickType xTimeToWait;
+
+ /* Stop warnings. */
+ ( void ) pvParameters;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ for( ;; )
+ {
+ /* Send the string to the serial port. */
+ vSerialPutString( xPort, pcMessageToExchange, strlen( pcMessageToExchange ) );
+
+ /* We have posted all the characters in the string - increment the variable
+ used to check that this task is still running, then wait before re-sending
+ the string. */
+ sTxCount++;
+
+ xTimeToWait = xTaskGetTickCount();
+
+ /* Make sure we don't wait too long... */
+ xTimeToWait %= comTX_MAX_BLOCK_TIME;
+
+ /* ...but we do want to wait. */
+ if( xTimeToWait < comTX_MIN_BLOCK_TIME )
+ {
+ xTimeToWait = comTX_MIN_BLOCK_TIME;
+ }
+
+ vTaskDelay( xTimeToWait );
+ }
+} /*lint !e715 !e818 pvParameters is required for a task function even if it is not referenced. */
+/*-----------------------------------------------------------*/
+
+static void vComRxTask( void *pvParameters )
+{
+const portCHAR * const pcTaskStartMsg = "COM Rx task started.\r\n";
+const portCHAR * const pcTaskErrorMsg = "COM read error\r\n";
+const portCHAR * const pcTaskRestartMsg = "COM resynced\r\n";
+const portCHAR * const pcTaskTimeoutMsg = "COM Rx timed out\r\n";
+const portTickType xBlockTime = ( portTickType ) 0xffff / portTICK_RATE_MS;
+const portCHAR *pcExpectedChar;
+portBASE_TYPE xGotChar;
+portCHAR cRxedChar;
+portSHORT sResyncRequired, sConsecutiveErrors, sLatchedError;
+
+ /* Stop warnings. */
+ ( void ) pvParameters;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ /* The first expected character is the first character in the string. */
+ pcExpectedChar = pcMessageToExchange;
+ sResyncRequired = pdFALSE;
+ sConsecutiveErrors = 0;
+ sLatchedError = pdFALSE;
+
+ for( ;; )
+ {
+ /* Receive a message from the com port interrupt routine. If a message is
+ not yet available the call will block the task. */
+ xGotChar = xSerialGetChar( xPort, &cRxedChar, xBlockTime );
+ if( xGotChar == pdTRUE )
+ {
+ if( sResyncRequired == pdTRUE )
+ {
+ /* We got out of sequence and are waiting for the start of the next
+ transmission of the string. */
+ if( cRxedChar == '\n' )
+ {
+ /* This is the end of the message so we can start again - with
+ the first character in the string being the next thing we expect
+ to receive. */
+ pcExpectedChar = pcMessageToExchange;
+ sResyncRequired = pdFALSE;
+
+ /* Queue a message for printing to say that we are going to try
+ again. */
+ vPrintDisplayMessage( &pcTaskRestartMsg );
+
+ /* Stop incrementing the check variable, if consecutive errors occur. */
+ sConsecutiveErrors++;
+ if( sConsecutiveErrors >= comMAX_CONSECUTIVE_ERRORS )
+ {
+ sLatchedError = pdTRUE;
+ }
+ }
+ }
+ else
+ {
+ /* We have received a character, but is it the expected character? */
+ if( cRxedChar != *pcExpectedChar )
+ {
+ /* This was not the expected character so post a message for
+ printing to say that an error has occurred. We will then wait
+ to resynchronise. */
+ vPrintDisplayMessage( &pcTaskErrorMsg );
+ sResyncRequired = pdTRUE;
+ }
+ else
+ {
+ /* This was the expected character so next time we will expect
+ the next character in the string. Wrap back to the beginning
+ of the string when the null terminator has been reached. */
+ pcExpectedChar++;
+ if( *pcExpectedChar == '\0' )
+ {
+ pcExpectedChar = pcMessageToExchange;
+
+ /* We have got through the entire string without error. */
+ sConsecutiveErrors = 0;
+ }
+ }
+ }
+
+ /* Increment the count that is used to check that this task is still
+ running. This is only done if an error has never occurred. */
+ if( sLatchedError == pdFALSE )
+ {
+ sRxCount++;
+ }
+ }
+ else
+ {
+ vPrintDisplayMessage( &pcTaskTimeoutMsg );
+ }
+ }
+} /*lint !e715 !e818 pvParameters is required for a task function even if it is not referenced. */
+/*-----------------------------------------------------------*/
+
+static void vSemTestTask( void * pvParameters )
+{
+const portCHAR * const pcTaskStartMsg = "ISR Semaphore test started.\r\n";
+portBASE_TYPE xError = pdFALSE;
+
+ /* Stop warnings. */
+ ( void ) pvParameters;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ for( ;; )
+ {
+ if( xSerialWaitForSemaphore( xPort ) )
+ {
+ if( xError == pdFALSE )
+ {
+ sSemCount++;
+ }
+ }
+ else
+ {
+ xError = pdTRUE;
+ }
+ }
+} /*lint !e715 !e830 !e818 pvParameters not used but function prototype must be standard for task function. */
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreComTestTasksStillRunning( void )
+{
+static portSHORT sLastTxCount = 0, sLastRxCount = 0, sLastSemCount = 0;
+portBASE_TYPE xReturn;
+
+ /* Not too worried about mutual exclusion on these variables as they are 16
+ bits and we are only reading them. We also only care to see if they have
+ changed or not. */
+
+ if( ( sTxCount == sLastTxCount ) || ( sRxCount == sLastRxCount ) || ( sSemCount == sLastSemCount ) )
+ {
+ xReturn = pdFALSE;
+ }
+ else
+ {
+ xReturn = pdTRUE;
+ }
+
+ sLastTxCount = sTxCount;
+ sLastRxCount = sRxCount;
+ sLastSemCount = sSemCount;
+
+ return xReturn;
+}
+/*-----------------------------------------------------------*/
+
+void vComTestUnsuspendTask( void )
+{
+ /* The task that is suspended on the semaphore will be referenced from the
+ Suspended list as it is blocking indefinitely. This call just checks that
+ the kernel correctly detects this and does not attempt to unsuspend the
+ task. */
+ xTaskResumeFromISR( xSemTestTaskHandle );
+}
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/flop.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/flop.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/flop.c (revision 14)
@@ -0,0 +1,351 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+Changes from V1.2.3
+
+ + The created tasks now include calls to tskYIELD(), allowing them to be used
+ with the cooperative scheduler.
+*/
+
+/**
+ * Creates eight tasks, each of which loops continuously performing an (emulated)
+ * floating point calculation.
+ *
+ * All the tasks run at the idle priority and never block or yield. This causes
+ * all eight tasks to time slice with the idle task. Running at the idle priority
+ * means that these tasks will get pre-empted any time another task is ready to run
+ * or a time slice occurs. More often than not the pre-emption will occur mid
+ * calculation, creating a good test of the schedulers context switch mechanism - a
+ * calculation producing an unexpected result could be a symptom of a corruption in
+ * the context of a task.
+ *
+ * \page FlopC flop.c
+ * \ingroup DemoFiles
+ *
+ */
+
+#include
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "print.h"
+
+/* Demo program include files. */
+#include "flop.h"
+
+#define mathSTACK_SIZE ( ( unsigned portSHORT ) 512 )
+#define mathNUMBER_OF_TASKS ( 8 )
+
+/* Four tasks, each of which performs a different floating point calculation.
+Each of the four is created twice. */
+static void vCompetingMathTask1( void *pvParameters );
+static void vCompetingMathTask2( void *pvParameters );
+static void vCompetingMathTask3( void *pvParameters );
+static void vCompetingMathTask4( void *pvParameters );
+
+/* These variables are used to check that all the tasks are still running. If a
+task gets a calculation wrong it will
+stop incrementing its check variable. */
+static volatile unsigned portSHORT usTaskCheck[ mathNUMBER_OF_TASKS ] = { ( unsigned portSHORT ) 0 };
+
+/*-----------------------------------------------------------*/
+
+void vStartMathTasks( unsigned portBASE_TYPE uxPriority )
+{
+ xTaskCreate( vCompetingMathTask1, "Math1", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 0 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask2, "Math2", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 1 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask3, "Math3", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 2 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask4, "Math4", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 3 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask1, "Math5", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 4 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask2, "Math6", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 5 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask3, "Math7", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 6 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask4, "Math8", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 7 ] ), uxPriority, NULL );
+}
+/*-----------------------------------------------------------*/
+
+static void vCompetingMathTask1( void *pvParameters )
+{
+portDOUBLE d1, d2, d3, d4;
+volatile unsigned portSHORT *pusTaskCheckVariable;
+const portDOUBLE dAnswer = ( 123.4567 + 2345.6789 ) * -918.222;
+const portCHAR * const pcTaskStartMsg = "Math task 1 started.\r\n";
+const portCHAR * const pcTaskFailMsg = "Math task 1 failed.\r\n";
+portSHORT sError = pdFALSE;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ /* The variable this task increments to show it is still running is passed in
+ as the parameter. */
+ pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
+
+ /* Keep performing a calculation and checking the result against a constant. */
+ for(;;)
+ {
+ d1 = 123.4567;
+ d2 = 2345.6789;
+ d3 = -918.222;
+
+ d4 = ( d1 + d2 ) * d3;
+
+ taskYIELD();
+
+ /* If the calculation does not match the expected constant, stop the
+ increment of the check variable. */
+ if( fabs( d4 - dAnswer ) > 0.001 )
+ {
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ sError = pdTRUE;
+ }
+
+ if( sError == pdFALSE )
+ {
+ /* If the calculation has always been correct, increment the check
+ variable so we know this task is still running okay. */
+ ( *pusTaskCheckVariable )++;
+ }
+
+ taskYIELD();
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vCompetingMathTask2( void *pvParameters )
+{
+portDOUBLE d1, d2, d3, d4;
+volatile unsigned portSHORT *pusTaskCheckVariable;
+const portDOUBLE dAnswer = ( -389.38 / 32498.2 ) * -2.0001;
+const portCHAR * const pcTaskStartMsg = "Math task 2 started.\r\n";
+const portCHAR * const pcTaskFailMsg = "Math task 2 failed.\r\n";
+portSHORT sError = pdFALSE;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ /* The variable this task increments to show it is still running is passed in
+ as the parameter. */
+ pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
+
+ /* Keep performing a calculation and checking the result against a constant. */
+ for( ;; )
+ {
+ d1 = -389.38;
+ d2 = 32498.2;
+ d3 = -2.0001;
+
+ d4 = ( d1 / d2 ) * d3;
+
+ taskYIELD();
+
+ /* If the calculation does not match the expected constant, stop the
+ increment of the check variable. */
+ if( fabs( d4 - dAnswer ) > 0.001 )
+ {
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ sError = pdTRUE;
+ }
+
+ if( sError == pdFALSE )
+ {
+ /* If the calculation has always been correct, increment the check
+ variable so we know
+ this task is still running okay. */
+ ( *pusTaskCheckVariable )++;
+ }
+
+ taskYIELD();
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vCompetingMathTask3( void *pvParameters )
+{
+portDOUBLE *pdArray, dTotal1, dTotal2, dDifference;
+volatile unsigned portSHORT *pusTaskCheckVariable;
+const unsigned portSHORT usArraySize = 250;
+unsigned portSHORT usPosition;
+const portCHAR * const pcTaskStartMsg = "Math task 3 started.\r\n";
+const portCHAR * const pcTaskFailMsg = "Math task 3 failed.\r\n";
+portSHORT sError = pdFALSE;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ /* The variable this task increments to show it is still running is passed in
+ as the parameter. */
+ pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
+
+ pdArray = ( portDOUBLE * ) pvPortMalloc( ( size_t ) 250 * sizeof( portDOUBLE ) );
+
+ /* Keep filling an array, keeping a running total of the values placed in the
+ array. Then run through the array adding up all the values. If the two totals
+ do not match, stop the check variable from incrementing. */
+ for( ;; )
+ {
+ dTotal1 = 0.0;
+ dTotal2 = 0.0;
+
+ for( usPosition = 0; usPosition < usArraySize; usPosition++ )
+ {
+ pdArray[ usPosition ] = ( portDOUBLE ) usPosition + 5.5;
+ dTotal1 += ( portDOUBLE ) usPosition + 5.5;
+ }
+
+ taskYIELD();
+
+ for( usPosition = 0; usPosition < usArraySize; usPosition++ )
+ {
+ dTotal2 += pdArray[ usPosition ];
+ }
+
+ dDifference = dTotal1 - dTotal2;
+ if( fabs( dDifference ) > 0.001 )
+ {
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ sError = pdTRUE;
+ }
+
+ taskYIELD();
+
+ if( sError == pdFALSE )
+ {
+ /* If the calculation has always been correct, increment the check
+ variable so we know this task is still running okay. */
+ ( *pusTaskCheckVariable )++;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vCompetingMathTask4( void *pvParameters )
+{
+portDOUBLE *pdArray, dTotal1, dTotal2, dDifference;
+volatile unsigned portSHORT *pusTaskCheckVariable;
+const unsigned portSHORT usArraySize = 250;
+unsigned portSHORT usPosition;
+const portCHAR * const pcTaskStartMsg = "Math task 4 started.\r\n";
+const portCHAR * const pcTaskFailMsg = "Math task 4 failed.\r\n";
+portSHORT sError = pdFALSE;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ /* The variable this task increments to show it is still running is passed in
+ as the parameter. */
+ pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
+
+ pdArray = ( portDOUBLE * ) pvPortMalloc( ( size_t ) 250 * sizeof( portDOUBLE ) );
+
+ /* Keep filling an array, keeping a running total of the values placed in the
+ array. Then run through the array adding up all the values. If the two totals
+ do not match, stop the check variable from incrementing. */
+ for( ;; )
+ {
+ dTotal1 = 0.0;
+ dTotal2 = 0.0;
+
+ for( usPosition = 0; usPosition < usArraySize; usPosition++ )
+ {
+ pdArray[ usPosition ] = ( portDOUBLE ) usPosition * 12.123;
+ dTotal1 += ( portDOUBLE ) usPosition * 12.123;
+ }
+
+ taskYIELD();
+
+ for( usPosition = 0; usPosition < usArraySize; usPosition++ )
+ {
+ dTotal2 += pdArray[ usPosition ];
+ }
+
+ dDifference = dTotal1 - dTotal2;
+ if( fabs( dDifference ) > 0.001 )
+ {
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ sError = pdTRUE;
+ }
+
+ taskYIELD();
+
+ if( sError == pdFALSE )
+ {
+ /* If the calculation has always been correct, increment the check
+ variable so we know this task is still running okay. */
+ ( *pusTaskCheckVariable )++;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreMathsTaskStillRunning( void )
+{
+/* Keep a history of the check variables so we know if they have been incremented
+since the last call. */
+static unsigned portSHORT usLastTaskCheck[ mathNUMBER_OF_TASKS ] = { ( unsigned portSHORT ) 0 };
+portBASE_TYPE xReturn = pdTRUE, xTask;
+
+ /* Check the maths tasks are still running by ensuring their check variables
+ are still incrementing. */
+ for( xTask = 0; xTask < mathNUMBER_OF_TASKS; xTask++ )
+ {
+ if( usTaskCheck[ xTask ] == usLastTaskCheck[ xTask ] )
+ {
+ /* The check has not incremented so an error exists. */
+ xReturn = pdFALSE;
+ }
+
+ usLastTaskCheck[ xTask ] = usTaskCheck[ xTask ];
+ }
+
+ return xReturn;
+}
+
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/dynamic.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/dynamic.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/dynamic.c (revision 14)
@@ -0,0 +1,598 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/**
+ * The first test creates three tasks - two counter tasks (one continuous count
+ * and one limited count) and one controller. A "count" variable is shared
+ * between all three tasks. The two counter tasks should never be in a "ready"
+ * state at the same time. The controller task runs at the same priority as
+ * the continuous count task, and at a lower priority than the limited count
+ * task.
+ *
+ * One counter task loops indefinitely, incrementing the shared count variable
+ * on each iteration. To ensure it has exclusive access to the variable it
+ * raises it's priority above that of the controller task before each
+ * increment, lowering it again to it's original priority before starting the
+ * next iteration.
+ *
+ * The other counter task increments the shared count variable on each
+ * iteration of it's loop until the count has reached a limit of 0xff - at
+ * which point it suspends itself. It will not start a new loop until the
+ * controller task has made it "ready" again by calling vTaskResume ().
+ * This second counter task operates at a higher priority than controller
+ * task so does not need to worry about mutual exclusion of the counter
+ * variable.
+ *
+ * The controller task is in two sections. The first section controls and
+ * monitors the continuous count task. When this section is operational the
+ * limited count task is suspended. Likewise, the second section controls
+ * and monitors the limited count task. When this section is operational the
+ * continuous count task is suspended.
+ *
+ * In the first section the controller task first takes a copy of the shared
+ * count variable. To ensure mutual exclusion on the count variable it
+ * suspends the continuous count task, resuming it again when the copy has been
+ * taken. The controller task then sleeps for a fixed period - during which
+ * the continuous count task will execute and increment the shared variable.
+ * When the controller task wakes it checks that the continuous count task
+ * has executed by comparing the copy of the shared variable with its current
+ * value. This time, to ensure mutual exclusion, the scheduler itself is
+ * suspended with a call to vTaskSuspendAll (). This is for demonstration
+ * purposes only and is not a recommended technique due to its inefficiency.
+ *
+ * After a fixed number of iterations the controller task suspends the
+ * continuous count task, and moves on to its second section.
+ *
+ * At the start of the second section the shared variable is cleared to zero.
+ * The limited count task is then woken from it's suspension by a call to
+ * vTaskResume (). As this counter task operates at a higher priority than
+ * the controller task the controller task should not run again until the
+ * shared variable has been counted up to the limited value causing the counter
+ * task to suspend itself. The next line after vTaskResume () is therefore
+ * a check on the shared variable to ensure everything is as expected.
+ *
+ *
+ * The second test consists of a couple of very simple tasks that post onto a
+ * queue while the scheduler is suspended. This test was added to test parts
+ * of the scheduler not exercised by the first test.
+ *
+ *
+ * The final set of two tasks implements a third test. This simply raises the
+ * priority of a task while the scheduler is suspended. Again this test was
+ * added to exercise parts of the code not covered by the first test.
+ *
+ * \page Priorities dynamic.c
+ * \ingroup DemoFiles
+ *
+ */
+
+/*
+Changes from V2.0.0
+
+ + Delay periods are now specified using variables and constants of
+ portTickType rather than unsigned portLONG.
+ + Added a second, simple test that uses the functions
+ vQueueReceiveWhenSuspendedTask() and vQueueSendWhenSuspendedTask().
+
+Changes from V3.1.1
+
+ + Added a third simple test that uses the vTaskPrioritySet() function
+ while the scheduler is suspended.
+ + Modified the controller task slightly to test the calling of
+ vTaskResumeAll() while the scheduler is suspended.
+*/
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* Demo app include files. */
+#include "dynamic.h"
+#include "print.h"
+
+/* Function that implements the "limited count" task as described above. */
+static void vLimitedIncrementTask( void * pvParameters );
+
+/* Function that implements the "continuous count" task as described above. */
+static void vContinuousIncrementTask( void * pvParameters );
+
+/* Function that implements the controller task as described above. */
+static void vCounterControlTask( void * pvParameters );
+
+/* The simple test functions that check sending and receiving while the
+scheduler is suspended. */
+static void vQueueReceiveWhenSuspendedTask( void *pvParameters );
+static void vQueueSendWhenSuspendedTask( void *pvParameters );
+
+/* The simple test functions that check raising and lowering of task priorities
+while the scheduler is suspended. */
+static void prvChangePriorityWhenSuspendedTask( void *pvParameters );
+static void prvChangePriorityHelperTask( void *pvParameters );
+
+
+/* Demo task specific constants. */
+#define priSTACK_SIZE ( ( unsigned portSHORT ) configMINIMAL_STACK_SIZE )
+#define priSLEEP_TIME ( ( portTickType ) 50 )
+#define priLOOPS ( 5 )
+#define priMAX_COUNT ( ( unsigned portLONG ) 0xff )
+#define priNO_BLOCK ( ( portTickType ) 0 )
+#define priSUSPENDED_QUEUE_LENGTH ( 1 )
+
+/*-----------------------------------------------------------*/
+
+/* Handles to the two counter tasks. These could be passed in as parameters
+to the controller task to prevent them having to be file scope. */
+static xTaskHandle xContinuousIncrementHandle, xLimitedIncrementHandle, xChangePriorityWhenSuspendedHandle;
+
+/* The shared counter variable. This is passed in as a parameter to the two
+counter variables for demonstration purposes. */
+static unsigned portLONG ulCounter;
+
+/* Variable used in a similar way by the test that checks the raising and
+lowering of task priorities while the scheduler is suspended. */
+static unsigned portLONG ulPrioritySetCounter;
+
+/* Variables used to check that the tasks are still operating without error.
+Each complete iteration of the controller task increments this variable
+provided no errors have been found. The variable maintaining the same value
+is therefore indication of an error. */
+static unsigned portSHORT usCheckVariable = ( unsigned portSHORT ) 0;
+static portBASE_TYPE xSuspendedQueueSendError = pdFALSE;
+static portBASE_TYPE xSuspendedQueueReceiveError = pdFALSE;
+static portBASE_TYPE xPriorityRaiseWhenSuspendedError = pdFALSE;
+
+/* Queue used by the second test. */
+xQueueHandle xSuspendedTestQueue;
+
+/*-----------------------------------------------------------*/
+/*
+ * Start the seven tasks as described at the top of the file.
+ * Note that the limited count task is given a higher priority.
+ */
+void vStartDynamicPriorityTasks( void )
+{
+ xSuspendedTestQueue = xQueueCreate( priSUSPENDED_QUEUE_LENGTH, sizeof( unsigned portLONG ) );
+ xTaskCreate( vContinuousIncrementTask, "CONT_INC", priSTACK_SIZE, ( void * ) &ulCounter, tskIDLE_PRIORITY, &xContinuousIncrementHandle );
+ xTaskCreate( vLimitedIncrementTask, "LIM_INC", priSTACK_SIZE, ( void * ) &ulCounter, tskIDLE_PRIORITY + 1, &xLimitedIncrementHandle );
+ xTaskCreate( vCounterControlTask, "C_CTRL", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
+ xTaskCreate( vQueueSendWhenSuspendedTask, "SUSP_SEND", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
+ xTaskCreate( vQueueReceiveWhenSuspendedTask, "SUSP_RECV", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
+ xTaskCreate( prvChangePriorityWhenSuspendedTask, "1st_P_CHANGE", priSTACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL );
+ xTaskCreate( prvChangePriorityHelperTask, "2nd_P_CHANGE", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, &xChangePriorityWhenSuspendedHandle );
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Just loops around incrementing the shared variable until the limit has been
+ * reached. Once the limit has been reached it suspends itself.
+ */
+static void vLimitedIncrementTask( void * pvParameters )
+{
+unsigned portLONG *pulCounter;
+
+ /* Take a pointer to the shared variable from the parameters passed into
+ the task. */
+ pulCounter = ( unsigned portLONG * ) pvParameters;
+
+ /* This will run before the control task, so the first thing it does is
+ suspend - the control task will resume it when ready. */
+ vTaskSuspend( NULL );
+
+ for( ;; )
+ {
+ /* Just count up to a value then suspend. */
+ ( *pulCounter )++;
+
+ if( *pulCounter >= priMAX_COUNT )
+ {
+ vTaskSuspend( NULL );
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Just keep counting the shared variable up. The control task will suspend
+ * this task when it wants.
+ */
+static void vContinuousIncrementTask( void * pvParameters )
+{
+unsigned portLONG *pulCounter;
+unsigned portBASE_TYPE uxOurPriority;
+
+ /* Take a pointer to the shared variable from the parameters passed into
+ the task. */
+ pulCounter = ( unsigned portLONG * ) pvParameters;
+
+ /* Query our priority so we can raise it when exclusive access to the
+ shared variable is required. */
+ uxOurPriority = uxTaskPriorityGet( NULL );
+
+ for( ;; )
+ {
+ /* Raise our priority above the controller task to ensure a context
+ switch does not occur while we are accessing this variable. */
+ vTaskPrioritySet( NULL, uxOurPriority + 1 );
+ ( *pulCounter )++;
+ vTaskPrioritySet( NULL, uxOurPriority );
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+ }
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Controller task as described above.
+ */
+static void vCounterControlTask( void * pvParameters )
+{
+unsigned portLONG ulLastCounter;
+portSHORT sLoops;
+portSHORT sError = pdFALSE;
+const portCHAR * const pcTaskStartMsg = "Priority manipulation tasks started.\r\n";
+const portCHAR * const pcTaskFailMsg = "Priority manipulation Task Failed\r\n";
+
+ /* Just to stop warning messages. */
+ ( void ) pvParameters;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ for( ;; )
+ {
+ /* Start with the counter at zero. */
+ ulCounter = ( unsigned portLONG ) 0;
+
+ /* First section : */
+
+ /* Check the continuous count task is running. */
+ for( sLoops = 0; sLoops < priLOOPS; sLoops++ )
+ {
+ /* Suspend the continuous count task so we can take a mirror of the
+ shared variable without risk of corruption. */
+ vTaskSuspend( xContinuousIncrementHandle );
+ ulLastCounter = ulCounter;
+ vTaskResume( xContinuousIncrementHandle );
+
+ /* Now delay to ensure the other task has processor time. */
+ vTaskDelay( priSLEEP_TIME );
+
+ /* Check the shared variable again. This time to ensure mutual
+ exclusion the whole scheduler will be locked. This is just for
+ demo purposes! */
+ vTaskSuspendAll();
+ {
+ if( ulLastCounter == ulCounter )
+ {
+ /* The shared variable has not changed. There is a problem
+ with the continuous count task so flag an error. */
+ sError = pdTRUE;
+ xTaskResumeAll();
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ vTaskSuspendAll();
+ }
+ }
+ xTaskResumeAll();
+ }
+
+
+ /* Second section: */
+
+ /* Suspend the continuous counter task so it stops accessing the shared variable. */
+ vTaskSuspend( xContinuousIncrementHandle );
+
+ /* Reset the variable. */
+ ulCounter = ( unsigned portLONG ) 0;
+
+ /* Resume the limited count task which has a higher priority than us.
+ We should therefore not return from this call until the limited count
+ task has suspended itself with a known value in the counter variable.
+ The scheduler suspension is not necessary but is included for test
+ purposes. */
+ vTaskSuspendAll();
+ vTaskResume( xLimitedIncrementHandle );
+ xTaskResumeAll();
+
+ /* Does the counter variable have the expected value? */
+ if( ulCounter != priMAX_COUNT )
+ {
+ sError = pdTRUE;
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ }
+
+ if( sError == pdFALSE )
+ {
+ /* If no errors have occurred then increment the check variable. */
+ portENTER_CRITICAL();
+ usCheckVariable++;
+ portEXIT_CRITICAL();
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ /* Resume the continuous count task and do it all again. */
+ vTaskResume( xContinuousIncrementHandle );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vQueueSendWhenSuspendedTask( void *pvParameters )
+{
+static unsigned portLONG ulValueToSend = ( unsigned portLONG ) 0;
+const portCHAR * const pcTaskStartMsg = "Queue send while suspended task started.\r\n";
+const portCHAR * const pcTaskFailMsg = "Queue send while suspended failed.\r\n";
+
+ /* Just to stop warning messages. */
+ ( void ) pvParameters;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ for( ;; )
+ {
+ vTaskSuspendAll();
+ {
+ /* We must not block while the scheduler is suspended! */
+ if( xQueueSend( xSuspendedTestQueue, ( void * ) &ulValueToSend, priNO_BLOCK ) != pdTRUE )
+ {
+ if( xSuspendedQueueSendError == pdFALSE )
+ {
+ xTaskResumeAll();
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ vTaskSuspendAll();
+ }
+
+ xSuspendedQueueSendError = pdTRUE;
+ }
+ }
+ xTaskResumeAll();
+
+ vTaskDelay( priSLEEP_TIME );
+
+ ++ulValueToSend;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vQueueReceiveWhenSuspendedTask( void *pvParameters )
+{
+static unsigned portLONG ulExpectedValue = ( unsigned portLONG ) 0, ulReceivedValue;
+const portCHAR * const pcTaskStartMsg = "Queue receive while suspended task started.\r\n";
+const portCHAR * const pcTaskFailMsg = "Queue receive while suspended failed.\r\n";
+portBASE_TYPE xGotValue;
+
+ /* Just to stop warning messages. */
+ ( void ) pvParameters;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ for( ;; )
+ {
+ do
+ {
+ /* Suspending the scheduler here is fairly pointless and
+ undesirable for a normal application. It is done here purely
+ to test the scheduler. The inner xTaskResumeAll() should
+ never return pdTRUE as the scheduler is still locked by the
+ outer call. */
+ vTaskSuspendAll();
+ {
+ vTaskSuspendAll();
+ {
+ xGotValue = xQueueReceive( xSuspendedTestQueue, ( void * ) &ulReceivedValue, priNO_BLOCK );
+ }
+ if( xTaskResumeAll() )
+ {
+ xSuspendedQueueReceiveError = pdTRUE;
+ }
+ }
+ xTaskResumeAll();
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ } while( xGotValue == pdFALSE );
+
+ if( ulReceivedValue != ulExpectedValue )
+ {
+ if( xSuspendedQueueReceiveError == pdFALSE )
+ {
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ }
+ xSuspendedQueueReceiveError = pdTRUE;
+ }
+
+ ++ulExpectedValue;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvChangePriorityWhenSuspendedTask( void *pvParameters )
+{
+const portCHAR * const pcTaskStartMsg = "Priority change when suspended task started.\r\n";
+const portCHAR * const pcTaskFailMsg = "Priority change when suspended task failed.\r\n";
+
+ /* Just to stop warning messages. */
+ ( void ) pvParameters;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ for( ;; )
+ {
+ /* Start with the counter at 0 so we know what the counter should be
+ when we check it next. */
+ ulPrioritySetCounter = ( unsigned portLONG ) 0;
+
+ /* Resume the helper task. At this time it has a priority lower than
+ ours so no context switch should occur. */
+ vTaskResume( xChangePriorityWhenSuspendedHandle );
+
+ /* Check to ensure the task just resumed has not executed. */
+ portENTER_CRITICAL();
+ {
+ if( ulPrioritySetCounter != ( unsigned portLONG ) 0 )
+ {
+ xPriorityRaiseWhenSuspendedError = pdTRUE;
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ }
+ }
+ portEXIT_CRITICAL();
+
+ /* Now try raising the priority while the scheduler is suspended. */
+ vTaskSuspendAll();
+ {
+ vTaskPrioritySet( xChangePriorityWhenSuspendedHandle, ( configMAX_PRIORITIES - 1 ) );
+
+ /* Again, even though the helper task has a priority greater than
+ ours, it should not have executed yet because the scheduler is
+ suspended. */
+ portENTER_CRITICAL();
+ {
+ if( ulPrioritySetCounter != ( unsigned portLONG ) 0 )
+ {
+ xPriorityRaiseWhenSuspendedError = pdTRUE;
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ }
+ }
+ portEXIT_CRITICAL();
+ }
+ xTaskResumeAll();
+
+ /* Now the scheduler has been resumed the helper task should
+ immediately preempt us and execute. When it executes it will increment
+ the ulPrioritySetCounter exactly once before suspending itself.
+
+ We should now always find the counter set to 1. */
+ portENTER_CRITICAL();
+ {
+ if( ulPrioritySetCounter != ( unsigned portLONG ) 1 )
+ {
+ xPriorityRaiseWhenSuspendedError = pdTRUE;
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ }
+ }
+ portEXIT_CRITICAL();
+
+ /* Delay until we try this again. */
+ vTaskDelay( priSLEEP_TIME * 2 );
+
+ /* Set the priority of the helper task back ready for the next
+ execution of this task. */
+ vTaskSuspendAll();
+ vTaskPrioritySet( xChangePriorityWhenSuspendedHandle, tskIDLE_PRIORITY );
+ xTaskResumeAll();
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvChangePriorityHelperTask( void *pvParameters )
+{
+ /* Just to stop warning messages. */
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /* This is the helper task for prvChangePriorityWhenSuspendedTask().
+ It has it's priority raised and lowered. When it runs it simply
+ increments the counter then suspends itself again. This allows
+ prvChangePriorityWhenSuspendedTask() to know how many times it has
+ executed. */
+ ulPrioritySetCounter++;
+ vTaskSuspend( NULL );
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* Called to check that all the created tasks are still running without error. */
+portBASE_TYPE xAreDynamicPriorityTasksStillRunning( void )
+{
+/* Keep a history of the check variables so we know if it has been incremented
+since the last call. */
+static unsigned portSHORT usLastTaskCheck = ( unsigned portSHORT ) 0;
+portBASE_TYPE xReturn = pdTRUE;
+
+ /* Check the tasks are still running by ensuring the check variable
+ is still incrementing. */
+
+ if( usCheckVariable == usLastTaskCheck )
+ {
+ /* The check has not incremented so an error exists. */
+ xReturn = pdFALSE;
+ }
+
+ if( xSuspendedQueueSendError == pdTRUE )
+ {
+ xReturn = pdFALSE;
+ }
+
+ if( xSuspendedQueueReceiveError == pdTRUE )
+ {
+ xReturn = pdFALSE;
+ }
+
+ if( xPriorityRaiseWhenSuspendedError == pdTRUE )
+ {
+ xReturn = pdFALSE;
+ }
+
+ usLastTaskCheck = usCheckVariable;
+ return xReturn;
+}
+
+
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/events.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/events.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/events.c (revision 14)
@@ -0,0 +1,388 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/**
+ * This file exercises the event mechanism whereby more than one task is
+ * blocked waiting for the same event.
+ *
+ * The demo creates five tasks - four 'event' tasks, and a controlling task.
+ * The event tasks have various different priorities and all block on reading
+ * the same queue. The controlling task writes data to the queue, then checks
+ * to see which of the event tasks read the data from the queue. The
+ * controlling task has the lowest priority of all the tasks so is guaranteed
+ * to always get preempted immediately upon writing to the queue.
+ *
+ * By selectively suspending and resuming the event tasks the controlling task
+ * can check that the highest priority task that is blocked on the queue is the
+ * task that reads the posted data from the queue.
+ *
+ * Two of the event tasks share the same priority. When neither of these tasks
+ * are suspended they should alternate - one reading one message from the queue,
+ * the other the next message, etc.
+ */
+
+/* Standard includes. */
+#include
+#include
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+/* Demo program include files. */
+#include "mevents.h"
+#include "print.h"
+
+/* Demo specific constants. */
+#define evtSTACK_SIZE ( ( unsigned portBASE_TYPE ) configMINIMAL_STACK_SIZE )
+#define evtNUM_TASKS ( 4 )
+#define evtQUEUE_LENGTH ( ( unsigned portBASE_TYPE ) 3 )
+#define evtNO_DELAY 0
+
+/* Just indexes used to uniquely identify the tasks. Note that two tasks are
+'highest' priority. */
+#define evtHIGHEST_PRIORITY_INDEX_2 3
+#define evtHIGHEST_PRIORITY_INDEX_1 2
+#define evtMEDIUM_PRIORITY_INDEX 1
+#define evtLOWEST_PRIORITY_INDEX 0
+
+/* Each event task increments one of these counters each time it reads data
+from the queue. */
+static volatile portBASE_TYPE xTaskCounters[ evtNUM_TASKS ] = { 0, 0, 0, 0 };
+
+/* Each time the controlling task posts onto the queue it increments the
+expected count of the task that it expected to read the data from the queue
+(i.e. the task with the highest priority that should be blocked on the queue).
+
+xExpectedTaskCounters are incremented from the controlling task, and
+xTaskCounters are incremented from the individual event tasks - therefore
+comparing xTaskCounters to xExpectedTaskCounters shows whether or not the
+correct task was unblocked by the post. */
+static portBASE_TYPE xExpectedTaskCounters[ evtNUM_TASKS ] = { 0, 0, 0, 0 };
+
+/* Handles to the four event tasks. These are required to suspend and resume
+the tasks. */
+static xTaskHandle xCreatedTasks[ evtNUM_TASKS ];
+
+/* The single queue onto which the controlling task posts, and the four event
+tasks block. */
+static xQueueHandle xQueue;
+
+/* Flag used to indicate whether or not an error has occurred at any time.
+An error is either the queue being full when not expected, or an unexpected
+task reading data from the queue. */
+static portBASE_TYPE xHealthStatus = pdPASS;
+
+/*-----------------------------------------------------------*/
+
+/* Function that implements the event task. This is created four times. */
+static void prvMultiEventTask( void *pvParameters );
+
+/* Function that implements the controlling task. */
+static void prvEventControllerTask( void *pvParameters );
+
+/* This is a utility function that posts data to the queue, then compares
+xExpectedTaskCounters with xTaskCounters to ensure everything worked as
+expected.
+
+The event tasks all have higher priorities the controlling task. Therefore
+the controlling task will always get preempted between writhing to the queue
+and checking the task counters.
+
+@param xExpectedTask The index to the task that the controlling task thinks
+ should be the highest priority task waiting for data, and
+ therefore the task that will unblock.
+
+@param xIncrement The number of items that should be written to the queue.
+*/
+static void prvCheckTaskCounters( portBASE_TYPE xExpectedTask, portBASE_TYPE xIncrement );
+
+/* This is just incremented each cycle of the controlling tasks function so
+the main application can ensure the test is still running. */
+static portBASE_TYPE xCheckVariable = 0;
+
+/*-----------------------------------------------------------*/
+
+void vStartMultiEventTasks( void )
+{
+ /* Create the queue to be used for all the communications. */
+ xQueue = xQueueCreate( evtQUEUE_LENGTH, ( unsigned portBASE_TYPE ) sizeof( unsigned portBASE_TYPE ) );
+
+ /* Start the controlling task. This has the idle priority to ensure it is
+ always preempted by the event tasks. */
+ xTaskCreate( prvEventControllerTask, "EvntCTRL", evtSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
+
+ /* Start the four event tasks. Note that two have priority 3, one
+ priority 2 and the other priority 1. */
+ xTaskCreate( prvMultiEventTask, "Event0", evtSTACK_SIZE, ( void * ) &( xTaskCounters[ 0 ] ), 1, &( xCreatedTasks[ evtLOWEST_PRIORITY_INDEX ] ) );
+ xTaskCreate( prvMultiEventTask, "Event1", evtSTACK_SIZE, ( void * ) &( xTaskCounters[ 1 ] ), 2, &( xCreatedTasks[ evtMEDIUM_PRIORITY_INDEX ] ) );
+ xTaskCreate( prvMultiEventTask, "Event2", evtSTACK_SIZE, ( void * ) &( xTaskCounters[ 2 ] ), 3, &( xCreatedTasks[ evtHIGHEST_PRIORITY_INDEX_1 ] ) );
+ xTaskCreate( prvMultiEventTask, "Event3", evtSTACK_SIZE, ( void * ) &( xTaskCounters[ 3 ] ), 3, &( xCreatedTasks[ evtHIGHEST_PRIORITY_INDEX_2 ] ) );
+}
+/*-----------------------------------------------------------*/
+
+static void prvMultiEventTask( void *pvParameters )
+{
+portBASE_TYPE *pxCounter;
+unsigned portBASE_TYPE uxDummy;
+const portCHAR * const pcTaskStartMsg = "Multi event task started.\r\n";
+
+ /* The variable this task will increment is passed in as a parameter. */
+ pxCounter = ( portBASE_TYPE * ) pvParameters;
+
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ for( ;; )
+ {
+ /* Block on the queue. */
+ if( xQueueReceive( xQueue, &uxDummy, portMAX_DELAY ) )
+ {
+ /* We unblocked by reading the queue - so simply increment
+ the counter specific to this task instance. */
+ ( *pxCounter )++;
+ }
+ else
+ {
+ xHealthStatus = pdFAIL;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvEventControllerTask( void *pvParameters )
+{
+const portCHAR * const pcTaskStartMsg = "Multi event controller task started.\r\n";
+portBASE_TYPE xDummy = 0;
+
+ /* Just to stop warnings. */
+ ( void ) pvParameters;
+
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ for( ;; )
+ {
+ /* All tasks are blocked on the queue. When a message is posted one of
+ the two tasks that share the highest priority should unblock to read
+ the queue. The next message written should unblock the other task with
+ the same high priority, and so on in order. No other task should
+ unblock to read data as they have lower priorities. */
+
+ prvCheckTaskCounters( evtHIGHEST_PRIORITY_INDEX_1, 1 );
+ prvCheckTaskCounters( evtHIGHEST_PRIORITY_INDEX_2, 1 );
+ prvCheckTaskCounters( evtHIGHEST_PRIORITY_INDEX_1, 1 );
+ prvCheckTaskCounters( evtHIGHEST_PRIORITY_INDEX_2, 1 );
+ prvCheckTaskCounters( evtHIGHEST_PRIORITY_INDEX_1, 1 );
+
+ /* For the rest of these tests we don't need the second 'highest'
+ priority task - so it is suspended. */
+ vTaskSuspend( xCreatedTasks[ evtHIGHEST_PRIORITY_INDEX_2 ] );
+
+
+
+ /* Now suspend the other highest priority task. The medium priority
+ task will then be the task with the highest priority that remains
+ blocked on the queue. */
+ vTaskSuspend( xCreatedTasks[ evtHIGHEST_PRIORITY_INDEX_1 ] );
+
+ /* This time, when we post onto the queue we will expect the medium
+ priority task to unblock and preempt us. */
+ prvCheckTaskCounters( evtMEDIUM_PRIORITY_INDEX, 1 );
+
+ /* Now try resuming the highest priority task while the scheduler is
+ suspended. The task should start executing as soon as the scheduler
+ is resumed - therefore when we post to the queue again, the highest
+ priority task should again preempt us. */
+ vTaskSuspendAll();
+ vTaskResume( xCreatedTasks[ evtHIGHEST_PRIORITY_INDEX_1 ] );
+ xTaskResumeAll();
+ prvCheckTaskCounters( evtHIGHEST_PRIORITY_INDEX_1, 1 );
+
+ /* Now we are going to suspend the high and medium priority tasks. The
+ low priority task should then preempt us. Again the task suspension is
+ done with the whole scheduler suspended just for test purposes. */
+ vTaskSuspendAll();
+ vTaskSuspend( xCreatedTasks[ evtHIGHEST_PRIORITY_INDEX_1 ] );
+ vTaskSuspend( xCreatedTasks[ evtMEDIUM_PRIORITY_INDEX ] );
+ xTaskResumeAll();
+ prvCheckTaskCounters( evtLOWEST_PRIORITY_INDEX, 1 );
+
+ /* Do the same basic test another few times - selectively suspending
+ and resuming tasks and each time calling prvCheckTaskCounters() passing
+ to the function the number of the task we expected to be unblocked by
+ the post. */
+
+ vTaskResume( xCreatedTasks[ evtHIGHEST_PRIORITY_INDEX_1 ] );
+ prvCheckTaskCounters( evtHIGHEST_PRIORITY_INDEX_1, 1 );
+
+ vTaskSuspendAll(); /* Just for test. */
+ vTaskSuspendAll(); /* Just for test. */
+ vTaskSuspendAll(); /* Just for even more test. */
+ vTaskSuspend( xCreatedTasks[ evtHIGHEST_PRIORITY_INDEX_1 ] );
+ xTaskResumeAll();
+ xTaskResumeAll();
+ xTaskResumeAll();
+ prvCheckTaskCounters( evtLOWEST_PRIORITY_INDEX, 1 );
+
+ vTaskResume( xCreatedTasks[ evtMEDIUM_PRIORITY_INDEX ] );
+ prvCheckTaskCounters( evtMEDIUM_PRIORITY_INDEX, 1 );
+
+ vTaskResume( xCreatedTasks[ evtHIGHEST_PRIORITY_INDEX_1 ] );
+ prvCheckTaskCounters( evtHIGHEST_PRIORITY_INDEX_1, 1 );
+
+ /* Now a slight change, first suspend all tasks. */
+ vTaskSuspend( xCreatedTasks[ evtHIGHEST_PRIORITY_INDEX_1 ] );
+ vTaskSuspend( xCreatedTasks[ evtMEDIUM_PRIORITY_INDEX ] );
+ vTaskSuspend( xCreatedTasks[ evtLOWEST_PRIORITY_INDEX ] );
+
+ /* Now when we resume the low priority task and write to the queue 3
+ times. We expect the low priority task to service the queue three
+ times. */
+ vTaskResume( xCreatedTasks[ evtLOWEST_PRIORITY_INDEX ] );
+ prvCheckTaskCounters( evtLOWEST_PRIORITY_INDEX, evtQUEUE_LENGTH );
+
+ /* Again suspend all tasks (only the low priority task is not suspended
+ already). */
+ vTaskSuspend( xCreatedTasks[ evtLOWEST_PRIORITY_INDEX ] );
+
+ /* This time we are going to suspend the scheduler, resume the low
+ priority task, then resume the high priority task. In this state we
+ will write to the queue three times. When the scheduler is resumed
+ we expect the high priority task to service all three messages. */
+ vTaskSuspendAll();
+ {
+ vTaskResume( xCreatedTasks[ evtLOWEST_PRIORITY_INDEX ] );
+ vTaskResume( xCreatedTasks[ evtHIGHEST_PRIORITY_INDEX_1 ] );
+
+ for( xDummy = 0; xDummy < evtQUEUE_LENGTH; xDummy++ )
+ {
+ if( xQueueSend( xQueue, &xDummy, evtNO_DELAY ) != pdTRUE )
+ {
+ xHealthStatus = pdFAIL;
+ }
+ }
+
+ /* The queue should not have been serviced yet!. The scheduler
+ is still suspended. */
+ if( memcmp( ( void * ) xExpectedTaskCounters, ( void * ) xTaskCounters, sizeof( xExpectedTaskCounters ) ) )
+ {
+ xHealthStatus = pdFAIL;
+ }
+ }
+ xTaskResumeAll();
+
+ /* We should have been preempted by resuming the scheduler - so by the
+ time we are running again we expect the high priority task to have
+ removed three items from the queue. */
+ xExpectedTaskCounters[ evtHIGHEST_PRIORITY_INDEX_1 ] += evtQUEUE_LENGTH;
+ if( memcmp( ( void * ) xExpectedTaskCounters, ( void * ) xTaskCounters, sizeof( xExpectedTaskCounters ) ) )
+ {
+ xHealthStatus = pdFAIL;
+ }
+
+ /* The medium priority and second high priority tasks are still
+ suspended. Make sure to resume them before starting again. */
+ vTaskResume( xCreatedTasks[ evtMEDIUM_PRIORITY_INDEX ] );
+ vTaskResume( xCreatedTasks[ evtHIGHEST_PRIORITY_INDEX_2 ] );
+
+ /* Just keep incrementing to show the task is still executing. */
+ xCheckVariable++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvCheckTaskCounters( portBASE_TYPE xExpectedTask, portBASE_TYPE xIncrement )
+{
+portBASE_TYPE xDummy = 0;
+
+ /* Write to the queue the requested number of times. The data written is
+ not important. */
+ for( xDummy = 0; xDummy < xIncrement; xDummy++ )
+ {
+ if( xQueueSend( xQueue, &xDummy, evtNO_DELAY ) != pdTRUE )
+ {
+ /* Did not expect to ever find the queue full. */
+ xHealthStatus = pdFAIL;
+ }
+ }
+
+ /* All the tasks blocked on the queue have a priority higher than the
+ controlling task. Writing to the queue will therefore have caused this
+ task to be preempted. By the time this line executes the event task will
+ have executed and incremented its counter. Increment the expected counter
+ to the same value. */
+ ( xExpectedTaskCounters[ xExpectedTask ] ) += xIncrement;
+
+ /* Check the actual counts and expected counts really are the same. */
+ if( memcmp( ( void * ) xExpectedTaskCounters, ( void * ) xTaskCounters, sizeof( xExpectedTaskCounters ) ) )
+ {
+ /* The counters were not the same. This means a task we did not expect
+ to unblock actually did unblock. */
+ xHealthStatus = pdFAIL;
+ }
+}
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE xAreMultiEventTasksStillRunning( void )
+{
+static portBASE_TYPE xPreviousCheckVariable = 0;
+
+ /* Called externally to periodically check that this test is still
+ operational. */
+
+ if( xPreviousCheckVariable == xCheckVariable )
+ {
+ xHealthStatus = pdFAIL;
+ }
+
+ xPreviousCheckVariable = xCheckVariable;
+
+ return xHealthStatus;
+}
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/semtest.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/semtest.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/semtest.c (revision 14)
@@ -0,0 +1,305 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/**
+ * Creates two sets of two tasks. The tasks within a set share a variable, access
+ * to which is guarded by a semaphore.
+ *
+ * Each task starts by attempting to obtain the semaphore. On obtaining a
+ * semaphore a task checks to ensure that the guarded variable has an expected
+ * value. It then clears the variable to zero before counting it back up to the
+ * expected value in increments of 1. After each increment the variable is checked
+ * to ensure it contains the value to which it was just set. When the starting
+ * value is again reached the task releases the semaphore giving the other task in
+ * the set a chance to do exactly the same thing. The starting value is high
+ * enough to ensure that a tick is likely to occur during the incrementing loop.
+ *
+ * An error is flagged if at any time during the process a shared variable is
+ * found to have a value other than that expected. Such an occurrence would
+ * suggest an error in the mutual exclusion mechanism by which access to the
+ * variable is restricted.
+ *
+ * The first set of two tasks poll their semaphore. The second set use blocking
+ * calls.
+ *
+ * \page SemTestC semtest.c
+ * \ingroup DemoFiles
+ *
+ */
+
+/*
+Changes from V1.2.0:
+
+ + The tasks that operate at the idle priority now use a lower expected
+ count than those running at a higher priority. This prevents the low
+ priority tasks from signaling an error because they have not been
+ scheduled enough time for each of them to count the shared variable to
+ the high value.
+
+Changes from V2.0.0
+
+ + Delay periods are now specified using variables and constants of
+ portTickType rather than unsigned portLONG.
+
+Changes from V2.1.1
+
+ + The stack size now uses configMINIMAL_STACK_SIZE.
+ + String constants made file scope to decrease stack depth on 8051 port.
+*/
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* Demo app include files. */
+#include "semtest.h"
+#include "print.h"
+
+/* The value to which the shared variables are counted. */
+#define semtstBLOCKING_EXPECTED_VALUE ( ( unsigned portLONG ) 0xfff )
+#define semtstNON_BLOCKING_EXPECTED_VALUE ( ( unsigned portLONG ) 0xff )
+
+#define semtstSTACK_SIZE configMINIMAL_STACK_SIZE
+
+#define semtstNUM_TASKS ( 4 )
+
+#define semtstDELAY_FACTOR ( ( portTickType ) 10 )
+
+/* The task function as described at the top of the file. */
+static void prvSemaphoreTest( void *pvParameters );
+
+/* Structure used to pass parameters to each task. */
+typedef struct SEMAPHORE_PARAMETERS
+{
+ xSemaphoreHandle xSemaphore;
+ volatile unsigned portLONG *pulSharedVariable;
+ portTickType xBlockTime;
+} xSemaphoreParameters;
+
+/* Variables used to check that all the tasks are still running without errors. */
+static volatile portSHORT sCheckVariables[ semtstNUM_TASKS ] = { 0 };
+static volatile portSHORT sNextCheckVariable = 0;
+
+/* Strings to print if USE_STDIO is defined. */
+const portCHAR * const pcPollingSemaphoreTaskError = "Guarded shared variable in unexpected state.\r\n";
+const portCHAR * const pcSemaphoreTaskStart = "Guarded shared variable task started.\r\n";
+
+/*-----------------------------------------------------------*/
+
+void vStartSemaphoreTasks( unsigned portBASE_TYPE uxPriority )
+{
+xSemaphoreParameters *pxFirstSemaphoreParameters, *pxSecondSemaphoreParameters;
+const portTickType xBlockTime = ( portTickType ) 100;
+
+ /* Create the structure used to pass parameters to the first two tasks. */
+ pxFirstSemaphoreParameters = ( xSemaphoreParameters * ) pvPortMalloc( sizeof( xSemaphoreParameters ) );
+
+ if( pxFirstSemaphoreParameters != NULL )
+ {
+ /* Create the semaphore used by the first two tasks. */
+ vSemaphoreCreateBinary( pxFirstSemaphoreParameters->xSemaphore );
+
+ if( pxFirstSemaphoreParameters->xSemaphore != NULL )
+ {
+ /* Create the variable which is to be shared by the first two tasks. */
+ pxFirstSemaphoreParameters->pulSharedVariable = ( unsigned portLONG * ) pvPortMalloc( sizeof( unsigned portLONG ) );
+
+ /* Initialise the share variable to the value the tasks expect. */
+ *( pxFirstSemaphoreParameters->pulSharedVariable ) = semtstNON_BLOCKING_EXPECTED_VALUE;
+
+ /* The first two tasks do not block on semaphore calls. */
+ pxFirstSemaphoreParameters->xBlockTime = ( portTickType ) 0;
+
+ /* Spawn the first two tasks. As they poll they operate at the idle priority. */
+ xTaskCreate( prvSemaphoreTest, "PolSEM1", semtstSTACK_SIZE, ( void * ) pxFirstSemaphoreParameters, tskIDLE_PRIORITY, ( xTaskHandle * ) NULL );
+ xTaskCreate( prvSemaphoreTest, "PolSEM2", semtstSTACK_SIZE, ( void * ) pxFirstSemaphoreParameters, tskIDLE_PRIORITY, ( xTaskHandle * ) NULL );
+ }
+ }
+
+ /* Do exactly the same to create the second set of tasks, only this time
+ provide a block time for the semaphore calls. */
+ pxSecondSemaphoreParameters = ( xSemaphoreParameters * ) pvPortMalloc( sizeof( xSemaphoreParameters ) );
+ if( pxSecondSemaphoreParameters != NULL )
+ {
+ vSemaphoreCreateBinary( pxSecondSemaphoreParameters->xSemaphore );
+
+ if( pxSecondSemaphoreParameters->xSemaphore != NULL )
+ {
+ pxSecondSemaphoreParameters->pulSharedVariable = ( unsigned portLONG * ) pvPortMalloc( sizeof( unsigned portLONG ) );
+ *( pxSecondSemaphoreParameters->pulSharedVariable ) = semtstBLOCKING_EXPECTED_VALUE;
+ pxSecondSemaphoreParameters->xBlockTime = xBlockTime / portTICK_RATE_MS;
+
+ xTaskCreate( prvSemaphoreTest, "BlkSEM1", semtstSTACK_SIZE, ( void * ) pxSecondSemaphoreParameters, uxPriority, ( xTaskHandle * ) NULL );
+ xTaskCreate( prvSemaphoreTest, "BlkSEM2", semtstSTACK_SIZE, ( void * ) pxSecondSemaphoreParameters, uxPriority, ( xTaskHandle * ) NULL );
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvSemaphoreTest( void *pvParameters )
+{
+xSemaphoreParameters *pxParameters;
+volatile unsigned portLONG *pulSharedVariable, ulExpectedValue;
+unsigned portLONG ulCounter;
+portSHORT sError = pdFALSE, sCheckVariableToUse;
+
+ /* See which check variable to use. sNextCheckVariable is not semaphore
+ protected! */
+ portENTER_CRITICAL();
+ sCheckVariableToUse = sNextCheckVariable;
+ sNextCheckVariable++;
+ portEXIT_CRITICAL();
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcSemaphoreTaskStart );
+
+ /* A structure is passed in as the parameter. This contains the shared
+ variable being guarded. */
+ pxParameters = ( xSemaphoreParameters * ) pvParameters;
+ pulSharedVariable = pxParameters->pulSharedVariable;
+
+ /* If we are blocking we use a much higher count to ensure loads of context
+ switches occur during the count. */
+ if( pxParameters->xBlockTime > ( portTickType ) 0 )
+ {
+ ulExpectedValue = semtstBLOCKING_EXPECTED_VALUE;
+ }
+ else
+ {
+ ulExpectedValue = semtstNON_BLOCKING_EXPECTED_VALUE;
+ }
+
+ for( ;; )
+ {
+ /* Try to obtain the semaphore. */
+ if( xSemaphoreTake( pxParameters->xSemaphore, pxParameters->xBlockTime ) == pdPASS )
+ {
+ /* We have the semaphore and so expect any other tasks using the
+ shared variable to have left it in the state we expect to find
+ it. */
+ if( *pulSharedVariable != ulExpectedValue )
+ {
+ vPrintDisplayMessage( &pcPollingSemaphoreTaskError );
+ sError = pdTRUE;
+ }
+
+ /* Clear the variable, then count it back up to the expected value
+ before releasing the semaphore. Would expect a context switch or
+ two during this time. */
+ for( ulCounter = ( unsigned portLONG ) 0; ulCounter <= ulExpectedValue; ulCounter++ )
+ {
+ *pulSharedVariable = ulCounter;
+ if( *pulSharedVariable != ulCounter )
+ {
+ if( sError == pdFALSE )
+ {
+ vPrintDisplayMessage( &pcPollingSemaphoreTaskError );
+ }
+ sError = pdTRUE;
+ }
+ }
+
+ /* Release the semaphore, and if no errors have occurred increment the check
+ variable. */
+ if( xSemaphoreGive( pxParameters->xSemaphore ) == pdFALSE )
+ {
+ vPrintDisplayMessage( &pcPollingSemaphoreTaskError );
+ sError = pdTRUE;
+ }
+
+ if( sError == pdFALSE )
+ {
+ if( sCheckVariableToUse < semtstNUM_TASKS )
+ {
+ ( sCheckVariables[ sCheckVariableToUse ] )++;
+ }
+ }
+
+ /* If we have a block time then we are running at a priority higher
+ than the idle priority. This task takes a long time to complete
+ a cycle (deliberately so to test the guarding) so will be starving
+ out lower priority tasks. Block for some time to allow give lower
+ priority tasks some processor time. */
+ vTaskDelay( pxParameters->xBlockTime * semtstDELAY_FACTOR );
+ }
+ else
+ {
+ if( pxParameters->xBlockTime == ( portTickType ) 0 )
+ {
+ /* We have not got the semaphore yet, so no point using the
+ processor. We are not blocking when attempting to obtain the
+ semaphore. */
+ taskYIELD();
+ }
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreSemaphoreTasksStillRunning( void )
+{
+static portSHORT sLastCheckVariables[ semtstNUM_TASKS ] = { 0 };
+portBASE_TYPE xTask, xReturn = pdTRUE;
+
+ for( xTask = 0; xTask < semtstNUM_TASKS; xTask++ )
+ {
+ if( sLastCheckVariables[ xTask ] == sCheckVariables[ xTask ] )
+ {
+ xReturn = pdFALSE;
+ }
+
+ sLastCheckVariables[ xTask ] = sCheckVariables[ xTask ];
+ }
+
+ return xReturn;
+}
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/death.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/death.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/death.c (revision 14)
@@ -0,0 +1,223 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/**
+ * Create a single persistent task which periodically dynamically creates another
+ * four tasks. The original task is called the creator task, the four tasks it
+ * creates are called suicidal tasks.
+ *
+ * Two of the created suicidal tasks kill one other suicidal task before killing
+ * themselves - leaving just the original task remaining.
+ *
+ * The creator task must be spawned after all of the other demo application tasks
+ * as it keeps a check on the number of tasks under the scheduler control. The
+ * number of tasks it expects to see running should never be greater than the
+ * number of tasks that were in existence when the creator task was spawned, plus
+ * one set of four suicidal tasks. If this number is exceeded an error is flagged.
+ *
+ * \page DeathC death.c
+ * \ingroup DemoFiles
+ *
+ */
+
+/*
+Changes from V2.0.0
+
+ + Delay periods are now specified using variables and constants of
+ portTickType rather than unsigned portLONG.
+*/
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* Demo program include files. */
+#include "death.h"
+#include "print.h"
+
+#define deathSTACK_SIZE ( ( unsigned portSHORT ) 512 )
+
+/* The task originally created which is responsible for periodically dynamically
+creating another four tasks. */
+static void vCreateTasks( void *pvParameters );
+
+/* The task function of the dynamically created tasks. */
+static void vSuicidalTask( void *pvParameters );
+
+/* A variable which is incremented every time the dynamic tasks are created. This
+is used to check that the task is still running. */
+static volatile portSHORT sCreationCount = 0;
+
+/* Used to store the number of tasks that were originally running so the creator
+task can tell if any of the suicidal tasks have failed to die. */
+static volatile unsigned portBASE_TYPE uxTasksRunningAtStart = 0;
+static const unsigned portBASE_TYPE uxMaxNumberOfExtraTasksRunning = 5;
+
+/* Used to store a handle to the tasks that should be killed by a suicidal task,
+before it kills itself. */
+xTaskHandle xCreatedTask1, xCreatedTask2;
+
+/*-----------------------------------------------------------*/
+
+void vCreateSuicidalTasks( unsigned portBASE_TYPE uxPriority )
+{
+unsigned portBASE_TYPE *puxPriority;
+
+ /* Create the Creator tasks - passing in as a parameter the priority at which
+ the suicidal tasks should be created. */
+ puxPriority = ( unsigned portBASE_TYPE * ) pvPortMalloc( sizeof( unsigned portBASE_TYPE ) );
+ *puxPriority = uxPriority;
+
+ xTaskCreate( vCreateTasks, "CREATOR", deathSTACK_SIZE, ( void * ) puxPriority, uxPriority, NULL );
+
+ /* Record the number of tasks that are running now so we know if any of the
+ suicidal tasks have failed to be killed. */
+ uxTasksRunningAtStart = uxTaskGetNumberOfTasks();
+}
+/*-----------------------------------------------------------*/
+
+static void vSuicidalTask( void *pvParameters )
+{
+portDOUBLE d1, d2;
+xTaskHandle xTaskToKill;
+const portTickType xDelay = ( portTickType ) 500 / portTICK_RATE_MS;
+
+ if( pvParameters != NULL )
+ {
+ /* This task is periodically created four times. Tow created tasks are
+ passed a handle to the other task so it can kill it before killing itself.
+ The other task is passed in null. */
+ xTaskToKill = *( xTaskHandle* )pvParameters;
+ }
+ else
+ {
+ xTaskToKill = NULL;
+ }
+
+ for( ;; )
+ {
+ /* Do something random just to use some stack and registers. */
+ d1 = 2.4;
+ d2 = 89.2;
+ d2 *= d1;
+ vTaskDelay( xDelay );
+
+ if( xTaskToKill != NULL )
+ {
+ /* Make sure the other task has a go before we delete it. */
+ vTaskDelay( ( portTickType ) 0 );
+ /* Kill the other task that was created by vCreateTasks(). */
+ vTaskDelete( xTaskToKill );
+ /* Kill ourselves. */
+ vTaskDelete( NULL );
+ }
+ }
+}/*lint !e818 !e550 Function prototype must be as per standard for task functions. */
+/*-----------------------------------------------------------*/
+
+static void vCreateTasks( void *pvParameters )
+{
+const portTickType xDelay = ( portTickType ) 1000 / portTICK_RATE_MS;
+unsigned portBASE_TYPE uxPriority;
+const portCHAR * const pcTaskStartMsg = "Create task started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ uxPriority = *( unsigned portBASE_TYPE * ) pvParameters;
+ vPortFree( pvParameters );
+
+ for( ;; )
+ {
+ /* Just loop round, delaying then creating the four suicidal tasks. */
+ vTaskDelay( xDelay );
+
+ xTaskCreate( vSuicidalTask, "SUICIDE1", deathSTACK_SIZE, NULL, uxPriority, &xCreatedTask1 );
+ xTaskCreate( vSuicidalTask, "SUICIDE2", deathSTACK_SIZE, &xCreatedTask1, uxPriority, NULL );
+
+ xTaskCreate( vSuicidalTask, "SUICIDE1", deathSTACK_SIZE, NULL, uxPriority, &xCreatedTask2 );
+ xTaskCreate( vSuicidalTask, "SUICIDE2", deathSTACK_SIZE, &xCreatedTask2, uxPriority, NULL );
+
+ ++sCreationCount;
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that the creator task is still running and that there
+are not any more than four extra tasks. */
+portBASE_TYPE xIsCreateTaskStillRunning( void )
+{
+static portSHORT sLastCreationCount = 0;
+portSHORT sReturn = pdTRUE;
+unsigned portBASE_TYPE uxTasksRunningNow;
+
+ if( sLastCreationCount == sCreationCount )
+ {
+ sReturn = pdFALSE;
+ }
+
+ uxTasksRunningNow = uxTaskGetNumberOfTasks();
+
+ if( uxTasksRunningNow < uxTasksRunningAtStart )
+ {
+ sReturn = pdFALSE;
+ }
+ else if( ( uxTasksRunningNow - uxTasksRunningAtStart ) > uxMaxNumberOfExtraTasksRunning )
+ {
+ sReturn = pdFALSE;
+ }
+ else
+ {
+ /* Everything is okay. */
+ }
+
+ return sReturn;
+}
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/PollQ.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/PollQ.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/PollQ.c (revision 14)
@@ -0,0 +1,240 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+/**
+ * This is a very simple queue test. See the BlockQ. c documentation for a more
+ * comprehensive version.
+ *
+ * Creates two tasks that communicate over a single queue. One task acts as a
+ * producer, the other a consumer.
+ *
+ * The producer loops for three iteration, posting an incrementing number onto the
+ * queue each cycle. It then delays for a fixed period before doing exactly the
+ * same again.
+ *
+ * The consumer loops emptying the queue. Each item removed from the queue is
+ * checked to ensure it contains the expected value. When the queue is empty it
+ * blocks for a fixed period, then does the same again.
+ *
+ * All queue access is performed without blocking. The consumer completely empties
+ * the queue each time it runs so the producer should never find the queue full.
+ *
+ * An error is flagged if the consumer obtains an unexpected value or the producer
+ * find the queue is full.
+ *
+ * \page PollQC pollQ.c
+ * \ingroup DemoFiles
+ *
+ */
+
+/*
+Changes from V2.0.0
+
+ + Delay periods are now specified using variables and constants of
+ portTickType rather than unsigned portLONG.
+*/
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "print.h"
+
+/* Demo program include files. */
+#include "PollQ.h"
+
+#define pollqSTACK_SIZE ( ( unsigned portSHORT ) configMINIMAL_STACK_SIZE )
+
+/* The task that posts the incrementing number onto the queue. */
+static void vPolledQueueProducer( void *pvParameters );
+
+/* The task that empties the queue. */
+static void vPolledQueueConsumer( void *pvParameters );
+
+/* Variables that are used to check that the tasks are still running with no errors. */
+static volatile portSHORT sPollingConsumerCount = 0, sPollingProducerCount = 0;
+/*-----------------------------------------------------------*/
+
+void vStartPolledQueueTasks( unsigned portBASE_TYPE uxPriority )
+{
+static xQueueHandle xPolledQueue;
+const unsigned portBASE_TYPE uxQueueSize = 10;
+
+ /* Create the queue used by the producer and consumer. */
+ xPolledQueue = xQueueCreate( uxQueueSize, ( unsigned portBASE_TYPE ) sizeof( unsigned portSHORT ) );
+
+ /* Spawn the producer and consumer. */
+ xTaskCreate( vPolledQueueConsumer, "QConsNB", pollqSTACK_SIZE, ( void * ) &xPolledQueue, uxPriority, NULL );
+ xTaskCreate( vPolledQueueProducer, "QProdNB", pollqSTACK_SIZE, ( void * ) &xPolledQueue, uxPriority, NULL );
+}
+/*-----------------------------------------------------------*/
+
+static void vPolledQueueProducer( void *pvParameters )
+{
+unsigned portSHORT usValue = 0, usLoop;
+xQueueHandle *pxQueue;
+const portTickType xDelay = ( portTickType ) 200 / portTICK_RATE_MS;
+const unsigned portSHORT usNumToProduce = 3;
+const portCHAR * const pcTaskStartMsg = "Polled queue producer started.\r\n";
+const portCHAR * const pcTaskErrorMsg = "Could not post on polled queue.\r\n";
+portSHORT sError = pdFALSE;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ /* The queue being used is passed in as the parameter. */
+ pxQueue = ( xQueueHandle * ) pvParameters;
+
+ for( ;; )
+ {
+ for( usLoop = 0; usLoop < usNumToProduce; ++usLoop )
+ {
+ /* Send an incrementing number on the queue without blocking. */
+ if( xQueueSendToBack( *pxQueue, ( void * ) &usValue, ( portTickType ) 0 ) != pdPASS )
+ {
+ /* We should never find the queue full - this is an error. */
+ vPrintDisplayMessage( &pcTaskErrorMsg );
+ sError = pdTRUE;
+ }
+ else
+ {
+ if( sError == pdFALSE )
+ {
+ /* If an error has ever been recorded we stop incrementing the
+ check variable. */
+ ++sPollingProducerCount;
+ }
+
+ /* Update the value we are going to post next time around. */
+ ++usValue;
+ }
+ }
+
+ /* Wait before we start posting again to ensure the consumer runs and
+ empties the queue. */
+ vTaskDelay( xDelay );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vPolledQueueConsumer( void *pvParameters )
+{
+unsigned portSHORT usData, usExpectedValue = 0;
+xQueueHandle *pxQueue;
+const portTickType xDelay = ( portTickType ) 200 / portTICK_RATE_MS;
+const portCHAR * const pcTaskStartMsg = "Polled queue consumer started.\r\n";
+const portCHAR * const pcTaskErrorMsg = "Incorrect value received on polled queue.\r\n";
+portSHORT sError = pdFALSE;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ /* The queue being used is passed in as the parameter. */
+ pxQueue = ( xQueueHandle * ) pvParameters;
+
+ for( ;; )
+ {
+ /* Loop until the queue is empty. */
+ while( uxQueueMessagesWaiting( *pxQueue ) )
+ {
+ if( xQueueReceive( *pxQueue, &usData, ( portTickType ) 0 ) == pdPASS )
+ {
+ if( usData != usExpectedValue )
+ {
+ /* This is not what we expected to receive so an error has
+ occurred. */
+ vPrintDisplayMessage( &pcTaskErrorMsg );
+ sError = pdTRUE;
+ /* Catch-up to the value we received so our next expected value
+ should again be correct. */
+ usExpectedValue = usData;
+ }
+ else
+ {
+ if( sError == pdFALSE )
+ {
+ /* Only increment the check variable if no errors have
+ occurred. */
+ ++sPollingConsumerCount;
+ }
+ }
+ ++usExpectedValue;
+ }
+ }
+
+ /* Now the queue is empty we block, allowing the producer to place more
+ items in the queue. */
+ vTaskDelay( xDelay );
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running with no errors. */
+portBASE_TYPE xArePollingQueuesStillRunning( void )
+{
+static portSHORT sLastPollingConsumerCount = 0, sLastPollingProducerCount = 0;
+portBASE_TYPE xReturn;
+
+ if( ( sLastPollingConsumerCount == sPollingConsumerCount ) ||
+ ( sLastPollingProducerCount == sPollingProducerCount )
+ )
+ {
+ xReturn = pdFALSE;
+ }
+ else
+ {
+ xReturn = pdTRUE;
+ }
+
+ sLastPollingConsumerCount = sPollingConsumerCount;
+ sLastPollingProducerCount = sPollingProducerCount;
+
+ return xReturn;
+}
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/BlockQ.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/BlockQ.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/BlockQ.c (revision 14)
@@ -0,0 +1,328 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/**
+ * Creates six tasks that operate on three queues as follows:
+ *
+ * The first two tasks send and receive an incrementing number to/from a queue.
+ * One task acts as a producer and the other as the consumer. The consumer is a
+ * higher priority than the producer and is set to block on queue reads. The queue
+ * only has space for one item - as soon as the producer posts a message on the
+ * queue the consumer will unblock, pre-empt the producer, and remove the item.
+ *
+ * The second two tasks work the other way around. Again the queue used only has
+ * enough space for one item. This time the consumer has a lower priority than the
+ * producer. The producer will try to post on the queue blocking when the queue is
+ * full. When the consumer wakes it will remove the item from the queue, causing
+ * the producer to unblock, pre-empt the consumer, and immediately re-fill the
+ * queue.
+ *
+ * The last two tasks use the same queue producer and consumer functions. This time the queue has
+ * enough space for lots of items and the tasks operate at the same priority. The
+ * producer will execute, placing items into the queue. The consumer will start
+ * executing when either the queue becomes full (causing the producer to block) or
+ * a context switch occurs (tasks of the same priority will time slice).
+ *
+ * \page BlockQC blockQ.c
+ * \ingroup DemoFiles
+ *
+ */
+
+/*
+Changes from V1.00:
+
+ + Reversed the priority and block times of the second two demo tasks so
+ they operate as per the description above.
+
+Changes from V2.0.0
+
+ + Delay periods are now specified using variables and constants of
+ portTickType rather than unsigned portLONG.
+
+Changes from V4.0.2
+
+ + The second set of tasks were created the wrong way around. This has been
+ corrected.
+*/
+
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+/* Demo program include files. */
+#include "BlockQ.h"
+#include "print.h"
+
+#define blckqSTACK_SIZE ( ( unsigned portSHORT ) configMINIMAL_STACK_SIZE )
+#define blckqNUM_TASK_SETS ( 3 )
+
+/* Structure used to pass parameters to the blocking queue tasks. */
+typedef struct BLOCKING_QUEUE_PARAMETERS
+{
+ xQueueHandle xQueue; /*< The queue to be used by the task. */
+ portTickType xBlockTime; /*< The block time to use on queue reads/writes. */
+ volatile portSHORT *psCheckVariable; /*< Incremented on each successful cycle to check the task is still running. */
+} xBlockingQueueParameters;
+
+/* Task function that creates an incrementing number and posts it on a queue. */
+static void vBlockingQueueProducer( void *pvParameters );
+
+/* Task function that removes the incrementing number from a queue and checks that
+it is the expected number. */
+static void vBlockingQueueConsumer( void *pvParameters );
+
+/* Variables which are incremented each time an item is removed from a queue, and
+found to be the expected value.
+These are used to check that the tasks are still running. */
+static volatile portSHORT sBlockingConsumerCount[ blckqNUM_TASK_SETS ] = { ( portSHORT ) 0, ( portSHORT ) 0, ( portSHORT ) 0 };
+
+/* Variable which are incremented each time an item is posted on a queue. These
+are used to check that the tasks are still running. */
+static volatile portSHORT sBlockingProducerCount[ blckqNUM_TASK_SETS ] = { ( portSHORT ) 0, ( portSHORT ) 0, ( portSHORT ) 0 };
+
+/*-----------------------------------------------------------*/
+
+void vStartBlockingQueueTasks( unsigned portBASE_TYPE uxPriority )
+{
+xBlockingQueueParameters *pxQueueParameters1, *pxQueueParameters2;
+xBlockingQueueParameters *pxQueueParameters3, *pxQueueParameters4;
+xBlockingQueueParameters *pxQueueParameters5, *pxQueueParameters6;
+const unsigned portBASE_TYPE uxQueueSize1 = 1, uxQueueSize5 = 5;
+const portTickType xBlockTime = ( portTickType ) 1000 / portTICK_RATE_MS;
+const portTickType xDontBlock = ( portTickType ) 0;
+
+ /* Create the first two tasks as described at the top of the file. */
+
+ /* First create the structure used to pass parameters to the consumer tasks. */
+ pxQueueParameters1 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
+
+ /* Create the queue used by the first two tasks to pass the incrementing number.
+ Pass a pointer to the queue in the parameter structure. */
+ pxQueueParameters1->xQueue = xQueueCreate( uxQueueSize1, ( unsigned portBASE_TYPE ) sizeof( unsigned portSHORT ) );
+
+ /* The consumer is created first so gets a block time as described above. */
+ pxQueueParameters1->xBlockTime = xBlockTime;
+
+ /* Pass in the variable that this task is going to increment so we can check it
+ is still running. */
+ pxQueueParameters1->psCheckVariable = &( sBlockingConsumerCount[ 0 ] );
+
+ /* Create the structure used to pass parameters to the producer task. */
+ pxQueueParameters2 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
+
+ /* Pass the queue to this task also, using the parameter structure. */
+ pxQueueParameters2->xQueue = pxQueueParameters1->xQueue;
+
+ /* The producer is not going to block - as soon as it posts the consumer will
+ wake and remove the item so the producer should always have room to post. */
+ pxQueueParameters2->xBlockTime = xDontBlock;
+
+ /* Pass in the variable that this task is going to increment so we can check
+ it is still running. */
+ pxQueueParameters2->psCheckVariable = &( sBlockingProducerCount[ 0 ] );
+
+
+ /* Note the producer has a lower priority than the consumer when the tasks are
+ spawned. */
+ xTaskCreate( vBlockingQueueConsumer, "QConsB1", blckqSTACK_SIZE, ( void * ) pxQueueParameters1, uxPriority, NULL );
+ xTaskCreate( vBlockingQueueProducer, "QProdB2", blckqSTACK_SIZE, ( void * ) pxQueueParameters2, tskIDLE_PRIORITY, NULL );
+
+
+
+ /* Create the second two tasks as described at the top of the file. This uses
+ the same mechanism but reverses the task priorities. */
+
+ pxQueueParameters3 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
+ pxQueueParameters3->xQueue = xQueueCreate( uxQueueSize1, ( unsigned portBASE_TYPE ) sizeof( unsigned portSHORT ) );
+ pxQueueParameters3->xBlockTime = xDontBlock;
+ pxQueueParameters3->psCheckVariable = &( sBlockingProducerCount[ 1 ] );
+
+ pxQueueParameters4 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
+ pxQueueParameters4->xQueue = pxQueueParameters3->xQueue;
+ pxQueueParameters4->xBlockTime = xBlockTime;
+ pxQueueParameters4->psCheckVariable = &( sBlockingConsumerCount[ 1 ] );
+
+ xTaskCreate( vBlockingQueueProducer, "QProdB3", blckqSTACK_SIZE, ( void * ) pxQueueParameters3, tskIDLE_PRIORITY, NULL );
+ xTaskCreate( vBlockingQueueConsumer, "QConsB4", blckqSTACK_SIZE, ( void * ) pxQueueParameters4, uxPriority, NULL );
+
+
+
+ /* Create the last two tasks as described above. The mechanism is again just
+ the same. This time both parameter structures are given a block time. */
+ pxQueueParameters5 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
+ pxQueueParameters5->xQueue = xQueueCreate( uxQueueSize5, ( unsigned portBASE_TYPE ) sizeof( unsigned portSHORT ) );
+ pxQueueParameters5->xBlockTime = xBlockTime;
+ pxQueueParameters5->psCheckVariable = &( sBlockingProducerCount[ 2 ] );
+
+ pxQueueParameters6 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
+ pxQueueParameters6->xQueue = pxQueueParameters5->xQueue;
+ pxQueueParameters6->xBlockTime = xBlockTime;
+ pxQueueParameters6->psCheckVariable = &( sBlockingConsumerCount[ 2 ] );
+
+ xTaskCreate( vBlockingQueueProducer, "QProdB5", blckqSTACK_SIZE, ( void * ) pxQueueParameters5, tskIDLE_PRIORITY, NULL );
+ xTaskCreate( vBlockingQueueConsumer, "QConsB6", blckqSTACK_SIZE, ( void * ) pxQueueParameters6, tskIDLE_PRIORITY, NULL );
+}
+/*-----------------------------------------------------------*/
+
+static void vBlockingQueueProducer( void *pvParameters )
+{
+unsigned portSHORT usValue = 0;
+xBlockingQueueParameters *pxQueueParameters;
+const portCHAR * const pcTaskStartMsg = "Blocking queue producer started.\r\n";
+const portCHAR * const pcTaskErrorMsg = "Could not post on blocking queue\r\n";
+portSHORT sErrorEverOccurred = pdFALSE;
+
+ pxQueueParameters = ( xBlockingQueueParameters * ) pvParameters;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ for( ;; )
+ {
+ if( xQueueSendToBack( pxQueueParameters->xQueue, ( void * ) &usValue, pxQueueParameters->xBlockTime ) != pdPASS )
+ {
+ vPrintDisplayMessage( &pcTaskErrorMsg );
+ sErrorEverOccurred = pdTRUE;
+ }
+ else
+ {
+ /* We have successfully posted a message, so increment the variable
+ used to check we are still running. */
+ if( sErrorEverOccurred == pdFALSE )
+ {
+ ( *pxQueueParameters->psCheckVariable )++;
+ }
+
+ /* Increment the variable we are going to post next time round. The
+ consumer will expect the numbers to follow in numerical order. */
+ ++usValue;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vBlockingQueueConsumer( void *pvParameters )
+{
+unsigned portSHORT usData, usExpectedValue = 0;
+xBlockingQueueParameters *pxQueueParameters;
+const portCHAR * const pcTaskStartMsg = "Blocking queue consumer started.\r\n";
+const portCHAR * const pcTaskErrorMsg = "Incorrect value received on blocking queue.\r\n";
+portSHORT sErrorEverOccurred = pdFALSE;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ pxQueueParameters = ( xBlockingQueueParameters * ) pvParameters;
+
+ for( ;; )
+ {
+ if( xQueueReceive( pxQueueParameters->xQueue, &usData, pxQueueParameters->xBlockTime ) == pdPASS )
+ {
+ if( usData != usExpectedValue )
+ {
+ vPrintDisplayMessage( &pcTaskErrorMsg );
+
+ /* Catch-up. */
+ usExpectedValue = usData;
+
+ sErrorEverOccurred = pdTRUE;
+ }
+ else
+ {
+ /* We have successfully received a message, so increment the
+ variable used to check we are still running. */
+ if( sErrorEverOccurred == pdFALSE )
+ {
+ ( *pxQueueParameters->psCheckVariable )++;
+ }
+
+ /* Increment the value we expect to remove from the queue next time
+ round. */
+ ++usExpectedValue;
+ }
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreBlockingQueuesStillRunning( void )
+{
+static portSHORT sLastBlockingConsumerCount[ blckqNUM_TASK_SETS ] = { ( portSHORT ) 0, ( portSHORT ) 0, ( portSHORT ) 0 };
+static portSHORT sLastBlockingProducerCount[ blckqNUM_TASK_SETS ] = { ( portSHORT ) 0, ( portSHORT ) 0, ( portSHORT ) 0 };
+portBASE_TYPE xReturn = pdPASS, xTasks;
+
+ /* Not too worried about mutual exclusion on these variables as they are 16
+ bits and we are only reading them. We also only care to see if they have
+ changed or not.
+
+ Loop through each check variable and return pdFALSE if any are found not
+ to have changed since the last call. */
+
+ for( xTasks = 0; xTasks < blckqNUM_TASK_SETS; xTasks++ )
+ {
+ if( sBlockingConsumerCount[ xTasks ] == sLastBlockingConsumerCount[ xTasks ] )
+ {
+ xReturn = pdFALSE;
+ }
+ sLastBlockingConsumerCount[ xTasks ] = sBlockingConsumerCount[ xTasks ];
+
+
+ if( sBlockingProducerCount[ xTasks ] == sLastBlockingProducerCount[ xTasks ] )
+ {
+ xReturn = pdFALSE;
+ }
+ sLastBlockingProducerCount[ xTasks ] = sBlockingProducerCount[ xTasks ];
+ }
+
+ return xReturn;
+}
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/print.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/print.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/print.c (revision 14)
@@ -0,0 +1,126 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/**
+ * Manages a queue of strings that are waiting to be displayed. This is used to
+ * ensure mutual exclusion of console output.
+ *
+ * A task wishing to display a message will call vPrintDisplayMessage (), with a
+ * pointer to the string as the parameter. The pointer is posted onto the
+ * xPrintQueue queue.
+ *
+ * The task spawned in main. c blocks on xPrintQueue. When a message becomes
+ * available it calls pcPrintGetNextMessage () to obtain a pointer to the next
+ * string, then uses the functions defined in the portable layer FileIO. c to
+ * display the message.
+ *
+ * NOTE:
+ * Using console IO can disrupt real time performance - depending on the port.
+ * Standard C IO routines are not designed for real time applications. While
+ * standard IO is useful for demonstration and debugging an alternative method
+ * should be used if you actually require console IO as part of your application.
+ *
+ * \page PrintC print.c
+ * \ingroup DemoFiles
+ *
+ */
+
+/*
+Changes from V2.0.0
+
+ + Delay periods are now specified using variables and constants of
+ portTickType rather than unsigned portLONG.
+*/
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "queue.h"
+
+/* Demo program include files. */
+#include "print.h"
+
+static xQueueHandle xPrintQueue;
+
+/*-----------------------------------------------------------*/
+
+void vPrintInitialise( void )
+{
+const unsigned portBASE_TYPE uxQueueSize = 20;
+
+ /* Create the queue on which errors will be reported. */
+ xPrintQueue = xQueueCreate( uxQueueSize, ( unsigned portBASE_TYPE ) sizeof( portCHAR * ) );
+}
+/*-----------------------------------------------------------*/
+
+void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend )
+{
+ #ifdef USE_STDIO
+ xQueueSend( xPrintQueue, ( void * ) ppcMessageToSend, ( portTickType ) 0 );
+ #else
+ /* Stop warnings. */
+ ( void ) ppcMessageToSend;
+ #endif
+}
+/*-----------------------------------------------------------*/
+
+const portCHAR *pcPrintGetNextMessage( portTickType xPrintRate )
+{
+portCHAR *pcMessage;
+
+ if( xQueueReceive( xPrintQueue, &pcMessage, xPrintRate ) == pdPASS )
+ {
+ return pcMessage;
+ }
+ else
+ {
+ return NULL;
+ }
+}
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/flash.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/flash.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/flash.c (revision 14)
@@ -0,0 +1,148 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+/**
+ * Creates eight tasks, each of which flash an LED at a different rate. The first
+ * LED flashes every 125ms, the second every 250ms, the third every 375ms, etc.
+ *
+ * The LED flash tasks provide instant visual feedback. They show that the scheduler
+ * is still operational.
+ *
+ * The PC port uses the standard parallel port for outputs, the Flashlite 186 port
+ * uses IO port F.
+ *
+ * \page flashC flash.c
+ * \ingroup DemoFiles
+ *
+ */
+
+/*
+Changes from V2.0.0
+
+ + Delay periods are now specified using variables and constants of
+ portTickType rather than unsigned portLONG.
+
+Changes from V2.1.1
+
+ + The stack size now uses configMINIMAL_STACK_SIZE.
+ + String constants made file scope to decrease stack depth on 8051 port.
+*/
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* Demo program include files. */
+#include "partest.h"
+#include "flash.h"
+#include "print.h"
+
+#define ledSTACK_SIZE configMINIMAL_STACK_SIZE
+
+/* Structure used to pass parameters to the LED tasks. */
+typedef struct LED_PARAMETERS
+{
+ unsigned portBASE_TYPE uxLED; /*< The output the task should use. */
+ portTickType xFlashRate; /*< The rate at which the LED should flash. */
+} xLEDParameters;
+
+/* The task that is created eight times - each time with a different xLEDParaemtes
+structure passed in as the parameter. */
+static void vLEDFlashTask( void *pvParameters );
+
+/* String to print if USE_STDIO is defined. */
+const portCHAR * const pcTaskStartMsg = "LED flash task started.\r\n";
+
+/*-----------------------------------------------------------*/
+
+void vStartLEDFlashTasks( unsigned portBASE_TYPE uxPriority )
+{
+unsigned portBASE_TYPE uxLEDTask;
+xLEDParameters *pxLEDParameters;
+const unsigned portBASE_TYPE uxNumOfLEDs = 8;
+const portTickType xFlashRate = 125;
+
+ /* Create the eight tasks. */
+ for( uxLEDTask = 0; uxLEDTask < uxNumOfLEDs; ++uxLEDTask )
+ {
+ /* Create and complete the structure used to pass parameters to the next
+ created task. */
+ pxLEDParameters = ( xLEDParameters * ) pvPortMalloc( sizeof( xLEDParameters ) );
+ pxLEDParameters->uxLED = uxLEDTask;
+ pxLEDParameters->xFlashRate = ( xFlashRate + ( xFlashRate * ( portTickType ) uxLEDTask ) );
+ pxLEDParameters->xFlashRate /= portTICK_RATE_MS;
+
+ /* Spawn the task. */
+ xTaskCreate( vLEDFlashTask, "LEDx", ledSTACK_SIZE, ( void * ) pxLEDParameters, uxPriority, ( xTaskHandle * ) NULL );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vLEDFlashTask( void *pvParameters )
+{
+xLEDParameters *pxParameters;
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ pxParameters = ( xLEDParameters * ) pvParameters;
+
+ for(;;)
+ {
+ /* Delay for half the flash period then turn the LED on. */
+ vTaskDelay( pxParameters->xFlashRate / ( portTickType ) 2 );
+ vParTestToggleLED( pxParameters->uxLED );
+
+ /* Delay for half the flash period then turn the LED off. */
+ vTaskDelay( pxParameters->xFlashRate / ( portTickType ) 2 );
+ vParTestToggleLED( pxParameters->uxLED );
+ }
+}
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/integer.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/integer.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Full/integer.c (revision 14)
@@ -0,0 +1,347 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+Changes from V1.2.3
+
+ + The created tasks now include calls to tskYIELD(), allowing them to be used
+ with the cooperative scheduler.
+*/
+
+/**
+ * This does the same as flop. c, but uses variables of type long instead of
+ * type double.
+ *
+ * As with flop. c, the tasks created in this file are a good test of the
+ * scheduler context switch mechanism. The processor has to access 32bit
+ * variables in two or four chunks (depending on the processor). The low
+ * priority of these tasks means there is a high probability that a context
+ * switch will occur mid calculation. See the flop. c documentation for
+ * more information.
+ *
+ * \page IntegerC integer.c
+ * \ingroup DemoFiles
+ *
+ */
+
+/*
+Changes from V1.2.1
+
+ + The constants used in the calculations are larger to ensure the
+ optimiser does not truncate them to 16 bits.
+*/
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "print.h"
+
+/* Demo program include files. */
+#include "integer.h"
+
+#define intgSTACK_SIZE ( ( unsigned portSHORT ) 256 )
+#define intgNUMBER_OF_TASKS ( 8 )
+
+/* Four tasks, each of which performs a different calculation on four byte
+variables. Each of the four is created twice. */
+static void vCompeteingIntMathTask1( void *pvParameters );
+static void vCompeteingIntMathTask2( void *pvParameters );
+static void vCompeteingIntMathTask3( void *pvParameters );
+static void vCompeteingIntMathTask4( void *pvParameters );
+
+/* These variables are used to check that all the tasks are still running. If a
+task gets a calculation wrong it will stop incrementing its check variable. */
+static volatile unsigned portSHORT usTaskCheck[ intgNUMBER_OF_TASKS ] = { ( unsigned portSHORT ) 0 };
+/*-----------------------------------------------------------*/
+
+void vStartIntegerMathTasks( unsigned portBASE_TYPE uxPriority )
+{
+ xTaskCreate( vCompeteingIntMathTask1, "IntMath1", intgSTACK_SIZE, ( void * ) &( usTaskCheck[ 0 ] ), uxPriority, NULL );
+ xTaskCreate( vCompeteingIntMathTask2, "IntMath2", intgSTACK_SIZE, ( void * ) &( usTaskCheck[ 1 ] ), uxPriority, NULL );
+ xTaskCreate( vCompeteingIntMathTask3, "IntMath3", intgSTACK_SIZE, ( void * ) &( usTaskCheck[ 2 ] ), uxPriority, NULL );
+ xTaskCreate( vCompeteingIntMathTask4, "IntMath4", intgSTACK_SIZE, ( void * ) &( usTaskCheck[ 3 ] ), uxPriority, NULL );
+ xTaskCreate( vCompeteingIntMathTask1, "IntMath5", intgSTACK_SIZE, ( void * ) &( usTaskCheck[ 4 ] ), uxPriority, NULL );
+ xTaskCreate( vCompeteingIntMathTask2, "IntMath6", intgSTACK_SIZE, ( void * ) &( usTaskCheck[ 5 ] ), uxPriority, NULL );
+ xTaskCreate( vCompeteingIntMathTask3, "IntMath7", intgSTACK_SIZE, ( void * ) &( usTaskCheck[ 6 ] ), uxPriority, NULL );
+ xTaskCreate( vCompeteingIntMathTask4, "IntMath8", intgSTACK_SIZE, ( void * ) &( usTaskCheck[ 7 ] ), uxPriority, NULL );
+}
+/*-----------------------------------------------------------*/
+
+static void vCompeteingIntMathTask1( void *pvParameters )
+{
+portLONG l1, l2, l3, l4;
+portSHORT sError = pdFALSE;
+volatile unsigned portSHORT *pusTaskCheckVariable;
+const portLONG lAnswer = ( ( portLONG ) 74565L + ( portLONG ) 1234567L ) * ( portLONG ) -918L;
+const portCHAR * const pcTaskStartMsg = "Integer math task 1 started.\r\n";
+const portCHAR * const pcTaskFailMsg = "Integer math task 1 failed.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ /* The variable this task increments to show it is still running is passed in
+ as the parameter. */
+ pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
+
+ /* Keep performing a calculation and checking the result against a constant. */
+ for(;;)
+ {
+ l1 = ( portLONG ) 74565L;
+ l2 = ( portLONG ) 1234567L;
+ l3 = ( portLONG ) -918L;
+
+ l4 = ( l1 + l2 ) * l3;
+
+ taskYIELD();
+
+ /* If the calculation does not match the expected constant, stop the
+ increment of the check variable. */
+ if( l4 != lAnswer )
+ {
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ sError = pdTRUE;
+ }
+
+ if( sError == pdFALSE )
+ {
+ /* If the calculation has always been correct, increment the check
+ variable so we know this task is still running okay. */
+ ( *pusTaskCheckVariable )++;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vCompeteingIntMathTask2( void *pvParameters )
+{
+portLONG l1, l2, l3, l4;
+portSHORT sError = pdFALSE;
+volatile unsigned portSHORT *pusTaskCheckVariable;
+const portLONG lAnswer = ( ( portLONG ) -389000L / ( portLONG ) 329999L ) * ( portLONG ) -89L;
+const portCHAR * const pcTaskStartMsg = "Integer math task 2 started.\r\n";
+const portCHAR * const pcTaskFailMsg = "Integer math task 2 failed.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ /* The variable this task increments to show it is still running is passed in
+ as the parameter. */
+ pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
+
+ /* Keep performing a calculation and checking the result against a constant. */
+ for( ;; )
+ {
+ l1 = -389000L;
+ l2 = 329999L;
+ l3 = -89L;
+
+ l4 = ( l1 / l2 ) * l3;
+
+ taskYIELD();
+
+ /* If the calculation does not match the expected constant, stop the
+ increment of the check variable. */
+ if( l4 != lAnswer )
+ {
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ sError = pdTRUE;
+ }
+
+ if( sError == pdFALSE )
+ {
+ /* If the calculation has always been correct, increment the check
+ variable so we know this task is still running okay. */
+ ( *pusTaskCheckVariable )++;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vCompeteingIntMathTask3( void *pvParameters )
+{
+portLONG *plArray, lTotal1, lTotal2;
+portSHORT sError = pdFALSE;
+volatile unsigned portSHORT *pusTaskCheckVariable;
+const unsigned portSHORT usArraySize = ( unsigned portSHORT ) 250;
+unsigned portSHORT usPosition;
+const portCHAR * const pcTaskStartMsg = "Integer math task 3 started.\r\n";
+const portCHAR * const pcTaskFailMsg = "Integer math task 3 failed.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ /* The variable this task increments to show it is still running is passed in
+ as the parameter. */
+ pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
+
+ /* Create the array we are going to use for our check calculation. */
+ plArray = ( portLONG * ) pvPortMalloc( ( size_t ) 250 * sizeof( portLONG ) );
+
+ /* Keep filling the array, keeping a running total of the values placed in the
+ array. Then run through the array adding up all the values. If the two totals
+ do not match, stop the check variable from incrementing. */
+ for( ;; )
+ {
+ lTotal1 = ( portLONG ) 0;
+ lTotal2 = ( portLONG ) 0;
+
+ for( usPosition = 0; usPosition < usArraySize; usPosition++ )
+ {
+ plArray[ usPosition ] = ( portLONG ) usPosition + ( portLONG ) 5;
+ lTotal1 += ( portLONG ) usPosition + ( portLONG ) 5;
+ }
+
+ taskYIELD();
+
+ for( usPosition = 0; usPosition < usArraySize; usPosition++ )
+ {
+ lTotal2 += plArray[ usPosition ];
+ }
+
+ if( lTotal1 != lTotal2 )
+ {
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ sError = pdTRUE;
+ }
+
+ taskYIELD();
+
+ if( sError == pdFALSE )
+ {
+ /* If the calculation has always been correct, increment the check
+ variable so we know this task is still running okay. */
+ ( *pusTaskCheckVariable )++;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vCompeteingIntMathTask4( void *pvParameters )
+{
+portLONG *plArray, lTotal1, lTotal2;
+portSHORT sError = pdFALSE;
+volatile unsigned portSHORT *pusTaskCheckVariable;
+const unsigned portSHORT usArraySize = 250;
+unsigned portSHORT usPosition;
+const portCHAR * const pcTaskStartMsg = "Integer math task 4 started.\r\n";
+const portCHAR * const pcTaskFailMsg = "Integer math task 4 failed.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+
+ /* The variable this task increments to show it is still running is passed in
+ as the parameter. */
+ pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
+
+ /* Create the array we are going to use for our check calculation. */
+ plArray = ( portLONG * ) pvPortMalloc( ( size_t ) 250 * sizeof( portLONG ) );
+
+ /* Keep filling the array, keeping a running total of the values placed in the
+ array. Then run through the array adding up all the values. If the two totals
+ do not match, stop the check variable from incrementing. */
+ for( ;; )
+ {
+ lTotal1 = ( portLONG ) 0;
+ lTotal2 = ( portLONG ) 0;
+
+ for( usPosition = 0; usPosition < usArraySize; usPosition++ )
+ {
+ plArray[ usPosition ] = ( portLONG ) usPosition * ( portLONG ) 12;
+ lTotal1 += ( portLONG ) usPosition * ( portLONG ) 12;
+ }
+
+ taskYIELD();
+
+ for( usPosition = 0; usPosition < usArraySize; usPosition++ )
+ {
+ lTotal2 += plArray[ usPosition ];
+ }
+
+
+ if( lTotal1 != lTotal2 )
+ {
+ vPrintDisplayMessage( &pcTaskFailMsg );
+ sError = pdTRUE;
+ }
+
+ taskYIELD();
+
+ if( sError == pdFALSE )
+ {
+ /* If the calculation has always been correct, increment the check
+ variable so we know this task is still running okay. */
+ ( *pusTaskCheckVariable )++;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreIntegerMathsTaskStillRunning( void )
+{
+/* Keep a history of the check variables so we know if they have been incremented
+since the last call. */
+static unsigned portSHORT usLastTaskCheck[ intgNUMBER_OF_TASKS ] = { ( unsigned portSHORT ) 0 };
+portBASE_TYPE xReturn = pdTRUE, xTask;
+
+ /* Check the maths tasks are still running by ensuring their check variables
+ are still incrementing. */
+ for( xTask = 0; xTask < intgNUMBER_OF_TASKS; xTask++ )
+ {
+ if( usTaskCheck[ xTask ] == usLastTaskCheck[ xTask ] )
+ {
+ /* The check has not incremented so an error exists. */
+ xReturn = pdFALSE;
+ }
+
+ usLastTaskCheck[ xTask ] = usTaskCheck[ xTask ];
+ }
+
+ return xReturn;
+}
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/GenQTest.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/GenQTest.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/GenQTest.h (revision 14)
@@ -0,0 +1,57 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef GEN_Q_TEST_H
+#define GEN_Q_TEST_H
+
+void vStartGenericQueueTasks( unsigned portBASE_TYPE uxPriority );
+portBASE_TYPE xAreGenericQueueTasksStillRunning( void );
+
+#endif /* GEN_Q_TEST_H */
+
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/AltBlock.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/AltBlock.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/AltBlock.h (revision 14)
@@ -0,0 +1,56 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef FAST_BLOCK_TIME_TEST_H
+#define FAST_BLOCK_TIME_TEST_H
+
+void vCreateAltBlockTimeTasks( void );
+portBASE_TYPE xAreAltBlockTimeTestTasksStillRunning( void );
+
+#endif
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/recmutex.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/recmutex.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/recmutex.h (revision 14)
@@ -0,0 +1,55 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef RECURSIVE_MUTEX_TEST_H
+#define RECURSIVE_MUTEX_TEST_H
+
+void vStartRecursiveMutexTasks( void );
+portBASE_TYPE xAreRecursiveMutexTasksStillRunning( void );
+
+#endif
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/print.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/print.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/print.h (revision 14)
@@ -0,0 +1,57 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef PRINT_H
+#define PRINT_H
+
+void vPrintInitialise( void );
+void vPrintDisplayMessage( const portCHAR * const * pcMessageToSend );
+const portCHAR *pcPrintGetNextMessage( portTickType xPrintRate );
+
+#endif
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/integer.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/integer.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/integer.h (revision 14)
@@ -0,0 +1,56 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef INTEGER_TASKS_H
+#define INTEGER_TASKS_H
+
+void vStartIntegerMathTasks( unsigned portBASE_TYPE uxPriority );
+portBASE_TYPE xAreIntegerMathsTaskStillRunning( void );
+
+#endif
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/flash.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/flash.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/flash.h (revision 14)
@@ -0,0 +1,54 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef FLASH_LED_H
+#define FLASH_LED_H
+
+void vStartLEDFlashTasks( unsigned portBASE_TYPE uxPriority );
+
+#endif
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/AltBlckQ.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/AltBlckQ.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/AltBlckQ.h (revision 14)
@@ -0,0 +1,56 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef ALT_BLOCK_Q_H
+#define ALT_BLOCK_Q_H
+
+void vStartAltBlockingQueueTasks( unsigned portBASE_TYPE uxPriority );
+portBASE_TYPE xAreAltBlockingQueuesStillRunning( void );
+
+#endif
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/countsem.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/countsem.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/countsem.h (revision 14)
@@ -0,0 +1,55 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef COUNT_SEMAPHORE_TEST_H
+#define COUNT_SEMAPHORE_TEST_H
+
+void vStartCountingSemaphoreTasks( void );
+portBASE_TYPE xAreCountingSemaphoreTasksStillRunning( void );
+
+#endif
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/IntQueue.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/IntQueue.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/IntQueue.h (revision 14)
@@ -0,0 +1,62 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef QUEUE_ACCESS_TEST
+#define QUEUE_ACCESS_TEST
+
+void vStartInterruptQueueTasks( void );
+portBASE_TYPE xAreIntQueueTasksStillRunning( void );
+portBASE_TYPE xFirstTimerHandler( void );
+portBASE_TYPE xSecondTimerHandler( void );
+
+#endif /* QUEUE_ACCESS_TEST */
+
+
+
+
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/flop.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/flop.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/flop.h (revision 14)
@@ -0,0 +1,56 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef FLOP_TASKS_H
+#define FLOP_TASKS_H
+
+void vStartMathTasks( unsigned portBASE_TYPE uxPriority );
+portBASE_TYPE xAreMathsTaskStillRunning( void );
+
+#endif
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/comtest2.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/comtest2.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/comtest2.h (revision 14)
@@ -0,0 +1,55 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef COMTEST_H
+#define COMTEST_H
+
+void vAltStartComTestTasks( unsigned portBASE_TYPE uxPriority, unsigned portLONG ulBaudRate, unsigned portBASE_TYPE uxLED );
+portBASE_TYPE xAreComTestTasksStillRunning( void );
+
+#endif
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/AltQTest.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/AltQTest.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/AltQTest.h (revision 14)
@@ -0,0 +1,57 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef FAST_GEN_Q_TEST_H
+#define FAST_GEN_Q_TEST_H
+
+void vStartAltGenericQueueTasks( unsigned portBASE_TYPE uxPriority );
+portBASE_TYPE xAreAltGenericQueueTasksStillRunning( void );
+
+#endif /* GEN_Q_TEST_H */
+
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/blocktim.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/blocktim.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/blocktim.h (revision 14)
@@ -0,0 +1,56 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef BLOCK_TIME_TEST_H
+#define BLOCK_TIME_TEST_H
+
+void vCreateBlockTimeTasks( void );
+portBASE_TYPE xAreBlockTimeTestTasksStillRunning( void );
+
+#endif
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/QPeek.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/QPeek.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/QPeek.h (revision 14)
@@ -0,0 +1,57 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef Q_PEEK_TEST_H
+#define Q_PEEK_TEST_H
+
+void vStartQueuePeekTasks( void );
+portBASE_TYPE xAreQueuePeekTasksStillRunning( void );
+
+#endif /* Q_PEEK_TEST_H */
+
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/fileIO.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/fileIO.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/fileIO.h (revision 14)
@@ -0,0 +1,56 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef FILE_IO_H
+#define FILE_OI_H
+
+void vDisplayMessage( const portCHAR * const pcMessageToPrint );
+void vWriteMessageToDisk( const portCHAR * const pcMessage );
+void vWriteBufferToDisk( const portCHAR * const pcBuffer, unsigned portLONG ulBufferLength );
+
+#endif
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/BlockQ.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/BlockQ.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/BlockQ.h (revision 14)
@@ -0,0 +1,56 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef BLOCK_Q_H
+#define BLOCK_Q_H
+
+void vStartBlockingQueueTasks( unsigned portBASE_TYPE uxPriority );
+portBASE_TYPE xAreBlockingQueuesStillRunning( void );
+
+#endif
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/comtest.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/comtest.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/comtest.h (revision 14)
@@ -0,0 +1,57 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef COMTEST_H
+#define COMTEST_H
+
+void vAltStartComTestTasks( unsigned portBASE_TYPE uxPriority, unsigned portLONG ulBaudRate, unsigned portBASE_TYPE uxLED );
+void vStartComTestTasks( unsigned portBASE_TYPE uxPriority, eCOMPort ePort, eBaud eBaudRate );
+portBASE_TYPE xAreComTestTasksStillRunning( void );
+void vComTestUnsuspendTask( void );
+
+#endif
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/serial.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/serial.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/serial.h (revision 14)
@@ -0,0 +1,118 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef SERIAL_COMMS_H
+#define SERIAL_COMMS_H
+
+typedef void * xComPortHandle;
+
+typedef enum
+{
+ serCOM1,
+ serCOM2,
+ serCOM3,
+ serCOM4,
+ serCOM5,
+ serCOM6,
+ serCOM7,
+ serCOM8
+} eCOMPort;
+
+typedef enum
+{
+ serNO_PARITY,
+ serODD_PARITY,
+ serEVEN_PARITY,
+ serMARK_PARITY,
+ serSPACE_PARITY
+} eParity;
+
+typedef enum
+{
+ serSTOP_1,
+ serSTOP_2
+} eStopBits;
+
+typedef enum
+{
+ serBITS_5,
+ serBITS_6,
+ serBITS_7,
+ serBITS_8
+} eDataBits;
+
+typedef enum
+{
+ ser50,
+ ser75,
+ ser110,
+ ser134,
+ ser150,
+ ser200,
+ ser300,
+ ser600,
+ ser1200,
+ ser1800,
+ ser2400,
+ ser4800,
+ ser9600,
+ ser19200,
+ ser38400,
+ ser57600,
+ ser115200
+} eBaud;
+
+xComPortHandle xSerialPortInitMinimal( unsigned portLONG ulWantedBaud, unsigned portBASE_TYPE uxQueueLength );
+xComPortHandle xSerialPortInit( eCOMPort ePort, eBaud eWantedBaud, eParity eWantedParity, eDataBits eWantedDataBits, eStopBits eWantedStopBits, unsigned portBASE_TYPE uxBufferLength );
+void vSerialPutString( xComPortHandle pxPort, const signed portCHAR * const pcString, unsigned portSHORT usStringLength );
+signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed portCHAR *pcRxedChar, portTickType xBlockTime );
+signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed portCHAR cOutChar, portTickType xBlockTime );
+portBASE_TYPE xSerialWaitForSemaphore( xComPortHandle xPort );
+void vSerialClose( xComPortHandle xPort );
+
+#endif
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/mevents.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/mevents.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/mevents.h (revision 14)
@@ -0,0 +1,56 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef EVENTS_TEST_H
+#define EVENTS_TEST_H
+
+void vStartMultiEventTasks( void );
+portBASE_TYPE xAreMultiEventTasksStillRunning( void );
+
+#endif
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/crflash.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/crflash.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/crflash.h (revision 14)
@@ -0,0 +1,67 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef CRFLASH_LED_H
+#define CRFLASH_LED_H
+
+/*
+ * Create the co-routines used to flash the LED's at different rates.
+ *
+ * @param uxPriority The number of 'fixed delay' co-routines to create. This
+ * also effects the number of LED's that will be utilised. For example,
+ * passing in 3 will cause LED's 0 to 2 to be utilised.
+ */
+void vStartFlashCoRoutines( unsigned portBASE_TYPE uxPriority );
+
+/*
+ * Return pdPASS or pdFAIL depending on whether an error has been detected
+ * or not.
+ */
+portBASE_TYPE xAreFlashCoRoutinesStillRunning( void );
+
+#endif
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/partest.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/partest.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/partest.h (revision 14)
@@ -0,0 +1,58 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef PARTEST_H
+#define PARTEST_H
+
+#define partstDEFAULT_PORT_ADDRESS ( ( unsigned portSHORT ) 0x378 )
+
+void vParTestInitialise( void );
+void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue );
+void vParTestToggleLED( unsigned portBASE_TYPE uxLED );
+
+#endif
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/dynamic.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/dynamic.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/dynamic.h (revision 14)
@@ -0,0 +1,56 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef DYNAMIC_MANIPULATION_H
+#define DYNAMIC_MANIPULATION_H
+
+void vStartDynamicPriorityTasks( void );
+portBASE_TYPE xAreDynamicPriorityTasksStillRunning( void );
+
+#endif
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/semtest.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/semtest.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/semtest.h (revision 14)
@@ -0,0 +1,55 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef SEMAPHORE_TEST_H
+#define SEMAPHORE_TEST_H
+
+void vStartSemaphoreTasks( unsigned portBASE_TYPE uxPriority );
+portBASE_TYPE xAreSemaphoreTasksStillRunning( void );
+
+#endif
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/death.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/death.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/death.h (revision 14)
@@ -0,0 +1,56 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef SUICIDE_TASK_H
+#define SUICIDE_TASK_H
+
+void vCreateSuicidalTasks( unsigned portBASE_TYPE uxPriority );
+portBASE_TYPE xIsCreateTaskStillRunning( void );
+
+#endif
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/crhook.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/crhook.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/crhook.h (revision 14)
@@ -0,0 +1,63 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef CRHOOK_H
+#define CRHOOK_H
+
+/*
+ * Create the co-routines used to communicate wit the tick hook.
+ */
+void vStartHookCoRoutines( void );
+
+/*
+ * Return pdPASS or pdFAIL depending on whether an error has been detected
+ * or not.
+ */
+portBASE_TYPE xAreHookCoRoutinesStillRunning( void );
+
+#endif
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/PollQ.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/PollQ.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/PollQ.h (revision 14)
@@ -0,0 +1,56 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef POLLED_Q_H
+#define POLLED_Q_H
+
+void vStartPolledQueueTasks( unsigned portBASE_TYPE uxPriority );
+portBASE_TYPE xArePollingQueuesStillRunning( void );
+
+#endif
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/include/AltPollQ.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/include/AltPollQ.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/include/AltPollQ.h (revision 14)
@@ -0,0 +1,56 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+#ifndef ALT_POLLED_Q_H
+#define ALT_POLLED_Q_H
+
+void vStartAltPolledQueueTasks( unsigned portBASE_TYPE uxPriority );
+portBASE_TYPE xAreAltPollingQueuesStillRunning( void );
+
+#endif
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/comtest.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/comtest.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/comtest.c (revision 14)
@@ -0,0 +1,285 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+/*
+ * This version of comtest. c is for use on systems that have limited stack
+ * space and no display facilities. The complete version can be found in
+ * the Demo/Common/Full directory.
+ *
+ * Creates two tasks that operate on an interrupt driven serial port. A
+ * loopback connector should be used so that everything that is transmitted is
+ * also received. The serial port does not use any flow control. On a
+ * standard 9way 'D' connector pins two and three should be connected together.
+ *
+ * The first task posts a sequence of characters to the Tx queue, toggling an
+ * LED on each successful post. At the end of the sequence it sleeps for a
+ * pseudo-random period before resending the same sequence.
+ *
+ * The UART Tx end interrupt is enabled whenever data is available in the Tx
+ * queue. The Tx end ISR removes a single character from the Tx queue and
+ * passes it to the UART for transmission.
+ *
+ * The second task blocks on the Rx queue waiting for a character to become
+ * available. When the UART Rx end interrupt receives a character it places
+ * it in the Rx queue, waking the second task. The second task checks that the
+ * characters removed from the Rx queue form the same sequence as those posted
+ * to the Tx queue, and toggles an LED for each correct character.
+ *
+ * The receiving task is spawned with a higher priority than the transmitting
+ * task. The receiver will therefore wake every time a character is
+ * transmitted so neither the Tx or Rx queue should ever hold more than a few
+ * characters.
+ *
+ */
+
+/* Scheduler include files. */
+#include
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* Demo program include files. */
+#include "serial.h"
+#include "comtest.h"
+#include "partest.h"
+
+#define comSTACK_SIZE configMINIMAL_STACK_SIZE
+#define comTX_LED_OFFSET ( 0 )
+#define comRX_LED_OFFSET ( 1 )
+#define comTOTAL_PERMISSIBLE_ERRORS ( 2 )
+
+/* The Tx task will transmit the sequence of characters at a pseudo random
+interval. This is the maximum and minimum block time between sends. */
+#define comTX_MAX_BLOCK_TIME ( ( portTickType ) 0x96 )
+#define comTX_MIN_BLOCK_TIME ( ( portTickType ) 0x32 )
+#define comOFFSET_TIME ( ( portTickType ) 3 )
+
+/* We should find that each character can be queued for Tx immediately and we
+don't have to block to send. */
+#define comNO_BLOCK ( ( portTickType ) 0 )
+
+/* The Rx task will block on the Rx queue for a long period. */
+#define comRX_BLOCK_TIME ( ( portTickType ) 0xffff )
+
+/* The sequence transmitted is from comFIRST_BYTE to and including comLAST_BYTE. */
+#define comFIRST_BYTE ( 'A' )
+#define comLAST_BYTE ( 'X' )
+
+#define comBUFFER_LEN ( ( unsigned portBASE_TYPE ) ( comLAST_BYTE - comFIRST_BYTE ) + ( unsigned portBASE_TYPE ) 1 )
+#define comINITIAL_RX_COUNT_VALUE ( 0 )
+
+/* Handle to the com port used by both tasks. */
+static xComPortHandle xPort = NULL;
+
+/* The transmit task as described at the top of the file. */
+static portTASK_FUNCTION_PROTO( vComTxTask, pvParameters );
+
+/* The receive task as described at the top of the file. */
+static portTASK_FUNCTION_PROTO( vComRxTask, pvParameters );
+
+/* The LED that should be toggled by the Rx and Tx tasks. The Rx task will
+toggle LED ( uxBaseLED + comRX_LED_OFFSET). The Tx task will toggle LED
+( uxBaseLED + comTX_LED_OFFSET ). */
+static unsigned portBASE_TYPE uxBaseLED = 0;
+
+/* Check variable used to ensure no error have occurred. The Rx task will
+increment this variable after every successfully received sequence. If at any
+time the sequence is incorrect the the variable will stop being incremented. */
+static volatile unsigned portBASE_TYPE uxRxLoops = comINITIAL_RX_COUNT_VALUE;
+
+/*-----------------------------------------------------------*/
+
+void vAltStartComTestTasks( unsigned portBASE_TYPE uxPriority, unsigned portLONG ulBaudRate, unsigned portBASE_TYPE uxLED )
+{
+ /* Initialise the com port then spawn the Rx and Tx tasks. */
+ uxBaseLED = uxLED;
+ xSerialPortInitMinimal( ulBaudRate, comBUFFER_LEN );
+
+ /* The Tx task is spawned with a lower priority than the Rx task. */
+ xTaskCreate( vComTxTask, ( signed portCHAR * ) "COMTx", comSTACK_SIZE, NULL, uxPriority - 1, ( xTaskHandle * ) NULL );
+ xTaskCreate( vComRxTask, ( signed portCHAR * ) "COMRx", comSTACK_SIZE, NULL, uxPriority, ( xTaskHandle * ) NULL );
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vComTxTask, pvParameters )
+{
+signed portCHAR cByteToSend;
+portTickType xTimeToWait;
+
+ /* Just to stop compiler warnings. */
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /* Simply transmit a sequence of characters from comFIRST_BYTE to
+ comLAST_BYTE. */
+ for( cByteToSend = comFIRST_BYTE; cByteToSend <= comLAST_BYTE; cByteToSend++ )
+ {
+ if( xSerialPutChar( xPort, cByteToSend, comNO_BLOCK ) == pdPASS )
+ {
+ vParTestToggleLED( uxBaseLED + comTX_LED_OFFSET );
+ }
+ }
+
+ /* Turn the LED off while we are not doing anything. */
+ vParTestSetLED( uxBaseLED + comTX_LED_OFFSET, pdFALSE );
+
+ /* We have posted all the characters in the string - wait before
+ re-sending. Wait a pseudo-random time as this will provide a better
+ test. */
+ xTimeToWait = xTaskGetTickCount() + comOFFSET_TIME;
+
+ /* Make sure we don't wait too long... */
+ xTimeToWait %= comTX_MAX_BLOCK_TIME;
+
+ /* ...but we do want to wait. */
+ if( xTimeToWait < comTX_MIN_BLOCK_TIME )
+ {
+ xTimeToWait = comTX_MIN_BLOCK_TIME;
+ }
+
+ vTaskDelay( xTimeToWait );
+ }
+} /*lint !e715 !e818 pvParameters is required for a task function even if it is not referenced. */
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vComRxTask, pvParameters )
+{
+signed portCHAR cExpectedByte, cByteRxed;
+portBASE_TYPE xResyncRequired = pdFALSE, xErrorOccurred = pdFALSE;
+
+ /* Just to stop compiler warnings. */
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /* We expect to receive the characters from comFIRST_BYTE to
+ comLAST_BYTE in an incrementing order. Loop to receive each byte. */
+ for( cExpectedByte = comFIRST_BYTE; cExpectedByte <= comLAST_BYTE; cExpectedByte++ )
+ {
+ /* Block on the queue that contains received bytes until a byte is
+ available. */
+ if( xSerialGetChar( xPort, &cByteRxed, comRX_BLOCK_TIME ) )
+ {
+ /* Was this the byte we were expecting? If so, toggle the LED,
+ otherwise we are out on sync and should break out of the loop
+ until the expected character sequence is about to restart. */
+ if( cByteRxed == cExpectedByte )
+ {
+ vParTestToggleLED( uxBaseLED + comRX_LED_OFFSET );
+ }
+ else
+ {
+ xResyncRequired = pdTRUE;
+ break; /*lint !e960 Non-switch break allowed. */
+ }
+ }
+ }
+
+ /* Turn the LED off while we are not doing anything. */
+ vParTestSetLED( uxBaseLED + comRX_LED_OFFSET, pdFALSE );
+
+ /* Did we break out of the loop because the characters were received in
+ an unexpected order? If so wait here until the character sequence is
+ about to restart. */
+ if( xResyncRequired == pdTRUE )
+ {
+ while( cByteRxed != comLAST_BYTE )
+ {
+ /* Block until the next char is available. */
+ xSerialGetChar( xPort, &cByteRxed, comRX_BLOCK_TIME );
+ }
+
+ /* Note that an error occurred which caused us to have to resync.
+ We use this to stop incrementing the loop counter so
+ sAreComTestTasksStillRunning() will return false - indicating an
+ error. */
+ xErrorOccurred++;
+
+ /* We have now resynced with the Tx task and can continue. */
+ xResyncRequired = pdFALSE;
+ }
+ else
+ {
+ if( xErrorOccurred < comTOTAL_PERMISSIBLE_ERRORS )
+ {
+ /* Increment the count of successful loops. As error
+ occurring (i.e. an unexpected character being received) will
+ prevent this counter being incremented for the rest of the
+ execution. Don't worry about mutual exclusion on this
+ variable - it doesn't really matter as we just want it
+ to change. */
+ uxRxLoops++;
+ }
+ }
+ }
+} /*lint !e715 !e818 pvParameters is required for a task function even if it is not referenced. */
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE xAreComTestTasksStillRunning( void )
+{
+portBASE_TYPE xReturn;
+
+ /* If the count of successful reception loops has not changed than at
+ some time an error occurred (i.e. a character was received out of sequence)
+ and we will return false. */
+ if( uxRxLoops == comINITIAL_RX_COUNT_VALUE )
+ {
+ xReturn = pdFALSE;
+ }
+ else
+ {
+ xReturn = pdTRUE;
+ }
+
+ /* Reset the count of successful Rx loops. When this function is called
+ again we expect this to have been incremented. */
+ uxRxLoops = comINITIAL_RX_COUNT_VALUE;
+
+ return xReturn;
+}
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/IntQueue.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/IntQueue.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/IntQueue.c (revision 14)
@@ -0,0 +1,716 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * This file defines one of the more complex set of demo/test tasks. They are
+ * designed to stress test the queue implementation though pseudo simultaneous
+ * multiple reads and multiple writes from both tasks of varying priority and
+ * interrupts. The interrupts are prioritised such to ensure that nesting
+ * occurs (for those ports that support it).
+ *
+ * The test ensures that, while being accessed from three tasks and two
+ * interrupts, all the data sent to the queues is also received from
+ * the same queue, and that no duplicate items are either sent or received.
+ * The tests also ensure that a low priority task is never able to successfully
+ * read from or write to a queue when a task of higher priority is attempting
+ * the same operation.
+ */
+
+/* Standard includes. */
+#include
+
+/* SafeRTOS includes. */
+#include "FreeRTOS.h"
+#include "queue.h"
+#include "task.h"
+
+/* Demo app includes. */
+#include "IntQueue.h"
+#include "IntQueueTimer.h"
+
+/* Priorities used by test tasks. */
+#define intqHIGHER_PRIORITY ( configMAX_PRIORITIES - 2 )
+#define intqLOWER_PRIORITY ( tskIDLE_PRIORITY )
+
+/* The number of values to send/receive before checking that all values were
+processed as expected. */
+#define intqNUM_VALUES_TO_LOG ( 200 )
+#define intqSHORT_DELAY ( 75 )
+
+/* The value by which the value being sent to or received from a queue should
+increment past intqNUM_VALUES_TO_LOG before we check that all values have been
+sent/received correctly. This is done to ensure that all tasks and interrupts
+accessing the queue have completed their accesses with the
+intqNUM_VALUES_TO_LOG range. */
+#define intqVALUE_OVERRUN ( 50 )
+
+/* The delay used by the polling task. A short delay is used for code
+coverage. */
+#define intqONE_TICK_DELAY ( 1 )
+
+/* Each task and interrupt is given a unique identifier. This value is used to
+identify which task sent or received each value. The identifier is also used
+to distinguish between two tasks that are running the same task function. */
+#define intqHIGH_PRIORITY_TASK1 ( ( unsigned portBASE_TYPE ) 1 )
+#define intqHIGH_PRIORITY_TASK2 ( ( unsigned portBASE_TYPE ) 2 )
+#define intqLOW_PRIORITY_TASK ( ( unsigned portBASE_TYPE ) 3 )
+#define intqFIRST_INTERRUPT ( ( unsigned portBASE_TYPE ) 4 )
+#define intqSECOND_INTERRUPT ( ( unsigned portBASE_TYPE ) 5 )
+#define intqQUEUE_LENGTH ( ( unsigned portBASE_TYPE ) 10 )
+
+/* At least intqMIN_ACCEPTABLE_TASK_COUNT values should be sent to/received
+from each queue by each task, otherwise an error is detected. */
+#define intqMIN_ACCEPTABLE_TASK_COUNT ( 5 )
+
+/* Send the next value to the queue that is normally empty. This is called
+from within the interrupts. */
+#define timerNORMALLY_EMPTY_TX() \
+ if( xQueueIsQueueFullFromISR( xNormallyEmptyQueue ) != pdTRUE ) \
+ { \
+ unsigned portBASE_TYPE uxSavedInterruptStatus; \
+ uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); \
+ { \
+ uxValueForNormallyEmptyQueue++; \
+ xQueueSendFromISR( xNormallyEmptyQueue, ( void * ) &uxValueForNormallyEmptyQueue, &xHigherPriorityTaskWoken ); \
+ } \
+ portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); \
+ } \
+
+/* Send the next value to the queue that is normally full. This is called
+from within the interrupts. */
+#define timerNORMALLY_FULL_TX() \
+ if( xQueueIsQueueFullFromISR( xNormallyFullQueue ) != pdTRUE ) \
+ { \
+ unsigned portBASE_TYPE uxSavedInterruptStatus; \
+ uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); \
+ { \
+ uxValueForNormallyFullQueue++; \
+ xQueueSendFromISR( xNormallyFullQueue, ( void * ) &uxValueForNormallyFullQueue, &xHigherPriorityTaskWoken ); \
+ } \
+ portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); \
+ } \
+
+/* Receive a value from the normally empty queue. This is called from within
+an interrupt. */
+#define timerNORMALLY_EMPTY_RX() \
+ if( xQueueReceiveFromISR( xNormallyEmptyQueue, &uxRxedValue, &xHigherPriorityTaskWoken ) != pdPASS ) \
+ { \
+ prvQueueAccessLogError( __LINE__ ); \
+ } \
+ else \
+ { \
+ prvRecordValue_NormallyEmpty( uxRxedValue, intqSECOND_INTERRUPT ); \
+ }
+
+/* Receive a value from the normally full queue. This is called from within
+an interrupt. */
+#define timerNORMALLY_FULL_RX() \
+ if( xQueueReceiveFromISR( xNormallyFullQueue, &uxRxedValue, &xHigherPriorityTaskWoken ) == pdPASS ) \
+ { \
+ prvRecordValue_NormallyFull( uxRxedValue, intqSECOND_INTERRUPT ); \
+ } \
+
+
+/*-----------------------------------------------------------*/
+
+/* The two queues used by the test. */
+static xQueueHandle xNormallyEmptyQueue, xNormallyFullQueue;
+
+/* Variables used to detect a stall in one of the tasks. */
+static unsigned portBASE_TYPE uxHighPriorityLoops1 = 0, uxHighPriorityLoops2 = 0, uxLowPriorityLoops1 = 0, uxLowPriorityLoops2 = 0;
+
+/* Any unexpected behaviour sets xErrorStatus to fail and log the line that
+caused the error in xErrorLine. */
+static portBASE_TYPE xErrorStatus = pdPASS;
+static unsigned portBASE_TYPE xErrorLine = ( unsigned portBASE_TYPE ) 0;
+
+/* Used for sequencing between tasks. */
+static portBASE_TYPE xWasSuspended = pdFALSE;
+
+/* The values that are sent to the queues. An incremented value is sent each
+time to each queue. */
+volatile unsigned portBASE_TYPE uxValueForNormallyEmptyQueue = 0, uxValueForNormallyFullQueue = 0;
+
+/* A handle to some of the tasks is required so they can be suspended/resumed. */
+xTaskHandle xHighPriorityNormallyEmptyTask1, xHighPriorityNormallyEmptyTask2, xHighPriorityNormallyFullTask1, xHighPriorityNormallyFullTask2;
+
+/* When a value is received in a queue the value is ticked off in the array
+the array position of the value is set to a the identifier of the task or
+interrupt that accessed the queue. This way missing or duplicate values can be
+detected. */
+static unsigned portCHAR ucNormallyEmptyReceivedValues[ intqNUM_VALUES_TO_LOG ] = { 0 };
+static unsigned portCHAR ucNormallyFullReceivedValues[ intqNUM_VALUES_TO_LOG ] = { 0 };
+
+/* The test tasks themselves. */
+static void prvLowerPriorityNormallyEmptyTask( void *pvParameters );
+static void prvLowerPriorityNormallyFullTask( void *pvParameters );
+static void prvHigherPriorityNormallyEmptyTask( void *pvParameters );
+static void prv1stHigherPriorityNormallyFullTask( void *pvParameters );
+static void prv2ndHigherPriorityNormallyFullTask( void *pvParameters );
+
+/* Used to mark the positions within the ucNormallyEmptyReceivedValues and
+ucNormallyFullReceivedValues arrays, while checking for duplicates. */
+static void prvRecordValue_NormallyEmpty( unsigned portBASE_TYPE uxValue, unsigned portBASE_TYPE uxSource );
+static void prvRecordValue_NormallyFull( unsigned portBASE_TYPE uxValue, unsigned portBASE_TYPE uxSource );
+
+/* Logs the line on which an error occurred. */
+static void prvQueueAccessLogError( unsigned portBASE_TYPE uxLine );
+
+/*-----------------------------------------------------------*/
+
+void vStartInterruptQueueTasks( void )
+{
+ /* Start the test tasks. */
+ xTaskCreate( prvHigherPriorityNormallyEmptyTask, ( signed portCHAR * ) "H1QRx", configMINIMAL_STACK_SIZE, ( void * ) intqHIGH_PRIORITY_TASK1, intqHIGHER_PRIORITY, &xHighPriorityNormallyEmptyTask1 );
+ xTaskCreate( prvHigherPriorityNormallyEmptyTask, ( signed portCHAR * ) "H2QRx", configMINIMAL_STACK_SIZE, ( void * ) intqHIGH_PRIORITY_TASK2, intqHIGHER_PRIORITY, &xHighPriorityNormallyEmptyTask2 );
+ xTaskCreate( prvLowerPriorityNormallyEmptyTask, ( signed portCHAR * ) "LQRx", configMINIMAL_STACK_SIZE, NULL, intqLOWER_PRIORITY, NULL );
+ xTaskCreate( prv1stHigherPriorityNormallyFullTask, ( signed portCHAR * ) "H1QTx", configMINIMAL_STACK_SIZE, ( void * ) intqHIGH_PRIORITY_TASK1, intqHIGHER_PRIORITY, &xHighPriorityNormallyFullTask1 );
+ xTaskCreate( prv2ndHigherPriorityNormallyFullTask, ( signed portCHAR * ) "H1QTx", configMINIMAL_STACK_SIZE, ( void * ) intqHIGH_PRIORITY_TASK2, intqHIGHER_PRIORITY, &xHighPriorityNormallyFullTask2 );
+ xTaskCreate( prvLowerPriorityNormallyFullTask, ( signed portCHAR * ) "LQRx", configMINIMAL_STACK_SIZE, NULL, intqLOWER_PRIORITY, NULL );
+
+ /* Create the queues that are accessed by multiple tasks and multiple
+ interrupts. */
+ xNormallyFullQueue = xQueueCreate( intqQUEUE_LENGTH, ( unsigned portBASE_TYPE ) sizeof( unsigned portBASE_TYPE ) );
+ xNormallyEmptyQueue = xQueueCreate( intqQUEUE_LENGTH, ( unsigned portBASE_TYPE ) sizeof( unsigned portBASE_TYPE ) );
+
+ /* vQueueAddToRegistry() adds the queue to the queue registry, if one is
+ in use. The queue registry is provided as a means for kernel aware
+ debuggers to locate queues and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry( xNormallyFullQueue, ( signed portCHAR * ) "NormallyFull" );
+ vQueueAddToRegistry( xNormallyEmptyQueue, ( signed portCHAR * ) "NormallyEmpty" );
+}
+/*-----------------------------------------------------------*/
+
+static void prvRecordValue_NormallyFull( unsigned portBASE_TYPE uxValue, unsigned portBASE_TYPE uxSource )
+{
+ if( uxValue < intqNUM_VALUES_TO_LOG )
+ {
+ /* We don't expect to receive the same value twice, so if the value
+ has already been marked as received an error has occurred. */
+ if( ucNormallyFullReceivedValues[ uxValue ] != 0x00 )
+ {
+ prvQueueAccessLogError( __LINE__ );
+ }
+
+ /* Log that this value has been received. */
+ ucNormallyFullReceivedValues[ uxValue ] = uxSource;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvRecordValue_NormallyEmpty( unsigned portBASE_TYPE uxValue, unsigned portBASE_TYPE uxSource )
+{
+ if( uxValue < intqNUM_VALUES_TO_LOG )
+ {
+ /* We don't expect to receive the same value twice, so if the value
+ has already been marked as received an error has occurred. */
+ if( ucNormallyEmptyReceivedValues[ uxValue ] != 0x00 )
+ {
+ prvQueueAccessLogError( __LINE__ );
+ }
+
+ /* Log that this value has been received. */
+ ucNormallyEmptyReceivedValues[ uxValue ] = uxSource;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvQueueAccessLogError( unsigned portBASE_TYPE uxLine )
+{
+ /* Latch the line number that caused the error. */
+ xErrorLine = uxLine;
+ xErrorStatus = pdFAIL;
+}
+/*-----------------------------------------------------------*/
+
+static void prvHigherPriorityNormallyEmptyTask( void *pvParameters )
+{
+unsigned portBASE_TYPE uxRxed, ux, uxTask1, uxTask2, uxErrorCount1 = 0, uxErrorCount2 = 0;
+
+ /* The timer should not be started until after the scheduler has started.
+ More than one task is running this code so we check the parameter value
+ to determine which task should start the timer. */
+ if( ( unsigned portBASE_TYPE ) pvParameters == intqHIGH_PRIORITY_TASK1 )
+ {
+ vInitialiseTimerForIntQueueTest();
+ }
+
+ for( ;; )
+ {
+ /* Block waiting to receive a value from the normally empty queue.
+ Interrupts will write to the queue so we should receive a value. */
+ if( xQueueReceive( xNormallyEmptyQueue, &uxRxed, intqSHORT_DELAY ) != pdPASS )
+ {
+ prvQueueAccessLogError( __LINE__ );
+ }
+ else
+ {
+ /* Note which value was received so we can check all expected
+ values are received and no values are duplicated. */
+ prvRecordValue_NormallyEmpty( uxRxed, ( unsigned portBASE_TYPE ) pvParameters );
+ }
+
+ /* Ensure the other task running this code gets a chance to execute. */
+ taskYIELD();
+
+ if( ( unsigned portBASE_TYPE ) pvParameters == intqHIGH_PRIORITY_TASK1 )
+ {
+ /* Have we received all the expected values? */
+ if( uxValueForNormallyEmptyQueue > ( intqNUM_VALUES_TO_LOG + intqVALUE_OVERRUN ) )
+ {
+ vTaskSuspend( xHighPriorityNormallyEmptyTask2 );
+
+ uxTask1 = 0;
+ uxTask2 = 0;
+
+ /* Loop through the array, checking that both tasks have
+ placed values into the array, and that no values are missing.
+ Start at 1 as we expect position 0 to be unused. */
+ for( ux = 1; ux < intqNUM_VALUES_TO_LOG; ux++ )
+ {
+ if( ucNormallyEmptyReceivedValues[ ux ] == 0 )
+ {
+ /* A value is missing. */
+ prvQueueAccessLogError( __LINE__ );
+ }
+ else
+ {
+ if( ucNormallyEmptyReceivedValues[ ux ] == intqHIGH_PRIORITY_TASK1 )
+ {
+ /* Value was placed into the array by task 1. */
+ uxTask1++;
+ }
+ else if( ucNormallyEmptyReceivedValues[ ux ] == intqHIGH_PRIORITY_TASK2 )
+ {
+ /* Value was placed into the array by task 2. */
+ uxTask2++;
+ }
+ }
+ }
+
+ if( uxTask1 < intqMIN_ACCEPTABLE_TASK_COUNT )
+ {
+ /* Only task 2 seemed to log any values. */
+ uxErrorCount1++;
+ if( uxErrorCount1 > 2 )
+ {
+ prvQueueAccessLogError( __LINE__ );
+ }
+ }
+ else
+ {
+ uxErrorCount1 = 0;
+ }
+
+ if( uxTask2 < intqMIN_ACCEPTABLE_TASK_COUNT )
+ {
+ /* Only task 1 seemed to log any values. */
+ uxErrorCount2++;
+ if( uxErrorCount2 > 2 )
+ {
+ prvQueueAccessLogError( __LINE__ );
+ }
+ }
+ else
+ {
+ uxErrorCount2 = 0;
+ }
+
+ /* Clear the array again, ready to start a new cycle. */
+ memset( ucNormallyEmptyReceivedValues, 0x00, sizeof( ucNormallyEmptyReceivedValues ) );
+
+ uxHighPriorityLoops1++;
+ uxValueForNormallyEmptyQueue = 0;
+
+ /* Suspend ourselves, allowing the lower priority task to
+ actually receive something from the queue. Until now it
+ will have been prevented from doing so by the higher
+ priority tasks. The lower priority task will resume us
+ if it receives something. We will then resume the other
+ higher priority task. */
+ vTaskSuspend( NULL );
+ vTaskResume( xHighPriorityNormallyEmptyTask2 );
+ }
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvLowerPriorityNormallyEmptyTask( void *pvParameters )
+{
+unsigned portBASE_TYPE uxValue, uxRxed;
+portBASE_TYPE xQueueStatus;
+
+ /* The parameters are not being used so avoid compiler warnings. */
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ if( ( xQueueStatus = xQueueReceive( xNormallyEmptyQueue, &uxRxed, intqONE_TICK_DELAY ) ) != errQUEUE_EMPTY )
+ {
+ /* We should only obtain a value when the high priority task is
+ suspended. */
+ if( xTaskIsTaskSuspended( xHighPriorityNormallyEmptyTask1 ) == pdFALSE )
+ {
+ prvQueueAccessLogError( __LINE__ );
+ }
+
+ prvRecordValue_NormallyEmpty( uxRxed, intqLOW_PRIORITY_TASK );
+
+ /* Wake the higher priority task again. */
+ vTaskResume( xHighPriorityNormallyEmptyTask1 );
+ uxLowPriorityLoops1++;
+ }
+ else
+ {
+ /* Raise our priority while we send so we can preempt the higher
+ priority task, and ensure we get the Tx value into the queue. */
+ vTaskPrioritySet( NULL, intqHIGHER_PRIORITY + 1 );
+
+ portENTER_CRITICAL();
+ {
+ uxValueForNormallyEmptyQueue++;
+ uxValue = uxValueForNormallyEmptyQueue;
+ }
+ portEXIT_CRITICAL();
+
+ if( xQueueSend( xNormallyEmptyQueue, &uxValue, portMAX_DELAY ) != pdPASS )
+ {
+ prvQueueAccessLogError( __LINE__ );
+ }
+
+ vTaskPrioritySet( NULL, intqLOWER_PRIORITY );
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prv1stHigherPriorityNormallyFullTask( void *pvParameters )
+{
+unsigned portBASE_TYPE uxValueToTx, ux;
+portBASE_TYPE xQueueStatus;
+
+ /* The parameters are not being used so avoid compiler warnings. */
+ ( void ) pvParameters;
+
+ /* Make sure the queue starts full or near full. >> 1 as there are two
+ high priority tasks. */
+ for( ux = 0; ux < ( intqQUEUE_LENGTH >> 1 ); ux++ )
+ {
+ portENTER_CRITICAL();
+ {
+ uxValueForNormallyFullQueue++;
+ uxValueToTx = uxValueForNormallyFullQueue;
+ }
+ portEXIT_CRITICAL();
+
+ xQueueSend( xNormallyFullQueue, &uxValueToTx, intqSHORT_DELAY );
+ }
+
+ for( ;; )
+ {
+ portENTER_CRITICAL();
+ {
+ uxValueForNormallyFullQueue++;
+ uxValueToTx = uxValueForNormallyFullQueue;
+ }
+ portEXIT_CRITICAL();
+
+ if( ( xQueueStatus = xQueueSend( xNormallyFullQueue, &uxValueToTx, intqSHORT_DELAY ) ) != pdPASS )
+ {
+ /* intqHIGH_PRIORITY_TASK2 is never suspended so we would not
+ expect it to ever time out. */
+ prvQueueAccessLogError( __LINE__ );
+ }
+
+ /* Allow the other task running this code to run. */
+ taskYIELD();
+
+ /* Have all the expected values been sent to the queue? */
+ if( uxValueToTx > ( intqNUM_VALUES_TO_LOG + intqVALUE_OVERRUN ) )
+ {
+ /* Make sure the other high priority task completes its send of
+ any values below intqNUM_VALUE_TO_LOG. */
+ vTaskDelay( intqSHORT_DELAY );
+
+ vTaskSuspend( xHighPriorityNormallyFullTask2 );
+
+ if( xWasSuspended == pdTRUE )
+ {
+ /* We would have expected the other high priority task to have
+ set this back to false by now. */
+ prvQueueAccessLogError( __LINE__ );
+ }
+
+ /* Set the suspended flag so an error is not logged if the other
+ task recognises a time out when it is unsuspended. */
+ xWasSuspended = pdTRUE;
+
+ /* Start at 1 as we expect position 0 to be unused. */
+ for( ux = 1; ux < intqNUM_VALUES_TO_LOG; ux++ )
+ {
+ if( ucNormallyFullReceivedValues[ ux ] == 0 )
+ {
+ /* A value was missing. */
+ prvQueueAccessLogError( __LINE__ );
+ }
+ }
+
+ /* Reset the array ready for the next cycle. */
+ memset( ucNormallyFullReceivedValues, 0x00, sizeof( ucNormallyFullReceivedValues ) );
+
+ uxHighPriorityLoops2++;
+ uxValueForNormallyFullQueue = 0;
+
+ /* Suspend ourselves, allowing the lower priority task to
+ actually receive something from the queue. Until now it
+ will have been prevented from doing so by the higher
+ priority tasks. The lower priority task will resume us
+ if it receives something. We will then resume the other
+ higher priority task. */
+ vTaskSuspend( NULL );
+ vTaskResume( xHighPriorityNormallyFullTask2 );
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prv2ndHigherPriorityNormallyFullTask( void *pvParameters )
+{
+unsigned portBASE_TYPE uxValueToTx, ux;
+portBASE_TYPE xQueueStatus;
+
+ /* The parameters are not being used so avoid compiler warnings. */
+ ( void ) pvParameters;
+
+ /* Make sure the queue starts full or near full. >> 1 as there are two
+ high priority tasks. */
+ for( ux = 0; ux < ( intqQUEUE_LENGTH >> 1 ); ux++ )
+ {
+ portENTER_CRITICAL();
+ {
+ uxValueForNormallyFullQueue++;
+ uxValueToTx = uxValueForNormallyFullQueue;
+ }
+ portEXIT_CRITICAL();
+
+ xQueueSend( xNormallyFullQueue, &uxValueToTx, intqSHORT_DELAY );
+ }
+
+ for( ;; )
+ {
+ portENTER_CRITICAL();
+ {
+ uxValueForNormallyFullQueue++;
+ uxValueToTx = uxValueForNormallyFullQueue;
+ }
+ portEXIT_CRITICAL();
+
+ if( ( xQueueStatus = xQueueSend( xNormallyFullQueue, &uxValueToTx, intqSHORT_DELAY ) ) != pdPASS )
+ {
+ if( xWasSuspended != pdTRUE )
+ {
+ /* It is ok to time out if the task has been suspended. */
+ prvQueueAccessLogError( __LINE__ );
+ }
+ }
+
+ xWasSuspended = pdFALSE;
+
+ taskYIELD();
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvLowerPriorityNormallyFullTask( void *pvParameters )
+{
+unsigned portBASE_TYPE uxValue, uxTxed = 9999;
+portBASE_TYPE xQueueStatus;
+
+ /* The parameters are not being used so avoid compiler warnings. */
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ if( ( xQueueStatus = xQueueSend( xNormallyFullQueue, &uxTxed, intqONE_TICK_DELAY ) ) != errQUEUE_FULL )
+ {
+ /* We would only expect to succeed when the higher priority task
+ is suspended. */
+ if( xTaskIsTaskSuspended( xHighPriorityNormallyFullTask1 ) == pdFALSE )
+ {
+ prvQueueAccessLogError( __LINE__ );
+ }
+
+ vTaskResume( xHighPriorityNormallyFullTask1 );
+ uxLowPriorityLoops2++;
+ }
+ else
+ {
+ /* Raise our priority while we receive so we can preempt the higher
+ priority task, and ensure we get the value from the queue. */
+ vTaskPrioritySet( NULL, intqHIGHER_PRIORITY + 1 );
+
+ if( xQueueReceive( xNormallyFullQueue, &uxValue, portMAX_DELAY ) != pdPASS )
+ {
+ prvQueueAccessLogError( __LINE__ );
+ }
+ else
+ {
+ prvRecordValue_NormallyFull( uxValue, intqLOW_PRIORITY_TASK );
+ }
+
+ vTaskPrioritySet( NULL, intqLOWER_PRIORITY );
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE xFirstTimerHandler( void )
+{
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE, uxRxedValue;
+static unsigned portBASE_TYPE uxNextOperation = 0;
+
+ /* Called from a timer interrupt. Perform various read and write
+ accesses on the queues. */
+
+ uxNextOperation++;
+
+ if( uxNextOperation & ( unsigned portBASE_TYPE ) 0x01 )
+ {
+ timerNORMALLY_EMPTY_TX();
+ timerNORMALLY_EMPTY_TX();
+ timerNORMALLY_EMPTY_TX();
+ }
+ else
+ {
+ timerNORMALLY_FULL_RX();
+ timerNORMALLY_FULL_RX();
+ timerNORMALLY_FULL_RX();
+ }
+
+ return xHigherPriorityTaskWoken;
+}
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE xSecondTimerHandler( void )
+{
+unsigned portBASE_TYPE uxRxedValue;
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+static unsigned portBASE_TYPE uxNextOperation = 0;
+
+ /* Called from a timer interrupt. Perform various read and write
+ accesses on the queues. */
+
+ uxNextOperation++;
+
+ if( uxNextOperation & ( unsigned portBASE_TYPE ) 0x01 )
+ {
+ timerNORMALLY_EMPTY_TX();
+ timerNORMALLY_EMPTY_TX();
+
+ timerNORMALLY_EMPTY_RX();
+ timerNORMALLY_EMPTY_RX();
+ }
+ else
+ {
+ timerNORMALLY_FULL_RX();
+ timerNORMALLY_FULL_TX();
+ timerNORMALLY_FULL_TX();
+ timerNORMALLY_FULL_TX();
+ timerNORMALLY_FULL_TX();
+ }
+
+ return xHigherPriorityTaskWoken;
+}
+/*-----------------------------------------------------------*/
+
+
+portBASE_TYPE xAreIntQueueTasksStillRunning( void )
+{
+static unsigned portBASE_TYPE uxLastHighPriorityLoops1 = 0, uxLastHighPriorityLoops2 = 0, uxLastLowPriorityLoops1 = 0, uxLastLowPriorityLoops2 = 0;
+
+ /* xErrorStatus can be set outside of this function. This function just
+ checks that all the tasks are still cycling. */
+
+ if( uxHighPriorityLoops1 == uxLastHighPriorityLoops1 )
+ {
+ /* The high priority 1 task has stalled. */
+ prvQueueAccessLogError( __LINE__ );
+ }
+
+ uxLastHighPriorityLoops1 = uxHighPriorityLoops1;
+
+ if( uxHighPriorityLoops2 == uxLastHighPriorityLoops2 )
+ {
+ /* The high priority 2 task has stalled. */
+ prvQueueAccessLogError( __LINE__ );
+ }
+
+ uxLastHighPriorityLoops2 = uxHighPriorityLoops2;
+
+ if( uxLowPriorityLoops1 == uxLastLowPriorityLoops1 )
+ {
+ /* The low priority 1 task has stalled. */
+ prvQueueAccessLogError( __LINE__ );
+ }
+
+ uxLastLowPriorityLoops1 = uxLowPriorityLoops1;
+
+ if( uxLowPriorityLoops2 == uxLastLowPriorityLoops2 )
+ {
+ /* The low priority 2 task has stalled. */
+ prvQueueAccessLogError( __LINE__ );
+ }
+
+ uxLastLowPriorityLoops2 = uxLowPriorityLoops2;
+
+ return xErrorStatus;
+}
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/flop.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/flop.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/flop.c (revision 14)
@@ -0,0 +1,345 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * Creates eight tasks, each of which loops continuously performing an (emulated)
+ * floating point calculation.
+ *
+ * All the tasks run at the idle priority and never block or yield. This causes
+ * all eight tasks to time slice with the idle task. Running at the idle priority
+ * means that these tasks will get pre-empted any time another task is ready to run
+ * or a time slice occurs. More often than not the pre-emption will occur mid
+ * calculation, creating a good test of the schedulers context switch mechanism - a
+ * calculation producing an unexpected result could be a symptom of a corruption in
+ * the context of a task.
+ */
+
+#include
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* Demo program include files. */
+#include "flop.h"
+
+#define mathSTACK_SIZE configMINIMAL_STACK_SIZE
+#define mathNUMBER_OF_TASKS ( 8 )
+
+/* Four tasks, each of which performs a different floating point calculation.
+Each of the four is created twice. */
+static portTASK_FUNCTION_PROTO( vCompetingMathTask1, pvParameters );
+static portTASK_FUNCTION_PROTO( vCompetingMathTask2, pvParameters );
+static portTASK_FUNCTION_PROTO( vCompetingMathTask3, pvParameters );
+static portTASK_FUNCTION_PROTO( vCompetingMathTask4, pvParameters );
+
+/* These variables are used to check that all the tasks are still running. If a
+task gets a calculation wrong it will
+stop incrementing its check variable. */
+static volatile unsigned portSHORT usTaskCheck[ mathNUMBER_OF_TASKS ] = { ( unsigned portSHORT ) 0 };
+
+/*-----------------------------------------------------------*/
+
+void vStartMathTasks( unsigned portBASE_TYPE uxPriority )
+{
+ xTaskCreate( vCompetingMathTask1, ( signed portCHAR * ) "Math1", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 0 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask2, ( signed portCHAR * ) "Math2", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 1 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask3, ( signed portCHAR * ) "Math3", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 2 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask4, ( signed portCHAR * ) "Math4", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 3 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask1, ( signed portCHAR * ) "Math5", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 4 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask2, ( signed portCHAR * ) "Math6", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 5 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask3, ( signed portCHAR * ) "Math7", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 6 ] ), uxPriority, NULL );
+ xTaskCreate( vCompetingMathTask4, ( signed portCHAR * ) "Math8", mathSTACK_SIZE, ( void * ) &( usTaskCheck[ 7 ] ), uxPriority, NULL );
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vCompetingMathTask1, pvParameters )
+{
+volatile portDOUBLE d1, d2, d3, d4;
+volatile unsigned portSHORT *pusTaskCheckVariable;
+volatile portDOUBLE dAnswer;
+portSHORT sError = pdFALSE;
+
+ d1 = 123.4567;
+ d2 = 2345.6789;
+ d3 = -918.222;
+
+ dAnswer = ( d1 + d2 ) * d3;
+
+ /* The variable this task increments to show it is still running is passed in
+ as the parameter. */
+ pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
+
+ /* Keep performing a calculation and checking the result against a constant. */
+ for(;;)
+ {
+ d1 = 123.4567;
+ d2 = 2345.6789;
+ d3 = -918.222;
+
+ d4 = ( d1 + d2 ) * d3;
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ /* If the calculation does not match the expected constant, stop the
+ increment of the check variable. */
+ if( fabs( d4 - dAnswer ) > 0.001 )
+ {
+ sError = pdTRUE;
+ }
+
+ if( sError == pdFALSE )
+ {
+ /* If the calculation has always been correct, increment the check
+ variable so we know this task is still running okay. */
+ ( *pusTaskCheckVariable )++;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ }
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vCompetingMathTask2, pvParameters )
+{
+volatile portDOUBLE d1, d2, d3, d4;
+volatile unsigned portSHORT *pusTaskCheckVariable;
+volatile portDOUBLE dAnswer;
+portSHORT sError = pdFALSE;
+
+ d1 = -389.38;
+ d2 = 32498.2;
+ d3 = -2.0001;
+
+ dAnswer = ( d1 / d2 ) * d3;
+
+
+ /* The variable this task increments to show it is still running is passed in
+ as the parameter. */
+ pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
+
+ /* Keep performing a calculation and checking the result against a constant. */
+ for( ;; )
+ {
+ d1 = -389.38;
+ d2 = 32498.2;
+ d3 = -2.0001;
+
+ d4 = ( d1 / d2 ) * d3;
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ /* If the calculation does not match the expected constant, stop the
+ increment of the check variable. */
+ if( fabs( d4 - dAnswer ) > 0.001 )
+ {
+ sError = pdTRUE;
+ }
+
+ if( sError == pdFALSE )
+ {
+ /* If the calculation has always been correct, increment the check
+ variable so we know
+ this task is still running okay. */
+ ( *pusTaskCheckVariable )++;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+ }
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vCompetingMathTask3, pvParameters )
+{
+volatile portDOUBLE *pdArray, dTotal1, dTotal2, dDifference;
+volatile unsigned portSHORT *pusTaskCheckVariable;
+const size_t xArraySize = 10;
+size_t xPosition;
+portSHORT sError = pdFALSE;
+
+ /* The variable this task increments to show it is still running is passed in
+ as the parameter. */
+ pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
+
+ pdArray = ( portDOUBLE * ) pvPortMalloc( xArraySize * sizeof( portDOUBLE ) );
+
+ /* Keep filling an array, keeping a running total of the values placed in the
+ array. Then run through the array adding up all the values. If the two totals
+ do not match, stop the check variable from incrementing. */
+ for( ;; )
+ {
+ dTotal1 = 0.0;
+ dTotal2 = 0.0;
+
+ for( xPosition = 0; xPosition < xArraySize; xPosition++ )
+ {
+ pdArray[ xPosition ] = ( portDOUBLE ) xPosition + 5.5;
+ dTotal1 += ( portDOUBLE ) xPosition + 5.5;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ for( xPosition = 0; xPosition < xArraySize; xPosition++ )
+ {
+ dTotal2 += pdArray[ xPosition ];
+ }
+
+ dDifference = dTotal1 - dTotal2;
+ if( fabs( dDifference ) > 0.001 )
+ {
+ sError = pdTRUE;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ if( sError == pdFALSE )
+ {
+ /* If the calculation has always been correct, increment the check
+ variable so we know this task is still running okay. */
+ ( *pusTaskCheckVariable )++;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vCompetingMathTask4, pvParameters )
+{
+volatile portDOUBLE *pdArray, dTotal1, dTotal2, dDifference;
+volatile unsigned portSHORT *pusTaskCheckVariable;
+const size_t xArraySize = 10;
+size_t xPosition;
+portSHORT sError = pdFALSE;
+
+ /* The variable this task increments to show it is still running is passed in
+ as the parameter. */
+ pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters;
+
+ pdArray = ( portDOUBLE * ) pvPortMalloc( xArraySize * sizeof( portDOUBLE ) );
+
+ /* Keep filling an array, keeping a running total of the values placed in the
+ array. Then run through the array adding up all the values. If the two totals
+ do not match, stop the check variable from incrementing. */
+ for( ;; )
+ {
+ dTotal1 = 0.0;
+ dTotal2 = 0.0;
+
+ for( xPosition = 0; xPosition < xArraySize; xPosition++ )
+ {
+ pdArray[ xPosition ] = ( portDOUBLE ) xPosition * 12.123;
+ dTotal1 += ( portDOUBLE ) xPosition * 12.123;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ for( xPosition = 0; xPosition < xArraySize; xPosition++ )
+ {
+ dTotal2 += pdArray[ xPosition ];
+ }
+
+ dDifference = dTotal1 - dTotal2;
+ if( fabs( dDifference ) > 0.001 )
+ {
+ sError = pdTRUE;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ if( sError == pdFALSE )
+ {
+ /* If the calculation has always been correct, increment the check
+ variable so we know this task is still running okay. */
+ ( *pusTaskCheckVariable )++;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreMathsTaskStillRunning( void )
+{
+/* Keep a history of the check variables so we know if they have been incremented
+since the last call. */
+static unsigned portSHORT usLastTaskCheck[ mathNUMBER_OF_TASKS ] = { ( unsigned portSHORT ) 0 };
+portBASE_TYPE xReturn = pdTRUE, xTask;
+
+ /* Check the maths tasks are still running by ensuring their check variables
+ are still incrementing. */
+ for( xTask = 0; xTask < mathNUMBER_OF_TASKS; xTask++ )
+ {
+ if( usTaskCheck[ xTask ] == usLastTaskCheck[ xTask ] )
+ {
+ /* The check has not incremented so an error exists. */
+ xReturn = pdFALSE;
+ }
+
+ usLastTaskCheck[ xTask ] = usTaskCheck[ xTask ];
+ }
+
+ return xReturn;
+}
+
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/AltQTest.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/AltQTest.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/AltQTest.c (revision 14)
@@ -0,0 +1,569 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+/*
+ * This file implements the same demo and test as GenQTest.c, but uses the
+ * light weight API in place of the fully featured API.
+ *
+ * See the comments at the top of GenQTest.c for a description.
+ */
+
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* Demo program include files. */
+#include "AltQTest.h"
+
+#define genqQUEUE_LENGTH ( 5 )
+#define genqNO_BLOCK ( 0 )
+
+#define genqMUTEX_LOW_PRIORITY ( tskIDLE_PRIORITY )
+#define genqMUTEX_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
+#define genqMUTEX_MEDIUM_PRIORITY ( tskIDLE_PRIORITY + 2 )
+#define genqMUTEX_HIGH_PRIORITY ( tskIDLE_PRIORITY + 3 )
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Tests the behaviour of the xQueueAltSendToFront() and xQueueAltSendToBack()
+ * macros by using both to fill a queue, then reading from the queue to
+ * check the resultant queue order is as expected. Queue data is also
+ * peeked.
+ */
+static void prvSendFrontAndBackTest( void *pvParameters );
+
+/*
+ * The following three tasks are used to demonstrate the mutex behaviour.
+ * Each task is given a different priority to demonstrate the priority
+ * inheritance mechanism.
+ *
+ * The low priority task obtains a mutex. After this a high priority task
+ * attempts to obtain the same mutex, causing its priority to be inherited
+ * by the low priority task. The task with the inherited high priority then
+ * resumes a medium priority task to ensure it is not blocked by the medium
+ * priority task while it holds the inherited high priority. Once the mutex
+ * is returned the task with the inherited priority returns to its original
+ * low priority, and is therefore immediately preempted by first the high
+ * priority task and then the medium prioroity task before it can continue.
+ */
+static void prvLowPriorityMutexTask( void *pvParameters );
+static void prvMediumPriorityMutexTask( void *pvParameters );
+static void prvHighPriorityMutexTask( void *pvParameters );
+
+/*-----------------------------------------------------------*/
+
+/* Flag that will be latched to pdTRUE should any unexpected behaviour be
+detected in any of the tasks. */
+static portBASE_TYPE xErrorDetected = pdFALSE;
+
+/* Counters that are incremented on each cycle of a test. This is used to
+detect a stalled task - a test that is no longer running. */
+static volatile unsigned portLONG ulLoopCounter = 0;
+static volatile unsigned portLONG ulLoopCounter2 = 0;
+
+/* The variable that is guarded by the mutex in the mutex demo tasks. */
+static volatile unsigned portLONG ulGuardedVariable = 0;
+
+/* Handles used in the mutext test to suspend and resume the high and medium
+priority mutex test tasks. */
+static xTaskHandle xHighPriorityMutexTask, xMediumPriorityMutexTask;
+
+/*-----------------------------------------------------------*/
+
+void vStartAltGenericQueueTasks( unsigned portBASE_TYPE uxPriority )
+{
+xQueueHandle xQueue;
+xSemaphoreHandle xMutex;
+
+ /* Create the queue that we are going to use for the
+ prvSendFrontAndBackTest demo. */
+ xQueue = xQueueCreate( genqQUEUE_LENGTH, sizeof( unsigned portLONG ) );
+
+ /* vQueueAddToRegistry() adds the queue to the queue registry, if one is
+ in use. The queue registry is provided as a means for kernel aware
+ debuggers to locate queues and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry( xQueue, ( signed portCHAR * ) "Alt_Gen_Test_Queue" );
+
+ /* Create the demo task and pass it the queue just created. We are
+ passing the queue handle by value so it does not matter that it is
+ declared on the stack here. */
+ xTaskCreate( prvSendFrontAndBackTest, ( signed portCHAR * ) "FGenQ", configMINIMAL_STACK_SIZE, ( void * ) xQueue, uxPriority, NULL );
+
+ /* Create the mutex used by the prvMutexTest task. */
+ xMutex = xSemaphoreCreateMutex();
+
+ /* vQueueAddToRegistry() adds the mutex to the registry, if one is
+ in use. The registry is provided as a means for kernel aware
+ debuggers to locate mutex and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry( ( xQueueHandle ) xMutex, ( signed portCHAR * ) "Alt_Q_Mutex" );
+
+ /* Create the mutex demo tasks and pass it the mutex just created. We are
+ passing the mutex handle by value so it does not matter that it is declared
+ on the stack here. */
+ xTaskCreate( prvLowPriorityMutexTask, ( signed portCHAR * ) "FMuLow", configMINIMAL_STACK_SIZE, ( void * ) xMutex, genqMUTEX_LOW_PRIORITY, NULL );
+ xTaskCreate( prvMediumPriorityMutexTask, ( signed portCHAR * ) "FMuMed", configMINIMAL_STACK_SIZE, NULL, genqMUTEX_MEDIUM_PRIORITY, &xMediumPriorityMutexTask );
+ xTaskCreate( prvHighPriorityMutexTask, ( signed portCHAR * ) "FMuHigh", configMINIMAL_STACK_SIZE, ( void * ) xMutex, genqMUTEX_HIGH_PRIORITY, &xHighPriorityMutexTask );
+}
+/*-----------------------------------------------------------*/
+
+static void prvSendFrontAndBackTest( void *pvParameters )
+{
+unsigned portLONG ulData, ulData2;
+xQueueHandle xQueue;
+
+ #ifdef USE_STDIO
+ void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );
+
+ const portCHAR * const pcTaskStartMsg = "Alt queue SendToFront/SendToBack/Peek test started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+ #endif
+
+ xQueue = ( xQueueHandle ) pvParameters;
+
+ for( ;; )
+ {
+ /* The queue is empty, so sending an item to the back of the queue
+ should have the same efect as sending it to the front of the queue.
+
+ First send to the front and check everything is as expected. */
+ xQueueAltSendToFront( xQueue, ( void * ) &ulLoopCounter, genqNO_BLOCK );
+
+ if( uxQueueMessagesWaiting( xQueue ) != 1 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( xQueueAltReceive( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* The data we sent to the queue should equal the data we just received
+ from the queue. */
+ if( ulLoopCounter != ulData )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Then do the same, sending the data to the back, checking everything
+ is as expected. */
+ if( uxQueueMessagesWaiting( xQueue ) != 0 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ xQueueAltSendToBack( xQueue, ( void * ) &ulLoopCounter, genqNO_BLOCK );
+
+ if( uxQueueMessagesWaiting( xQueue ) != 1 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( xQueueAltReceive( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( uxQueueMessagesWaiting( xQueue ) != 0 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* The data we sent to the queue should equal the data we just received
+ from the queue. */
+ if( ulLoopCounter != ulData )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+
+
+ /* Place 2, 3, 4 into the queue, adding items to the back of the queue. */
+ for( ulData = 2; ulData < 5; ulData++ )
+ {
+ xQueueAltSendToBack( xQueue, ( void * ) &ulData, genqNO_BLOCK );
+ }
+
+ /* Now the order in the queue should be 2, 3, 4, with 2 being the first
+ thing to be read out. Now add 1 then 0 to the front of the queue. */
+ if( uxQueueMessagesWaiting( xQueue ) != 3 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+ ulData = 1;
+ xQueueAltSendToFront( xQueue, ( void * ) &ulData, genqNO_BLOCK );
+ ulData = 0;
+ xQueueAltSendToFront( xQueue, ( void * ) &ulData, genqNO_BLOCK );
+
+ /* Now the queue should be full, and when we read the data out we
+ should receive 0, 1, 2, 3, 4. */
+ if( uxQueueMessagesWaiting( xQueue ) != 5 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( xQueueAltSendToFront( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != errQUEUE_FULL )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( xQueueAltSendToBack( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != errQUEUE_FULL )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ /* Check the data we read out is in the expected order. */
+ for( ulData = 0; ulData < genqQUEUE_LENGTH; ulData++ )
+ {
+ /* Try peeking the data first. */
+ if( xQueueAltPeek( xQueue, &ulData2, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( ulData != ulData2 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+
+ /* Now try receiving the data for real. The value should be the
+ same. Clobber the value first so we know we really received it. */
+ ulData2 = ~ulData2;
+ if( xQueueAltReceive( xQueue, &ulData2, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( ulData != ulData2 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+ }
+
+ /* The queue should now be empty again. */
+ if( uxQueueMessagesWaiting( xQueue ) != 0 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+
+ /* Our queue is empty once more, add 10, 11 to the back. */
+ ulData = 10;
+ if( xQueueAltSendToBack( xQueue, &ulData, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+ ulData = 11;
+ if( xQueueAltSendToBack( xQueue, &ulData, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( uxQueueMessagesWaiting( xQueue ) != 2 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now we should have 10, 11 in the queue. Add 7, 8, 9 to the
+ front. */
+ for( ulData = 9; ulData >= 7; ulData-- )
+ {
+ if( xQueueAltSendToFront( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+ }
+
+ /* Now check that the queue is full, and that receiving data provides
+ the expected sequence of 7, 8, 9, 10, 11. */
+ if( uxQueueMessagesWaiting( xQueue ) != 5 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( xQueueAltSendToFront( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != errQUEUE_FULL )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( xQueueAltSendToBack( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != errQUEUE_FULL )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ /* Check the data we read out is in the expected order. */
+ for( ulData = 7; ulData < ( 7 + genqQUEUE_LENGTH ); ulData++ )
+ {
+ if( xQueueAltReceive( xQueue, &ulData2, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( ulData != ulData2 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+ }
+
+ if( uxQueueMessagesWaiting( xQueue ) != 0 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ ulLoopCounter++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvLowPriorityMutexTask( void *pvParameters )
+{
+xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;
+
+ #ifdef USE_STDIO
+ void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );
+
+ const portCHAR * const pcTaskStartMsg = "Fast mutex with priority inheritance test started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+ #endif
+
+ ( void ) pvParameters;
+
+
+ for( ;; )
+ {
+ /* Take the mutex. It should be available now. */
+ if( xSemaphoreAltTake( xMutex, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Set our guarded variable to a known start value. */
+ ulGuardedVariable = 0;
+
+ /* Our priority should be as per that assigned when the task was
+ created. */
+ if( uxTaskPriorityGet( NULL ) != genqMUTEX_LOW_PRIORITY )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now unsuspend the high priority task. This will attempt to take the
+ mutex, and block when it finds it cannot obtain it. */
+ vTaskResume( xHighPriorityMutexTask );
+
+ /* We should now have inherited the prioritoy of the high priority task,
+ as by now it will have attempted to get the mutex. */
+ if( uxTaskPriorityGet( NULL ) != genqMUTEX_HIGH_PRIORITY )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* We can attempt to set our priority to the test priority - between the
+ idle priority and the medium/high test priorities, but our actual
+ prioroity should remain at the high priority. */
+ vTaskPrioritySet( NULL, genqMUTEX_TEST_PRIORITY );
+ if( uxTaskPriorityGet( NULL ) != genqMUTEX_HIGH_PRIORITY )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now unsuspend the medium priority task. This should not run as our
+ inherited priority is above that of the medium priority task. */
+ vTaskResume( xMediumPriorityMutexTask );
+
+ /* If the did run then it will have incremented our guarded variable. */
+ if( ulGuardedVariable != 0 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we give back the semaphore our priority should be disinherited
+ back to the priority to which we attempted to set ourselves. This means
+ that when the high priority task next blocks, the medium priority task
+ should execute and increment the guarded variable. When we next run
+ both the high and medium priority tasks will have been suspended again. */
+ if( xSemaphoreAltGive( xMutex ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Check that the guarded variable did indeed increment... */
+ if( ulGuardedVariable != 1 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* ... and that our priority has been disinherited to
+ genqMUTEX_TEST_PRIORITY. */
+ if( uxTaskPriorityGet( NULL ) != genqMUTEX_TEST_PRIORITY )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Set our priority back to our original priority ready for the next
+ loop around this test. */
+ vTaskPrioritySet( NULL, genqMUTEX_LOW_PRIORITY );
+
+ /* Just to show we are still running. */
+ ulLoopCounter2++;
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvMediumPriorityMutexTask( void *pvParameters )
+{
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /* The medium priority task starts by suspending itself. The low
+ priority task will unsuspend this task when required. */
+ vTaskSuspend( NULL );
+
+ /* When this task unsuspends all it does is increment the guarded
+ variable, this is so the low priority task knows that it has
+ executed. */
+ ulGuardedVariable++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvHighPriorityMutexTask( void *pvParameters )
+{
+xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;
+
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /* The high priority task starts by suspending itself. The low
+ priority task will unsuspend this task when required. */
+ vTaskSuspend( NULL );
+
+ /* When this task unsuspends all it does is attempt to obtain
+ the mutex. It should find the mutex is not available so a
+ block time is specified. */
+ if( xSemaphoreAltTake( xMutex, portMAX_DELAY ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we eventually obtain the mutex we just give it back then
+ return to suspend ready for the next test. */
+ if( xSemaphoreAltGive( xMutex ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreAltGenericQueueTasksStillRunning( void )
+{
+static unsigned portLONG ulLastLoopCounter = 0, ulLastLoopCounter2 = 0;
+
+ /* If the demo task is still running then we expect the loopcounters to
+ have incremented since this function was last called. */
+ if( ulLastLoopCounter == ulLoopCounter )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( ulLastLoopCounter2 == ulLoopCounter2 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ ulLastLoopCounter = ulLoopCounter;
+ ulLastLoopCounter2 = ulLoopCounter2;
+
+ /* Errors detected in the task itself will have latched xErrorDetected
+ to true. */
+
+ return !xErrorDetected;
+}
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/crflash.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/crflash.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/crflash.c (revision 14)
@@ -0,0 +1,228 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * This demo application file demonstrates the use of queues to pass data
+ * between co-routines.
+ *
+ * N represents the number of 'fixed delay' co-routines that are created and
+ * is set during initialisation.
+ *
+ * N 'fixed delay' co-routines are created that just block for a fixed
+ * period then post the number of an LED onto a queue. Each such co-routine
+ * uses a different block period. A single 'flash' co-routine is also created
+ * that blocks on the same queue, waiting for the number of the next LED it
+ * should flash. Upon receiving a number it simply toggle the instructed LED
+ * then blocks on the queue once more. In this manner each LED from LED 0 to
+ * LED N-1 is caused to flash at a different rate.
+ *
+ * The 'fixed delay' co-routines are created with co-routine priority 0. The
+ * flash co-routine is created with co-routine priority 1. This means that
+ * the queue should never contain more than a single item. This is because
+ * posting to the queue will unblock the 'flash' co-routine, and as this has
+ * a priority greater than the tasks posting to the queue it is guaranteed to
+ * have emptied the queue and blocked once again before the queue can contain
+ * any more date. An error is indicated if an attempt to post data to the
+ * queue fails - indicating that the queue is already full.
+ *
+ */
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+#include "croutine.h"
+#include "queue.h"
+
+/* Demo application includes. */
+#include "partest.h"
+#include "crflash.h"
+
+/* The queue should only need to be of length 1. See the description at the
+top of the file. */
+#define crfQUEUE_LENGTH 1
+
+#define crfFIXED_DELAY_PRIORITY 0
+#define crfFLASH_PRIORITY 1
+
+/* Only one flash co-routine is created so the index is not significant. */
+#define crfFLASH_INDEX 0
+
+/* Don't allow more than crfMAX_FLASH_TASKS 'fixed delay' co-routines to be
+created. */
+#define crfMAX_FLASH_TASKS 8
+
+/* We don't want to block when posting to the queue. */
+#define crfPOSTING_BLOCK_TIME 0
+
+/*
+ * The 'fixed delay' co-routine as described at the top of the file.
+ */
+static void prvFixedDelayCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex );
+
+/*
+ * The 'flash' co-routine as described at the top of the file.
+ */
+static void prvFlashCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex );
+
+/* The queue used to pass data between the 'fixed delay' co-routines and the
+'flash' co-routine. */
+static xQueueHandle xFlashQueue;
+
+/* This will be set to pdFALSE if we detect an error. */
+static portBASE_TYPE xCoRoutineFlashStatus = pdPASS;
+
+/*-----------------------------------------------------------*/
+
+/*
+ * See the header file for details.
+ */
+void vStartFlashCoRoutines( unsigned portBASE_TYPE uxNumberToCreate )
+{
+unsigned portBASE_TYPE uxIndex;
+
+ if( uxNumberToCreate > crfMAX_FLASH_TASKS )
+ {
+ uxNumberToCreate = crfMAX_FLASH_TASKS;
+ }
+
+ /* Create the queue used to pass data between the co-routines. */
+ xFlashQueue = xQueueCreate( crfQUEUE_LENGTH, sizeof( unsigned portBASE_TYPE ) );
+
+ if( xFlashQueue )
+ {
+ /* Create uxNumberToCreate 'fixed delay' co-routines. */
+ for( uxIndex = 0; uxIndex < uxNumberToCreate; uxIndex++ )
+ {
+ xCoRoutineCreate( prvFixedDelayCoRoutine, crfFIXED_DELAY_PRIORITY, uxIndex );
+ }
+
+ /* Create the 'flash' co-routine. */
+ xCoRoutineCreate( prvFlashCoRoutine, crfFLASH_PRIORITY, crfFLASH_INDEX );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvFixedDelayCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
+{
+/* Even though this is a co-routine the xResult variable does not need to be
+static as we do not need it to maintain its state between blocks. */
+signed portBASE_TYPE xResult;
+/* The uxIndex parameter of the co-routine function is used as an index into
+the xFlashRates array to obtain the delay period to use. */
+static const portTickType xFlashRates[ crfMAX_FLASH_TASKS ] = { 150 / portTICK_RATE_MS,
+ 200 / portTICK_RATE_MS,
+ 250 / portTICK_RATE_MS,
+ 300 / portTICK_RATE_MS,
+ 350 / portTICK_RATE_MS,
+ 400 / portTICK_RATE_MS,
+ 450 / portTICK_RATE_MS,
+ 500 / portTICK_RATE_MS };
+
+ /* Co-routines MUST start with a call to crSTART. */
+ crSTART( xHandle );
+
+ for( ;; )
+ {
+ /* Post our uxIndex value onto the queue. This is used as the LED to
+ flash. */
+ crQUEUE_SEND( xHandle, xFlashQueue, ( void * ) &uxIndex, crfPOSTING_BLOCK_TIME, &xResult );
+
+ if( xResult != pdPASS )
+ {
+ /* For the reasons stated at the top of the file we should always
+ find that we can post to the queue. If we could not then an error
+ has occurred. */
+ xCoRoutineFlashStatus = pdFAIL;
+ }
+
+ crDELAY( xHandle, xFlashRates[ uxIndex ] );
+ }
+
+ /* Co-routines MUST end with a call to crEND. */
+ crEND();
+}
+/*-----------------------------------------------------------*/
+
+static void prvFlashCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
+{
+/* Even though this is a co-routine the variable do not need to be
+static as we do not need it to maintain their state between blocks. */
+signed portBASE_TYPE xResult;
+unsigned portBASE_TYPE uxLEDToFlash;
+
+ /* Co-routines MUST start with a call to crSTART. */
+ crSTART( xHandle );
+ ( void ) uxIndex;
+
+ for( ;; )
+ {
+ /* Block to wait for the number of the LED to flash. */
+ crQUEUE_RECEIVE( xHandle, xFlashQueue, &uxLEDToFlash, portMAX_DELAY, &xResult );
+
+ if( xResult != pdPASS )
+ {
+ /* We would not expect to wake unless we received something. */
+ xCoRoutineFlashStatus = pdFAIL;
+ }
+ else
+ {
+ /* We received the number of an LED to flash - flash it! */
+ vParTestToggleLED( uxLEDToFlash );
+ }
+ }
+
+ /* Co-routines MUST end with a call to crEND. */
+ crEND();
+}
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE xAreFlashCoRoutinesStillRunning( void )
+{
+ /* Return pdPASS or pdFAIL depending on whether an error has been detected
+ or not. */
+ return xCoRoutineFlashStatus;
+}
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/dynamic.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/dynamic.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/dynamic.c (revision 14)
@@ -0,0 +1,421 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * The first test creates three tasks - two counter tasks (one continuous count
+ * and one limited count) and one controller. A "count" variable is shared
+ * between all three tasks. The two counter tasks should never be in a "ready"
+ * state at the same time. The controller task runs at the same priority as
+ * the continuous count task, and at a lower priority than the limited count
+ * task.
+ *
+ * One counter task loops indefinitely, incrementing the shared count variable
+ * on each iteration. To ensure it has exclusive access to the variable it
+ * raises it's priority above that of the controller task before each
+ * increment, lowering it again to it's original priority before starting the
+ * next iteration.
+ *
+ * The other counter task increments the shared count variable on each
+ * iteration of it's loop until the count has reached a limit of 0xff - at
+ * which point it suspends itself. It will not start a new loop until the
+ * controller task has made it "ready" again by calling vTaskResume ().
+ * This second counter task operates at a higher priority than controller
+ * task so does not need to worry about mutual exclusion of the counter
+ * variable.
+ *
+ * The controller task is in two sections. The first section controls and
+ * monitors the continuous count task. When this section is operational the
+ * limited count task is suspended. Likewise, the second section controls
+ * and monitors the limited count task. When this section is operational the
+ * continuous count task is suspended.
+ *
+ * In the first section the controller task first takes a copy of the shared
+ * count variable. To ensure mutual exclusion on the count variable it
+ * suspends the continuous count task, resuming it again when the copy has been
+ * taken. The controller task then sleeps for a fixed period - during which
+ * the continuous count task will execute and increment the shared variable.
+ * When the controller task wakes it checks that the continuous count task
+ * has executed by comparing the copy of the shared variable with its current
+ * value. This time, to ensure mutual exclusion, the scheduler itself is
+ * suspended with a call to vTaskSuspendAll (). This is for demonstration
+ * purposes only and is not a recommended technique due to its inefficiency.
+ *
+ * After a fixed number of iterations the controller task suspends the
+ * continuous count task, and moves on to its second section.
+ *
+ * At the start of the second section the shared variable is cleared to zero.
+ * The limited count task is then woken from it's suspension by a call to
+ * vTaskResume (). As this counter task operates at a higher priority than
+ * the controller task the controller task should not run again until the
+ * shared variable has been counted up to the limited value causing the counter
+ * task to suspend itself. The next line after vTaskResume () is therefore
+ * a check on the shared variable to ensure everything is as expected.
+ *
+ *
+ * The second test consists of a couple of very simple tasks that post onto a
+ * queue while the scheduler is suspended. This test was added to test parts
+ * of the scheduler not exercised by the first test.
+ *
+ */
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* Demo app include files. */
+#include "dynamic.h"
+
+/* Function that implements the "limited count" task as described above. */
+static portTASK_FUNCTION_PROTO( vLimitedIncrementTask, pvParameters );
+
+/* Function that implements the "continuous count" task as described above. */
+static portTASK_FUNCTION_PROTO( vContinuousIncrementTask, pvParameters );
+
+/* Function that implements the controller task as described above. */
+static portTASK_FUNCTION_PROTO( vCounterControlTask, pvParameters );
+
+static portTASK_FUNCTION_PROTO( vQueueReceiveWhenSuspendedTask, pvParameters );
+static portTASK_FUNCTION_PROTO( vQueueSendWhenSuspendedTask, pvParameters );
+
+/* Demo task specific constants. */
+#define priSTACK_SIZE ( configMINIMAL_STACK_SIZE )
+#define priSLEEP_TIME ( ( portTickType ) 128 / portTICK_RATE_MS )
+#define priLOOPS ( 5 )
+#define priMAX_COUNT ( ( unsigned portLONG ) 0xff )
+#define priNO_BLOCK ( ( portTickType ) 0 )
+#define priSUSPENDED_QUEUE_LENGTH ( 1 )
+
+/*-----------------------------------------------------------*/
+
+/* Handles to the two counter tasks. These could be passed in as parameters
+to the controller task to prevent them having to be file scope. */
+static xTaskHandle xContinousIncrementHandle, xLimitedIncrementHandle;
+
+/* The shared counter variable. This is passed in as a parameter to the two
+counter variables for demonstration purposes. */
+static unsigned portLONG ulCounter;
+
+/* Variables used to check that the tasks are still operating without error.
+Each complete iteration of the controller task increments this variable
+provided no errors have been found. The variable maintaining the same value
+is therefore indication of an error. */
+static volatile unsigned portSHORT usCheckVariable = ( unsigned portSHORT ) 0;
+static volatile portBASE_TYPE xSuspendedQueueSendError = pdFALSE;
+static volatile portBASE_TYPE xSuspendedQueueReceiveError = pdFALSE;
+
+/* Queue used by the second test. */
+xQueueHandle xSuspendedTestQueue;
+
+/*-----------------------------------------------------------*/
+/*
+ * Start the three tasks as described at the top of the file.
+ * Note that the limited count task is given a higher priority.
+ */
+void vStartDynamicPriorityTasks( void )
+{
+ xSuspendedTestQueue = xQueueCreate( priSUSPENDED_QUEUE_LENGTH, sizeof( unsigned portLONG ) );
+
+ /* vQueueAddToRegistry() adds the queue to the queue registry, if one is
+ in use. The queue registry is provided as a means for kernel aware
+ debuggers to locate queues and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry( xSuspendedTestQueue, ( signed portCHAR * ) "Suspended_Test_Queue" );
+
+ xTaskCreate( vContinuousIncrementTask, ( signed portCHAR * ) "CNT_INC", priSTACK_SIZE, ( void * ) &ulCounter, tskIDLE_PRIORITY, &xContinousIncrementHandle );
+ xTaskCreate( vLimitedIncrementTask, ( signed portCHAR * ) "LIM_INC", priSTACK_SIZE, ( void * ) &ulCounter, tskIDLE_PRIORITY + 1, &xLimitedIncrementHandle );
+ xTaskCreate( vCounterControlTask, ( signed portCHAR * ) "C_CTRL", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
+ xTaskCreate( vQueueSendWhenSuspendedTask, ( signed portCHAR * ) "SUSP_TX", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
+ xTaskCreate( vQueueReceiveWhenSuspendedTask, ( signed portCHAR * ) "SUSP_RX", priSTACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Just loops around incrementing the shared variable until the limit has been
+ * reached. Once the limit has been reached it suspends itself.
+ */
+static portTASK_FUNCTION( vLimitedIncrementTask, pvParameters )
+{
+unsigned portLONG *pulCounter;
+
+ /* Take a pointer to the shared variable from the parameters passed into
+ the task. */
+ pulCounter = ( unsigned portLONG * ) pvParameters;
+
+ /* This will run before the control task, so the first thing it does is
+ suspend - the control task will resume it when ready. */
+ vTaskSuspend( NULL );
+
+ for( ;; )
+ {
+ /* Just count up to a value then suspend. */
+ ( *pulCounter )++;
+
+ if( *pulCounter >= priMAX_COUNT )
+ {
+ vTaskSuspend( NULL );
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Just keep counting the shared variable up. The control task will suspend
+ * this task when it wants.
+ */
+static portTASK_FUNCTION( vContinuousIncrementTask, pvParameters )
+{
+unsigned portLONG *pulCounter;
+unsigned portBASE_TYPE uxOurPriority;
+
+ /* Take a pointer to the shared variable from the parameters passed into
+ the task. */
+ pulCounter = ( unsigned portLONG * ) pvParameters;
+
+ /* Query our priority so we can raise it when exclusive access to the
+ shared variable is required. */
+ uxOurPriority = uxTaskPriorityGet( NULL );
+
+ for( ;; )
+ {
+ /* Raise our priority above the controller task to ensure a context
+ switch does not occur while we are accessing this variable. */
+ vTaskPrioritySet( NULL, uxOurPriority + 1 );
+ ( *pulCounter )++;
+ vTaskPrioritySet( NULL, uxOurPriority );
+ }
+}
+/*-----------------------------------------------------------*/
+
+/*
+ * Controller task as described above.
+ */
+static portTASK_FUNCTION( vCounterControlTask, pvParameters )
+{
+unsigned portLONG ulLastCounter;
+portSHORT sLoops;
+portSHORT sError = pdFALSE;
+
+ /* Just to stop warning messages. */
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /* Start with the counter at zero. */
+ ulCounter = ( unsigned portLONG ) 0;
+
+ /* First section : */
+
+ /* Check the continuous count task is running. */
+ for( sLoops = 0; sLoops < priLOOPS; sLoops++ )
+ {
+ /* Suspend the continuous count task so we can take a mirror of the
+ shared variable without risk of corruption. */
+ vTaskSuspend( xContinousIncrementHandle );
+ ulLastCounter = ulCounter;
+ vTaskResume( xContinousIncrementHandle );
+
+ /* Now delay to ensure the other task has processor time. */
+ vTaskDelay( priSLEEP_TIME );
+
+ /* Check the shared variable again. This time to ensure mutual
+ exclusion the whole scheduler will be locked. This is just for
+ demo purposes! */
+ vTaskSuspendAll();
+ {
+ if( ulLastCounter == ulCounter )
+ {
+ /* The shared variable has not changed. There is a problem
+ with the continuous count task so flag an error. */
+ sError = pdTRUE;
+ }
+ }
+ xTaskResumeAll();
+ }
+
+
+ /* Second section: */
+
+ /* Suspend the continuous counter task so it stops accessing the shared variable. */
+ vTaskSuspend( xContinousIncrementHandle );
+
+ /* Reset the variable. */
+ ulCounter = ( unsigned portLONG ) 0;
+
+ /* Resume the limited count task which has a higher priority than us.
+ We should therefore not return from this call until the limited count
+ task has suspended itself with a known value in the counter variable. */
+ vTaskResume( xLimitedIncrementHandle );
+
+ /* Does the counter variable have the expected value? */
+ if( ulCounter != priMAX_COUNT )
+ {
+ sError = pdTRUE;
+ }
+
+ if( sError == pdFALSE )
+ {
+ /* If no errors have occurred then increment the check variable. */
+ portENTER_CRITICAL();
+ usCheckVariable++;
+ portEXIT_CRITICAL();
+ }
+
+ /* Resume the continuous count task and do it all again. */
+ vTaskResume( xContinousIncrementHandle );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vQueueSendWhenSuspendedTask, pvParameters )
+{
+static unsigned portLONG ulValueToSend = ( unsigned portLONG ) 0;
+
+ /* Just to stop warning messages. */
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ vTaskSuspendAll();
+ {
+ /* We must not block while the scheduler is suspended! */
+ if( xQueueSend( xSuspendedTestQueue, ( void * ) &ulValueToSend, priNO_BLOCK ) != pdTRUE )
+ {
+ xSuspendedQueueSendError = pdTRUE;
+ }
+ }
+ xTaskResumeAll();
+
+ vTaskDelay( priSLEEP_TIME );
+
+ ++ulValueToSend;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vQueueReceiveWhenSuspendedTask, pvParameters )
+{
+static unsigned portLONG ulExpectedValue = ( unsigned portLONG ) 0, ulReceivedValue;
+portBASE_TYPE xGotValue;
+
+ /* Just to stop warning messages. */
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ do
+ {
+ /* Suspending the scheduler here is fairly pointless and
+ undesirable for a normal application. It is done here purely
+ to test the scheduler. The inner xTaskResumeAll() should
+ never return pdTRUE as the scheduler is still locked by the
+ outer call. */
+ vTaskSuspendAll();
+ {
+ vTaskSuspendAll();
+ {
+ xGotValue = xQueueReceive( xSuspendedTestQueue, ( void * ) &ulReceivedValue, priNO_BLOCK );
+ }
+ if( xTaskResumeAll() )
+ {
+ xSuspendedQueueReceiveError = pdTRUE;
+ }
+ }
+ xTaskResumeAll();
+
+ #if configUSE_PREEMPTION == 0
+ {
+ taskYIELD();
+ }
+ #endif
+
+ } while( xGotValue == pdFALSE );
+
+ if( ulReceivedValue != ulExpectedValue )
+ {
+ xSuspendedQueueReceiveError = pdTRUE;
+ }
+
+ ++ulExpectedValue;
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* Called to check that all the created tasks are still running without error. */
+portBASE_TYPE xAreDynamicPriorityTasksStillRunning( void )
+{
+/* Keep a history of the check variables so we know if it has been incremented
+since the last call. */
+static unsigned portSHORT usLastTaskCheck = ( unsigned portSHORT ) 0;
+portBASE_TYPE xReturn = pdTRUE;
+
+ /* Check the tasks are still running by ensuring the check variable
+ is still incrementing. */
+
+ if( usCheckVariable == usLastTaskCheck )
+ {
+ /* The check has not incremented so an error exists. */
+ xReturn = pdFALSE;
+ }
+
+ if( xSuspendedQueueSendError == pdTRUE )
+ {
+ xReturn = pdFALSE;
+ }
+
+ if( xSuspendedQueueReceiveError == pdTRUE )
+ {
+ xReturn = pdFALSE;
+ }
+
+ usLastTaskCheck = usCheckVariable;
+ return xReturn;
+}
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/QPeek.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/QPeek.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/QPeek.c (revision 14)
@@ -0,0 +1,440 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+/*
+ * Tests the behaviour when data is peeked from a queue when there are
+ * multiple tasks blocked on the queue.
+ */
+
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* Demo program include files. */
+#include "QPeek.h"
+
+#define qpeekQUEUE_LENGTH ( 5 )
+#define qpeekNO_BLOCK ( 0 )
+#define qpeekSHORT_DELAY ( 10 )
+
+#define qpeekLOW_PRIORITY ( tskIDLE_PRIORITY + 0 )
+#define qpeekMEDIUM_PRIORITY ( tskIDLE_PRIORITY + 1 )
+#define qpeekHIGH_PRIORITY ( tskIDLE_PRIORITY + 2 )
+#define qpeekHIGHEST_PRIORITY ( tskIDLE_PRIORITY + 3 )
+
+/*-----------------------------------------------------------*/
+
+/*
+ * The following three tasks are used to demonstrate the peeking behaviour.
+ * Each task is given a different priority to demonstrate the order in which
+ * tasks are woken as data is peeked from a queue.
+ */
+static void prvLowPriorityPeekTask( void *pvParameters );
+static void prvMediumPriorityPeekTask( void *pvParameters );
+static void prvHighPriorityPeekTask( void *pvParameters );
+static void prvHighestPriorityPeekTask( void *pvParameters );
+
+/*-----------------------------------------------------------*/
+
+/* Flag that will be latched to pdTRUE should any unexpected behaviour be
+detected in any of the tasks. */
+static volatile portBASE_TYPE xErrorDetected = pdFALSE;
+
+/* Counter that is incremented on each cycle of a test. This is used to
+detect a stalled task - a test that is no longer running. */
+static volatile unsigned portLONG ulLoopCounter = 0;
+
+/* Handles to the test tasks. */
+xTaskHandle xMediumPriorityTask, xHighPriorityTask, xHighestPriorityTask;
+/*-----------------------------------------------------------*/
+
+void vStartQueuePeekTasks( void )
+{
+xQueueHandle xQueue;
+
+ /* Create the queue that we are going to use for the test/demo. */
+ xQueue = xQueueCreate( qpeekQUEUE_LENGTH, sizeof( unsigned portLONG ) );
+
+ /* vQueueAddToRegistry() adds the queue to the queue registry, if one is
+ in use. The queue registry is provided as a means for kernel aware
+ debuggers to locate queues and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry( xQueue, ( signed portCHAR * ) "QPeek_Test_Queue" );
+
+ /* Create the demo tasks and pass it the queue just created. We are
+ passing the queue handle by value so it does not matter that it is declared
+ on the stack here. */
+ xTaskCreate( prvLowPriorityPeekTask, ( signed portCHAR * )"PeekL", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekLOW_PRIORITY, NULL );
+ xTaskCreate( prvMediumPriorityPeekTask, ( signed portCHAR * )"PeekM", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekMEDIUM_PRIORITY, &xMediumPriorityTask );
+ xTaskCreate( prvHighPriorityPeekTask, ( signed portCHAR * )"PeekH1", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekHIGH_PRIORITY, &xHighPriorityTask );
+ xTaskCreate( prvHighestPriorityPeekTask, ( signed portCHAR * )"PeekH2", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekHIGHEST_PRIORITY, &xHighestPriorityTask );
+}
+/*-----------------------------------------------------------*/
+
+static void prvHighestPriorityPeekTask( void *pvParameters )
+{
+xQueueHandle xQueue = ( xQueueHandle ) pvParameters;
+unsigned portLONG ulValue;
+
+ #ifdef USE_STDIO
+ {
+ void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );
+
+ const portCHAR * const pcTaskStartMsg = "Queue peek test started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+ }
+ #endif
+
+ for( ;; )
+ {
+ /* Try peeking from the queue. The queue should be empty so we will
+ block, allowing the high priority task to execute. */
+ if( xQueuePeek( xQueue, &ulValue, portMAX_DELAY ) != pdPASS )
+ {
+ /* We expected to have received something by the time we unblock. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we reach here the high and medium priority tasks should still
+ be blocked on the queue. We unblocked because the low priority task
+ wrote a value to the queue, which we should have peeked. Peeking the
+ data (rather than receiving it) will leave the data on the queue, so
+ the high priority task should then have also been unblocked, but not
+ yet executed. */
+ if( ulValue != 0x11223344 )
+ {
+ /* We did not receive the expected value. */
+ xErrorDetected = pdTRUE;
+ }
+
+ if( uxQueueMessagesWaiting( xQueue ) != 1 )
+ {
+ /* The message should have been left on the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now we are going to actually receive the data, so when the high
+ priority task runs it will find the queue empty and return to the
+ blocked state. */
+ ulValue = 0;
+ if( xQueueReceive( xQueue, &ulValue, qpeekNO_BLOCK ) != pdPASS )
+ {
+ /* We expected to receive the value. */
+ xErrorDetected = pdTRUE;
+ }
+
+ if( ulValue != 0x11223344 )
+ {
+ /* We did not receive the expected value - which should have been
+ the same value as was peeked. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now we will block again as the queue is once more empty. The low
+ priority task can then execute again. */
+ if( xQueuePeek( xQueue, &ulValue, portMAX_DELAY ) != pdPASS )
+ {
+ /* We expected to have received something by the time we unblock. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we get here the low priority task should have again written to the
+ queue. */
+ if( ulValue != 0x01234567 )
+ {
+ /* We did not receive the expected value. */
+ xErrorDetected = pdTRUE;
+ }
+
+ if( uxQueueMessagesWaiting( xQueue ) != 1 )
+ {
+ /* The message should have been left on the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* We only peeked the data, so suspending ourselves now should enable
+ the high priority task to also peek the data. The high priority task
+ will have been unblocked when we peeked the data as we left the data
+ in the queue. */
+ vTaskSuspend( NULL );
+
+
+
+ /* This time we are going to do the same as the above test, but the
+ high priority task is going to receive the data, rather than peek it.
+ This means that the medium priority task should never peek the value. */
+ if( xQueuePeek( xQueue, &ulValue, portMAX_DELAY ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( ulValue != 0xaabbaabb )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ vTaskSuspend( NULL );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvHighPriorityPeekTask( void *pvParameters )
+{
+xQueueHandle xQueue = ( xQueueHandle ) pvParameters;
+unsigned portLONG ulValue;
+
+ for( ;; )
+ {
+ /* Try peeking from the queue. The queue should be empty so we will
+ block, allowing the medium priority task to execute. Both the high
+ and highest priority tasks will then be blocked on the queue. */
+ if( xQueuePeek( xQueue, &ulValue, portMAX_DELAY ) != pdPASS )
+ {
+ /* We expected to have received something by the time we unblock. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we get here the highest priority task should have peeked the data
+ (unblocking this task) then suspended (allowing this task to also peek
+ the data). */
+ if( ulValue != 0x01234567 )
+ {
+ /* We did not receive the expected value. */
+ xErrorDetected = pdTRUE;
+ }
+
+ if( uxQueueMessagesWaiting( xQueue ) != 1 )
+ {
+ /* The message should have been left on the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* We only peeked the data, so suspending ourselves now should enable
+ the medium priority task to also peek the data. The medium priority task
+ will have been unblocked when we peeked the data as we left the data
+ in the queue. */
+ vTaskSuspend( NULL );
+
+
+ /* This time we are going actually receive the value, so the medium
+ priority task will never peek the data - we removed it from the queue. */
+ if( xQueueReceive( xQueue, &ulValue, portMAX_DELAY ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( ulValue != 0xaabbaabb )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ vTaskSuspend( NULL );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvMediumPriorityPeekTask( void *pvParameters )
+{
+xQueueHandle xQueue = ( xQueueHandle ) pvParameters;
+unsigned portLONG ulValue;
+
+ for( ;; )
+ {
+ /* Try peeking from the queue. The queue should be empty so we will
+ block, allowing the low priority task to execute. The highest, high
+ and medium priority tasks will then all be blocked on the queue. */
+ if( xQueuePeek( xQueue, &ulValue, portMAX_DELAY ) != pdPASS )
+ {
+ /* We expected to have received something by the time we unblock. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we get here the high priority task should have peeked the data
+ (unblocking this task) then suspended (allowing this task to also peek
+ the data). */
+ if( ulValue != 0x01234567 )
+ {
+ /* We did not receive the expected value. */
+ xErrorDetected = pdTRUE;
+ }
+
+ if( uxQueueMessagesWaiting( xQueue ) != 1 )
+ {
+ /* The message should have been left on the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Just so we know the test is still running. */
+ ulLoopCounter++;
+
+ /* Now we can suspend ourselves so the low priority task can execute
+ again. */
+ vTaskSuspend( NULL );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvLowPriorityPeekTask( void *pvParameters )
+{
+xQueueHandle xQueue = ( xQueueHandle ) pvParameters;
+unsigned portLONG ulValue;
+
+ for( ;; )
+ {
+ /* Write some data to the queue. This should unblock the highest
+ priority task that is waiting to peek data from the queue. */
+ ulValue = 0x11223344;
+ if( xQueueSendToBack( xQueue, &ulValue, qpeekNO_BLOCK ) != pdPASS )
+ {
+ /* We were expecting the queue to be empty so we should not of
+ had a problem writing to the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* By the time we get here the data should have been removed from
+ the queue. */
+ if( uxQueueMessagesWaiting( xQueue ) != 0 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Write another value to the queue, again waking the highest priority
+ task that is blocked on the queue. */
+ ulValue = 0x01234567;
+ if( xQueueSendToBack( xQueue, &ulValue, qpeekNO_BLOCK ) != pdPASS )
+ {
+ /* We were expecting the queue to be empty so we should not of
+ had a problem writing to the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* All the other tasks should now have successfully peeked the data.
+ The data is still in the queue so we should be able to receive it. */
+ ulValue = 0;
+ if( xQueueReceive( xQueue, &ulValue, qpeekNO_BLOCK ) != pdPASS )
+ {
+ /* We expected to receive the data. */
+ xErrorDetected = pdTRUE;
+ }
+
+ if( ulValue != 0x01234567 )
+ {
+ /* We did not receive the expected value. */
+ }
+
+ /* Lets just delay a while as this is an intensive test as we don't
+ want to starve other tests of processing time. */
+ vTaskDelay( qpeekSHORT_DELAY );
+
+ /* Unsuspend the other tasks so we can repeat the test - this time
+ however not all the other tasks will peek the data as the high
+ priority task is actually going to remove it from the queue. Send
+ to front is used just to be different. As the queue is empty it
+ makes no difference to the result. */
+ vTaskResume( xMediumPriorityTask );
+ vTaskResume( xHighPriorityTask );
+ vTaskResume( xHighestPriorityTask );
+
+ ulValue = 0xaabbaabb;
+ if( xQueueSendToFront( xQueue, &ulValue, qpeekNO_BLOCK ) != pdPASS )
+ {
+ /* We were expecting the queue to be empty so we should not of
+ had a problem writing to the queue. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* This time we should find that the queue is empty. The high priority
+ task actually removed the data rather than just peeking it. */
+ if( xQueuePeek( xQueue, &ulValue, qpeekNO_BLOCK ) != errQUEUE_EMPTY )
+ {
+ /* We expected to receive the data. */
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Unsuspend the highest and high priority tasks so we can go back
+ and repeat the whole thing. The medium priority task should not be
+ suspended as it was not able to peek the data in this last case. */
+ vTaskResume( xHighPriorityTask );
+ vTaskResume( xHighestPriorityTask );
+
+ /* Lets just delay a while as this is an intensive test as we don't
+ want to starve other tests of processing time. */
+ vTaskDelay( qpeekSHORT_DELAY );
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreQueuePeekTasksStillRunning( void )
+{
+static unsigned portLONG ulLastLoopCounter = 0;
+
+ /* If the demo task is still running then we expect the loopcounter to
+ have incremented since this function was last called. */
+ if( ulLastLoopCounter == ulLoopCounter )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ ulLastLoopCounter = ulLoopCounter;
+
+ /* Errors detected in the task itself will have latched xErrorDetected
+ to true. */
+
+ return !xErrorDetected;
+}
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/crhook.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/crhook.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/crhook.c (revision 14)
@@ -0,0 +1,252 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * This demo file demonstrates how to send data between an ISR and a
+ * co-routine. A tick hook function is used to periodically pass data between
+ * the RTOS tick and a set of 'hook' co-routines.
+ *
+ * hookNUM_HOOK_CO_ROUTINES co-routines are created. Each co-routine blocks
+ * to wait for a character to be received on a queue from the tick ISR, checks
+ * to ensure the character received was that expected, then sends the number
+ * back to the tick ISR on a different queue.
+ *
+ * The tick ISR checks the numbers received back from the 'hook' co-routines
+ * matches the number previously sent.
+ *
+ * If at any time a queue function returns unexpectedly, or an incorrect value
+ * is received either by the tick hook or a co-routine then an error is
+ * latched.
+ *
+ * This demo relies on each 'hook' co-routine to execute between each
+ * hookTICK_CALLS_BEFORE_POST tick interrupts. This and the heavy use of
+ * queues from within an interrupt may result in an error being detected on
+ * slower targets simply due to timing.
+ */
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+#include "croutine.h"
+#include "queue.h"
+
+/* Demo application includes. */
+#include "crhook.h"
+
+/* The number of 'hook' co-routines that are to be created. */
+#define hookNUM_HOOK_CO_ROUTINES ( 4 )
+
+/* The number of times the tick hook should be called before a character is
+posted to the 'hook' co-routines. */
+#define hookTICK_CALLS_BEFORE_POST ( 500 )
+
+/* There should never be more than one item in any queue at any time. */
+#define hookHOOK_QUEUE_LENGTH ( 1 )
+
+/* Don't block when initially posting to the queue. */
+#define hookNO_BLOCK_TIME ( 0 )
+
+/* The priority relative to other co-routines (rather than tasks) that the
+'hook' co-routines should take. */
+#define mainHOOK_CR_PRIORITY ( 1 )
+/*-----------------------------------------------------------*/
+
+/*
+ * The co-routine function itself.
+ */
+static void prvHookCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex );
+
+
+/*
+ * The tick hook function. This receives a number from each 'hook' co-routine
+ * then sends a number to each co-routine. An error is flagged if a send or
+ * receive fails, or an unexpected number is received.
+ */
+void vApplicationTickHook( void );
+
+/*-----------------------------------------------------------*/
+
+/* Queues used to send data FROM a co-routine TO the tick hook function.
+The hook functions received (Rx's) on these queues. One queue per
+'hook' co-routine. */
+static xQueueHandle xHookRxQueues[ hookNUM_HOOK_CO_ROUTINES ];
+
+/* Queues used to send data FROM the tick hook TO a co-routine function.
+The hood function transmits (Tx's) on these queues. One queue per
+'hook' co-routine. */
+static xQueueHandle xHookTxQueues[ hookNUM_HOOK_CO_ROUTINES ];
+
+/* Set to true if an error is detected at any time. */
+static portBASE_TYPE xCoRoutineErrorDetected = pdFALSE;
+
+/*-----------------------------------------------------------*/
+
+void vStartHookCoRoutines( void )
+{
+unsigned portBASE_TYPE uxIndex, uxValueToPost = 0;
+
+ for( uxIndex = 0; uxIndex < hookNUM_HOOK_CO_ROUTINES; uxIndex++ )
+ {
+ /* Create a queue to transmit to and receive from each 'hook'
+ co-routine. */
+ xHookRxQueues[ uxIndex ] = xQueueCreate( hookHOOK_QUEUE_LENGTH, sizeof( unsigned portBASE_TYPE ) );
+ xHookTxQueues[ uxIndex ] = xQueueCreate( hookHOOK_QUEUE_LENGTH, sizeof( unsigned portBASE_TYPE ) );
+
+ /* To start things off the tick hook function expects the queue it
+ uses to receive data to contain a value. */
+ xQueueSend( xHookRxQueues[ uxIndex ], &uxValueToPost, hookNO_BLOCK_TIME );
+
+ /* Create the 'hook' co-routine itself. */
+ xCoRoutineCreate( prvHookCoRoutine, mainHOOK_CR_PRIORITY, uxIndex );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static unsigned portBASE_TYPE uxCallCounter = 0, uxNumberToPost = 0;
+void vApplicationTickHook( void )
+{
+unsigned portBASE_TYPE uxReceivedNumber;
+signed portBASE_TYPE xIndex, xCoRoutineWoken;
+
+ /* Is it time to talk to the 'hook' co-routines again? */
+ uxCallCounter++;
+ if( uxCallCounter >= hookTICK_CALLS_BEFORE_POST )
+ {
+ uxCallCounter = 0;
+
+ for( xIndex = 0; xIndex < hookNUM_HOOK_CO_ROUTINES; xIndex++ )
+ {
+ xCoRoutineWoken = pdFALSE;
+ if( crQUEUE_RECEIVE_FROM_ISR( xHookRxQueues[ xIndex ], &uxReceivedNumber, &xCoRoutineWoken ) != pdPASS )
+ {
+ /* There is no reason why we would not expect the queue to
+ contain a value. */
+ xCoRoutineErrorDetected = pdTRUE;
+ }
+ else
+ {
+ /* Each queue used to receive data from the 'hook' co-routines
+ should contain the number we last posted to the same co-routine. */
+ if( uxReceivedNumber != uxNumberToPost )
+ {
+ xCoRoutineErrorDetected = pdTRUE;
+ }
+
+ /* Nothing should be blocked waiting to post to the queue. */
+ if( xCoRoutineWoken != pdFALSE )
+ {
+ xCoRoutineErrorDetected = pdTRUE;
+ }
+ }
+ }
+
+ /* Start the next cycle by posting the next number onto each Tx queue. */
+ uxNumberToPost++;
+
+ for( xIndex = 0; xIndex < hookNUM_HOOK_CO_ROUTINES; xIndex++ )
+ {
+ if( crQUEUE_SEND_FROM_ISR( xHookTxQueues[ xIndex ], &uxNumberToPost, pdFALSE ) != pdTRUE )
+ {
+ /* Posting to the queue should have woken the co-routine that
+ was blocked on the queue. */
+ xCoRoutineErrorDetected = pdTRUE;
+ }
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvHookCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
+{
+static unsigned portBASE_TYPE uxReceivedValue[ hookNUM_HOOK_CO_ROUTINES ];
+portBASE_TYPE xResult;
+
+ /* Each co-routine MUST start with a call to crSTART(); */
+ crSTART( xHandle );
+
+ for( ;; )
+ {
+ /* Wait to receive a value from the tick hook. */
+ xResult = pdFAIL;
+ crQUEUE_RECEIVE( xHandle, xHookTxQueues[ uxIndex ], &( uxReceivedValue[ uxIndex ] ), portMAX_DELAY, &xResult );
+
+ /* There is no reason why we should not have received something on
+ the queue. */
+ if( xResult != pdPASS )
+ {
+ xCoRoutineErrorDetected = pdTRUE;
+ }
+
+ /* Send the same number back to the idle hook so it can verify it. */
+ xResult = pdFAIL;
+ crQUEUE_SEND( xHandle, xHookRxQueues[ uxIndex ], &( uxReceivedValue[ uxIndex ] ), hookNO_BLOCK_TIME, &xResult );
+ if( xResult != pdPASS )
+ {
+ /* There is no reason why we should not have been able to post to
+ the queue. */
+ xCoRoutineErrorDetected = pdTRUE;
+ }
+ }
+
+ /* Each co-routine MUST end with a call to crEND(). */
+ crEND();
+}
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE xAreHookCoRoutinesStillRunning( void )
+{
+ if( xCoRoutineErrorDetected )
+ {
+ return pdFALSE;
+ }
+ else
+ {
+ return pdTRUE;
+ }
+}
+
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/AltPollQ.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/AltPollQ.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/AltPollQ.c (revision 14)
@@ -0,0 +1,257 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * This is a version of PollQ.c that uses the alternative (Alt) API.
+ *
+ * Creates two tasks that communicate over a single queue. One task acts as a
+ * producer, the other a consumer.
+ *
+ * The producer loops for three iteration, posting an incrementing number onto the
+ * queue each cycle. It then delays for a fixed period before doing exactly the
+ * same again.
+ *
+ * The consumer loops emptying the queue. Each item removed from the queue is
+ * checked to ensure it contains the expected value. When the queue is empty it
+ * blocks for a fixed period, then does the same again.
+ *
+ * All queue access is performed without blocking. The consumer completely empties
+ * the queue each time it runs so the producer should never find the queue full.
+ *
+ * An error is flagged if the consumer obtains an unexpected value or the producer
+ * find the queue is full.
+ */
+
+/*
+Changes from V2.0.0
+
+ + Delay periods are now specified using variables and constants of
+ portTickType rather than unsigned portLONG.
+*/
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+/* Demo program include files. */
+#include "AltPollQ.h"
+
+#define pollqSTACK_SIZE configMINIMAL_STACK_SIZE
+#define pollqQUEUE_SIZE ( 10 )
+#define pollqPRODUCER_DELAY ( ( portTickType ) 200 / portTICK_RATE_MS )
+#define pollqCONSUMER_DELAY ( pollqPRODUCER_DELAY - ( portTickType ) ( 20 / portTICK_RATE_MS ) )
+#define pollqNO_DELAY ( ( portTickType ) 0 )
+#define pollqVALUES_TO_PRODUCE ( ( signed portBASE_TYPE ) 3 )
+#define pollqINITIAL_VALUE ( ( signed portBASE_TYPE ) 0 )
+
+/* The task that posts the incrementing number onto the queue. */
+static portTASK_FUNCTION_PROTO( vPolledQueueProducer, pvParameters );
+
+/* The task that empties the queue. */
+static portTASK_FUNCTION_PROTO( vPolledQueueConsumer, pvParameters );
+
+/* Variables that are used to check that the tasks are still running with no
+errors. */
+static volatile signed portBASE_TYPE xPollingConsumerCount = pollqINITIAL_VALUE, xPollingProducerCount = pollqINITIAL_VALUE;
+
+/*-----------------------------------------------------------*/
+
+void vStartAltPolledQueueTasks( unsigned portBASE_TYPE uxPriority )
+{
+static xQueueHandle xPolledQueue;
+
+ /* Create the queue used by the producer and consumer. */
+ xPolledQueue = xQueueCreate( pollqQUEUE_SIZE, ( unsigned portBASE_TYPE ) sizeof( unsigned portSHORT ) );
+
+ /* vQueueAddToRegistry() adds the queue to the queue registry, if one is
+ in use. The queue registry is provided as a means for kernel aware
+ debuggers to locate queues and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry( xPolledQueue, ( signed portCHAR * ) "AltPollQueue" );
+
+
+ /* Spawn the producer and consumer. */
+ xTaskCreate( vPolledQueueConsumer, ( signed portCHAR * ) "QConsNB", pollqSTACK_SIZE, ( void * ) &xPolledQueue, uxPriority, ( xTaskHandle * ) NULL );
+ xTaskCreate( vPolledQueueProducer, ( signed portCHAR * ) "QProdNB", pollqSTACK_SIZE, ( void * ) &xPolledQueue, uxPriority, ( xTaskHandle * ) NULL );
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vPolledQueueProducer, pvParameters )
+{
+unsigned portSHORT usValue = ( unsigned portSHORT ) 0;
+signed portBASE_TYPE xError = pdFALSE, xLoop;
+
+ #ifdef USE_STDIO
+ void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );
+
+ const portCHAR * const pcTaskStartMsg = "Alt polling queue producer task started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+ #endif
+
+ for( ;; )
+ {
+ for( xLoop = 0; xLoop < pollqVALUES_TO_PRODUCE; xLoop++ )
+ {
+ /* Send an incrementing number on the queue without blocking. */
+ if( xQueueAltSendToBack( *( ( xQueueHandle * ) pvParameters ), ( void * ) &usValue, pollqNO_DELAY ) != pdPASS )
+ {
+ /* We should never find the queue full so if we get here there
+ has been an error. */
+ xError = pdTRUE;
+ }
+ else
+ {
+ if( xError == pdFALSE )
+ {
+ /* If an error has ever been recorded we stop incrementing the
+ check variable. */
+ portENTER_CRITICAL();
+ xPollingProducerCount++;
+ portEXIT_CRITICAL();
+ }
+
+ /* Update the value we are going to post next time around. */
+ usValue++;
+ }
+ }
+
+ /* Wait before we start posting again to ensure the consumer runs and
+ empties the queue. */
+ vTaskDelay( pollqPRODUCER_DELAY );
+ }
+} /*lint !e818 Function prototype must conform to API. */
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vPolledQueueConsumer, pvParameters )
+{
+unsigned portSHORT usData, usExpectedValue = ( unsigned portSHORT ) 0;
+signed portBASE_TYPE xError = pdFALSE;
+
+ #ifdef USE_STDIO
+ void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );
+
+ const portCHAR * const pcTaskStartMsg = "Alt blocking queue consumer task started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+ #endif
+
+ for( ;; )
+ {
+ /* Loop until the queue is empty. */
+ while( uxQueueMessagesWaiting( *( ( xQueueHandle * ) pvParameters ) ) )
+ {
+ if( xQueueAltReceive( *( ( xQueueHandle * ) pvParameters ), &usData, pollqNO_DELAY ) == pdPASS )
+ {
+ if( usData != usExpectedValue )
+ {
+ /* This is not what we expected to receive so an error has
+ occurred. */
+ xError = pdTRUE;
+
+ /* Catch-up to the value we received so our next expected
+ value should again be correct. */
+ usExpectedValue = usData;
+ }
+ else
+ {
+ if( xError == pdFALSE )
+ {
+ /* Only increment the check variable if no errors have
+ occurred. */
+ portENTER_CRITICAL();
+ xPollingConsumerCount++;
+ portEXIT_CRITICAL();
+ }
+ }
+
+ /* Next time round we would expect the number to be one higher. */
+ usExpectedValue++;
+ }
+ }
+
+ /* Now the queue is empty we block, allowing the producer to place more
+ items in the queue. */
+ vTaskDelay( pollqCONSUMER_DELAY );
+ }
+} /*lint !e818 Function prototype must conform to API. */
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running with no errors. */
+portBASE_TYPE xAreAltPollingQueuesStillRunning( void )
+{
+portBASE_TYPE xReturn;
+
+ /* Check both the consumer and producer poll count to check they have both
+ been changed since out last trip round. We do not need a critical section
+ around the check variables as this is called from a higher priority than
+ the other tasks that access the same variables. */
+ if( ( xPollingConsumerCount == pollqINITIAL_VALUE ) ||
+ ( xPollingProducerCount == pollqINITIAL_VALUE )
+ )
+ {
+ xReturn = pdFALSE;
+ }
+ else
+ {
+ xReturn = pdTRUE;
+ }
+
+ /* Set the check variables back down so we know if they have been
+ incremented the next time around. */
+ xPollingConsumerCount = pollqINITIAL_VALUE;
+ xPollingProducerCount = pollqINITIAL_VALUE;
+
+ return xReturn;
+}
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/GenQTest.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/GenQTest.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/GenQTest.c (revision 14)
@@ -0,0 +1,566 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+/*
+ * Tests the extra queue functionality introduced in FreeRTOS.org V4.5.0 -
+ * including xQueueSendToFront(), xQueueSendToBack(), xQueuePeek() and
+ * mutex behaviour.
+ *
+ * See the comments above the prvSendFrontAndBackTest() and
+ * prvLowPriorityMutexTask() prototypes below for more information.
+ */
+
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semphr.h"
+
+/* Demo program include files. */
+#include "GenQTest.h"
+
+#define genqQUEUE_LENGTH ( 5 )
+#define genqNO_BLOCK ( 0 )
+
+#define genqMUTEX_LOW_PRIORITY ( tskIDLE_PRIORITY )
+#define genqMUTEX_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
+#define genqMUTEX_MEDIUM_PRIORITY ( tskIDLE_PRIORITY + 2 )
+#define genqMUTEX_HIGH_PRIORITY ( tskIDLE_PRIORITY + 3 )
+
+/*-----------------------------------------------------------*/
+
+/*
+ * Tests the behaviour of the xQueueSendToFront() and xQueueSendToBack()
+ * macros by using both to fill a queue, then reading from the queue to
+ * check the resultant queue order is as expected. Queue data is also
+ * peeked.
+ */
+static void prvSendFrontAndBackTest( void *pvParameters );
+
+/*
+ * The following three tasks are used to demonstrate the mutex behaviour.
+ * Each task is given a different priority to demonstrate the priority
+ * inheritance mechanism.
+ *
+ * The low priority task obtains a mutex. After this a high priority task
+ * attempts to obtain the same mutex, causing its priority to be inherited
+ * by the low priority task. The task with the inherited high priority then
+ * resumes a medium priority task to ensure it is not blocked by the medium
+ * priority task while it holds the inherited high priority. Once the mutex
+ * is returned the task with the inherited priority returns to its original
+ * low priority, and is therefore immediately preempted by first the high
+ * priority task and then the medium prioroity task before it can continue.
+ */
+static void prvLowPriorityMutexTask( void *pvParameters );
+static void prvMediumPriorityMutexTask( void *pvParameters );
+static void prvHighPriorityMutexTask( void *pvParameters );
+
+/*-----------------------------------------------------------*/
+
+/* Flag that will be latched to pdTRUE should any unexpected behaviour be
+detected in any of the tasks. */
+static portBASE_TYPE xErrorDetected = pdFALSE;
+
+/* Counters that are incremented on each cycle of a test. This is used to
+detect a stalled task - a test that is no longer running. */
+static volatile unsigned portLONG ulLoopCounter = 0;
+static volatile unsigned portLONG ulLoopCounter2 = 0;
+
+/* The variable that is guarded by the mutex in the mutex demo tasks. */
+static volatile unsigned portLONG ulGuardedVariable = 0;
+
+/* Handles used in the mutext test to suspend and resume the high and medium
+priority mutex test tasks. */
+static xTaskHandle xHighPriorityMutexTask, xMediumPriorityMutexTask;
+
+/*-----------------------------------------------------------*/
+
+void vStartGenericQueueTasks( unsigned portBASE_TYPE uxPriority )
+{
+xQueueHandle xQueue;
+xSemaphoreHandle xMutex;
+
+ /* Create the queue that we are going to use for the
+ prvSendFrontAndBackTest demo. */
+ xQueue = xQueueCreate( genqQUEUE_LENGTH, sizeof( unsigned portLONG ) );
+
+ /* vQueueAddToRegistry() adds the queue to the queue registry, if one is
+ in use. The queue registry is provided as a means for kernel aware
+ debuggers to locate queues and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry( xQueue, ( signed portCHAR * ) "Gen_Queue_Test" );
+
+ /* Create the demo task and pass it the queue just created. We are
+ passing the queue handle by value so it does not matter that it is
+ declared on the stack here. */
+ xTaskCreate( prvSendFrontAndBackTest, ( signed portCHAR * )"GenQ", configMINIMAL_STACK_SIZE, ( void * ) xQueue, uxPriority, NULL );
+
+ /* Create the mutex used by the prvMutexTest task. */
+ xMutex = xSemaphoreCreateMutex();
+
+ /* vQueueAddToRegistry() adds the mutex to the registry, if one is
+ in use. The registry is provided as a means for kernel aware
+ debuggers to locate mutexes and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry( ( xQueueHandle ) xMutex, ( signed portCHAR * ) "Gen_Queue_Mutex" );
+
+ /* Create the mutex demo tasks and pass it the mutex just created. We are
+ passing the mutex handle by value so it does not matter that it is declared
+ on the stack here. */
+ xTaskCreate( prvLowPriorityMutexTask, ( signed portCHAR * )"MuLow", configMINIMAL_STACK_SIZE, ( void * ) xMutex, genqMUTEX_LOW_PRIORITY, NULL );
+ xTaskCreate( prvMediumPriorityMutexTask, ( signed portCHAR * )"MuMed", configMINIMAL_STACK_SIZE, NULL, genqMUTEX_MEDIUM_PRIORITY, &xMediumPriorityMutexTask );
+ xTaskCreate( prvHighPriorityMutexTask, ( signed portCHAR * )"MuHigh", configMINIMAL_STACK_SIZE, ( void * ) xMutex, genqMUTEX_HIGH_PRIORITY, &xHighPriorityMutexTask );
+}
+/*-----------------------------------------------------------*/
+
+static void prvSendFrontAndBackTest( void *pvParameters )
+{
+unsigned portLONG ulData, ulData2;
+xQueueHandle xQueue;
+
+ #ifdef USE_STDIO
+ void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );
+
+ const portCHAR * const pcTaskStartMsg = "Queue SendToFront/SendToBack/Peek test started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+ #endif
+
+ xQueue = ( xQueueHandle ) pvParameters;
+
+ for( ;; )
+ {
+ /* The queue is empty, so sending an item to the back of the queue
+ should have the same efect as sending it to the front of the queue.
+
+ First send to the front and check everything is as expected. */
+ xQueueSendToFront( xQueue, ( void * ) &ulLoopCounter, genqNO_BLOCK );
+
+ if( uxQueueMessagesWaiting( xQueue ) != 1 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( xQueueReceive( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* The data we sent to the queue should equal the data we just received
+ from the queue. */
+ if( ulLoopCounter != ulData )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Then do the same, sending the data to the back, checking everything
+ is as expected. */
+ if( uxQueueMessagesWaiting( xQueue ) != 0 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ xQueueSendToBack( xQueue, ( void * ) &ulLoopCounter, genqNO_BLOCK );
+
+ if( uxQueueMessagesWaiting( xQueue ) != 1 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( xQueueReceive( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( uxQueueMessagesWaiting( xQueue ) != 0 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* The data we sent to the queue should equal the data we just received
+ from the queue. */
+ if( ulLoopCounter != ulData )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+
+
+ /* Place 2, 3, 4 into the queue, adding items to the back of the queue. */
+ for( ulData = 2; ulData < 5; ulData++ )
+ {
+ xQueueSendToBack( xQueue, ( void * ) &ulData, genqNO_BLOCK );
+ }
+
+ /* Now the order in the queue should be 2, 3, 4, with 2 being the first
+ thing to be read out. Now add 1 then 0 to the front of the queue. */
+ if( uxQueueMessagesWaiting( xQueue ) != 3 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+ ulData = 1;
+ xQueueSendToFront( xQueue, ( void * ) &ulData, genqNO_BLOCK );
+ ulData = 0;
+ xQueueSendToFront( xQueue, ( void * ) &ulData, genqNO_BLOCK );
+
+ /* Now the queue should be full, and when we read the data out we
+ should receive 0, 1, 2, 3, 4. */
+ if( uxQueueMessagesWaiting( xQueue ) != 5 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( xQueueSendToFront( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != errQUEUE_FULL )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( xQueueSendToBack( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != errQUEUE_FULL )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ /* Check the data we read out is in the expected order. */
+ for( ulData = 0; ulData < genqQUEUE_LENGTH; ulData++ )
+ {
+ /* Try peeking the data first. */
+ if( xQueuePeek( xQueue, &ulData2, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( ulData != ulData2 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+
+ /* Now try receiving the data for real. The value should be the
+ same. Clobber the value first so we know we really received it. */
+ ulData2 = ~ulData2;
+ if( xQueueReceive( xQueue, &ulData2, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( ulData != ulData2 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+ }
+
+ /* The queue should now be empty again. */
+ if( uxQueueMessagesWaiting( xQueue ) != 0 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+
+ /* Our queue is empty once more, add 10, 11 to the back. */
+ ulData = 10;
+ if( xQueueSend( xQueue, &ulData, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+ ulData = 11;
+ if( xQueueSend( xQueue, &ulData, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( uxQueueMessagesWaiting( xQueue ) != 2 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now we should have 10, 11 in the queue. Add 7, 8, 9 to the
+ front. */
+ for( ulData = 9; ulData >= 7; ulData-- )
+ {
+ if( xQueueSendToFront( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+ }
+
+ /* Now check that the queue is full, and that receiving data provides
+ the expected sequence of 7, 8, 9, 10, 11. */
+ if( uxQueueMessagesWaiting( xQueue ) != 5 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( xQueueSendToFront( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != errQUEUE_FULL )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( xQueueSendToBack( xQueue, ( void * ) &ulData, genqNO_BLOCK ) != errQUEUE_FULL )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ /* Check the data we read out is in the expected order. */
+ for( ulData = 7; ulData < ( 7 + genqQUEUE_LENGTH ); ulData++ )
+ {
+ if( xQueueReceive( xQueue, &ulData2, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( ulData != ulData2 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+ }
+
+ if( uxQueueMessagesWaiting( xQueue ) != 0 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ ulLoopCounter++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvLowPriorityMutexTask( void *pvParameters )
+{
+xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;
+
+ #ifdef USE_STDIO
+ void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );
+
+ const portCHAR * const pcTaskStartMsg = "Mutex with priority inheritance test started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+ #endif
+
+ for( ;; )
+ {
+ /* Take the mutex. It should be available now. */
+ if( xSemaphoreTake( xMutex, genqNO_BLOCK ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Set our guarded variable to a known start value. */
+ ulGuardedVariable = 0;
+
+ /* Our priority should be as per that assigned when the task was
+ created. */
+ if( uxTaskPriorityGet( NULL ) != genqMUTEX_LOW_PRIORITY )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now unsuspend the high priority task. This will attempt to take the
+ mutex, and block when it finds it cannot obtain it. */
+ vTaskResume( xHighPriorityMutexTask );
+
+ /* We should now have inherited the prioritoy of the high priority task,
+ as by now it will have attempted to get the mutex. */
+ if( uxTaskPriorityGet( NULL ) != genqMUTEX_HIGH_PRIORITY )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* We can attempt to set our priority to the test priority - between the
+ idle priority and the medium/high test priorities, but our actual
+ prioroity should remain at the high priority. */
+ vTaskPrioritySet( NULL, genqMUTEX_TEST_PRIORITY );
+ if( uxTaskPriorityGet( NULL ) != genqMUTEX_HIGH_PRIORITY )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Now unsuspend the medium priority task. This should not run as our
+ inherited priority is above that of the medium priority task. */
+ vTaskResume( xMediumPriorityMutexTask );
+
+ /* If the did run then it will have incremented our guarded variable. */
+ if( ulGuardedVariable != 0 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we give back the semaphore our priority should be disinherited
+ back to the priority to which we attempted to set ourselves. This means
+ that when the high priority task next blocks, the medium priority task
+ should execute and increment the guarded variable. When we next run
+ both the high and medium priority tasks will have been suspended again. */
+ if( xSemaphoreGive( xMutex ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Check that the guarded variable did indeed increment... */
+ if( ulGuardedVariable != 1 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* ... and that our priority has been disinherited to
+ genqMUTEX_TEST_PRIORITY. */
+ if( uxTaskPriorityGet( NULL ) != genqMUTEX_TEST_PRIORITY )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* Set our priority back to our original priority ready for the next
+ loop around this test. */
+ vTaskPrioritySet( NULL, genqMUTEX_LOW_PRIORITY );
+
+ /* Just to show we are still running. */
+ ulLoopCounter2++;
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvMediumPriorityMutexTask( void *pvParameters )
+{
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /* The medium priority task starts by suspending itself. The low
+ priority task will unsuspend this task when required. */
+ vTaskSuspend( NULL );
+
+ /* When this task unsuspends all it does is increment the guarded
+ variable, this is so the low priority task knows that it has
+ executed. */
+ ulGuardedVariable++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvHighPriorityMutexTask( void *pvParameters )
+{
+xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;
+
+ for( ;; )
+ {
+ /* The high priority task starts by suspending itself. The low
+ priority task will unsuspend this task when required. */
+ vTaskSuspend( NULL );
+
+ /* When this task unsuspends all it does is attempt to obtain
+ the mutex. It should find the mutex is not available so a
+ block time is specified. */
+ if( xSemaphoreTake( xMutex, portMAX_DELAY ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* When we eventually obtain the mutex we just give it back then
+ return to suspend ready for the next test. */
+ if( xSemaphoreGive( xMutex ) != pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreGenericQueueTasksStillRunning( void )
+{
+static unsigned portLONG ulLastLoopCounter = 0, ulLastLoopCounter2 = 0;
+
+ /* If the demo task is still running then we expect the loopcounters to
+ have incremented since this function was last called. */
+ if( ulLastLoopCounter == ulLoopCounter )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ if( ulLastLoopCounter2 == ulLoopCounter2 )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ ulLastLoopCounter = ulLoopCounter;
+ ulLastLoopCounter2 = ulLoopCounter2;
+
+ /* Errors detected in the task itself will have latched xErrorDetected
+ to true. */
+
+ return !xErrorDetected;
+}
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/AltBlock.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/AltBlock.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/AltBlock.c (revision 14)
@@ -0,0 +1,531 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * This is a version of BlockTim.c that uses the light weight API.
+ *
+ * This file contains some test scenarios that ensure tasks do not exit queue
+ * send or receive functions prematurely. A description of the tests is
+ * included within the code.
+ */
+
+/* Kernel includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+/* Demo includes. */
+#include "AltBlock.h"
+
+/* Task priorities. */
+#define bktPRIMARY_PRIORITY ( 3 )
+#define bktSECONDARY_PRIORITY ( 2 )
+
+/* Task behaviour. */
+#define bktQUEUE_LENGTH ( 5 )
+#define bktSHORT_WAIT ( ( ( portTickType ) 20 ) / portTICK_RATE_MS )
+#define bktPRIMARY_BLOCK_TIME ( 10 )
+#define bktALLOWABLE_MARGIN ( 12 )
+#define bktTIME_TO_BLOCK ( 175 )
+#define bktDONT_BLOCK ( ( portTickType ) 0 )
+#define bktRUN_INDICATOR ( ( unsigned portBASE_TYPE ) 0x55 )
+
+/* The queue on which the tasks block. */
+static xQueueHandle xTestQueue;
+
+/* Handle to the secondary task is required by the primary task for calls
+to vTaskSuspend/Resume(). */
+static xTaskHandle xSecondary;
+
+/* Used to ensure that tasks are still executing without error. */
+static portBASE_TYPE xPrimaryCycles = 0, xSecondaryCycles = 0;
+static portBASE_TYPE xErrorOccurred = pdFALSE;
+
+/* Provides a simple mechanism for the primary task to know when the
+secondary task has executed. */
+static volatile unsigned portBASE_TYPE xRunIndicator;
+
+/* The two test tasks. Their behaviour is commented within the files. */
+static void vPrimaryBlockTimeTestTask( void *pvParameters );
+static void vSecondaryBlockTimeTestTask( void *pvParameters );
+
+/*-----------------------------------------------------------*/
+
+void vCreateAltBlockTimeTasks( void )
+{
+ /* Create the queue on which the two tasks block. */
+ xTestQueue = xQueueCreate( bktQUEUE_LENGTH, sizeof( portBASE_TYPE ) );
+
+ /* vQueueAddToRegistry() adds the queue to the queue registry, if one is
+ in use. The queue registry is provided as a means for kernel aware
+ debuggers to locate queues and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry( xTestQueue, ( signed portCHAR * ) "AltBlockQueue" );
+
+
+ /* Create the two test tasks. */
+ xTaskCreate( vPrimaryBlockTimeTestTask, ( signed portCHAR * )"FBTest1", configMINIMAL_STACK_SIZE, NULL, bktPRIMARY_PRIORITY, NULL );
+ xTaskCreate( vSecondaryBlockTimeTestTask, ( signed portCHAR * )"FBTest2", configMINIMAL_STACK_SIZE, NULL, bktSECONDARY_PRIORITY, &xSecondary );
+}
+/*-----------------------------------------------------------*/
+
+static void vPrimaryBlockTimeTestTask( void *pvParameters )
+{
+portBASE_TYPE xItem, xData;
+portTickType xTimeWhenBlocking;
+portTickType xTimeToBlock, xBlockedTime;
+
+ #ifdef USE_STDIO
+ void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );
+
+ const portCHAR * const pcTaskStartMsg = "Alt primary block time test started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+ #endif
+
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /*********************************************************************
+ Test 1
+
+ Simple block time wakeup test on queue receives. */
+ for( xItem = 0; xItem < bktQUEUE_LENGTH; xItem++ )
+ {
+ /* The queue is empty. Attempt to read from the queue using a block
+ time. When we wake, ensure the delta in time is as expected. */
+ xTimeToBlock = bktPRIMARY_BLOCK_TIME << xItem;
+
+ /* A critical section is used to minimise the jitter in the time
+ measurements. */
+ portENTER_CRITICAL();
+ {
+ xTimeWhenBlocking = xTaskGetTickCount();
+
+ /* We should unblock after xTimeToBlock having not received
+ anything on the queue. */
+ if( xQueueAltReceive( xTestQueue, &xData, xTimeToBlock ) != errQUEUE_EMPTY )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* How long were we blocked for? */
+ xBlockedTime = xTaskGetTickCount() - xTimeWhenBlocking;
+ }
+ portEXIT_CRITICAL();
+
+ if( xBlockedTime < xTimeToBlock )
+ {
+ /* Should not have blocked for less than we requested. */
+ xErrorOccurred = pdTRUE;
+ }
+
+ if( xBlockedTime > ( xTimeToBlock + bktALLOWABLE_MARGIN ) )
+ {
+ /* Should not have blocked for longer than we requested,
+ although we would not necessarily run as soon as we were
+ unblocked so a margin is allowed. */
+ xErrorOccurred = pdTRUE;
+ }
+ }
+
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+
+ /*********************************************************************
+ Test 2
+
+ Simple block time wakeup test on queue sends.
+
+ First fill the queue. It should be empty so all sends should pass. */
+ for( xItem = 0; xItem < bktQUEUE_LENGTH; xItem++ )
+ {
+ if( xQueueAltSendToBack( xTestQueue, &xItem, bktDONT_BLOCK ) != pdPASS )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+ }
+
+ for( xItem = 0; xItem < bktQUEUE_LENGTH; xItem++ )
+ {
+ /* The queue is full. Attempt to write to the queue using a block
+ time. When we wake, ensure the delta in time is as expected. */
+ xTimeToBlock = bktPRIMARY_BLOCK_TIME << xItem;
+
+ portENTER_CRITICAL();
+ {
+ xTimeWhenBlocking = xTaskGetTickCount();
+
+ /* We should unblock after xTimeToBlock having not received
+ anything on the queue. */
+ if( xQueueAltSendToBack( xTestQueue, &xItem, xTimeToBlock ) != errQUEUE_FULL )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* How long were we blocked for? */
+ xBlockedTime = xTaskGetTickCount() - xTimeWhenBlocking;
+ }
+ portEXIT_CRITICAL();
+
+ if( xBlockedTime < xTimeToBlock )
+ {
+ /* Should not have blocked for less than we requested. */
+ xErrorOccurred = pdTRUE;
+ }
+
+ if( xBlockedTime > ( xTimeToBlock + bktALLOWABLE_MARGIN ) )
+ {
+ /* Should not have blocked for longer than we requested,
+ although we would not necessarily run as soon as we were
+ unblocked so a margin is allowed. */
+ xErrorOccurred = pdTRUE;
+ }
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+
+ /*********************************************************************
+ Test 3
+
+ Wake the other task, it will block attempting to post to the queue.
+ When we read from the queue the other task will wake, but before it
+ can run we will post to the queue again. When the other task runs it
+ will find the queue still full, even though it was woken. It should
+ recognise that its block time has not expired and return to block for
+ the remains of its block time.
+
+ Wake the other task so it blocks attempting to post to the already
+ full queue. */
+ xRunIndicator = 0;
+ vTaskResume( xSecondary );
+
+ /* We need to wait a little to ensure the other task executes. */
+ while( xRunIndicator != bktRUN_INDICATOR )
+ {
+ /* The other task has not yet executed. */
+ vTaskDelay( bktSHORT_WAIT );
+ }
+ /* Make sure the other task is blocked on the queue. */
+ vTaskDelay( bktSHORT_WAIT );
+ xRunIndicator = 0;
+
+ for( xItem = 0; xItem < bktQUEUE_LENGTH; xItem++ )
+ {
+ /* Now when we make space on the queue the other task should wake
+ but not execute as this task has higher priority. */
+ if( xQueueAltReceive( xTestQueue, &xData, bktDONT_BLOCK ) != pdPASS )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Now fill the queue again before the other task gets a chance to
+ execute. If the other task had executed we would find the queue
+ full ourselves, and the other task have set xRunIndicator. */
+ if( xQueueAltSendToBack( xTestQueue, &xItem, bktDONT_BLOCK ) != pdPASS )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ if( xRunIndicator == bktRUN_INDICATOR )
+ {
+ /* The other task should not have executed. */
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Raise the priority of the other task so it executes and blocks
+ on the queue again. */
+ vTaskPrioritySet( xSecondary, bktPRIMARY_PRIORITY + 2 );
+
+ /* The other task should now have re-blocked without exiting the
+ queue function. */
+ if( xRunIndicator == bktRUN_INDICATOR )
+ {
+ /* The other task should not have executed outside of the
+ queue function. */
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Set the priority back down. */
+ vTaskPrioritySet( xSecondary, bktSECONDARY_PRIORITY );
+ }
+
+ /* Let the other task timeout. When it unblockes it will check that it
+ unblocked at the correct time, then suspend itself. */
+ while( xRunIndicator != bktRUN_INDICATOR )
+ {
+ vTaskDelay( bktSHORT_WAIT );
+ }
+ vTaskDelay( bktSHORT_WAIT );
+ xRunIndicator = 0;
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ /*********************************************************************
+ Test 4
+
+ As per test 3 - but with the send and receive the other way around.
+ The other task blocks attempting to read from the queue.
+
+ Empty the queue. We should find that it is full. */
+ for( xItem = 0; xItem < bktQUEUE_LENGTH; xItem++ )
+ {
+ if( xQueueAltReceive( xTestQueue, &xData, bktDONT_BLOCK ) != pdPASS )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+ }
+
+ /* Wake the other task so it blocks attempting to read from the
+ already empty queue. */
+ vTaskResume( xSecondary );
+
+ /* We need to wait a little to ensure the other task executes. */
+ while( xRunIndicator != bktRUN_INDICATOR )
+ {
+ vTaskDelay( bktSHORT_WAIT );
+ }
+ vTaskDelay( bktSHORT_WAIT );
+ xRunIndicator = 0;
+
+ for( xItem = 0; xItem < bktQUEUE_LENGTH; xItem++ )
+ {
+ /* Now when we place an item on the queue the other task should
+ wake but not execute as this task has higher priority. */
+ if( xQueueAltSendToBack( xTestQueue, &xItem, bktDONT_BLOCK ) != pdPASS )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Now empty the queue again before the other task gets a chance to
+ execute. If the other task had executed we would find the queue
+ empty ourselves, and the other task would be suspended. */
+ if( xQueueAltReceive( xTestQueue, &xData, bktDONT_BLOCK ) != pdPASS )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ if( xRunIndicator == bktRUN_INDICATOR )
+ {
+ /* The other task should not have executed. */
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Raise the priority of the other task so it executes and blocks
+ on the queue again. */
+ vTaskPrioritySet( xSecondary, bktPRIMARY_PRIORITY + 2 );
+
+ /* The other task should now have re-blocked without exiting the
+ queue function. */
+ if( xRunIndicator == bktRUN_INDICATOR )
+ {
+ /* The other task should not have executed outside of the
+ queue function. */
+ xErrorOccurred = pdTRUE;
+ }
+ vTaskPrioritySet( xSecondary, bktSECONDARY_PRIORITY );
+ }
+
+ /* Let the other task timeout. When it unblockes it will check that it
+ unblocked at the correct time, then suspend itself. */
+ while( xRunIndicator != bktRUN_INDICATOR )
+ {
+ vTaskDelay( bktSHORT_WAIT );
+ }
+ vTaskDelay( bktSHORT_WAIT );
+
+ xPrimaryCycles++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void vSecondaryBlockTimeTestTask( void *pvParameters )
+{
+portTickType xTimeWhenBlocking, xBlockedTime;
+portBASE_TYPE xData;
+
+ #ifdef USE_STDIO
+ void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );
+
+ const portCHAR * const pcTaskStartMsg = "Alt secondary block time test started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+ #endif
+
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /*********************************************************************
+ Test 1 and 2
+
+ This task does does not participate in these tests. */
+ vTaskSuspend( NULL );
+
+ /*********************************************************************
+ Test 3
+
+ The first thing we do is attempt to read from the queue. It should be
+ full so we block. Note the time before we block so we can check the
+ wake time is as per that expected. */
+ portENTER_CRITICAL();
+ {
+ xTimeWhenBlocking = xTaskGetTickCount();
+
+ /* We should unblock after bktTIME_TO_BLOCK having not received
+ anything on the queue. */
+ xData = 0;
+ xRunIndicator = bktRUN_INDICATOR;
+ if( xQueueAltSendToBack( xTestQueue, &xData, bktTIME_TO_BLOCK ) != errQUEUE_FULL )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* How long were we inside the send function? */
+ xBlockedTime = xTaskGetTickCount() - xTimeWhenBlocking;
+ }
+ portEXIT_CRITICAL();
+
+ /* We should not have blocked for less time than bktTIME_TO_BLOCK. */
+ if( xBlockedTime < bktTIME_TO_BLOCK )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* We should of not blocked for much longer than bktALLOWABLE_MARGIN
+ either. A margin is permitted as we would not necessarily run as
+ soon as we unblocked. */
+ if( xBlockedTime > ( bktTIME_TO_BLOCK + bktALLOWABLE_MARGIN ) )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Suspend ready for test 3. */
+ xRunIndicator = bktRUN_INDICATOR;
+ vTaskSuspend( NULL );
+
+ /*********************************************************************
+ Test 4
+
+ As per test three, but with the send and receive reversed. */
+ portENTER_CRITICAL();
+ {
+ xTimeWhenBlocking = xTaskGetTickCount();
+
+ /* We should unblock after bktTIME_TO_BLOCK having not received
+ anything on the queue. */
+ xRunIndicator = bktRUN_INDICATOR;
+ if( xQueueAltReceive( xTestQueue, &xData, bktTIME_TO_BLOCK ) != errQUEUE_EMPTY )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ xBlockedTime = xTaskGetTickCount() - xTimeWhenBlocking;
+ }
+ portEXIT_CRITICAL();
+
+ /* We should not have blocked for less time than bktTIME_TO_BLOCK. */
+ if( xBlockedTime < bktTIME_TO_BLOCK )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* We should of not blocked for much longer than bktALLOWABLE_MARGIN
+ either. A margin is permitted as we would not necessarily run as soon
+ as we unblocked. */
+ if( xBlockedTime > ( bktTIME_TO_BLOCK + bktALLOWABLE_MARGIN ) )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ xRunIndicator = bktRUN_INDICATOR;
+
+ xSecondaryCycles++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE xAreAltBlockTimeTestTasksStillRunning( void )
+{
+static portBASE_TYPE xLastPrimaryCycleCount = 0, xLastSecondaryCycleCount = 0;
+portBASE_TYPE xReturn = pdPASS;
+
+ /* Have both tasks performed at least one cycle since this function was
+ last called? */
+ if( xPrimaryCycles == xLastPrimaryCycleCount )
+ {
+ xReturn = pdFAIL;
+ }
+
+ if( xSecondaryCycles == xLastSecondaryCycleCount )
+ {
+ xReturn = pdFAIL;
+ }
+
+ if( xErrorOccurred == pdTRUE )
+ {
+ xReturn = pdFAIL;
+ }
+
+ xLastSecondaryCycleCount = xSecondaryCycles;
+ xLastPrimaryCycleCount = xPrimaryCycles;
+
+ return xReturn;
+}
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/recmutex.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/recmutex.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/recmutex.c (revision 14)
@@ -0,0 +1,363 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ The tasks defined on this page demonstrate the use of recursive mutexes.
+
+ For recursive mutex functionality the created mutex should be created using
+ xSemaphoreCreateRecursiveMutex(), then be manipulated
+ using the xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() API
+ functions.
+
+ This demo creates three tasks all of which access the same recursive mutex:
+
+ prvRecursiveMutexControllingTask() has the highest priority so executes
+ first and grabs the mutex. It then performs some recursive accesses -
+ between each of which it sleeps for a short period to let the lower
+ priority tasks execute. When it has completed its demo functionality
+ it gives the mutex back before suspending itself.
+
+ prvRecursiveMutexBlockingTask() attempts to access the mutex by performing
+ a blocking 'take'. The blocking task has a lower priority than the
+ controlling task so by the time it executes the mutex has already been
+ taken by the controlling task, causing the blocking task to block. It
+ does not unblock until the controlling task has given the mutex back,
+ and it does not actually run until the controlling task has suspended
+ itself (due to the relative priorities). When it eventually does obtain
+ the mutex all it does is give the mutex back prior to also suspending
+ itself. At this point both the controlling task and the blocking task are
+ suspended.
+
+ prvRecursiveMutexPollingTask() runs at the idle priority. It spins round
+ a tight loop attempting to obtain the mutex with a non-blocking call. As
+ the lowest priority task it will not successfully obtain the mutex until
+ both the controlling and blocking tasks are suspended. Once it eventually
+ does obtain the mutex it first unsuspends both the controlling task and
+ blocking task prior to giving the mutex back - resulting in the polling
+ task temporarily inheriting the controlling tasks priority.
+*/
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* Demo app include files. */
+#include "recmutex.h"
+
+/* Priorities assigned to the three tasks. */
+#define recmuCONTROLLING_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
+#define recmuBLOCKING_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
+#define recmuPOLLING_TASK_PRIORITY ( tskIDLE_PRIORITY + 0 )
+
+/* The recursive call depth. */
+#define recmuMAX_COUNT ( 10 )
+
+/* Misc. */
+#define recmuSHORT_DELAY ( 20 / portTICK_RATE_MS )
+#define recmuNO_DELAY ( ( portTickType ) 0 )
+#define recmuTWO_TICK_DELAY ( ( portTickType ) 2 )
+
+/* The three tasks as described at the top of this file. */
+static void prvRecursiveMutexControllingTask( void *pvParameters );
+static void prvRecursiveMutexBlockingTask( void *pvParameters );
+static void prvRecursiveMutexPollingTask( void *pvParameters );
+
+/* The mutex used by the demo. */
+static xSemaphoreHandle xMutex;
+
+/* Variables used to detect and latch errors. */
+static volatile portBASE_TYPE xErrorOccurred = pdFALSE, xControllingIsSuspended = pdFALSE, xBlockingIsSuspended = pdFALSE;
+static volatile unsigned portBASE_TYPE uxControllingCycles = 0, uxBlockingCycles, uxPollingCycles = 0;
+
+/* Handles of the two higher priority tasks, required so they can be resumed
+(unsuspended). */
+static xTaskHandle xControllingTaskHandle, xBlockingTaskHandle;
+
+/*-----------------------------------------------------------*/
+
+void vStartRecursiveMutexTasks( void )
+{
+ /* Just creates the mutex and the three tasks. */
+
+ xMutex = xSemaphoreCreateRecursiveMutex();
+
+ /* vQueueAddToRegistry() adds the mutex to the registry, if one is
+ in use. The registry is provided as a means for kernel aware
+ debuggers to locate mutex and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry( ( xQueueHandle ) xMutex, ( signed portCHAR * ) "Recursive_Mutex" );
+
+
+ if( xMutex != NULL )
+ {
+ xTaskCreate( prvRecursiveMutexControllingTask, ( signed portCHAR * ) "Rec1", configMINIMAL_STACK_SIZE, NULL, recmuCONTROLLING_TASK_PRIORITY, &xControllingTaskHandle );
+ xTaskCreate( prvRecursiveMutexBlockingTask, ( signed portCHAR * ) "Rec2", configMINIMAL_STACK_SIZE, NULL, recmuBLOCKING_TASK_PRIORITY, &xBlockingTaskHandle );
+ xTaskCreate( prvRecursiveMutexPollingTask, ( signed portCHAR * ) "Rec3", configMINIMAL_STACK_SIZE, NULL, recmuPOLLING_TASK_PRIORITY, NULL );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvRecursiveMutexControllingTask( void *pvParameters )
+{
+unsigned portBASE_TYPE ux;
+
+ /* Just to remove compiler warning. */
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /* Should not be able to 'give' the mutex, as we have not yet 'taken'
+ it. */
+ if( xSemaphoreGiveRecursive( xMutex ) == pdPASS )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ for( ux = 0; ux < recmuMAX_COUNT; ux++ )
+ {
+ /* We should now be able to take the mutex as many times as
+ we like. A one tick delay is used so the polling task will
+ inherit our priority on all but the first cycle of this task.
+ If we did not block attempting to receive the mutex then no
+ priority inheritance would occur. */
+ if( xSemaphoreTakeRecursive( xMutex, recmuTWO_TICK_DELAY ) != pdPASS )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Ensure the other task attempting to access the mutex (and the
+ other demo tasks) are able to execute. */
+ vTaskDelay( recmuSHORT_DELAY );
+ }
+
+ /* For each time we took the mutex, give it back. */
+ for( ux = 0; ux < recmuMAX_COUNT; ux++ )
+ {
+ /* Ensure the other task attempting to access the mutex (and the
+ other demo tasks) are able to execute. */
+ vTaskDelay( recmuSHORT_DELAY );
+
+ /* We should now be able to give the mutex as many times as we
+ took it. */
+ if( xSemaphoreGiveRecursive( xMutex ) != pdPASS )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+ }
+
+ /* Having given it back the same number of times as it was taken, we
+ should no longer be the mutex owner, so the next give sh ould fail. */
+ if( xSemaphoreGiveRecursive( xMutex ) == pdPASS )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Keep count of the number of cycles this task has performed so a
+ stall can be detected. */
+ uxControllingCycles++;
+
+ /* Suspend ourselves to the blocking task can execute. */
+ xControllingIsSuspended = pdTRUE;
+ vTaskSuspend( NULL );
+ xControllingIsSuspended = pdFALSE;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvRecursiveMutexBlockingTask( void *pvParameters )
+{
+ /* Just to remove compiler warning. */
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /* Attempt to obtain the mutex. We should block until the
+ controlling task has given up the mutex, and not actually execute
+ past this call until the controlling task is suspended. */
+ if( xSemaphoreTakeRecursive( xMutex, portMAX_DELAY ) == pdPASS )
+ {
+ if( xControllingIsSuspended != pdTRUE )
+ {
+ /* Did not expect to execute until the controlling task was
+ suspended. */
+ xErrorOccurred = pdTRUE;
+ }
+ else
+ {
+ /* Give the mutex back before suspending ourselves to allow
+ the polling task to obtain the mutex. */
+ if( xSemaphoreGiveRecursive( xMutex ) != pdPASS )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ xBlockingIsSuspended = pdTRUE;
+ vTaskSuspend( NULL );
+ xBlockingIsSuspended = pdFALSE;
+ }
+ }
+ else
+ {
+ /* We should not leave the xSemaphoreTakeRecursive() function
+ until the mutex was obtained. */
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* The controlling and blocking tasks should be in lock step. */
+ if( uxControllingCycles != ( uxBlockingCycles + 1 ) )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+
+ /* Keep count of the number of cycles this task has performed so a
+ stall can be detected. */
+ uxBlockingCycles++;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvRecursiveMutexPollingTask( void *pvParameters )
+{
+ /* Just to remove compiler warning. */
+ ( void ) pvParameters;
+
+ for( ;; )
+ {
+ /* Keep attempting to obtain the mutex. We should only obtain it when
+ the blocking task has suspended itself. */
+ if( xSemaphoreTakeRecursive( xMutex, recmuNO_DELAY ) == pdPASS )
+ {
+ /* Is the blocking task suspended? */
+ if( xBlockingIsSuspended != pdTRUE )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+ else
+ {
+ /* Keep count of the number of cycles this task has performed so
+ a stall can be detected. */
+ uxPollingCycles++;
+
+ /* We can resume the other tasks here even though they have a
+ higher priority than the polling task. When they execute they
+ will attempt to obtain the mutex but fail because the polling
+ task is still the mutex holder. The polling task (this task)
+ will then inherit the higher priority. */
+ vTaskResume( xBlockingTaskHandle );
+ vTaskResume( xControllingTaskHandle );
+
+ /* Release the mutex, disinheriting the higher priority again. */
+ if( xSemaphoreGiveRecursive( xMutex ) != pdPASS )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+ }
+ }
+
+ #if configUSE_PREEMPTION == 0
+ {
+ taskYIELD();
+ }
+ #endif
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreRecursiveMutexTasksStillRunning( void )
+{
+portBASE_TYPE xReturn;
+static unsigned portBASE_TYPE uxLastControllingCycles = 0, uxLastBlockingCycles = 0, uxLastPollingCycles = 0;
+
+ /* Is the controlling task still cycling? */
+ if( uxLastControllingCycles == uxControllingCycles )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+ else
+ {
+ uxLastControllingCycles = uxControllingCycles;
+ }
+
+ /* Is the blocking task still cycling? */
+ if( uxLastBlockingCycles == uxBlockingCycles )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+ else
+ {
+ uxLastBlockingCycles = uxBlockingCycles;
+ }
+
+ /* Is the polling task still cycling? */
+ if( uxLastPollingCycles == uxPollingCycles )
+ {
+ xErrorOccurred = pdTRUE;
+ }
+ else
+ {
+ uxLastPollingCycles = uxPollingCycles;
+ }
+
+ if( xErrorOccurred == pdTRUE )
+ {
+ xReturn = pdFAIL;
+ }
+ else
+ {
+ xReturn = pdTRUE;
+ }
+
+ return xReturn;
+}
+
+
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/AltBlckQ.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/AltBlckQ.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/AltBlckQ.c (revision 14)
@@ -0,0 +1,314 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/*
+ * This is a version of BlockQ.c that uses the alternative (Alt) API.
+ *
+ * Creates six tasks that operate on three queues as follows:
+ *
+ * The first two tasks send and receive an incrementing number to/from a queue.
+ * One task acts as a producer and the other as the consumer. The consumer is a
+ * higher priority than the producer and is set to block on queue reads. The queue
+ * only has space for one item - as soon as the producer posts a message on the
+ * queue the consumer will unblock, pre-empt the producer, and remove the item.
+ *
+ * The second two tasks work the other way around. Again the queue used only has
+ * enough space for one item. This time the consumer has a lower priority than the
+ * producer. The producer will try to post on the queue blocking when the queue is
+ * full. When the consumer wakes it will remove the item from the queue, causing
+ * the producer to unblock, pre-empt the consumer, and immediately re-fill the
+ * queue.
+ *
+ * The last two tasks use the same queue producer and consumer functions. This time the queue has
+ * enough space for lots of items and the tasks operate at the same priority. The
+ * producer will execute, placing items into the queue. The consumer will start
+ * executing when either the queue becomes full (causing the producer to block) or
+ * a context switch occurs (tasks of the same priority will time slice).
+ *
+ */
+
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+
+/* Demo program include files. */
+#include "AltBlckQ.h"
+
+#define blckqSTACK_SIZE configMINIMAL_STACK_SIZE
+#define blckqNUM_TASK_SETS ( 3 )
+
+/* Structure used to pass parameters to the blocking queue tasks. */
+typedef struct BLOCKING_QUEUE_PARAMETERS
+{
+ xQueueHandle xQueue; /*< The queue to be used by the task. */
+ portTickType xBlockTime; /*< The block time to use on queue reads/writes. */
+ volatile portSHORT *psCheckVariable; /*< Incremented on each successful cycle to check the task is still running. */
+} xBlockingQueueParameters;
+
+/* Task function that creates an incrementing number and posts it on a queue. */
+static portTASK_FUNCTION_PROTO( vBlockingQueueProducer, pvParameters );
+
+/* Task function that removes the incrementing number from a queue and checks that
+it is the expected number. */
+static portTASK_FUNCTION_PROTO( vBlockingQueueConsumer, pvParameters );
+
+/* Variables which are incremented each time an item is removed from a queue, and
+found to be the expected value.
+These are used to check that the tasks are still running. */
+static volatile portSHORT sBlockingConsumerCount[ blckqNUM_TASK_SETS ] = { ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0 };
+
+/* Variable which are incremented each time an item is posted on a queue. These
+are used to check that the tasks are still running. */
+static volatile portSHORT sBlockingProducerCount[ blckqNUM_TASK_SETS ] = { ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0 };
+
+/*-----------------------------------------------------------*/
+
+void vStartAltBlockingQueueTasks( unsigned portBASE_TYPE uxPriority )
+{
+xBlockingQueueParameters *pxQueueParameters1, *pxQueueParameters2;
+xBlockingQueueParameters *pxQueueParameters3, *pxQueueParameters4;
+xBlockingQueueParameters *pxQueueParameters5, *pxQueueParameters6;
+const unsigned portBASE_TYPE uxQueueSize1 = 1, uxQueueSize5 = 5;
+const portTickType xBlockTime = ( portTickType ) 1000 / portTICK_RATE_MS;
+const portTickType xDontBlock = ( portTickType ) 0;
+
+ /* Create the first two tasks as described at the top of the file. */
+
+ /* First create the structure used to pass parameters to the consumer tasks. */
+ pxQueueParameters1 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
+
+ /* Create the queue used by the first two tasks to pass the incrementing number.
+ Pass a pointer to the queue in the parameter structure. */
+ pxQueueParameters1->xQueue = xQueueCreate( uxQueueSize1, ( unsigned portBASE_TYPE ) sizeof( unsigned portSHORT ) );
+
+ /* The consumer is created first so gets a block time as described above. */
+ pxQueueParameters1->xBlockTime = xBlockTime;
+
+ /* Pass in the variable that this task is going to increment so we can check it
+ is still running. */
+ pxQueueParameters1->psCheckVariable = &( sBlockingConsumerCount[ 0 ] );
+
+ /* Create the structure used to pass parameters to the producer task. */
+ pxQueueParameters2 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
+
+ /* Pass the queue to this task also, using the parameter structure. */
+ pxQueueParameters2->xQueue = pxQueueParameters1->xQueue;
+
+ /* The producer is not going to block - as soon as it posts the consumer will
+ wake and remove the item so the producer should always have room to post. */
+ pxQueueParameters2->xBlockTime = xDontBlock;
+
+ /* Pass in the variable that this task is going to increment so we can check
+ it is still running. */
+ pxQueueParameters2->psCheckVariable = &( sBlockingProducerCount[ 0 ] );
+
+
+ /* Note the producer has a lower priority than the consumer when the tasks are
+ spawned. */
+ xTaskCreate( vBlockingQueueConsumer, ( signed portCHAR * ) "QConsB1", blckqSTACK_SIZE, ( void * ) pxQueueParameters1, uxPriority, NULL );
+ xTaskCreate( vBlockingQueueProducer, ( signed portCHAR * ) "QProdB2", blckqSTACK_SIZE, ( void * ) pxQueueParameters2, tskIDLE_PRIORITY, NULL );
+
+
+
+ /* Create the second two tasks as described at the top of the file. This uses
+ the same mechanism but reverses the task priorities. */
+
+ pxQueueParameters3 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
+ pxQueueParameters3->xQueue = xQueueCreate( uxQueueSize1, ( unsigned portBASE_TYPE ) sizeof( unsigned portSHORT ) );
+ pxQueueParameters3->xBlockTime = xDontBlock;
+ pxQueueParameters3->psCheckVariable = &( sBlockingProducerCount[ 1 ] );
+
+ pxQueueParameters4 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
+ pxQueueParameters4->xQueue = pxQueueParameters3->xQueue;
+ pxQueueParameters4->xBlockTime = xBlockTime;
+ pxQueueParameters4->psCheckVariable = &( sBlockingConsumerCount[ 1 ] );
+
+ xTaskCreate( vBlockingQueueConsumer, ( signed portCHAR * ) "QProdB3", blckqSTACK_SIZE, ( void * ) pxQueueParameters3, tskIDLE_PRIORITY, NULL );
+ xTaskCreate( vBlockingQueueProducer, ( signed portCHAR * ) "QConsB4", blckqSTACK_SIZE, ( void * ) pxQueueParameters4, uxPriority, NULL );
+
+
+
+ /* Create the last two tasks as described above. The mechanism is again just
+ the same. This time both parameter structures are given a block time. */
+ pxQueueParameters5 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
+ pxQueueParameters5->xQueue = xQueueCreate( uxQueueSize5, ( unsigned portBASE_TYPE ) sizeof( unsigned portSHORT ) );
+ pxQueueParameters5->xBlockTime = xBlockTime;
+ pxQueueParameters5->psCheckVariable = &( sBlockingProducerCount[ 2 ] );
+
+ pxQueueParameters6 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );
+ pxQueueParameters6->xQueue = pxQueueParameters5->xQueue;
+ pxQueueParameters6->xBlockTime = xBlockTime;
+ pxQueueParameters6->psCheckVariable = &( sBlockingConsumerCount[ 2 ] );
+
+ xTaskCreate( vBlockingQueueProducer, ( signed portCHAR * ) "QProdB5", blckqSTACK_SIZE, ( void * ) pxQueueParameters5, tskIDLE_PRIORITY, NULL );
+ xTaskCreate( vBlockingQueueConsumer, ( signed portCHAR * ) "QConsB6", blckqSTACK_SIZE, ( void * ) pxQueueParameters6, tskIDLE_PRIORITY, NULL );
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vBlockingQueueProducer, pvParameters )
+{
+unsigned portSHORT usValue = 0;
+xBlockingQueueParameters *pxQueueParameters;
+portSHORT sErrorEverOccurred = pdFALSE;
+
+ #ifdef USE_STDIO
+ void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );
+
+ const portCHAR * const pcTaskStartMsg = "Alt blocking queue producer task started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+ #endif
+
+ pxQueueParameters = ( xBlockingQueueParameters * ) pvParameters;
+
+ for( ;; )
+ {
+ if( xQueueAltSendToBack( pxQueueParameters->xQueue, ( void * ) &usValue, pxQueueParameters->xBlockTime ) != pdPASS )
+ {
+ sErrorEverOccurred = pdTRUE;
+ }
+ else
+ {
+ /* We have successfully posted a message, so increment the variable
+ used to check we are still running. */
+ if( sErrorEverOccurred == pdFALSE )
+ {
+ ( *pxQueueParameters->psCheckVariable )++;
+ }
+
+ /* Increment the variable we are going to post next time round. The
+ consumer will expect the numbers to follow in numerical order. */
+ ++usValue;
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vBlockingQueueConsumer, pvParameters )
+{
+unsigned portSHORT usData, usExpectedValue = 0;
+xBlockingQueueParameters *pxQueueParameters;
+portSHORT sErrorEverOccurred = pdFALSE;
+
+ #ifdef USE_STDIO
+ void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );
+
+ const portCHAR * const pcTaskStartMsg = "Alt blocking queue consumer task started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+ #endif
+
+ pxQueueParameters = ( xBlockingQueueParameters * ) pvParameters;
+
+ for( ;; )
+ {
+ if( xQueueAltReceive( pxQueueParameters->xQueue, &usData, pxQueueParameters->xBlockTime ) == pdPASS )
+ {
+ if( usData != usExpectedValue )
+ {
+ /* Catch-up. */
+ usExpectedValue = usData;
+
+ sErrorEverOccurred = pdTRUE;
+ }
+ else
+ {
+ /* We have successfully received a message, so increment the
+ variable used to check we are still running. */
+ if( sErrorEverOccurred == pdFALSE )
+ {
+ ( *pxQueueParameters->psCheckVariable )++;
+ }
+
+ /* Increment the value we expect to remove from the queue next time
+ round. */
+ ++usExpectedValue;
+ }
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* This is called to check that all the created tasks are still running. */
+portBASE_TYPE xAreAltBlockingQueuesStillRunning( void )
+{
+static portSHORT sLastBlockingConsumerCount[ blckqNUM_TASK_SETS ] = { ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0 };
+static portSHORT sLastBlockingProducerCount[ blckqNUM_TASK_SETS ] = { ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0, ( unsigned portSHORT ) 0 };
+portBASE_TYPE xReturn = pdPASS, xTasks;
+
+ /* Not too worried about mutual exclusion on these variables as they are 16
+ bits and we are only reading them. We also only care to see if they have
+ changed or not.
+
+ Loop through each check variable to and return pdFALSE if any are found not
+ to have changed since the last call. */
+
+ for( xTasks = 0; xTasks < blckqNUM_TASK_SETS; xTasks++ )
+ {
+ if( sBlockingConsumerCount[ xTasks ] == sLastBlockingConsumerCount[ xTasks ] )
+ {
+ xReturn = pdFALSE;
+ }
+ sLastBlockingConsumerCount[ xTasks ] = sBlockingConsumerCount[ xTasks ];
+
+
+ if( sBlockingProducerCount[ xTasks ] == sLastBlockingProducerCount[ xTasks ] )
+ {
+ xReturn = pdFALSE;
+ }
+ sLastBlockingProducerCount[ xTasks ] = sBlockingProducerCount[ xTasks ];
+ }
+
+ return xReturn;
+}
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/countsem.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/countsem.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/countsem.c (revision 14)
@@ -0,0 +1,304 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+
+/*
+ * Simple demonstration of the usage of counting semaphore.
+ */
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+
+/* Demo program include files. */
+#include "countsem.h"
+
+/* The maximum count value that the semaphore used for the demo can hold. */
+#define countMAX_COUNT_VALUE ( 200 )
+
+/* Constants used to indicate whether or not the semaphore should have been
+created with its maximum count value, or its minimum count value. These
+numbers are used to ensure that the pointers passed in as the task parameters
+are valid. */
+#define countSTART_AT_MAX_COUNT ( 0xaa )
+#define countSTART_AT_ZERO ( 0x55 )
+
+/* Two tasks are created for the test. One uses a semaphore created with its
+count value set to the maximum, and one with the count value set to zero. */
+#define countNUM_TEST_TASKS ( 2 )
+#define countDONT_BLOCK ( 0 )
+
+/*-----------------------------------------------------------*/
+
+/* Flag that will be latched to pdTRUE should any unexpected behaviour be
+detected in any of the tasks. */
+static volatile portBASE_TYPE xErrorDetected = pdFALSE;
+
+/*-----------------------------------------------------------*/
+
+/*
+ * The demo task. This simply counts the semaphore up to its maximum value,
+ * the counts it back down again. The result of each semaphore 'give' and
+ * 'take' is inspected, with an error being flagged if it is found not to be
+ * the expected result.
+ */
+static void prvCountingSemaphoreTask( void *pvParameters );
+
+/*
+ * Utility function to increment the semaphore count value up from zero to
+ * countMAX_COUNT_VALUE.
+ */
+static void prvIncrementSemaphoreCount( xSemaphoreHandle xSemaphore, unsigned portBASE_TYPE *puxLoopCounter );
+
+/*
+ * Utility function to decrement the semaphore count value up from
+ * countMAX_COUNT_VALUE to zero.
+ */
+static void prvDecrementSemaphoreCount( xSemaphoreHandle xSemaphore, unsigned portBASE_TYPE *puxLoopCounter );
+
+/*-----------------------------------------------------------*/
+
+/* The structure that is passed into the task as the task parameter. */
+typedef struct COUNT_SEM_STRUCT
+{
+ /* The semaphore to be used for the demo. */
+ xSemaphoreHandle xSemaphore;
+
+ /* Set to countSTART_AT_MAX_COUNT if the semaphore should be created with
+ its count value set to its max count value, or countSTART_AT_ZERO if it
+ should have been created with its count value set to 0. */
+ unsigned portBASE_TYPE uxExpectedStartCount;
+
+ /* Incremented on each cycle of the demo task. Used to detect a stalled
+ task. */
+ unsigned portBASE_TYPE uxLoopCounter;
+} xCountSemStruct;
+
+/* Two structures are defined, one is passed to each test task. */
+static volatile xCountSemStruct xParameters[ countNUM_TEST_TASKS ];
+
+/*-----------------------------------------------------------*/
+
+void vStartCountingSemaphoreTasks( void )
+{
+ /* Create the semaphores that we are going to use for the test/demo. The
+ first should be created such that it starts at its maximum count value,
+ the second should be created such that it starts with a count value of zero. */
+ xParameters[ 0 ].xSemaphore = xSemaphoreCreateCounting( countMAX_COUNT_VALUE, countMAX_COUNT_VALUE );
+ xParameters[ 0 ].uxExpectedStartCount = countSTART_AT_MAX_COUNT;
+ xParameters[ 0 ].uxLoopCounter = 0;
+
+ xParameters[ 1 ].xSemaphore = xSemaphoreCreateCounting( countMAX_COUNT_VALUE, 0 );
+ xParameters[ 1 ].uxExpectedStartCount = 0;
+ xParameters[ 1 ].uxLoopCounter = 0;
+
+ /* vQueueAddToRegistry() adds the semaphore to the registry, if one is
+ in use. The registry is provided as a means for kernel aware
+ debuggers to locate semaphores and has no purpose if a kernel aware debugger
+ is not being used. The call to vQueueAddToRegistry() will be removed
+ by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is
+ defined to be less than 1. */
+ vQueueAddToRegistry( ( xQueueHandle ) xParameters[ 0 ].xSemaphore, ( signed portCHAR * ) "Counting_Sem_1" );
+ vQueueAddToRegistry( ( xQueueHandle ) xParameters[ 1 ].xSemaphore, ( signed portCHAR * ) "Counting_Sem_2" );
+
+
+ /* Were the semaphores created? */
+ if( ( xParameters[ 0 ].xSemaphore != NULL ) || ( xParameters[ 1 ].xSemaphore != NULL ) )
+ {
+ /* Create the demo tasks, passing in the semaphore to use as the parameter. */
+ xTaskCreate( prvCountingSemaphoreTask, ( signed portCHAR * ) "CNT1", configMINIMAL_STACK_SIZE, ( void * ) &( xParameters[ 0 ] ), tskIDLE_PRIORITY, NULL );
+ xTaskCreate( prvCountingSemaphoreTask, ( signed portCHAR * ) "CNT2", configMINIMAL_STACK_SIZE, ( void * ) &( xParameters[ 1 ] ), tskIDLE_PRIORITY, NULL );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvDecrementSemaphoreCount( xSemaphoreHandle xSemaphore, unsigned portBASE_TYPE *puxLoopCounter )
+{
+unsigned portBASE_TYPE ux;
+
+ /* If the semaphore count is at its maximum then we should not be able to
+ 'give' the semaphore. */
+ if( xSemaphoreGive( xSemaphore ) == pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* We should be able to 'take' the semaphore countMAX_COUNT_VALUE times. */
+ for( ux = 0; ux < countMAX_COUNT_VALUE; ux++ )
+ {
+ if( xSemaphoreTake( xSemaphore, countDONT_BLOCK ) != pdPASS )
+ {
+ /* We expected to be able to take the semaphore. */
+ xErrorDetected = pdTRUE;
+ }
+
+ ( *puxLoopCounter )++;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ /* If the semaphore count is zero then we should not be able to 'take'
+ the semaphore. */
+ if( xSemaphoreTake( xSemaphore, countDONT_BLOCK ) == pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvIncrementSemaphoreCount( xSemaphoreHandle xSemaphore, unsigned portBASE_TYPE *puxLoopCounter )
+{
+unsigned portBASE_TYPE ux;
+
+ /* If the semaphore count is zero then we should not be able to 'take'
+ the semaphore. */
+ if( xSemaphoreTake( xSemaphore, countDONT_BLOCK ) == pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ /* We should be able to 'give' the semaphore countMAX_COUNT_VALUE times. */
+ for( ux = 0; ux < countMAX_COUNT_VALUE; ux++ )
+ {
+ if( xSemaphoreGive( xSemaphore ) != pdPASS )
+ {
+ /* We expected to be able to take the semaphore. */
+ xErrorDetected = pdTRUE;
+ }
+
+ ( *puxLoopCounter )++;
+ }
+
+ #if configUSE_PREEMPTION == 0
+ taskYIELD();
+ #endif
+
+ /* If the semaphore count is at its maximum then we should not be able to
+ 'give' the semaphore. */
+ if( xSemaphoreGive( xSemaphore ) == pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvCountingSemaphoreTask( void *pvParameters )
+{
+xCountSemStruct *pxParameter;
+
+ #ifdef USE_STDIO
+ void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );
+
+ const portCHAR * const pcTaskStartMsg = "Counting semaphore demo started.\r\n";
+
+ /* Queue a message for printing to say the task has started. */
+ vPrintDisplayMessage( &pcTaskStartMsg );
+ #endif
+
+ /* The semaphore to be used was passed as the parameter. */
+ pxParameter = ( xCountSemStruct * ) pvParameters;
+
+ /* Did we expect to find the semaphore already at its max count value, or
+ at zero? */
+ if( pxParameter->uxExpectedStartCount == countSTART_AT_MAX_COUNT )
+ {
+ prvDecrementSemaphoreCount( pxParameter->xSemaphore, &( pxParameter->uxLoopCounter ) );
+ }
+
+ /* Now we expect the semaphore count to be 0, so this time there is an
+ error if we can take the semaphore. */
+ if( xSemaphoreTake( pxParameter->xSemaphore, 0 ) == pdPASS )
+ {
+ xErrorDetected = pdTRUE;
+ }
+
+ for( ;; )
+ {
+ prvIncrementSemaphoreCount( pxParameter->xSemaphore, &( pxParameter->uxLoopCounter ) );
+ prvDecrementSemaphoreCount( pxParameter->xSemaphore, &( pxParameter->uxLoopCounter ) );
+ }
+}
+/*-----------------------------------------------------------*/
+
+portBASE_TYPE xAreCountingSemaphoreTasksStillRunning( void )
+{
+static unsigned portBASE_TYPE uxLastCount0 = 0, uxLastCount1 = 0;
+portBASE_TYPE xReturn = pdPASS;
+
+ /* Return fail if any 'give' or 'take' did not result in the expected
+ behaviour. */
+ if( xErrorDetected != pdFALSE )
+ {
+ xReturn = pdFAIL;
+ }
+
+ /* Return fail if either task is not still incrementing its loop counter. */
+ if( uxLastCount0 == xParameters[ 0 ].uxLoopCounter )
+ {
+ xReturn = pdFAIL;
+ }
+ else
+ {
+ uxLastCount0 = xParameters[ 0 ].uxLoopCounter;
+ }
+
+ if( uxLastCount1 == xParameters[ 1 ].uxLoopCounter )
+ {
+ xReturn = pdFAIL;
+ }
+ else
+ {
+ uxLastCount1 = xParameters[ 1 ].uxLoopCounter;
+ }
+
+ return xReturn;
+}
+
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/flash.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/flash.c (revision 17)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/Minimal/flash.c (revision 17)
@@ -0,0 +1,139 @@
+/*
+ FreeRTOS V5.4.1 - Copyright (C) 2009 Real Time Engineers Ltd.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation and modified by the FreeRTOS exception.
+ **NOTE** The exception to the GPL is included to allow you to distribute a
+ combined work that includes FreeRTOS without being obliged to provide the
+ source code for proprietary components outside of the FreeRTOS kernel.
+ Alternative commercial license and support terms are also available upon
+ request. See the licensing section of http://www.FreeRTOS.org for full
+ license details.
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+
+ ***************************************************************************
+ * *
+ * Looking for a quick start? Then check out the FreeRTOS eBook! *
+ * See http://www.FreeRTOS.org/Documentation for details *
+ * *
+ ***************************************************************************
+
+ 1 tab == 4 spaces!
+
+ Please ensure to read the configuration and relevant port sections of the
+ online documentation.
+
+ http://www.FreeRTOS.org - Documentation, latest information, license and
+ contact details.
+
+ http://www.SafeRTOS.com - A version that is certified for use in safety
+ critical systems.
+
+ http://www.OpenRTOS.com - Commercial support, development, porting,
+ licensing and training services.
+*/
+
+/**
+ * This version of flash .c is for use on systems that have limited stack space
+ * and no display facilities. The complete version can be found in the
+ * Demo/Common/Full directory.
+ *
+ * Three tasks are created, each of which flash an LED at a different rate. The first
+ * LED flashes every 200ms, the second every 400ms, the third every 600ms.
+ *
+ * The LED flash tasks provide instant visual feedback. They show that the scheduler
+ * is still operational.
+ *
+ */
+
+
+#include
+
+/* Scheduler include files. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* Demo program include files. */
+#include "partest.h"
+#include "flash.h"
+
+#define ledSTACK_SIZE configMINIMAL_STACK_SIZE
+#define ledNUMBER_OF_LEDS ( 1 )
+#define ledFLASH_RATE_BASE ( ( portTickType ) 333 )
+
+/* Variable used by the created tasks to calculate the LED number to use, and
+the rate at which they should flash the LED. */
+static volatile unsigned portBASE_TYPE uxFlashTaskNumber = 0;
+
+/* The task that is created three times. */
+static portTASK_FUNCTION_PROTO( vLEDFlashTask, pvParameters );
+
+/*-----------------------------------------------------------*/
+
+void vStartLEDFlashTasks( unsigned portBASE_TYPE uxPriority )
+{
+signed portBASE_TYPE xLEDTask;
+
+ /* Create the three tasks. */
+ for( xLEDTask = 0; xLEDTask < ledNUMBER_OF_LEDS; ++xLEDTask )
+ {
+ /* Spawn the task. */
+ xTaskCreate( vLEDFlashTask, ( signed portCHAR * ) "LEDx", ledSTACK_SIZE, NULL, uxPriority, ( xTaskHandle * ) NULL );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static portTASK_FUNCTION( vLEDFlashTask, pvParameters )
+{
+portTickType xFlashRate, xLastFlashTime;
+unsigned portBASE_TYPE uxLED;
+
+ /* The parameters are not used. */
+ ( void ) pvParameters;
+
+ /* Calculate the LED and flash rate. */
+ portENTER_CRITICAL();
+ {
+ /* See which of the eight LED's we should use. */
+ uxLED = uxFlashTaskNumber;
+
+ /* Update so the next task uses the next LED. */
+ uxFlashTaskNumber++;
+ }
+ portEXIT_CRITICAL();
+
+ xFlashRate = ledFLASH_RATE_BASE + ( ledFLASH_RATE_BASE * ( portTickType ) uxLED );
+ xFlashRate /= portTICK_RATE_MS;
+
+ /* We will turn the LED on and off again in the delay period, so each
+ delay is only half the total period. */
+ xFlashRate /= ( portTickType ) 2;
+
+ /* We need to initialise xLastFlashTime prior to the first call to
+ vTaskDelayUntil(). */
+ xLastFlashTime = xTaskGetTickCount();
+
+ for(;;)
+ {
+ /* Delay for half the flash period then turn the LED on. */
+ vTaskDelayUntil( &xLastFlashTime, xFlashRate );
+ vParTestToggleLED( uxLED );
+
+ /* Delay for half the flash period then turn the LED off. */
+ vTaskDelayUntil( &xLastFlashTime, xFlashRate );
+ vParTestToggleLED( uxLED );
+ }
+} /*lint !e715 !e818 !e830 Function definition must be standard for task creation. */
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/httpd-fs.h
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/httpd-fs.h (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/httpd-fs.h (revision 14)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2001, Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ *
+ * Author: Adam Dunkels
+ *
+ * $Id: httpd-fs.h,v 1.1 2006/06/07 09:13:08 adam Exp $
+ */
+#ifndef __HTTPD_FS_H__
+#define __HTTPD_FS_H__
+
+#define HTTPD_FS_STATISTICS 1
+
+struct httpd_fs_file {
+ char *data;
+ int len;
+};
+
+/* file must be allocated by caller and will be filled in
+ by the function. */
+int httpd_fs_open(const char *name, struct httpd_fs_file *file);
+
+#ifdef HTTPD_FS_STATISTICS
+#if HTTPD_FS_STATISTICS == 1
+u16_t httpd_fs_count(char *name);
+#endif /* HTTPD_FS_STATISTICS */
+#endif /* HTTPD_FS_STATISTICS */
+
+void httpd_fs_init(void);
+
+#endif /* __HTTPD_FS_H__ */
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/Makefile.webserver
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/Makefile.webserver (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/Makefile.webserver (revision 14)
@@ -0,0 +1,1 @@
+APP_SOURCES += httpd.c http-strings.c httpd-fs.c httpd-cgi.c
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/http-strings.c
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/http-strings.c (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/http-strings.c (revision 14)
@@ -0,0 +1,102 @@
+const char http_http[8] =
+/* "http://" */
+{0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, };
+const char http_200[5] =
+/* "200 " */
+{0x32, 0x30, 0x30, 0x20, };
+const char http_301[5] =
+/* "301 " */
+{0x33, 0x30, 0x31, 0x20, };
+const char http_302[5] =
+/* "302 " */
+{0x33, 0x30, 0x32, 0x20, };
+const char http_get[5] =
+/* "GET " */
+{0x47, 0x45, 0x54, 0x20, };
+const char http_10[9] =
+/* "HTTP/1.0" */
+{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, };
+const char http_11[9] =
+/* "HTTP/1.1" */
+{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, };
+const char http_content_type[15] =
+/* "content-type: " */
+{0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, };
+const char http_texthtml[10] =
+/* "text/html" */
+{0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, };
+const char http_location[11] =
+/* "location: " */
+{0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, };
+const char http_host[7] =
+/* "host: " */
+{0x68, 0x6f, 0x73, 0x74, 0x3a, 0x20, };
+const char http_crnl[3] =
+/* "\r\n" */
+{0xd, 0xa, };
+const char http_index_html[12] =
+/* "/index.html" */
+{0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, };
+const char http_404_html[10] =
+/* "/404.html" */
+{0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, };
+const char http_referer[9] =
+/* "Referer:" */
+{0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, 0x3a, };
+const char http_header_200[84] =
+/* "HTTP/1.0 200 OK\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */
+{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, };
+const char http_header_404[91] =
+/* "HTTP/1.0 404 Not found\r\nServer: uIP/1.0 http://www.sics.se/~adam/uip/\r\nConnection: close\r\n" */
+{0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x34, 0x30, 0x34, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0xd, 0xa, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x75, 0x49, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x61, 0x64, 0x61, 0x6d, 0x2f, 0x75, 0x69, 0x70, 0x2f, 0xd, 0xa, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0xd, 0xa, };
+const char http_content_type_plain[29] =
+/* "Content-type: text/plain\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_html[28] =
+/* "Content-type: text/html\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_css [27] =
+/* "Content-type: text/css\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_text[28] =
+/* "Content-type: text/text\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x74, 0x65, 0x78, 0x74, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_png [28] =
+/* "Content-type: image/png\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_gif [28] =
+/* "Content-type: image/gif\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_jpg [29] =
+/* "Content-type: image/jpeg\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x65, 0x67, 0xd, 0xa, 0xd, 0xa, };
+const char http_content_type_binary[43] =
+/* "Content-type: application/octet-stream\r\n\r\n" */
+{0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xd, 0xa, 0xd, 0xa, };
+const char http_html[6] =
+/* ".html" */
+{0x2e, 0x68, 0x74, 0x6d, 0x6c, };
+const char http_shtml[7] =
+/* ".shtml" */
+{0x2e, 0x73, 0x68, 0x74, 0x6d, 0x6c, };
+const char http_htm[5] =
+/* ".htm" */
+{0x2e, 0x68, 0x74, 0x6d, };
+const char http_css[5] =
+/* ".css" */
+{0x2e, 0x63, 0x73, 0x73, };
+const char http_png[5] =
+/* ".png" */
+{0x2e, 0x70, 0x6e, 0x67, };
+const char http_gif[5] =
+/* ".gif" */
+{0x2e, 0x67, 0x69, 0x66, };
+const char http_jpg[5] =
+/* ".jpg" */
+{0x2e, 0x6a, 0x70, 0x67, };
+const char http_text[5] =
+/* ".txt" */
+{0x2e, 0x74, 0x78, 0x74, };
+const char http_txt[5] =
+/* ".txt" */
+{0x2e, 0x74, 0x78, 0x74, };
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/makestrings
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/makestrings (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/makestrings (revision 14)
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+
+
+sub stringify {
+ my $name = shift(@_);
+ open(OUTPUTC, "> $name.c");
+ open(OUTPUTH, "> $name.h");
+
+ open(FILE, "$name");
+
+ while() {
+ if(/(.+) "(.+)"/) {
+ $var = $1;
+ $data = $2;
+
+ $datan = $data;
+ $datan =~ s/\\r/\r/g;
+ $datan =~ s/\\n/\n/g;
+ $datan =~ s/\\01/\01/g;
+ $datan =~ s/\\0/\0/g;
+
+ printf(OUTPUTC "const char $var\[%d] = \n", length($datan) + 1);
+ printf(OUTPUTC "/* \"$data\" */\n");
+ printf(OUTPUTC "{");
+ for($j = 0; $j < length($datan); $j++) {
+ printf(OUTPUTC "%#02x, ", unpack("C", substr($datan, $j, 1)));
+ }
+ printf(OUTPUTC "};\n");
+
+ printf(OUTPUTH "extern const char $var\[%d];\n", length($datan) + 1);
+
+ }
+ }
+ close(OUTPUTC);
+ close(OUTPUTH);
+}
+stringify("http-strings");
+
+exit 0;
+
Index: /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/httpd-fs/footer.html
===================================================================
--- /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/httpd-fs/footer.html (revision 14)
+++ /webserver/example/freeRTOSexample/EnergyMeters/Common/ethernet/uIP/uip-1.0/apps/webserver/httpd-fs/footer.html (revision 14)
@@ -0,0 +1,2 @@
+